From 23855599412c4d61b38d78f0f3abd3430a48b5b1 Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期三, 25 六月 2025 11:51:38 +0800 Subject: [PATCH] Merge branch 'mdc_hyjs_master' --- lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java | 809 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 809 insertions(+), 0 deletions(-) diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..8d9799b --- /dev/null +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java @@ -0,0 +1,809 @@ +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; + +/** + * <p> + * 鐢ㄦ埛琛� 鏈嶅姟瀹炵幇绫� + * </p> + * + * @Author: scott + * @Date: 2018-12-20 + */ +@Service +@Slf4j +public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> 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<SysUser>().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<SysUserRole>().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<String> getRole(String username) { + return sysUserRoleMapper.getRoleByUserName(username); + } + + /** + * 鑾峰彇鍔ㄦ�侀椤佃矾鐢遍厤缃� + * @param username + * @param version + * @return + */ + @Override + public SysRoleIndex getDynamicIndexByUserRole(String username,String version) { + List<String> roles = sysUserRoleMapper.getRoleByUserName(username); + String componentUrl = RoleIndexConfigEnum.getIndexByRoles(roles); + SysRoleIndex roleIndex = new SysRoleIndex(componentUrl); + //鍙湁 X-Version=v3 鐨勬椂鍊欙紝鎵嶈鍙杝ys_role_index琛ㄨ幏鍙栬鑹查椤甸厤缃� + if (oConvertUtils.isNotEmpty(version) && roles!=null && roles.size()>0) { + LambdaQueryWrapper<SysRoleIndex> routeIndexQuery = new LambdaQueryWrapper(); + //鐢ㄦ埛鎵�鏈夎鑹� + routeIndexQuery.in(SysRoleIndex::getRoleCode, roles); + //瑙掕壊棣栭〉鐘舵��0锛氭湭寮�鍚� 1锛氬紑鍚� + routeIndexQuery.eq(SysRoleIndex::getStatus, CommonConstant.STATUS_1); + //浼樺厛绾ф搴忔帓搴� + routeIndexQuery.orderByAsc(SysRoleIndex::getPriority); + List<SysRoleIndex> 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<String> getUserRolesSet(String username) { + // 鏌ヨ鐢ㄦ埛鎷ユ湁鐨勮鑹查泦鍚� + List<String> 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<String> getUserPermissionsSet(String username) { + Set<String> permissionSet = new HashSet<>(); + List<SysPermission> 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()); + } + + //澶氶儴闂ㄦ敮鎸乮n鏌ヨ + List<SysDepart> list = sysDepartMapper.queryUserDeparts(sysUser.getId()); + List<String> sysMultiOrgCode = new ArrayList<String>(); + 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<SysUser> getUserByDepId(Page<SysUser> page, String departId,String username) { + return userMapper.getUserByDepId(page, departId,username); + } + + @Override + public IPage<SysUser> getUserByDepIds(Page<SysUser> page, List<String> departIds, String username) { + return userMapper.getUserByDepIds(page, departIds,username); + } + + @Override + public Map<String, String> getDepNamesByUserIds(List<String> userIds) { + List<SysUserDepVo> list = this.baseMapper.getDepNamesByUserIds(userIds); + + Map<String, String> 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<SysUser> getUserByDepartIdAndQueryWrapper(Page<SysUser> page, String departId, QueryWrapper<SysUser> queryWrapper) { + LambdaQueryWrapper<SysUser> 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<SysUserSysDepartModel> queryUserByOrgCode(String orgCode, SysUser userParams, IPage page) { + List<SysUserSysDepartModel> list = baseMapper.getUserByOrgCode(page, orgCode, userParams); + Integer total = baseMapper.getUserByOrgCodeTotal(orgCode, userParams); + + IPage<SysUserSysDepartModel> 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<SysUser> getUserByRoleId(Page<SysUser> 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<SysUserDepart> userDepartList = sysUserDepartMapper.selectList(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId())); + if(userDepartList != null && userDepartList.size()>0){ + for(SysUserDepart depart : userDepartList ){ + //淇敼宸插叧鑱旈儴闂ㄥ垹闄ら儴闂ㄧ敤鎴疯鑹插叧绯� + if(!Arrays.asList(arr).contains(depart.getDepId())){ + List<SysDepartRole> sysDepartRoleList = sysDepartRoleMapper.selectList( + new QueryWrapper<SysDepartRole>().lambda().eq(SysDepartRole::getDepartId,depart.getDepId())); + List<String> roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); + if(roleIds != null && roleIds.size()>0){ + departRoleUserMapper.delete(new QueryWrapper<SysDepartRoleUser>().lambda().eq(SysDepartRoleUser::getUserId, user.getId()) + .in(SysDepartRoleUser::getDroleId,roleIds)); + } + } + } + } + //鍏堝垹鍚庡姞 + sysUserDepartMapper.delete(new QueryWrapper<SysUserDepart>().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, String loginType) { + Result<?> result = new Result<Object>(); + //鎯呭喌1锛氭牴鎹敤鎴蜂俊鎭煡璇紝璇ョ敤鎴蜂笉瀛樺湪 + if (sysUser == null) { + result.error500("璇ョ敤鎴蜂笉瀛樺湪锛岃娉ㄥ唽"); + baseCommonService.addLog("鐢ㄦ埛鐧诲綍澶辫触锛岀敤鎴蜂笉瀛樺湪锛�", CommonConstant.LOG_TYPE_1, null); + return result; + } + //鎯呭喌2锛氭牴鎹敤鎴蜂俊鎭煡璇紝璇ョ敤鎴峰凡娉ㄩ攢 + //update-begin---author:鐜嬪竻 Date:20200601 for锛歩f鏉′欢姘歌繙涓篺alsebug------------ + if (CommonConstant.DEL_FLAG_1.equals(sysUser.getDelFlag())) { + //update-end---author:鐜嬪竻 Date:20200601 for锛歩f鏉′欢姘歌繙涓篺alsebug------------ + 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<DictModel> dictList = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_USER_FIRST_LOGIN); + if (!"terminal".equals(loginType) && 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<DictModel> 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<SysUser> queryLogicDeleted() { + return this.queryLogicDeleted(null); + } + + @Override + public List<SysUser> queryLogicDeleted(LambdaQueryWrapper<SysUser> 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<String> userIds, SysUser updateEntity) { + return userMapper.revertLogicDeleted(userIds, updateEntity) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean removeLogicDeleted(List<String> userIds) { + // 1. 鍒犻櫎鐢ㄦ埛 + int line = userMapper.deleteLogicDeleted(userIds); + // 2. 鍒犻櫎鐢ㄦ埛閮ㄩ棬鍏崇郴 + line += sysUserDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getUserId, userIds)); + // 3. 鍒犻櫎鐢ㄦ埛浜х嚎鍏崇郴 + line += mdcUserProductionMapper.delete(new LambdaQueryWrapper<MdcUserProduction>().in(MdcUserProduction::getUserId, userIds)); + //3. 鍒犻櫎鐢ㄦ埛瑙掕壊鍏崇郴 + line += sysUserRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, userIds)); + //4.鍚屾鍒犻櫎绗笁鏂笰pp鐨勭敤鎴� + try { + dingtalkService.removeThirdAppUser(userIds); + wechatEnterpriseService.removeThirdAppUser(userIds); + } catch (Exception e) { + log.error("鍚屾鍒犻櫎绗笁鏂笰pp鐨勭敤鎴峰け璐ワ細", e); + } + //5. 鍒犻櫎绗笁鏂圭敤鎴疯〃锛堝洜涓虹4姝ラ渶瑕佺敤鍒扮涓夋柟鐢ㄦ埛琛紝鎵�浠ュ湪浠栦箣鍚庡垹锛� + line += sysThirdAccountMapper.delete(new LambdaQueryWrapper<SysThirdAccount>().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<SysRole>().eq(SysRole::getRoleCode, "third_role")); + //淇濆瓨鐢ㄦ埛瑙掕壊 + SysUserRole userRole = new SysUserRole(); + userRole.setRoleId(sysRole.getId()); + userRole.setUserId(userid); + sysUserRoleMapper.insert(userRole); + } + + @Override + public List<SysUser> queryByDepIds(List<String> 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<String> EquipmentIds= mdcProductionEquipmentMapper.selectList(new QueryWrapper<MdcProductionEquipment>().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<SysUserRole>().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<SysUserDepart> userDepartList = sysUserDepartMapper.selectList(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId())); + if(userDepartList != null && userDepartList.size()>0){ + for(SysUserDepart depart : userDepartList ){ + //淇敼宸插叧鑱旈儴闂ㄥ垹闄ら儴闂ㄧ敤鎴疯鑹插叧绯� + if(!Arrays.asList(arr).contains(depart.getDepId())){ + List<SysDepartRole> sysDepartRoleList = sysDepartRoleMapper.selectList( + new QueryWrapper<SysDepartRole>().lambda().eq(SysDepartRole::getDepartId,depart.getDepId())); + List<String> roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); + if(roleIds != null && roleIds.size()>0){ + departRoleUserMapper.delete(new QueryWrapper<SysDepartRoleUser>().lambda().eq(SysDepartRoleUser::getUserId, user.getId()) + .in(SysDepartRoleUser::getDroleId,roleIds)); + } + } + } + } + //鍏堝垹鍚庡姞 + sysUserDepartMapper.delete(new QueryWrapper<SysUserDepart>().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<MdcUserProduction>().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<DncDevicePermission>().lambda().eq(DncDevicePermission::getUserId, user.getId())); + List<String> EquipmentIds= mdcProductionEquipmentMapper.selectList(new QueryWrapper<MdcProductionEquipment>().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<String> userIdToUsername(Collection<String> userIdList) { + LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysUser::getId, userIdList); + List<SysUser> 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<String, String> getProNamesByUserIds(List<String> userIds) { + List<MdcUserProVo> list = this.baseMapper.getProNamesByUserIds(userIds); + + Map<String, String> 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<SysUser> getAllUsersByRoleId(String roleId) { + return userMapper.getAllUsersByRoleId(roleId); + } + + /** + * 鏍规嵁瑙掕壊缂栫爜鏌ヨ鐢ㄦ埛id闆嗗悎 + */ + @Override + public List<String> getUserByRoleCode(String roleCode) { + return this.baseMapper.getUserByRoleCode(roleCode); + } + + /** + * 鏍规嵁瑙掕壊缂栫爜鍜岃澶囩紪鍙锋煡璇㈢敤鎴� + */ + @Override + public List<SysUser> getEquipmentAdmin(String roleCode, String equipmentId) { + return this.baseMapper.getEquipmentAdmin(roleCode, equipmentId); + } + + @Override + public List<UserSelector> selectOperatorList(String equipmentCode, String productionId, String positionCode) { + LambdaQueryWrapper<SysUser> 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<SysUser> sysUsers = userMapper.selectList(queryWrapper); + List<UserSelector> collect = sysUsers.stream().map(user -> new UserSelector(user.getId(), user.getUsername(), user.getRealname())).collect(Collectors.toList()); + return collect; + } + + @Override + public List<UserSelector> selectOperatorList(String positionCode) { + LambdaQueryWrapper<SysUser> 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<SysUser> sysUsers = userMapper.selectList(queryWrapper); + List<UserSelector> 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<String, String> getUserRealNamesByUserNames(List<String> userNames) { + if (CollectionUtils.isEmpty(userNames)) { + return Collections.emptyMap(); + } + + // 鍘婚噸骞惰繃婊ょ┖鍊� + Set<String> uniqueNames = userNames.stream() + .filter(StringUtils::isNotBlank) + .collect(Collectors.toSet()); + if (uniqueNames.isEmpty()) { + return Collections.emptyMap(); + } + + // 鎵归噺鏌ヨ锛堣嚜鍔ㄥ鐞咺N璇彞鍒嗙墖锛� + List<SysUser> users = userMapper.selectUsersByNames(new ArrayList<>(uniqueNames)); + + // 鏋勫缓鏄犲皠鍏崇郴 + return users.stream() + .collect(Collectors.toMap( + SysUser::getUsername, + SysUser::getRealname, + (existing, replacement) -> existing // 閲嶅閿鐞� + )); + } +} -- Gitblit v1.9.3