package org.jeecg.modules.system.controller;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.authz.annotation.RequiresRoles;
|
import org.jeecg.common.api.vo.Result;
|
import org.jeecg.common.aspect.annotation.PermissionData;
|
import org.jeecg.common.constant.CacheConstant;
|
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.doc.vo.DeptPathPermissionVo;
|
import org.jeecg.common.system.query.QueryGenerator;
|
import org.jeecg.common.system.util.JwtUtil;
|
import org.jeecg.common.system.vo.LoginUser;
|
import org.jeecg.common.util.ImportExcelUtil;
|
import org.jeecg.common.util.YouBianCodeUtil;
|
import org.jeecg.common.util.oConvertUtils;
|
import org.jeecg.modules.system.entity.*;
|
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.ISysDepartRoleService;
|
import org.jeecg.modules.system.service.ISysDepartService;
|
import org.jeecg.modules.system.service.ISysUserDepartService;
|
import org.jeecg.modules.system.service.ISysUserService;
|
import org.jeecgframework.poi.excel.ExcelImportUtil;
|
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
|
import org.jeecgframework.poi.excel.entity.ExportParams;
|
import org.jeecgframework.poi.excel.entity.ImportParams;
|
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.cache.annotation.CacheEvict;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
import org.springframework.web.servlet.ModelAndView;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 部门表 前端控制器
|
* <p>
|
*
|
* @Author: Steve @Since: 2019-01-22
|
*/
|
@Api(tags = "部门用户")
|
@RestController
|
@RequestMapping("/sys/sysDepart")
|
@Slf4j
|
public class SysDepartController {
|
|
@Autowired
|
private ISysDepartService sysDepartService;
|
@Autowired
|
public RedisTemplate<String, Object> redisTemplate;
|
@Autowired
|
private ISysUserService sysUserService;
|
@Autowired
|
private ISysUserDepartService sysUserDepartService;
|
|
@Autowired
|
private ISysDepartRoleService sysDepartRoleService;
|
/**
|
* 查询数据 查出我的部门,并以树结构数据格式响应给前端
|
*
|
* @return
|
*/
|
@RequestMapping(value = "/queryMyDeptTreeList", method = RequestMethod.GET)
|
public Result<List<SysDepartTreeModel>> queryMyDeptTreeList() {
|
Result<List<SysDepartTreeModel>> result = new Result<>();
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
try {
|
if(oConvertUtils.isNotEmpty(user.getUserIdentity()) && user.getUserIdentity().equals( CommonConstant.USER_IDENTITY_2 )){
|
//update-begin--Author:liusq Date:20210624 for:部门查询ids为空后的前端显示问题 issues/I3UD06
|
String departIds = user.getDepartIds();
|
if(StringUtils.isNotBlank(departIds)){
|
List<SysDepartTreeModel> list = sysDepartService.queryMyDeptTreeList(departIds);
|
result.setResult(list);
|
}
|
//update-end--Author:liusq Date:20210624 for:部门查询ids为空后的前端显示问题 issues/I3UD06
|
result.setMessage(CommonConstant.USER_IDENTITY_2.toString());
|
result.setSuccess(true);
|
}else{
|
result.setMessage(CommonConstant.USER_IDENTITY_1.toString());
|
result.setSuccess(true);
|
}
|
} catch (Exception e) {
|
log.error(e.getMessage(),e);
|
}
|
return result;
|
}
|
|
/**
|
* 查询数据 查出所有部门,并以树结构数据格式响应给前端
|
*
|
* @return
|
*/
|
@RequestMapping(value = "/queryTreeList", method = RequestMethod.GET)
|
public Result<List<SysDepartTreeModel>> queryTreeList(@RequestParam(name = "ids", required = false) String ids) {
|
Result<List<SysDepartTreeModel>> result = new Result<>();
|
try {
|
// 从内存中读取
|
// List<SysDepartTreeModel> list =FindsDepartsChildrenUtil.getSysDepartTreeList();
|
// if (CollectionUtils.isEmpty(list)) {
|
// list = sysDepartService.queryTreeList();
|
// }
|
if(oConvertUtils.isNotEmpty(ids)){
|
List<SysDepartTreeModel> departList = sysDepartService.queryTreeList(ids);
|
result.setResult(departList);
|
}else{
|
List<SysDepartTreeModel> list = sysDepartService.queryTreeList();
|
result.setResult(list);
|
}
|
result.setSuccess(true);
|
} catch (Exception e) {
|
log.error(e.getMessage(),e);
|
}
|
return result;
|
}
|
|
/**
|
* 异步查询部门list
|
* @param parentId 父节点 异步加载时传递
|
* @param ids 前端回显是传递
|
* @return
|
*/
|
@RequestMapping(value = "/queryDepartTreeSync", method = RequestMethod.GET)
|
public Result<List<SysDepartTreeModel>> queryDepartTreeSync(@RequestParam(name = "pid", required = false) String parentId,@RequestParam(name = "ids", required = false) String ids) {
|
Result<List<SysDepartTreeModel>> result = new Result<>();
|
try {
|
List<SysDepartTreeModel> list = sysDepartService.queryTreeListByPid(parentId,ids);
|
result.setResult(list);
|
result.setSuccess(true);
|
} catch (Exception e) {
|
log.error(e.getMessage(),e);
|
}
|
return result;
|
}
|
|
/**
|
* 获取某个部门的所有父级部门的ID
|
*
|
* @param departId 根据departId查
|
* @param orgCode 根据orgCode查,departId和orgCode必须有一个不为空
|
*/
|
@GetMapping("/queryAllParentId")
|
public Result queryParentIds(
|
@RequestParam(name = "departId", required = false) String departId,
|
@RequestParam(name = "orgCode", required = false) String orgCode
|
) {
|
try {
|
JSONObject data;
|
if (oConvertUtils.isNotEmpty(departId)) {
|
data = sysDepartService.queryAllParentIdByDepartId(departId);
|
} else if (oConvertUtils.isNotEmpty(orgCode)) {
|
data = sysDepartService.queryAllParentIdByOrgCode(orgCode);
|
} else {
|
return Result.error("departId 和 orgCode 不能都为空!");
|
}
|
return Result.OK(data);
|
} catch (Exception e) {
|
log.error(e.getMessage(), e);
|
return Result.error(e.getMessage());
|
}
|
}
|
|
/**
|
* 添加新数据 添加用户新建的部门对象数据,并保存到数据库
|
*
|
* @param sysDepart
|
* @return
|
*/
|
//@RequiresRoles({"admin"})
|
@RequestMapping(value = "/add", method = RequestMethod.POST)
|
@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
|
public Result<SysDepart> add(@RequestBody SysDepart sysDepart, HttpServletRequest request) {
|
Result<SysDepart> result = new Result<SysDepart>();
|
String username = JwtUtil.getUserNameByToken(request);
|
try {
|
sysDepart.setCreateBy(username);
|
sysDepartService.saveDepartData(sysDepart, username);
|
//清除部门树内存
|
// FindsDepartsChildrenUtil.clearSysDepartTreeList();
|
// FindsDepartsChildrenUtil.clearDepartIdModel();
|
result.success("添加成功!");
|
} catch (Exception e) {
|
log.error(e.getMessage(),e);
|
result.error500("操作失败");
|
}
|
return result;
|
}
|
|
/**
|
* 编辑数据 编辑部门的部分数据,并保存到数据库
|
*
|
* @param sysDepart
|
* @return
|
*/
|
//@RequiresRoles({"admin"})
|
@RequestMapping(value = "/edit", method = RequestMethod.PUT)
|
@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
|
public Result<SysDepart> edit(@RequestBody SysDepart sysDepart, HttpServletRequest request) {
|
String username = JwtUtil.getUserNameByToken(request);
|
sysDepart.setUpdateBy(username);
|
Result<SysDepart> result = new Result<SysDepart>();
|
SysDepart sysDepartEntity = sysDepartService.getById(sysDepart.getId());
|
if (sysDepartEntity == null) {
|
result.error500("未找到对应实体");
|
} else {
|
boolean ok = sysDepartService.updateDepartDataById(sysDepart, username);
|
// TODO 返回false说明什么?
|
if (ok) {
|
//清除部门树内存
|
//FindsDepartsChildrenUtil.clearSysDepartTreeList();
|
//FindsDepartsChildrenUtil.clearDepartIdModel();
|
result.success("修改成功!");
|
}
|
}
|
return result;
|
}
|
|
/**
|
* 通过id删除
|
* @param id
|
* @return
|
*/
|
//@RequiresRoles({"admin"})
|
@RequestMapping(value = "/delete", method = RequestMethod.DELETE)
|
@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
|
public Result<SysDepart> delete(@RequestParam(name="id",required=true) String id) {
|
|
Result<SysDepart> result = new Result<SysDepart>();
|
SysDepart sysDepart = sysDepartService.getById(id);
|
if(sysDepart==null) {
|
result.error500("未找到对应实体");
|
}else {
|
boolean ok = sysDepartService.delete(id);
|
if(ok) {
|
//清除部门树内存
|
//FindsDepartsChildrenUtil.clearSysDepartTreeList();
|
// FindsDepartsChildrenUtil.clearDepartIdModel();
|
result.success("删除成功!");
|
}
|
}
|
return result;
|
}
|
|
|
/**
|
* 批量删除 根据前端请求的多个ID,对数据库执行删除相关部门数据的操作
|
*
|
* @param ids
|
* @return
|
*/
|
//@RequiresRoles({"admin"})
|
@RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE)
|
@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
|
public Result<SysDepart> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
|
|
Result<SysDepart> result = new Result<SysDepart>();
|
if (ids == null || "".equals(ids.trim())) {
|
result.error500("参数不识别!");
|
} else {
|
this.sysDepartService.deleteBatchWithChildren(Arrays.asList(ids.split(",")));
|
result.success("删除成功!");
|
}
|
return result;
|
}
|
|
/**
|
* 查询数据 添加或编辑页面对该方法发起请求,以树结构形式加载所有部门的名称,方便用户的操作
|
*
|
* @return
|
*/
|
@RequestMapping(value = "/queryIdTree", method = RequestMethod.GET)
|
public Result<List<DepartIdModel>> queryIdTree() {
|
// Result<List<DepartIdModel>> result = new Result<List<DepartIdModel>>();
|
// List<DepartIdModel> idList;
|
// try {
|
// idList = FindsDepartsChildrenUtil.wrapDepartIdModel();
|
// if (idList != null && idList.size() > 0) {
|
// result.setResult(idList);
|
// result.setSuccess(true);
|
// } else {
|
// sysDepartService.queryTreeList();
|
// idList = FindsDepartsChildrenUtil.wrapDepartIdModel();
|
// result.setResult(idList);
|
// result.setSuccess(true);
|
// }
|
// return result;
|
// } catch (Exception e) {
|
// log.error(e.getMessage(),e);
|
// result.setSuccess(false);
|
// return result;
|
// }
|
Result<List<DepartIdModel>> result = new Result<>();
|
try {
|
List<DepartIdModel> list = sysDepartService.queryDepartIdTreeList();
|
result.setResult(list);
|
result.setSuccess(true);
|
} catch (Exception e) {
|
log.error(e.getMessage(),e);
|
}
|
return result;
|
}
|
|
/**
|
* <p>
|
* 部门搜索功能方法,根据关键字模糊搜索相关部门
|
* </p>
|
*
|
* @param keyWord
|
* @return
|
*/
|
@RequestMapping(value = "/searchBy", method = RequestMethod.GET)
|
public Result<List<SysDepartTreeModel>> searchBy(@RequestParam(name = "keyWord", required = true) String keyWord,@RequestParam(name = "myDeptSearch", required = false) String myDeptSearch) {
|
Result<List<SysDepartTreeModel>> result = new Result<List<SysDepartTreeModel>>();
|
//部门查询,myDeptSearch为1时为我的部门查询,登录用户为上级时查只查负责部门下数据
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
String departIds = null;
|
if(oConvertUtils.isNotEmpty(user.getUserIdentity()) && user.getUserIdentity().equals( CommonConstant.USER_IDENTITY_2 )){
|
departIds = user.getDepartIds();
|
}
|
List<SysDepartTreeModel> treeList = this.sysDepartService.searhBy(keyWord,myDeptSearch,departIds);
|
if (treeList == null || treeList.size() == 0) {
|
result.setSuccess(false);
|
result.setMessage("未查询匹配数据!");
|
return result;
|
}
|
result.setResult(treeList);
|
return result;
|
}
|
|
|
/**
|
* 导出excel
|
*
|
* @param request
|
*/
|
@RequestMapping(value = "/exportXls")
|
public ModelAndView exportXls(SysDepart sysDepart,HttpServletRequest request) {
|
// Step.1 组装查询条件
|
QueryWrapper<SysDepart> queryWrapper = QueryGenerator.initQueryWrapper(sysDepart, request.getParameterMap());
|
//Step.2 AutoPoi 导出Excel
|
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
|
List<SysDepart> pageList = sysDepartService.list(queryWrapper);
|
//按字典排序
|
Collections.sort(pageList, new Comparator<SysDepart>() {
|
@Override
|
public int compare(SysDepart arg0, SysDepart arg1) {
|
return arg0.getOrgCode().compareTo(arg1.getOrgCode());
|
}
|
});
|
//导出文件名称
|
mv.addObject(NormalExcelConstants.FILE_NAME, "部门列表");
|
mv.addObject(NormalExcelConstants.CLASS, SysDepart.class);
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("部门列表数据", "导出人:"+user.getRealname(), "导出信息"));
|
mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
|
return mv;
|
}
|
|
/**
|
* 通过excel导入数据
|
*
|
* @param request
|
* @param response
|
* @return
|
*/
|
//@RequiresRoles({"admin"})
|
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
|
@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
|
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
|
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
|
List<String> errorMessageList = new ArrayList<>();
|
List<SysDepart> listSysDeparts = null;
|
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
|
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
|
MultipartFile file = entity.getValue();// 获取上传文件对象
|
ImportParams params = new ImportParams();
|
params.setTitleRows(2);
|
params.setHeadRows(1);
|
params.setNeedSave(true);
|
try {
|
// orgCode编码长度
|
int codeLength = YouBianCodeUtil.zhanweiLength;
|
listSysDeparts = ExcelImportUtil.importExcel(file.getInputStream(), SysDepart.class, params);
|
//按长度排序
|
Collections.sort(listSysDeparts, new Comparator<SysDepart>() {
|
@Override
|
public int compare(SysDepart arg0, SysDepart arg1) {
|
return arg0.getOrgCode().length() - arg1.getOrgCode().length();
|
}
|
});
|
|
int num = 0;
|
for (SysDepart sysDepart : listSysDeparts) {
|
String orgCode = sysDepart.getOrgCode();
|
if(orgCode.length() > codeLength) {
|
String parentCode = orgCode.substring(0, orgCode.length()-codeLength);
|
QueryWrapper<SysDepart> queryWrapper = new QueryWrapper<SysDepart>();
|
queryWrapper.eq("org_code", parentCode);
|
try {
|
SysDepart parentDept = sysDepartService.getOne(queryWrapper);
|
if(!parentDept.equals(null)) {
|
sysDepart.setParentId(parentDept.getId());
|
} else {
|
sysDepart.setParentId("");
|
}
|
}catch (Exception e) {
|
//没有查找到parentDept
|
}
|
}else{
|
sysDepart.setParentId("");
|
}
|
//update-begin---author:liusq Date:20210223 for:批量导入部门以后,不能追加下一级部门 #2245------------
|
sysDepart.setOrgType(sysDepart.getOrgCode().length()/codeLength+"");
|
//update-end---author:liusq Date:20210223 for:批量导入部门以后,不能追加下一级部门 #2245------------
|
sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
|
ImportExcelUtil.importDateSaveOne(sysDepart, ISysDepartService.class, errorMessageList, num, CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE);
|
num++;
|
}
|
//清空部门缓存
|
Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*");
|
Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*");
|
redisTemplate.delete(keys3);
|
redisTemplate.delete(keys4);
|
return ImportExcelUtil.imporReturnRes(errorMessageList.size(), listSysDeparts.size() - errorMessageList.size(), errorMessageList);
|
} catch (Exception e) {
|
log.error(e.getMessage(),e);
|
return Result.error("文件导入失败:"+e.getMessage());
|
} finally {
|
try {
|
file.getInputStream().close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
return Result.error("文件导入失败!");
|
}
|
|
|
/**
|
* 查询所有部门信息
|
* @return
|
*/
|
@GetMapping("listAll")
|
public Result<List<SysDepart>> listAll(@RequestParam(name = "id", required = false) String id) {
|
Result<List<SysDepart>> result = new Result<>();
|
LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
|
query.orderByAsc(SysDepart::getOrgCode);
|
if(oConvertUtils.isNotEmpty(id)){
|
String arr[] = id.split(",");
|
query.in(SysDepart::getId,arr);
|
}
|
List<SysDepart> ls = this.sysDepartService.list(query);
|
result.setSuccess(true);
|
result.setResult(ls);
|
return result;
|
}
|
/**
|
* 查询数据 查出所有部门,并以树结构数据格式响应给前端
|
*
|
* @return
|
*/
|
@RequestMapping(value = "/queryTreeByKeyWord", method = RequestMethod.GET)
|
public Result<Map<String,Object>> queryTreeByKeyWord(@RequestParam(name = "keyWord", required = false) String keyWord) {
|
Result<Map<String,Object>> result = new Result<>();
|
try {
|
Map<String,Object> map=new HashMap<String,Object>();
|
List<SysDepartTreeModel> list = sysDepartService.queryTreeByKeyWord(keyWord);
|
//根据keyWord获取用户信息
|
LambdaQueryWrapper<SysUser> queryUser = new LambdaQueryWrapper<SysUser>();
|
queryUser.eq(SysUser::getDelFlag,CommonConstant.DEL_FLAG_0);
|
queryUser.and(i -> i.like(SysUser::getUsername, keyWord).or().like(SysUser::getRealname, keyWord));
|
List<SysUser> sysUsers = this.sysUserService.list(queryUser);
|
map.put("userList",sysUsers);
|
map.put("departList",list);
|
result.setResult(map);
|
result.setSuccess(true);
|
} catch (Exception e) {
|
log.error(e.getMessage(),e);
|
}
|
return result;
|
}
|
|
/**
|
* 根据部门编码获取部门信息
|
*
|
* @param orgCode
|
* @return
|
*/
|
@GetMapping("/getDepartName")
|
public Result<SysDepart> getDepartName(@RequestParam(name = "orgCode") String orgCode) {
|
Result<SysDepart> result = new Result<>();
|
LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<>();
|
query.eq(SysDepart::getOrgCode, orgCode);
|
SysDepart sysDepart = sysDepartService.getOne(query);
|
result.setSuccess(true);
|
result.setResult(sysDepart);
|
return result;
|
}
|
|
/**
|
* 根据部门id获取用户信息
|
*
|
* @param id
|
* @return
|
*/
|
@GetMapping("/queryUsersByDepartId")
|
public Result<IPage<SysUser>> queryUsersByDepartId(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
|
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
|
Result<IPage<SysUser>> result = new Result<IPage<SysUser>>();
|
Page<SysUser> page = new Page<SysUser>(pageNo, pageSize);
|
String depId = req.getParameter("depId");
|
String username = req.getParameter("username");
|
// if(StringUtils.isEmpty(depId)){
|
// return result.error500("部门不能为空!");
|
// }
|
List<String> subDepids = new ArrayList<>();
|
subDepids.add(depId);
|
IPage<SysUser> pageList = sysUserService.getUserByDepIds(page, subDepids, username);
|
//批量查询用户的所属部门
|
//step.1 先拿到全部的 useids
|
//step.2 通过 useids,一次性查询用户的所属部门名字
|
List<String> userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList());
|
if (userIds != null && userIds.size() > 0) {
|
Map<String, String> useDepNames = sysUserService.getDepNamesByUserIds(userIds);
|
pageList.getRecords().forEach(item -> {
|
//批量查询用户的所属部门
|
item.setOrgCode(useDepNames.get(item.getId()));
|
});
|
}
|
//List<SysUser> sysUsers = sysUserDepartService.queryUserByDepId(depId);
|
result.setSuccess(true);
|
result.setResult(pageList);
|
return result;
|
}
|
@ApiOperation(value = "查询所有部门用户", notes = "查询部门用户")
|
@GetMapping("/queryDepUserList")
|
//TODO 暂不使用 使用queryDepartList带数据权限方法
|
public Result<List<DepartUserModel>> queryDepUserList(String realname){
|
Result<List<DepartUserModel>> result = new Result<>();
|
List<DepartUserModel> departUserModels = sysUserDepartService.queryDepUserList("", "", realname);
|
result.setResult(departUserModels);
|
result.success("查询成功");
|
return result;
|
}
|
@GetMapping("/queryDepartList")
|
@PermissionData
|
public Result<List<DepartUserModel>> queryDepartList(SysDepart depart,String username, HttpServletRequest req){
|
System.err.println(username);
|
Result<List<DepartUserModel> > result = new Result<>();
|
QueryWrapper<SysDepart> queryWrapper = QueryGenerator.initQueryWrapper(depart, req.getParameterMap());
|
List<SysDepart> departList = sysDepartService.list(queryWrapper);
|
//部门id
|
List<String> departIds = departList.stream().map(SysDepart::getId).collect(Collectors.toList());
|
QueryWrapper<SysUserDepart> userDepartQueryWrapper = new QueryWrapper<>();
|
userDepartQueryWrapper.lambda().in(SysUserDepart::getDepId,departIds);
|
List<SysUserDepart> userDeparts = sysUserDepartService.list(userDepartQueryWrapper);
|
//转map 用户id->key 部门id-> value
|
Map<String,String> map = new HashMap<>();
|
userDeparts.forEach(item->{
|
map.put(item.getUserId(),item.getDepId());
|
});
|
//用户id
|
List<String> userIds = userDeparts.stream().map(SysUserDepart::getUserId).collect(Collectors.toList());
|
//用户信息
|
QueryWrapper<SysUser> userQueryWrapper = new QueryWrapper<>();
|
userQueryWrapper.lambda().in(SysUser::getId,userIds);
|
if(!StringUtils.isEmpty(username)){
|
userQueryWrapper.lambda().like(SysUser::getRealname,username);
|
}
|
userQueryWrapper.lambda().in(SysUser::getId,userIds);
|
List<SysUser> userList = sysUserService.list(userQueryWrapper);
|
List<DepartUserModel> userData = new ArrayList<>();
|
List<DepartUserModel> departData = new ArrayList<>();
|
List<DepartUserModel> res = new ArrayList<>();
|
|
createTreeData(userList,userData,departData,map,departList,res);
|
result.setResult(res);
|
result.success("查询成功");
|
return result;
|
}
|
|
|
@GetMapping("/queryDepartRoleList")
|
public List<DeptPathPermissionVo> queryDeparRoleList(SysDepart depart, String username, HttpServletRequest req) {
|
|
QueryWrapper<SysDepart> queryWrapper = QueryGenerator.initQueryWrapper(depart, req.getParameterMap());
|
List<SysDepart> departList = sysDepartService.list(queryWrapper);
|
//部门id
|
List<String> departIds = departList.stream().map(SysDepart::getId).collect(Collectors.toList());
|
|
QueryWrapper<SysDepartRole> departRoleQueryWrapper = new QueryWrapper<>();
|
departRoleQueryWrapper.lambda().in(SysDepartRole::getDepartId, departIds);
|
List<SysDepartRole> departRoles = sysDepartRoleService.list(departRoleQueryWrapper);
|
//转map 用户id->key 部门id-> value
|
Map<String,String> map = new HashMap<>();
|
departRoles.forEach(item->{
|
map.put(item.getId(),item.getDepartId());
|
});
|
|
|
List<DeptPathPermissionVo> res = new ArrayList<>();
|
List<DeptPathPermissionVo> RoleData = new ArrayList<>();
|
List<DeptPathPermissionVo> departData = new ArrayList<>();
|
|
createDepartRoleTreeData(departRoles,RoleData,departData,map,departList,res);
|
|
|
return res;
|
}
|
|
private void createDepartRoleTreeData(List<SysDepartRole> departRoles, List<DeptPathPermissionVo> roleData, List<DeptPathPermissionVo> departData, Map<String, String> map, List<SysDepart> departList, List<DeptPathPermissionVo> res) {
|
//构建用户数据
|
departRoles.forEach(item->{
|
DeptPathPermissionVo model = new DeptPathPermissionVo();
|
model.setRoleId(item.getId());
|
model.setRoleName(item.getRoleName());
|
model.setDeptId(item.getDepartId());
|
model.setType(DeptPathPermissionVo.TYPE_ROLE);
|
roleData.add(model);
|
});
|
|
|
for (int i = 0; i < departList.size(); i++) {
|
SysDepart depart = departList.get(i);
|
DeptPathPermissionVo model = new DeptPathPermissionVo();
|
model.setId(depart.getId());
|
model.setDeptId(depart.getId());
|
model.setDeptName(depart.getDepartName());
|
model.setOrgCode(depart.getOrgCode());
|
model.setType(DeptPathPermissionVo.TYPE_DEPART);
|
model.setSort(depart.getDepartOrder());
|
model.setParentId(depart.getParentId());
|
departData.add(model);
|
|
}
|
Map<String, List<DeptPathPermissionVo>> roleMap = roleData.stream().collect(Collectors.groupingBy(t -> t.getDeptId()));
|
//对部门进行排序
|
//departData.sort(Comparator.comparing(DeptPathPermissionVo::getSort));
|
// 合并查询的userList userMap
|
res.addAll(buildDeptRoleTreeByStream(departData,roleMap));
|
}
|
|
|
|
/**
|
* 创建前端控件需要数据
|
* @param userList
|
* @param userData
|
* @param departData
|
* @param map
|
* @param departList
|
* @param res
|
*/
|
private void createTreeData(List<SysUser> userList,List<DepartUserModel> userData,List<DepartUserModel> departData,Map<String,String> map,List<SysDepart> departList,List<DepartUserModel> res ){
|
//构建用户数据
|
userList.forEach(item->{
|
Map<String,Object> slotMap = new HashMap<>();
|
DepartUserModel model = new DepartUserModel();
|
slotMap.put("icon","user");
|
model.setLeaf(true);
|
model.setTitle(item.getRealname());
|
//key 使用id+pid 避免不同部门有同一用户 TODO
|
model.setKey(item.getId());
|
model.setValue(item.getId());
|
model.setParentId(map.get(item.getId()));
|
model.setType(DepartUserModel.TYPE_USER);
|
model.setScopedSlots(slotMap);
|
model.setUsername(item.getUsername());
|
model.setRealname(item.getRealname());
|
userData.add(model);
|
});
|
|
|
for (int i = 0; i < departList.size(); i++) {
|
SysDepart depart = departList.get(i);
|
DepartUserModel model = new DepartUserModel(depart);
|
Map<String,Object> slotMap = new HashMap<>();
|
slotMap.put("icon","depart");
|
model.setScopedSlots(slotMap);
|
//部门
|
model.setType(DepartUserModel.TYPE_DEPART);
|
departData.add(model);
|
|
}
|
Map<String, List<DepartUserModel>> userMap = userData.stream().collect(Collectors.groupingBy(t -> t.getParentId()));
|
//对部门进行排序
|
departData.sort(Comparator.comparing(DepartUserModel::getSort));
|
// 合并查询的userList userMap
|
res.addAll(buildDeptTreeByStream(departData,userMap));
|
}
|
|
/**
|
*
|
* @param trees 部门信息
|
* @param userMap 用户信息
|
* @return
|
*/
|
public static List<DepartUserModel> buildDeptTreeByStream(List<DepartUserModel> trees, Map<String, List<DepartUserModel>> userMap){
|
//获取parentId = 0的根节点
|
List<DepartUserModel> list = trees.stream().filter(item -> item.getParentId().isEmpty()).collect(Collectors.toList());
|
//根据parentId进行分组
|
Map<String, List<DepartUserModel>> map = trees.stream().collect(Collectors.groupingBy(DepartUserModel::getParentId));
|
|
|
//合并map
|
for (Map.Entry<String, List<DepartUserModel>> 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;
|
}
|
|
|
private List<DeptPathPermissionVo> buildDeptRoleTreeByStream(List<DeptPathPermissionVo> departData, Map<String, List<DeptPathPermissionVo>> roleMap) {
|
//获取parentId = 0的根节点
|
List<DeptPathPermissionVo> list = departData.stream().filter(item -> item.getParentId().isEmpty()).collect(Collectors.toList());
|
//根据parentId进行分组
|
Map<String, List<DeptPathPermissionVo>> map = departData.stream().collect(Collectors.groupingBy(DeptPathPermissionVo::getParentId));
|
|
//合并map
|
for (Map.Entry<String, List<DeptPathPermissionVo>> entry : map.entrySet()) {
|
if (roleMap.containsKey(entry.getKey())) {
|
roleMap.get(entry.getKey()).addAll(entry.getValue());
|
roleMap.put(entry.getKey(), roleMap.get(entry.getKey()) );
|
} else {
|
roleMap.put(entry.getKey(), entry.getValue());
|
}
|
}
|
recursionDeportRoleFnTree(list, roleMap);
|
return list;
|
}
|
|
|
|
/**
|
* 递归遍历节点
|
* @param list 当前父节点
|
* @param map 所有子节点
|
*/
|
public static void recursionFnTree(List<DepartUserModel> list, Map<String, List<DepartUserModel>> map){
|
for (DepartUserModel treeSelect : list) {
|
List<DepartUserModel> childList = map.get(treeSelect.getId());
|
treeSelect.setChildren(childList);
|
if (null != childList && 0 < childList.size()){
|
recursionFnTree(childList,map);
|
}
|
}
|
}
|
|
|
private void recursionDeportRoleFnTree(List<DeptPathPermissionVo> list, Map<String, List<DeptPathPermissionVo>> roleMap) {
|
for (DeptPathPermissionVo treeSelect : list) {
|
List<DeptPathPermissionVo> childList = roleMap.get(treeSelect.getId());
|
treeSelect.setChildren(childList);
|
if (null != childList && 0 < childList.size()){
|
recursionDeportRoleFnTree(childList,roleMap);
|
}
|
}
|
}
|
|
|
|
}
|