package org.jeecg.modules.system.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.vo.DictModel; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.system.entity.SysPosition; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.model.DepartOrgVo; import org.jeecg.modules.system.model.SysDepartTreeModel; import org.jeecg.modules.system.service.ISysDepartService; import org.jeecg.modules.system.service.ISysPositionService; import org.jeecg.modules.system.service.ISysUserDepartService; import org.jeecg.modules.system.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.*; import java.util.stream.Collectors; @Api(tags = "部门组织架构") @RestController @RequestMapping("/sys/org") @Slf4j public class SysDepartOrgController { @Autowired private ISysDepartService sysDepartService; @Autowired public RedisTemplate redisTemplate; @Autowired private ISysUserService sysUserService; @Autowired private ISysUserDepartService sysUserDepartService; @Autowired private ISysPositionService positionService; @RequestMapping(value = "/depart", method = RequestMethod.GET) public Result> queryTreeList(@RequestParam(name = "ids", required = false) String ids) { Result> result = new Result<>(); try { //1.查询所有部门 List departList = new ArrayList<>(); if (oConvertUtils.isNotEmpty(ids)) { departList = sysDepartService.queryTreeList(ids); } else { departList = sysDepartService.queryTreeList(); //List sysUsers = sysUserDepartService.queryUserByDepId(id); } List departOrgVoList = new ArrayList<>(); coverDepartData(departList,null,departOrgVoList); result.setResult(departOrgVoList); //2.查询部门中的所有人 // departList.forEach(depart->{ // // }); } catch (Exception e) { log.error(e.getMessage(), e); } return result; } /** * 转换数据 * @param departList * @param parent * @param departOrgVoList */ private void coverDepartData(List departList, DepartOrgVo parent, List departOrgVoList){ for (int i = 0; i children = new ArrayList<>(); children.add(vo); parent.setChildren(children); } }else{ departOrgVoList.add(vo); } List children = model.getChildren(); if(children!=null){ coverDepartData(children,vo,departOrgVoList); } } } /** * 根据部门统计用户数据 */ private void fitUserData( DepartOrgVo model){ List postVoList = new ArrayList<>(); Map> map = new HashMap<>(); //1.查询部门用户 List sysUsers = sysUserDepartService.queryUserByDepId(model.getId()); //2.部门设置用户 model.setUserList(sysUsers); //3.查询部门及下级部门所有用户 Page page = new Page(1, 1000); List subDepids = sysDepartService.getMySubDepIdsByDepId(model.getId()); IPage pageList = sysUserService.getUserByDepIds(page, subDepids, null); model.setSubUserList(pageList.getRecords()); //3.根据用户职务统计 sysUsers.forEach(item->{ if(StringUtils.isEmpty(item.getPost())){ if(map.containsKey("未分配")){ map.get("未分配").add(item); }else { List userList = new ArrayList<>(); userList.add(item); map.put("未分配",userList); } }else { if(map.containsKey(item.getPost())){ map.get(item.getPost()).add(item); }else { List userList = new ArrayList<>(); userList.add(item); map.put(item.getPost(),userList); } } }); //查询所有职务 List list = positionService.list(); Map positionMap = list.stream().filter(item->StringUtils.isNotEmpty(item.getName())&&item.getSort()!=null).collect(Collectors.toMap(SysPosition::getName, SysPosition::getSort)); //4.设置部门下职务 map.forEach((key,value)->{ DepartOrgVo.PostVo postVo = new DepartOrgVo.PostVo(); postVo.setPostName(key); postVo.setUserList(value); if(positionMap.containsKey(key)){ postVo.setSort(positionMap.get(key)); }else { postVo.setSort(9999.0); if(key.equals("未分配")){ postVo.setSort(99999.0); } } postVoList.add(postVo); }); Collections.sort(postVoList,(o1,o2)->{ if(o1.getSort()==null || o2.getSort() ==null){ return 0; } return o1.getSort().compareTo(o2.getSort()); }); model.setPostList(postVoList); } }