zhangherong
2025-07-11 0c929802702bca00b24b8c74f52723b21ba5b4c2
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -1,5 +1,6 @@
package org.jeecg.modules.system.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -23,6 +24,7 @@
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.IBaseFactoryService;
import org.jeecg.modules.system.service.ISysDictService;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.system.vo.EamUserRepDepVo;
@@ -52,38 +54,40 @@
@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
   EamBaseRepairDepartUserMapper eamBaseRepairDepartUserMapper;
   @Resource
   private ISysDictService sysDictService;
    @Resource
    private SysUserMapper userMapper;
    @Resource
    private SysPermissionMapper sysPermissionMapper;
    @Resource
    private SysUserRoleMapper sysUserRoleMapper;
    @Resource
    private SysUserDepartMapper sysUserDepartMapper;
    @Resource
    private SysDepartMapper sysDepartMapper;
    @Resource
    private SysRoleMapper sysRoleMapper;
    @Resource
    private SysDepartRoleUserMapper departRoleUserMapper;
    @Resource
    private SysDepartRoleMapper sysDepartRoleMapper;
    @Resource
    private BaseCommonService baseCommonService;
    @Resource
    private SysThirdAccountMapper sysThirdAccountMapper;
    @Autowired
    ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
    @Autowired
    ThirdAppDingtalkServiceImpl dingtalkService;
    @Resource
    SysRoleIndexMapper sysRoleIndexMapper;
    @Resource
    MdcUserProductionMapper mdcUserProductionMapper;
    @Resource
    EamBaseRepairDepartUserMapper eamBaseRepairDepartUserMapper;
    @Resource
    private ISysDictService sysDictService;
    @Autowired
    private IBaseFactoryService factoryService;
    @Override
    @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
@@ -99,10 +103,10 @@
        if (!newpassword.equals(confirmpassword)) {
            return Result.error("两次输入密码不一致!");
        }
      //设置密码更新时间
      //sysUser.setPasswordTime(new Date());
      //设置密码首次登录失效
      //sysUser.setPasswordFlag(CommonConstant.DEL_FLAG_0);
        //设置密码更新时间
        //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("密码重置成功!");
@@ -113,10 +117,10 @@
    public Result<?> changePassword(SysUser sysUser) {
        String salt = oConvertUtils.randomGen(8);
        sysUser.setSalt(salt);
      //设置密码更新时间
      sysUser.setPasswordTime(new Date());
      //管理员修改密码,设置用户首次登录
      //sysUser.setPasswordFlag();
        //设置密码更新时间
        sysUser.setPasswordTime(new Date());
        //管理员修改密码,设置用户首次登录
        //sysUser.setPasswordFlag();
        String password = sysUser.getPassword();
        String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt);
        sysUser.setPassword(passwordEncode);
@@ -125,209 +129,213 @@
    }
    @Override
    @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
   @Transactional(rollbackFor = Exception.class)
   public boolean deleteUser(String userId) {
      //1.删除用户
      this.removeById(userId);
      return false;
   }
    @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
    @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
    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
    @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
    @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);
   }
    @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 的时候,才读取sys_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);
         }
      }
    /**
     * 获取动态首页路由配置
     *
     * @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 的时候,才读取sys_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;
   }
        //如果componentUrl为空,则返回空
        if (oConvertUtils.isEmpty(roleIndex.getComponent())) {
            return null;
        }
        return roleIndex;
    }
   /**
    * 通过用户名获取用户角色集合
    * @param username 用户名
    /**
     * 通过用户名获取用户角色集合
     *
     * @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);
   }
     */
    @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) {
    /**
     * 通过用户名获取用户权限集合
     *
     * @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;
   }
            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;
      }
    /**
     * 升级SpringBoot2.6.6,不允许循环依赖
     *
     * @param username
     * @return
     * @author:qinfeng
     * @update: 2022-04-07
     */
    @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());
      }
        //查询用户信息
        SysUser sysUser = userMapper.getUserByName(username);
        if (sysUser != null) {
            info.setSysUserCode(sysUser.getUsername());
            info.setSysUserName(sysUser.getRealname());
            info.setSysOrgCode(sysUser.getOrgCode());
        }
      //多部门支持in查询
      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);
        //多部门支持in查询
        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;
   }
        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> 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 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);
    @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;
   }
        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注入  方法没有使用,注掉
    //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();
@@ -337,211 +345,214 @@
        return userMapper.selectPage(page, lambdaQueryWrapper);
   }*/
   //update-end-author:taoyan date:2022-9-13 for: VUEN-2245【漏洞】发现新漏洞待处理20220906 ----sql注入 方法没有使用,注掉
    //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);
    @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);
        IPage<SysUserSysDepartModel> result = new Page<>(page.getCurrent(), page.getSize(), total);
        result.setRecords(list);
      return result;
   }
        return result;
    }
    /**
     * 根据角色Id查询
     *
     * @param page
     * @param roleId 角色id
     * @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
    public IPage<SysUser> getUserByRoleId(Page<SysUser> page, String roleId, String username) {
        return userMapper.getUserByRoleId(page, roleId, username);
    }
   /**
    * 根据设备车间管理Id查询
    * @param page
    * @param baseFactoryId 设备车间管理Id
    * @return
    */
   public IPage<SysUser> getUserByworkShopDepartId(Page<SysUser> page,String baseFactoryId,String username){
      return userMapper.getUserByWorkShopDepartId(page,baseFactoryId,username);
   }
    /**
     * 根据设备车间管理Id查询
     *
     * @param page
     * @param baseFactoryId 设备车间管理Id
     * @return
     */
    public IPage<SysUser> getUserByworkShopDepartId(Page<SysUser> page, String baseFactoryId, String username) {
        return userMapper.getUserByWorkShopDepartId(page, baseFactoryId, username);
    }
   @Override
   @CacheEvict(value= {CacheConstant.SYS_USERS_CACHE}, key="#username")
   public void updateUserDepart(String username,String orgCode) {
      baseMapper.updateUserDepart(username, orgCode);
   }
    @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 getUserByPhone(String phone) {
        return userMapper.getUserByPhone(phone);
    }
   @Override
   public SysUser getUserByEmail(String email) {
      return userMapper.getUserByEmail(email);
   }
    @Override
    public SysUser getUserByEmail(String email) {
        return userMapper.getUserByEmail(email);
    }
   @Override
   @Transactional(rollbackFor = Exception.class)
   public void addUserWithDepart(SysUser user, String selectedParts) {
    @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);
         }
      }
   }
        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) {
    @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);
         }
      }
   }
        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) {
      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: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<DictModel> 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<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;
   }
    /**
     * 校验用户是否有效
     *
     * @param sysUser
     * @return
     */
    @Override
    public Result<?> checkUserIsEffective(SysUser sysUser) {
        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: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<DictModel> 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<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() {
        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
    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
    @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.同步删除第三方App的用户
      try {
         dingtalkService.removeThirdAppUser(userIds);
         wechatEnterpriseService.removeThirdAppUser(userIds);
      } catch (Exception e) {
         log.error("同步删除第三方App的用户失败:", e);
      }
      //5. 删除第三方用户表(因为第4步需要用到第三方用户表,所以在他之后删)
      line += sysThirdAccountMapper.delete(new LambdaQueryWrapper<SysThirdAccount>().in(SysThirdAccount::getSysUserId, userIds));
    @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.同步删除第三方App的用户
        try {
            dingtalkService.removeThirdAppUser(userIds);
            wechatEnterpriseService.removeThirdAppUser(userIds);
        } catch (Exception e) {
            log.error("同步删除第三方App的用户失败:", e);
        }
        //5. 删除第三方用户表(因为第4步需要用到第三方用户表,所以在他之后删)
        line += sysThirdAccountMapper.delete(new LambdaQueryWrapper<SysThirdAccount>().in(SysThirdAccount::getSysUserId, userIds));
      return line != 0;
   }
        return line != 0;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -551,280 +562,264 @@
        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 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
    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, String selectedRepairDeparts) {
      //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);
         }
      }
      //step.4 保存所属产线
      if (oConvertUtils.isNotEmpty(selectedProductions)) {
         String[] arr = selectedProductions.split(",");
         for (String productionId : arr) {
            MdcUserProduction mdcUserProduction = new MdcUserProduction(user.getId(), productionId);
            mdcUserProductionMapper.insert(mdcUserProduction);
         }
      }
      //step.5 保存所属维修部门
      if (oConvertUtils.isNotEmpty(selectedRepairDeparts)) {
         String[] arr = selectedRepairDeparts.split(",");
         for (String repairDepartId : arr) {
            EamBaseRepairDepartUser eamBaseRepairDepartUser = new EamBaseRepairDepartUser(user.getId(), repairDepartId);
            eamBaseRepairDepartUserMapper.insert(eamBaseRepairDepartUser);
         }
      }
   }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveUser(SysUser user, String selectedRoles, String selectedDeparts, String selectedProductions, String selectedRepairDeparts) {
        //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);
            }
        }
        //step.4 保存所属产线
        if (oConvertUtils.isNotEmpty(selectedProductions)) {
            String[] arr = selectedProductions.split(",");
            for (String productionId : arr) {
                MdcUserProduction mdcUserProduction = new MdcUserProduction(user.getId(), productionId);
                mdcUserProductionMapper.insert(mdcUserProduction);
            }
        }
        //step.5 保存所属维修部门
        if (oConvertUtils.isNotEmpty(selectedRepairDeparts)) {
            String[] arr = selectedRepairDeparts.split(",");
            for (String repairDepartId : arr) {
                EamBaseRepairDepartUser eamBaseRepairDepartUser = new EamBaseRepairDepartUser(user.getId(), repairDepartId);
                eamBaseRepairDepartUserMapper.insert(eamBaseRepairDepartUser);
            }
        }
    }
   @Override
   @Transactional(rollbackFor = Exception.class)
   @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
   public void editUser(SysUser user, String roles, String departs, String productions, String repairDeparts) {
      //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);
         }
      }
    @Override
    @Transactional(rollbackFor = Exception.class)
    @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
    public void editUser(SysUser user, String roles, String departs, String productions, String repairDeparts) {
        //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 修改维修部门
      String[] arrayRepDep = {};
      if(oConvertUtils.isNotEmpty(repairDeparts)){
         arrayRepDep = repairDeparts.split(",");
      }
      //先删后加
      eamBaseRepairDepartUserMapper.delete(new QueryWrapper<EamBaseRepairDepartUser>().lambda().eq(EamBaseRepairDepartUser::getUserId, user.getId()));
      if (oConvertUtils.isNotEmpty(repairDeparts)) {
         for (String repairDepartId : arrayRepDep) {
            EamBaseRepairDepartUser eamBaseRepairDepartUser = new EamBaseRepairDepartUser(user.getId(), repairDepartId);
            eamBaseRepairDepartUserMapper.insert(eamBaseRepairDepartUser);
         }
      }
      //step.5 修改手机号和邮箱
      // 更新手机号、邮箱空字符串为 null
      userMapper.updateNullByEmptyString("email");
      userMapper.updateNullByEmptyString("phone");
        //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 修改维修部门
        String[] arrayRepDep = {};
        if (oConvertUtils.isNotEmpty(repairDeparts)) {
            arrayRepDep = repairDeparts.split(",");
        }
        //先删后加
        eamBaseRepairDepartUserMapper.delete(new QueryWrapper<EamBaseRepairDepartUser>().lambda().eq(EamBaseRepairDepartUser::getUserId, user.getId()));
        if (oConvertUtils.isNotEmpty(repairDeparts)) {
            for (String repairDepartId : arrayRepDep) {
                EamBaseRepairDepartUser eamBaseRepairDepartUser = new EamBaseRepairDepartUser(user.getId(), repairDepartId);
                eamBaseRepairDepartUserMapper.insert(eamBaseRepairDepartUser);
            }
        }
        //step.5 修改手机号和邮箱
        // 更新手机号、邮箱空字符串为 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
    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
    @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);
    @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;
   }
        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;
    }
   @Override
   public Map<String, String> getRepDepNamesByUserIds(List<String> userIds) {
      List<EamUserRepDepVo> list = this.baseMapper.getRepDepNamesByUserIds(userIds);
    @Override
    public Map<String, String> getRepDepNamesByUserIds(List<String> userIds) {
        List<EamUserRepDepVo> list = this.baseMapper.getRepDepNamesByUserIds(userIds);
      Map<String, String> res = new HashMap<>(5);
      list.forEach(item -> {
         if (res.get(item.getUserId()) == null) {
            res.put(item.getUserId(), item.getRepairDepartName());
         } else {
            res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getRepairDepartName());
         }
      });
      return res;
   }
        Map<String, String> res = new HashMap<>(5);
        list.forEach(item -> {
            if (res.get(item.getUserId()) == null) {
                res.put(item.getUserId(), item.getRepairDepartName());
            } else {
                res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getRepairDepartName());
            }
        });
        return res;
    }
   // 根据角色Id查询该角色下的所有用户信息
   @Override
   public List<SysUser> getAllUsersByRoleId(String roleId) {
      return userMapper.getAllUsersByRoleId(roleId);
   }
    // 根据角色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);
   }
    /**
     * 根据角色编码查询用户id集合
     */
    @Override
    public List<String> getUserByRoleCode(String roleCode) {
        return this.baseMapper.getUserByRoleCode(roleCode);
    }
   /**
    * 根据角色编码列表查询用户id集合
    */
   @Override
   public List<SysUser> getUserByRoleCodeList(List<String> roleCodeList) {
      return this.baseMapper.getUserByRoleCodeList(roleCodeList);
   }
    /**
     * 根据角色编码列表查询用户id集合
     */
    @Override
    public List<SysUser> getUserByRoleCodeList(List<String> roleCodeList) {
        return this.baseMapper.getUserByRoleCodeList(roleCodeList);
    }
   /**
    * 根据角色编码和设备编号查询用户
    */
   @Override
   public List<SysUser> getEquipmentAdmin(String roleCode, String equipmentId) {
      return this.baseMapper.getEquipmentAdmin(roleCode, equipmentId);
   }
    /**
     * 根据角色编码和设备编号查询用户
     */
    @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 equipmentCode, String factoryOrgCode, String positionCode) {
        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysUser::getPost, positionCode);
        if (StringUtils.isNotBlank(equipmentCode)) {
            queryWrapper.and(q -> q.isNull(SysUser::getEamEquipmentIds).or().eq(SysUser::getEquipmentIds, "").or().like(SysUser::getEamEquipmentIds, equipmentCode));
        }
        if (StringUtils.isNotBlank(factoryOrgCode)) {
            List<String> factoryIds = factoryService.queryFactoryIdsByOrgCode(factoryOrgCode);
            if (CollectionUtil.isNotEmpty(factoryIds)) {
                String factory = String.join(",", factoryIds);
                String inClause = "(" + factory + ")";
                queryWrapper.exists("select 1 from eam_base_factory_user t where t.user_id=sys_user.id and t.factory_id in {0}", inClause);
            } else {
                return Collections.emptyList();
            }
        }
        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);
        if (CollectionUtil.isEmpty(sysUsers)) {
            return Collections.emptyList();
        }
        return sysUsers.stream().map(user -> new UserSelector(user.getId(), user.getUsername(), user.getRealname())).collect(Collectors.toList());
    }
   /**
    * 选择用户
    * @param equipmentCode 选择的设备ID
    * @param factoryId 选择的工厂ID
    * @param positionCode 岗位编号
    * @return
    */
   @Override
   public List<UserSelector> selectOperatorFactoryList(String equipmentCode, String factoryId, 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(factoryId)) {
//         queryWrapper.exists("select 1 from eam_base_factory_user t where t.user_id=sys_user.id and t.factory_id={0}", factoryId);
//      }
      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;
   }
    @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;
    }
}