package org.ruoyi.system.listener; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.crypto.digest.BCrypt; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import lombok.extern.slf4j.Slf4j; import org.ruoyi.common.core.exception.ServiceException; import org.ruoyi.common.core.utils.SpringUtils; import org.ruoyi.common.core.utils.StringUtils; import org.ruoyi.common.core.utils.ValidatorUtils; import org.ruoyi.common.excel.core.ExcelListener; import org.ruoyi.common.excel.core.ExcelResult; import org.ruoyi.common.satoken.utils.LoginHelper; import org.ruoyi.system.domain.bo.SysUserBo; import org.ruoyi.system.domain.vo.SysUserImportVo; import org.ruoyi.system.domain.vo.SysUserVo; import org.ruoyi.system.service.ISysUserService; 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 Long operUserId; private int successNum = 0; private int failureNum = 0; private final StringBuilder successMsg = new StringBuilder(); private final StringBuilder failureMsg = new StringBuilder(); public SysUserImportListener(Boolean isUpdateSupport) { // String initPassword = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword"); this.userService = SpringUtils.getBean(ISysUserService.class); this.password = BCrypt.hashpw("123456"); this.isUpdateSupport = isUpdateSupport; this.operUserId = LoginHelper.getUserId(); } @Override public void invoke(SysUserImportVo userVo, AnalysisContext context) { SysUserVo sysUser = this.userService.selectUserByUserName(userVo.getUserName()); try { // 验证是否存在这个用户 if (ObjectUtil.isNull(sysUser)) { SysUserBo user = BeanUtil.toBean(userVo, SysUserBo.class); ValidatorUtils.validate(user); if(StringUtils.isEmpty(user.getNickName())){ user.setNickName(user.getUserName()); } user.setDeptId(103L); user.setPassword(password); user.setCreateBy(operUserId); userService.insertUser(user); successNum++; successMsg.append("
").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功"); } else if (isUpdateSupport) { Long userId = sysUser.getUserId(); SysUserBo user = BeanUtil.toBean(userVo, SysUserBo.class); user.setUserId(userId); ValidatorUtils.validate(user); userService.checkUserAllowed(user.getUserId()); userService.checkUserDataScope(user.getUserId()); user.setUpdateBy(operUserId); userService.updateUser(user); successNum++; successMsg.append("
").append(successNum).append("、账号 ").append(user.getUserName()).append(" 更新成功"); } else { failureNum++; failureMsg.append("
").append(failureNum).append("、账号 ").append(sysUser.getUserName()).append(" 已存在"); } } catch (Exception e) { failureNum++; String msg = "
" + failureNum + "、账号 " + sysUser.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; } }; } }