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<String, Object> redisTemplate;
|
@Autowired
|
private ISysUserService sysUserService;
|
|
@Autowired
|
private ISysUserDepartService sysUserDepartService;
|
@Autowired
|
private ISysPositionService positionService;
|
|
@RequestMapping(value = "/depart", method = RequestMethod.GET)
|
public Result<List<DepartOrgVo>> queryTreeList(@RequestParam(name = "ids", required = false) String ids) {
|
Result<List<DepartOrgVo>> result = new Result<>();
|
try {
|
//1.查询所有部门
|
List<SysDepartTreeModel> departList = new ArrayList<>();
|
if (oConvertUtils.isNotEmpty(ids)) {
|
departList = sysDepartService.queryTreeList(ids);
|
} else {
|
departList = sysDepartService.queryTreeList();
|
//List<SysUser> sysUsers = sysUserDepartService.queryUserByDepId(id);
|
}
|
List<DepartOrgVo> 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<SysDepartTreeModel> departList, DepartOrgVo parent, List<DepartOrgVo> departOrgVoList){
|
for (int i = 0; i <departList.size() ; i++) {
|
SysDepartTreeModel model = departList.get(i);
|
DepartOrgVo vo = new DepartOrgVo();
|
vo.setId(model.getId());
|
vo.setPid(model.getParentId());
|
vo.setLabel(model.getDepartName());
|
vo.setLeaf(model.getIsLeaf());
|
vo.setSort(model.getDepartOrder());
|
//转换数据时查询用户数据
|
fitUserData(vo);
|
|
if(parent!=null){
|
if(parent.getChildren()!=null){
|
parent.getChildren().add(vo);
|
}else {
|
List<DepartOrgVo> children = new ArrayList<>();
|
children.add(vo);
|
parent.setChildren(children);
|
}
|
}else{
|
departOrgVoList.add(vo);
|
}
|
|
List<SysDepartTreeModel> children = model.getChildren();
|
if(children!=null){
|
coverDepartData(children,vo,departOrgVoList);
|
}
|
}
|
|
}
|
|
/**
|
* 根据部门统计用户数据
|
*/
|
private void fitUserData( DepartOrgVo model){
|
List<DepartOrgVo.PostVo> postVoList = new ArrayList<>();
|
Map<String, List<SysUser>> map = new HashMap<>();
|
//1.查询部门用户
|
List<SysUser> sysUsers = sysUserDepartService.queryUserByDepId(model.getId());
|
//2.部门设置用户
|
model.setUserList(sysUsers);
|
//3.查询部门及下级部门所有用户
|
Page<SysUser> page = new Page<SysUser>(1, 1000);
|
List<String> subDepids = sysDepartService.getMySubDepIdsByDepId(model.getId());
|
IPage<SysUser> 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<SysUser> userList = new ArrayList<>();
|
userList.add(item);
|
map.put("未分配",userList);
|
}
|
}else {
|
if(map.containsKey(item.getPost())){
|
map.get(item.getPost()).add(item);
|
}else {
|
List<SysUser> userList = new ArrayList<>();
|
userList.add(item);
|
map.put(item.getPost(),userList);
|
}
|
}
|
});
|
//查询所有职务
|
List<SysPosition> list = positionService.list();
|
Map<String, Double> 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);
|
|
}
|
|
}
|