package org.jeecg.modules.system.service.impl; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Collectors; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.CommonConstant; 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.model.DepartIdModel; import org.jeecg.modules.system.model.DepartUserModel; import org.jeecg.modules.system.model.SysDepartTreeModel; import org.jeecg.modules.system.service.ISysDepartService; import org.jeecg.modules.system.service.ISysUserDepartService; import org.jeecg.modules.system.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; /** *

* 用户部门表实现类 *

* * @Author ZhiLin * @since 2019-02-22 */ @Service public class SysUserDepartServiceImpl extends ServiceImpl implements ISysUserDepartService { @Autowired private ISysDepartService sysDepartService; @Autowired private ISysUserService sysUserService; @Autowired private SysUserDepartMapper userDepartMapper; /** * 根据用户id查询部门信息 */ @Override public List queryDepartIdsOfUser(String userId) { LambdaQueryWrapper queryUDep = new LambdaQueryWrapper(); LambdaQueryWrapper queryDep = new LambdaQueryWrapper(); try { queryUDep.eq(SysUserDepart::getUserId, userId); List depIdList = new ArrayList<>(); List depIdModelList = new ArrayList<>(); List userDepList = this.list(queryUDep); if (userDepList != null && userDepList.size() > 0) { for (SysUserDepart userDepart : userDepList) { depIdList.add(userDepart.getDepId()); } queryDep.in(SysDepart::getId, depIdList); List depList = sysDepartService.list(queryDep); 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 queryUDep = new LambdaQueryWrapper(); queryUDep.eq(SysUserDepart::getDepId, depId); List userIdList = new ArrayList<>(); List uDepList = this.list(queryUDep); if (uDepList != null && uDepList.size() > 0) { for (SysUserDepart uDep : uDepList) { userIdList.add(uDep.getUserId()); } List userList = (List) sysUserService.listByIds(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(); 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) { IPage pageList = null; // 部门ID不存在 直接查询用户表即可 Page page = new Page(pageNo, pageSize); if (oConvertUtils.isEmpty(departId)) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (oConvertUtils.isNotEmpty(username)) { query.like(SysUser::getUsername, username); } if (oConvertUtils.isNotEmpty(realname)) { query.like(SysUser::getRealname, realname); } pageList = sysUserService.page(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(); if (userIds != null && userIds.size() > 0) { // 查部门名称 Map useDepNames = sysUserService.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 List queryDepUserList(String departId, String username, String realname) { List hashMaps = userDepartMapper.queryDepUserList(username,realname); hashMaps.forEach(item->{ Map slotMap = new HashMap<>(); slotMap.put("icon","user"); item.setLeaf(true); item.setTitle(item.getRealname()); //key 使用id+pid 避免不同部门有同一用户 TODO item.setKey(item.getId()+item.getDepartId()); item.setValue(item.getId()); item.setParentId(item.getDepartId()); item.setType(DepartUserModel.TYPE_USER); item.setScopedSlots(slotMap); }); Map> userMap = hashMaps.stream().collect(Collectors.groupingBy(t -> t.getParentId())); //查询所有部门 LambdaQueryWrapper query = new LambdaQueryWrapper(); query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); query.orderByAsc(SysDepart::getDepartOrder); List departList = sysDepartService.list(query); List modelList = new ArrayList<>(); for (int i = 0; i < departList.size(); i++) { SysDepart depart = departList.get(i); DepartUserModel model = new DepartUserModel(depart); Map slotMap = new HashMap<>(); slotMap.put("icon","depart"); model.setScopedSlots(slotMap); //部门 model.setType(DepartUserModel.TYPE_DEPART); modelList.add(model); } //如果是精确查询,只显示查询用户结果 TODO if(!StringUtils.isEmpty(realname) || !StringUtils.isEmpty(username)){ return hashMaps; } // 合并查询的userList userMap List res = buildDeptTreeByStream(modelList,userMap); return res; } /** * * @param trees 部门信息 * @param userMap 用户信息 * @return */ public static List buildDeptTreeByStream(List trees, Map> userMap){ //获取parentId = 0的根节点 List list = trees.stream().filter(item -> item.getParentId().isEmpty()).collect(Collectors.toList()); //根据parentId进行分组 Map> map = trees.stream().collect(Collectors.groupingBy(DepartUserModel::getParentId)); //合并map for (Map.Entry> entry : map.entrySet()) { if (userMap.containsKey(entry.getKey())) { userMap.get(entry.getKey()).addAll(entry.getValue()); userMap.put(entry.getKey(), userMap.get(entry.getKey()) ); } else { userMap.put(entry.getKey(), entry.getValue()); } } recursionFnTree(list, userMap); //recursionFnTree(list, map); return list; } /** * 递归遍历节点 * @param list 当前父节点 * @param map 所有子节点 */ public static void recursionFnTree(List list, Map> map){ for (DepartUserModel treeSelect : list) { List childList = map.get(treeSelect.getId()); treeSelect.setChildren(childList); if (null != childList && 0 < childList.size()){ recursionFnTree(childList,map); } } } }