package org.jeecg.modules.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.shiro.SecurityUtils; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.system.entity.SysDepart; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.entity.SysUserDepart; import org.jeecg.modules.system.mapper.SysUserDepartMapper; import org.jeecg.modules.system.mapper.SysUserMapper; import org.jeecg.modules.system.model.DepartIdModel; import org.jeecg.modules.system.service.ISysDepartService; import org.jeecg.modules.system.service.ISysUserDepartService; import org.jeecg.modules.system.vo.SysUserDepVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** *

* 用户部门表实现类 *

* @Author ZhiLin *@since 2019-02-22 */ @Service public class SysUserDepartServiceImpl extends ServiceImpl implements ISysUserDepartService { @Autowired private ISysDepartService sysDepartService; @Autowired private SysUserMapper sysUserMapper; /** * 根据用户id查询部门信息 */ @Override public List queryDepartIdsOfUser(String userId) { LambdaQueryWrapper queryUserDep = new LambdaQueryWrapper(); LambdaQueryWrapper queryDep = new LambdaQueryWrapper(); try { queryUserDep.eq(SysUserDepart::getUserId, userId); List depIdList = new ArrayList<>(); List depIdModelList = new ArrayList<>(); List userDepList = this.list(queryUserDep); if(userDepList != null && userDepList.size() > 0) { for(SysUserDepart userDepart : userDepList) { depIdList.add(userDepart.getDepId()); } queryDep.in(SysDepart::getId, depIdList); List depList = sysDepartService.list(queryDep); //jeecg-boot/issues/3906 if(depList != null && depList.size() > 0) { for(SysDepart depart : depList) { depIdModelList.add(new DepartIdModel().convertByUserDepart(depart)); } } return depIdModelList; } }catch(Exception e) { e.fillInStackTrace(); } return null; } /** * 根据部门id查询用户信息 */ @Override public List queryUserByDepId(String depId) { LambdaQueryWrapper queryUserDep = new LambdaQueryWrapper(); queryUserDep.eq(SysUserDepart::getDepId, depId); List userIdList = new ArrayList<>(); List uDepList = this.list(queryUserDep); if(uDepList != null && uDepList.size() > 0) { for(SysUserDepart uDep : uDepList) { userIdList.add(uDep.getUserId()); } List userList = (List) sysUserMapper.selectBatchIds(userIdList); //update-begin-author:taoyan date:201905047 for:接口调用查询返回结果不能返回密码相关信息 for (SysUser sysUser : userList) { sysUser.setSalt(""); sysUser.setPassword(""); } //update-end-author:taoyan date:201905047 for:接口调用查询返回结果不能返回密码相关信息 return userList; } return new ArrayList(); } /** * 根据部门code,查询当前部门和下级部门的 用户信息 */ @Override public List queryUserByDepCode(String depCode,String realname) { //update-begin-author:taoyan date:20210422 for: 根据部门选择用户接口代码优化 if(oConvertUtils.isNotEmpty(realname)){ realname = realname.trim(); } List userList = this.baseMapper.queryDepartUserList(depCode, realname); Map map = new HashMap(5); for (SysUser sysUser : userList) { // 返回的用户数据去掉密码信息 sysUser.setSalt(""); sysUser.setPassword(""); map.put(sysUser.getId(), sysUser); } return new ArrayList(map.values()); //update-end-author:taoyan date:20210422 for: 根据部门选择用户接口代码优化 } @Override public IPage queryDepartUserPageList(String departId, String username, String realname, int pageSize, int pageNo,String id) { IPage pageList = null; // 部门ID不存在 直接查询用户表即可 Page page = new Page(pageNo, pageSize); if(oConvertUtils.isEmpty(departId)){ LambdaQueryWrapper query = new LambdaQueryWrapper<>(); //update-begin---author:wangshuai ---date:20220104 for:[JTC-297]已冻结用户仍可设置为代理人------------ query.eq(SysUser::getStatus,Integer.parseInt(CommonConstant.STATUS_1)); //update-end---author:wangshuai ---date:20220104 for:[JTC-297]已冻结用户仍可设置为代理人------------ if(oConvertUtils.isNotEmpty(username)){ query.like(SysUser::getUsername, username); } //update-begin---author:wangshuai ---date:20220608 for:[VUEN-1238]邮箱回复时,发送到显示的为用户id------------ if(oConvertUtils.isNotEmpty(id)){ query.eq(SysUser::getId, id); } //update-end---author:wangshuai ---date:20220608 for:[VUEN-1238]邮箱回复时,发送到显示的为用户id------------ //update-begin---author:wangshuai ---date:20220902 for:[VUEN-2121]临时用户不能直接显示------------ query.ne(SysUser::getUsername,"_reserve_user_external"); //update-end---author:wangshuai ---date:20220902 for:[VUEN-2121]临时用户不能直接显示------------ pageList = sysUserMapper.selectPage(page, query); }else{ // 有部门ID 需要走自定义sql SysDepart sysDepart = sysDepartService.getById(departId); pageList = this.baseMapper.queryDepartUserPageList(page, sysDepart.getOrgCode(), username, realname); } List userList = pageList.getRecords(); if(userList!=null && userList.size()>0){ List userIds = userList.stream().map(SysUser::getId).collect(Collectors.toList()); Map map = new HashMap(5); if(userIds!=null && userIds.size()>0){ // 查部门名称 Map useDepNames = this.getDepNamesByUserIds(userIds); userList.forEach(item->{ //TODO 临时借用这个字段用于页面展示 item.setOrgCodeTxt(useDepNames.get(item.getId())); item.setSalt(""); item.setPassword(""); // 去重 map.put(item.getId(), item); }); } pageList.setRecords(new ArrayList(map.values())); } return pageList; } @Override public IPage getUserInformation(String departId, String keyword, Integer pageSize, Integer pageNo) { IPage pageList = null; // 部门ID不存在 直接查询用户表即可 Page page = new Page<>(pageNo, pageSize); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if(oConvertUtils.isEmpty(departId)){ LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysUser::getStatus,Integer.parseInt(CommonConstant.STATUS_1)); query.ne(SysUser::getUsername,"_reserve_user_external"); //排除自己 query.ne(SysUser::getId,sysUser.getId()); //这个语法可以将or用括号包起来,避免数据查不到 query.and((wrapper) -> wrapper.like(SysUser::getUsername, keyword).or().like(SysUser::getRealname,keyword)); pageList = sysUserMapper.selectPage(page, query); }else{ // 有部门ID 需要走自定义sql SysDepart sysDepart = sysDepartService.getById(departId); //update-begin---author:wangshuai ---date:20220908 for:部门排除自己------------ pageList = this.baseMapper.getUserInformation(page, sysDepart.getOrgCode(), keyword,sysUser.getId()); //update-end---author:wangshuai ---date:20220908 for:部门排除自己-------------- } return pageList; } /** * 根据用户id查询部门id集合 */ @Override public List queryDepartIdsByUserId(String userId) { return this.baseMapper.queryDepartIdsByUserId(userId); } /** * 升级SpringBoot2.6.6,不允许循环依赖 * @param userIds * @return */ private Map getDepNamesByUserIds(List userIds) { List list = sysUserMapper.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; } }