package com.ruoyi.system.listener; import cn.hutool.core.bean.BeanUtil; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.excel.ExcelListener; import com.ruoyi.common.excel.ExcelResult; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.domain.vo.SysUserImportVo; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysUserService; import lombok.extern.slf4j.Slf4j; import java.util.List; /** * 系统用户自定义导入 * * @author Lion Li */ @Slf4j public class SysUserImportListener extends AnalysisEventListener implements ExcelListener { private final ISysUserService userService; private final String password; private final Boolean isUpdateSupport; private final String operName; private int successNum = 0; private int failureNum = 0; private final StringBuilder successMsg = new StringBuilder(); private final StringBuilder failureMsg = new StringBuilder(); public SysUserImportListener(Boolean isUpdateSupport) { this.userService = SpringUtils.getBean(ISysUserService.class); this.password = SpringUtils.getBean(ISysConfigService.class) .selectConfigByKey("sys.user.initPassword"); this.isUpdateSupport = isUpdateSupport; this.operName = SecurityUtils.getUsername(); } @Override public void invoke(SysUserImportVo userVo, AnalysisContext context) { SysUser user = this.userService.selectUserByUserName(userVo.getUserName()); try { // 验证是否存在这个用户 if (StringUtils.isNull(user)) { user = BeanUtil.toBean(userVo, SysUser.class); user.setPassword(SecurityUtils.encryptPassword(password)); user.setCreateBy(operName); userService.insertUser(user); successNum++; successMsg.append("
").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功"); } else if (isUpdateSupport) { user.setUpdateBy(operName); userService.updateUser(user); successNum++; successMsg.append("
").append(successNum).append("、账号 ").append(user.getUserName()).append(" 更新成功"); } else { failureNum++; failureMsg.append("
").append(failureNum).append("、账号 ").append(user.getUserName()).append(" 已存在"); } } catch (Exception e) { failureNum++; String msg = "
" + failureNum + "、账号 " + user.getUserName() + " 导入失败:"; failureMsg.append(msg).append(e.getMessage()); log.error(msg, e); } } @Override public void doAfterAllAnalysed(AnalysisContext context) { } @Override public ExcelResult getExcelResult() { return new ExcelResult() { @Override public String getAnalysis() { if (failureNum > 0) { failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); throw new ServiceException(failureMsg.toString()); } else { successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); } return successMsg.toString(); } @Override public List getList() { return null; } @Override public List getErrorList() { return null; } }; } }