package org.jeecg.modules.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CacheConstant; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.enums.RoleIndexConfigEnum; import org.jeecg.common.desensitization.annotation.SensitiveEncode; import org.jeecg.common.system.vo.DictModel; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.system.vo.SysUserCacheInfo; import org.jeecg.common.util.DateUtils; import org.jeecg.common.util.PasswordUtil; import org.jeecg.common.util.UUIDGenerator; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.base.service.BaseCommonService; import org.jeecg.modules.system.entity.*; import org.jeecg.modules.system.mapper.*; import org.jeecg.modules.system.model.SysUserSysDepartModel; import org.jeecg.modules.system.service.ISysDictService; import org.jeecg.modules.system.service.ISysUserService; import org.jeecg.modules.system.vo.MdcUserProVo; import org.jeecg.modules.system.vo.SysUserDepVo; import org.jeecg.modules.system.vo.UserSelector; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; /** *

* 用户表 服务实现类 *

* * @Author: scott * @Date: 2018-12-20 */ @Service @Slf4j public class SysUserServiceImpl extends ServiceImpl implements ISysUserService { @Autowired private SysUserMapper userMapper; @Autowired private SysPermissionMapper sysPermissionMapper; @Autowired private SysUserRoleMapper sysUserRoleMapper; @Autowired private SysUserDepartMapper sysUserDepartMapper; @Autowired private SysDepartMapper sysDepartMapper; @Autowired private SysRoleMapper sysRoleMapper; @Autowired private SysDepartRoleUserMapper departRoleUserMapper; @Autowired private SysDepartRoleMapper sysDepartRoleMapper; @Resource private BaseCommonService baseCommonService; @Autowired private SysThirdAccountMapper sysThirdAccountMapper; @Autowired ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService; @Autowired ThirdAppDingtalkServiceImpl dingtalkService; @Autowired SysRoleIndexMapper sysRoleIndexMapper; @Resource MdcUserProductionMapper mdcUserProductionMapper; @Resource private ISysDictService sysDictService; @Resource private MdcProductionEquipmentMapper mdcProductionEquipmentMapper; @Resource private DncDevicePermissionMapper dncDevicePermissionMapper; @Override @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) public Result resetPassword(String username, String oldpassword, String newpassword, String confirmpassword) { SysUser user = userMapper.getUserByName(username); String passwordEncode = PasswordUtil.encrypt(username, oldpassword, user.getSalt()); if (!user.getPassword().equals(passwordEncode)) { return Result.error("旧密码输入错误!"); } if (oConvertUtils.isEmpty(newpassword)) { return Result.error("新密码不允许为空!"); } if (!newpassword.equals(confirmpassword)) { return Result.error("两次输入密码不一致!"); } //设置密码更新时间 //sysUser.setPasswordTime(new Date()); //设置密码首次登录失效 //sysUser.setPasswordFlag(CommonConstant.DEL_FLAG_0); String password = PasswordUtil.encrypt(username, newpassword, user.getSalt()); this.userMapper.update(new SysUser().setPassword(password).setPasswordTime(new Date()).setPasswordFlag(CommonConstant.DEL_FLAG_0), new LambdaQueryWrapper().eq(SysUser::getId, user.getId())); return Result.ok("密码重置成功!"); } @Override @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) public Result changePassword(SysUser sysUser) { String salt = oConvertUtils.randomGen(8); sysUser.setSalt(salt); //设置密码更新时间 sysUser.setPasswordTime(new Date()); //管理员修改密码,设置用户首次登录 //sysUser.setPasswordFlag(); String password = sysUser.getPassword(); String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt); sysUser.setPassword(passwordEncode); this.userMapper.updateById(sysUser); return Result.ok("密码修改成功!"); } @Override @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) @Transactional(rollbackFor = Exception.class) public boolean deleteUser(String userId) { //1.删除用户 this.removeById(userId); return false; } @Override @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) @Transactional(rollbackFor = Exception.class) public boolean deleteBatchUsers(String userIds) { //1.删除用户 this.removeByIds(Arrays.asList(userIds.split(","))); return false; } @Override public SysUser getUserByName(String username) { return userMapper.getUserByName(username); } @Override @Transactional(rollbackFor = Exception.class) public void addUserWithRole(SysUser user, String roles) { this.save(user); if(oConvertUtils.isNotEmpty(roles)) { String[] arr = roles.split(","); for (String roleId : arr) { SysUserRole userRole = new SysUserRole(user.getId(), roleId); sysUserRoleMapper.insert(userRole); } } } @Override @CacheEvict(value= {CacheConstant.SYS_USERS_CACHE}, allEntries=true) @Transactional(rollbackFor = Exception.class) public void editUserWithRole(SysUser user, String roles) { this.updateById(user); //先删后加 sysUserRoleMapper.delete(new QueryWrapper().lambda().eq(SysUserRole::getUserId, user.getId())); if(oConvertUtils.isNotEmpty(roles)) { String[] arr = roles.split(","); for (String roleId : arr) { SysUserRole userRole = new SysUserRole(user.getId(), roleId); sysUserRoleMapper.insert(userRole); } } } @Override public List getRole(String username) { return sysUserRoleMapper.getRoleByUserName(username); } /** * 获取动态首页路由配置 * @param username * @param version * @return */ @Override public SysRoleIndex getDynamicIndexByUserRole(String username,String version) { List roles = sysUserRoleMapper.getRoleByUserName(username); String componentUrl = RoleIndexConfigEnum.getIndexByRoles(roles); SysRoleIndex roleIndex = new SysRoleIndex(componentUrl); //只有 X-Version=v3 的时候,才读取sys_role_index表获取角色首页配置 if (oConvertUtils.isNotEmpty(version) && roles!=null && roles.size()>0) { LambdaQueryWrapper routeIndexQuery = new LambdaQueryWrapper(); //用户所有角色 routeIndexQuery.in(SysRoleIndex::getRoleCode, roles); //角色首页状态0:未开启 1:开启 routeIndexQuery.eq(SysRoleIndex::getStatus, CommonConstant.STATUS_1); //优先级正序排序 routeIndexQuery.orderByAsc(SysRoleIndex::getPriority); List list = sysRoleIndexMapper.selectList(routeIndexQuery); if (null != list && list.size() > 0) { roleIndex = list.get(0); } } //如果componentUrl为空,则返回空 if(oConvertUtils.isEmpty(roleIndex.getComponent())){ return null; } return roleIndex; } /** * 通过用户名获取用户角色集合 * @param username 用户名 * @return 角色集合 */ @Override public Set getUserRolesSet(String username) { // 查询用户拥有的角色集合 List roles = sysUserRoleMapper.getRoleByUserName(username); log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size())); return new HashSet<>(roles); } /** * 通过用户名获取用户权限集合 * * @param username 用户名 * @return 权限集合 */ @Override public Set getUserPermissionsSet(String username) { Set permissionSet = new HashSet<>(); List permissionList = sysPermissionMapper.queryByUser(username); for (SysPermission po : permissionList) { // // TODO URL规则有问题? // if (oConvertUtils.isNotEmpty(po.getUrl())) { // permissionSet.add(po.getUrl()); // } if (oConvertUtils.isNotEmpty(po.getPerms())) { permissionSet.add(po.getPerms()); } } log.info("-------通过数据库读取用户拥有的权限Perms------username: "+ username+",Perms size: "+ (permissionSet==null?0:permissionSet.size()) ); return permissionSet; } /** * 升级SpringBoot2.6.6,不允许循环依赖 * @author:qinfeng * @update: 2022-04-07 * @param username * @return */ @Override public SysUserCacheInfo getCacheUser(String username) { SysUserCacheInfo info = new SysUserCacheInfo(); info.setOneDepart(true); if(oConvertUtils.isEmpty(username)) { return null; } //查询用户信息 SysUser sysUser = userMapper.getUserByName(username); if(sysUser!=null) { info.setSysUserCode(sysUser.getUsername()); info.setSysUserName(sysUser.getRealname()); info.setSysOrgCode(sysUser.getOrgCode()); } //多部门支持in查询 List list = sysDepartMapper.queryUserDeparts(sysUser.getId()); List sysMultiOrgCode = new ArrayList(); if(list==null || list.size()==0) { //当前用户无部门 //sysMultiOrgCode.add("0"); }else if(list.size()==1) { sysMultiOrgCode.add(list.get(0).getOrgCode()); }else { info.setOneDepart(false); for (SysDepart dpt : list) { sysMultiOrgCode.add(dpt.getOrgCode()); } } info.setSysMultiOrgCode(sysMultiOrgCode); return info; } /** * 根据部门Id查询 * @param page * @param departId 部门id * @param username 用户账户名称 * @return */ @Override public IPage getUserByDepId(Page page, String departId,String username) { return userMapper.getUserByDepId(page, departId,username); } @Override public IPage getUserByDepIds(Page page, List departIds, String username) { return userMapper.getUserByDepIds(page, departIds,username); } @Override public Map getDepNamesByUserIds(List userIds) { List list = this.baseMapper.getDepNamesByUserIds(userIds); Map res = new HashMap(5); list.forEach(item -> { if (res.get(item.getUserId()) == null) { res.put(item.getUserId(), item.getDepartName()); } else { res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getDepartName()); } } ); return res; } //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245【漏洞】发现新漏洞待处理20220906 ----sql注入 方法没有使用,注掉 /* @Override public IPage getUserByDepartIdAndQueryWrapper(Page page, String departId, QueryWrapper queryWrapper) { LambdaQueryWrapper lambdaQueryWrapper = queryWrapper.lambda(); lambdaQueryWrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0); lambdaQueryWrapper.inSql(SysUser::getId, "SELECT user_id FROM sys_user_depart WHERE dep_id = '" + departId + "'"); return userMapper.selectPage(page, lambdaQueryWrapper); }*/ //update-end-author:taoyan date:2022-9-13 for: VUEN-2245【漏洞】发现新漏洞待处理20220906 ----sql注入 方法没有使用,注掉 @Override public IPage queryUserByOrgCode(String orgCode, SysUser userParams, IPage page) { List list = baseMapper.getUserByOrgCode(page, orgCode, userParams); Integer total = baseMapper.getUserByOrgCodeTotal(orgCode, userParams); IPage result = new Page<>(page.getCurrent(), page.getSize(), total); result.setRecords(list); return result; } /** * 根据角色Id查询 * @param page * @param roleId 角色id * @param username 用户账户名称 * @return */ @Override public IPage getUserByRoleId(Page page, String roleId, String username) { return userMapper.getUserByRoleId(page,roleId,username); } @Override @CacheEvict(value= {CacheConstant.SYS_USERS_CACHE}, key="#username") public void updateUserDepart(String username,String orgCode) { baseMapper.updateUserDepart(username, orgCode); } @Override public SysUser getUserByPhone(String phone) { return userMapper.getUserByPhone(phone); } @Override public SysUser getUserByEmail(String email) { return userMapper.getUserByEmail(email); } @Override @Transactional(rollbackFor = Exception.class) public void addUserWithDepart(SysUser user, String selectedParts) { // this.save(user); //保存角色的时候已经添加过一次了 if(oConvertUtils.isNotEmpty(selectedParts)) { String[] arr = selectedParts.split(","); for (String deaprtId : arr) { SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId); sysUserDepartMapper.insert(userDeaprt); } } } @Override @Transactional(rollbackFor = Exception.class) @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) public void editUserWithDepart(SysUser user, String departs) { //更新角色的时候已经更新了一次了,可以再跟新一次 this.updateById(user); String[] arr = {}; if(oConvertUtils.isNotEmpty(departs)){ arr = departs.split(","); } //查询已关联部门 List userDepartList = sysUserDepartMapper.selectList(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); if(userDepartList != null && userDepartList.size()>0){ for(SysUserDepart depart : userDepartList ){ //修改已关联部门删除部门用户角色关系 if(!Arrays.asList(arr).contains(depart.getDepId())){ List sysDepartRoleList = sysDepartRoleMapper.selectList( new QueryWrapper().lambda().eq(SysDepartRole::getDepartId,depart.getDepId())); List roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); if(roleIds != null && roleIds.size()>0){ departRoleUserMapper.delete(new QueryWrapper().lambda().eq(SysDepartRoleUser::getUserId, user.getId()) .in(SysDepartRoleUser::getDroleId,roleIds)); } } } } //先删后加 sysUserDepartMapper.delete(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); if(oConvertUtils.isNotEmpty(departs)) { for (String departId : arr) { SysUserDepart userDepart = new SysUserDepart(user.getId(), departId); sysUserDepartMapper.insert(userDepart); } } } /** * 校验用户是否有效 * @param sysUser * @return */ @Override public Result checkUserIsEffective(SysUser sysUser) { Result result = new Result(); //情况1:根据用户信息查询,该用户不存在 if (sysUser == null) { result.error500("该用户不存在,请注册"); baseCommonService.addLog("用户登录失败,用户不存在!", CommonConstant.LOG_TYPE_1, null); return result; } //情况2:根据用户信息查询,该用户已注销 //update-begin---author:王帅 Date:20200601 for:if条件永远为falsebug------------ if (CommonConstant.DEL_FLAG_1.equals(sysUser.getDelFlag())) { //update-end---author:王帅 Date:20200601 for:if条件永远为falsebug------------ baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已注销!", CommonConstant.LOG_TYPE_1, null); result.error500("该用户已注销"); return result; } //情况3:根据用户信息查询,该用户已冻结 if (CommonConstant.USER_FREEZE.equals(sysUser.getStatus())) { baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已冻结!", CommonConstant.LOG_TYPE_1, null); result.error500("该用户已冻结"); return result; } //情况4:根据用户信息查询,该用户密码系首次使用,需修改密码 List dictList = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_USER_FIRST_LOGIN); if (dictList != null && !dictList.isEmpty()) { if (CommonConstant.DEL_FLAG_1.equals(Integer.valueOf(dictList.get(0).getValue())) && CommonConstant.DEL_FLAG_1.equals(sysUser.getPasswordFlag())) { baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "系首次登录系统,请重置密码!", CommonConstant.LOG_TYPE_1, null); result.setCode(5001); result.setMessage("用户密码系默认密码,需重置密码后重新登录密码!"); result.setSuccess(false); return result; } } //情况5:根据用户信息查询,该用户密码是否已过更改周期 Date passwordTime = sysUser.getPasswordTime(); //Integer passwordExpirationPeriod = CommonConstant.PASSWORD_EXPIRATION_PERIOD; List dictModelList = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_PASSWORD_EXPIRATION); if (dictModelList != null && !dictModelList.isEmpty()) { Integer passwordExpirationPeriod = Integer.valueOf(dictModelList.get(0).getValue()); Date dayAfter = DateUtils.getDayAfter(passwordTime, passwordExpirationPeriod); if (new Date().after(dayAfter)) { baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "密码已过有效期,请重置密码!", CommonConstant.LOG_TYPE_1, null); result.setCode(5002); result.setMessage("用户密码已过有效期,请重置密码!"); result.setSuccess(false); return result; } } return result; } @Override public List queryLogicDeleted() { return this.queryLogicDeleted(null); } @Override public List queryLogicDeleted(LambdaQueryWrapper wrapper) { if (wrapper == null) { wrapper = new LambdaQueryWrapper<>(); } wrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_1); return userMapper.selectLogicDeleted(wrapper); } @Override @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) public boolean revertLogicDeleted(List userIds, SysUser updateEntity) { return userMapper.revertLogicDeleted(userIds, updateEntity) > 0; } @Override @Transactional(rollbackFor = Exception.class) public boolean removeLogicDeleted(List userIds) { // 1. 删除用户 int line = userMapper.deleteLogicDeleted(userIds); // 2. 删除用户部门关系 line += sysUserDepartMapper.delete(new LambdaQueryWrapper().in(SysUserDepart::getUserId, userIds)); // 3. 删除用户产线关系 line += mdcUserProductionMapper.delete(new LambdaQueryWrapper().in(MdcUserProduction::getUserId, userIds)); //3. 删除用户角色关系 line += sysUserRoleMapper.delete(new LambdaQueryWrapper().in(SysUserRole::getUserId, userIds)); //4.同步删除第三方App的用户 try { dingtalkService.removeThirdAppUser(userIds); wechatEnterpriseService.removeThirdAppUser(userIds); } catch (Exception e) { log.error("同步删除第三方App的用户失败:", e); } //5. 删除第三方用户表(因为第4步需要用到第三方用户表,所以在他之后删) line += sysThirdAccountMapper.delete(new LambdaQueryWrapper().in(SysThirdAccount::getSysUserId, userIds)); return line != 0; } @Override @Transactional(rollbackFor = Exception.class) public boolean updateNullPhoneEmail() { userMapper.updateNullByEmptyString("email"); userMapper.updateNullByEmptyString("phone"); return true; } @Override public void saveThirdUser(SysUser sysUser) { //保存用户 String userid = UUIDGenerator.generate(); sysUser.setId(userid); baseMapper.insert(sysUser); //获取第三方角色 SysRole sysRole = sysRoleMapper.selectOne(new LambdaQueryWrapper().eq(SysRole::getRoleCode, "third_role")); //保存用户角色 SysUserRole userRole = new SysUserRole(); userRole.setRoleId(sysRole.getId()); userRole.setUserId(userid); sysUserRoleMapper.insert(userRole); } @Override public List queryByDepIds(List departIds, String username) { return userMapper.queryByDepIds(departIds,username); } @Override @Transactional(rollbackFor = Exception.class) public void saveUser(SysUser user, String selectedRoles, String selectedDeparts, String selectedProductions) { //step.1 保存用户 this.save(user); //step.2 保存角色 if(oConvertUtils.isNotEmpty(selectedRoles)) { String[] arr = selectedRoles.split(","); for (String roleId : arr) { SysUserRole userRole = new SysUserRole(user.getId(), roleId); sysUserRoleMapper.insert(userRole); } } //step.3 保存所属部门 if(oConvertUtils.isNotEmpty(selectedDeparts)) { String[] arr = selectedDeparts.split(","); for (String deaprtId : arr) { SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId); sysUserDepartMapper.insert(userDeaprt); } } String[] arr = {}; //step.4 保存所属产线 if (oConvertUtils.isNotEmpty(selectedProductions)) { arr = selectedProductions.split(","); for (String productionId : arr) { MdcUserProduction mdcUserProduction = new MdcUserProduction(user.getId(), productionId); mdcUserProductionMapper.insert(mdcUserProduction); } } //step.5 保存设备权限 List EquipmentIds= mdcProductionEquipmentMapper.selectList(new QueryWrapper().in("production_id",arr)) .stream().map(MdcProductionEquipment::getEquipmentId).collect(Collectors.toList()); if (oConvertUtils.isNotEmpty(EquipmentIds)) { for (String equipmentId : EquipmentIds) { DncDevicePermission dncDevicePermission=new DncDevicePermission(); dncDevicePermission.setDeviceId(equipmentId); dncDevicePermission.setUserId(user.getId()); dncDevicePermissionMapper.insert(dncDevicePermission); } } } @Override @Transactional(rollbackFor = Exception.class) @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) public void editUser(SysUser user, String roles, String departs, String productions) { //step.1 修改用户基础信息 this.updateById(user); //step.2 修改角色 //处理用户角色 先删后加 sysUserRoleMapper.delete(new QueryWrapper().lambda().eq(SysUserRole::getUserId, user.getId())); if(oConvertUtils.isNotEmpty(roles)) { String[] arr = roles.split(","); for (String roleId : arr) { SysUserRole userRole = new SysUserRole(user.getId(), roleId); sysUserRoleMapper.insert(userRole); } } //step.3 修改部门 String[] arr = {}; if(oConvertUtils.isNotEmpty(departs)){ arr = departs.split(","); } //查询已关联部门 List userDepartList = sysUserDepartMapper.selectList(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); if(userDepartList != null && userDepartList.size()>0){ for(SysUserDepart depart : userDepartList ){ //修改已关联部门删除部门用户角色关系 if(!Arrays.asList(arr).contains(depart.getDepId())){ List sysDepartRoleList = sysDepartRoleMapper.selectList( new QueryWrapper().lambda().eq(SysDepartRole::getDepartId,depart.getDepId())); List roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); if(roleIds != null && roleIds.size()>0){ departRoleUserMapper.delete(new QueryWrapper().lambda().eq(SysDepartRoleUser::getUserId, user.getId()) .in(SysDepartRoleUser::getDroleId,roleIds)); } } } } //先删后加 sysUserDepartMapper.delete(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); if(oConvertUtils.isNotEmpty(departs)) { for (String departId : arr) { SysUserDepart userDepart = new SysUserDepart(user.getId(), departId); sysUserDepartMapper.insert(userDepart); } } //step.4 修改产线 String[] array = {}; if(oConvertUtils.isNotEmpty(productions)){ array = productions.split(","); } //先删后加 mdcUserProductionMapper.delete(new QueryWrapper().lambda().eq(MdcUserProduction::getUserId, user.getId())); if (oConvertUtils.isNotEmpty(productions)) { for (String productionId : array) { MdcUserProduction mdcUserProduction = new MdcUserProduction(user.getId(), productionId); mdcUserProductionMapper.insert(mdcUserProduction); } } //step.5 修改设备权限 //先删后加 dncDevicePermissionMapper.delete(new QueryWrapper().lambda().eq(DncDevicePermission::getUserId, user.getId())); List EquipmentIds= mdcProductionEquipmentMapper.selectList(new QueryWrapper().in("production_id",array)) .stream().map(MdcProductionEquipment::getEquipmentId).collect(Collectors.toList()); if (oConvertUtils.isNotEmpty(EquipmentIds)) { for (String equipmentId : EquipmentIds) { DncDevicePermission dncDevicePermission=new DncDevicePermission(); dncDevicePermission.setDeviceId(equipmentId); dncDevicePermission.setUserId(user.getId()); dncDevicePermissionMapper.insert(dncDevicePermission); } } //step.6 修改手机号和邮箱 // 更新手机号、邮箱空字符串为 null userMapper.updateNullByEmptyString("email"); userMapper.updateNullByEmptyString("phone"); } @Override public List userIdToUsername(Collection userIdList) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(SysUser::getId, userIdList); List userList = super.list(queryWrapper); return userList.stream().map(SysUser::getUsername).collect(Collectors.toList()); } @Override @Cacheable(cacheNames=CacheConstant.SYS_USERS_CACHE, key="#username") @SensitiveEncode public LoginUser getEncodeUserInfo(String username){ if(oConvertUtils.isEmpty(username)) { return null; } LoginUser loginUser = new LoginUser(); SysUser sysUser = userMapper.getUserByName(username); if(sysUser==null) { return null; } BeanUtils.copyProperties(sysUser, loginUser); return loginUser; } @Override public Map getProNamesByUserIds(List userIds) { List list = this.baseMapper.getProNamesByUserIds(userIds); Map res = new HashMap<>(5); list.forEach(item -> { if (res.get(item.getUserId()) == null) { res.put(item.getUserId(), item.getProductionName()); } else { res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getProductionName()); } }); return res; } // 根据角色Id查询该角色下的所有用户信息 @Override public List getAllUsersByRoleId(String roleId) { return userMapper.getAllUsersByRoleId(roleId); } /** * 根据角色编码查询用户id集合 */ @Override public List getUserByRoleCode(String roleCode) { return this.baseMapper.getUserByRoleCode(roleCode); } /** * 根据角色编码和设备编号查询用户 */ @Override public List getEquipmentAdmin(String roleCode, String equipmentId) { return this.baseMapper.getEquipmentAdmin(roleCode, equipmentId); } @Override public List selectOperatorList(String equipmentCode, String productionId, String positionCode) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysUser::getPost, positionCode); if(StringUtils.isNotBlank(equipmentCode)) { queryWrapper.and(q -> q.isNull(SysUser::getEquipmentIds).or().eq(SysUser::getEquipmentIds, "").or().like(SysUser::getEquipmentIds, equipmentCode)); } if(StringUtils.isNotBlank(productionId)) { queryWrapper.exists("select 1 from mdc_user_production t where t.user_id=sys_user.id and t.pro_id={0}", productionId); } queryWrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0); queryWrapper.eq(SysUser::getStatus, CommonConstant.DEL_FLAG_1); queryWrapper.orderByDesc(SysUser::getId); List sysUsers = userMapper.selectList(queryWrapper); List collect = sysUsers.stream().map(user -> new UserSelector(user.getId(), user.getUsername(), user.getRealname())).collect(Collectors.toList()); return collect; } @Override public List selectOperatorList(String positionCode) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysUser::getPost, positionCode); queryWrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0); queryWrapper.eq(SysUser::getStatus, CommonConstant.DEL_FLAG_1); queryWrapper.orderByDesc(SysUser::getId); List sysUsers = userMapper.selectList(queryWrapper); List collect = sysUsers.stream().map(user -> new UserSelector(user.getId(), user.getUsername(), user.getRealname())).collect(Collectors.toList()); return collect; } /** * 根据用户名批量获取真实姓名映射 * @param userNames 用户名列表 * @return 用户名->真实姓名的映射(不存在时值为null) */ @Override public Map getUserRealNamesByUserNames(List userNames) { if (CollectionUtils.isEmpty(userNames)) { return Collections.emptyMap(); } // 去重并过滤空值 Set uniqueNames = userNames.stream() .filter(StringUtils::isNotBlank) .collect(Collectors.toSet()); if (uniqueNames.isEmpty()) { return Collections.emptyMap(); } // 批量查询(自动处理IN语句分片) List users = userMapper.selectUsersByNames(new ArrayList<>(uniqueNames)); // 构建映射关系 return users.stream() .collect(Collectors.toMap( SysUser::getUsername, SysUser::getRealname, (existing, replacement) -> existing // 重复键处理 )); } }