123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514 |
- 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 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.constant.CacheConstant;
- import org.jeecg.common.constant.CommonConstant;
- 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.SysDepart;
- import org.jeecg.modules.system.entity.SysUser;
- import org.jeecg.modules.system.model.DepartIdModel;
- 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.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.*;
- /**
- * <p>
- * 部门表 前端控制器
- * <p>
- *
- * @Author: Steve @Since: 2019-01-22
- */
- @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;
- /**
- * 查询数据 查出我的部门,并以树结构数据格式响应给前端
- *
- * @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() {
- Result<List<SysDepartTreeModel>> result = new Result<>();
- try {
- // 从内存中读取
- // List<SysDepartTreeModel> list =FindsDepartsChildrenUtil.getSysDepartTreeList();
- // if (CollectionUtils.isEmpty(list)) {
- // list = sysDepartService.queryTreeList();
- // }
- List<SysDepartTreeModel> list = sysDepartService.queryTreeList();
- result.setResult(list);
- result.setSuccess(true);
- } catch (Exception e) {
- log.error(e.getMessage(),e);
- }
- return result;
- }
- /**
- * 异步查询部门list
- *
- * @return
- */
- @RequestMapping(value = "/queryDepartTreeSync", method = RequestMethod.GET)
- public Result<List<SysDepartTreeModel>> queryDepartTreeSync(@RequestParam(name = "pid", required = false) String parentId) {
- Result<List<SysDepartTreeModel>> result = new Result<>();
- try {
- List<SysDepartTreeModel> list = sysDepartService.queryTreeListByPid(parentId);
- 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.POST)
- @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.POST)
- @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.POST)
- @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("/getUsersByDepartId")
- public Result<List<SysUser>> getUsersByDepartId(@RequestParam(name = "id") String id) {
- Result<List<SysUser>> result = new Result<>();
- List<SysUser> sysUsers = sysUserDepartService.queryUserByDepId(id);
- result.setSuccess(true);
- result.setResult(sysUsers);
- return result;
- }
- }
|