From 7ce4d0547c50858d17ef2fde043db01177531c95 Mon Sep 17 00:00:00 2001 From: zer0Black <694429613@qq.com> Date: Sun, 17 Apr 2022 20:36:12 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=B7=BB=E5=8A=A0=E3=80=91=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=8F=96=E6=B6=88=E5=85=B3=E8=81=94=E6=88=96=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E9=83=A8=E9=97=A8=EF=BC=8C=E4=BD=86=E8=B4=9F=E8=B4=A3?= =?UTF-8?q?=E9=83=A8=E9=97=A8=E6=9C=AA=E5=90=8C=E6=AD=A5=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/system/query/QueryGenerator.java | 5 +- .../controller/SysDepartController.java | 24 ++++---- .../system/controller/SysUserController.java | 18 ++++-- .../system/service/ISysDepartService.java | 16 +++++- .../service/impl/SysDepartServiceImpl.java | 55 ++++++++++++++++++- 5 files changed, 93 insertions(+), 25 deletions(-) diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java index a902e202..4c01d834 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java @@ -215,7 +215,7 @@ public class QueryGenerator { } } - //多字段排序 TODO 需要修改前端 + //多字段排序 public static void doMultiFieldsOrder(QueryWrapper queryWrapper,Map parameterMap) { String column=null,order=null; if(parameterMap!=null&& parameterMap.containsKey(ORDER_COLUMN)) { @@ -224,7 +224,6 @@ public class QueryGenerator { if(parameterMap!=null&& parameterMap.containsKey(ORDER_TYPE)) { order = parameterMap.get(ORDER_TYPE)[0]; } - log.info("排序规则>>列:" + column + ",排序方式:" + order); if (oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { //字典字段,去掉字典翻译文本后缀 if(column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) { @@ -238,12 +237,10 @@ public class QueryGenerator { // 将现有排序 _ 前端传递排序条件{....,column: 'column1,column2',order: 'desc'} 翻译成sql "column1,column2 desc" // 修改为 _ 前端传递排序条件{....,column: 'column1,column2',order: 'desc'} 翻译成sql "column1 desc,column2 desc" if (order.toUpperCase().indexOf(ORDER_TYPE_ASC)>=0) { -// queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); String columnStr = oConvertUtils.camelToUnderline(column); String[] columnArray = columnStr.split(","); queryWrapper.orderByAsc(Arrays.asList(columnArray)); } else { -// queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); String columnStr = oConvertUtils.camelToUnderline(column); String[] columnArray = columnStr.split(","); queryWrapper.orderByDesc(Arrays.asList(columnArray)); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java index ae2d237a..a8e23312 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java @@ -217,21 +217,21 @@ public class SysDepartController { * @return */ //@RequiresRoles({"admin"}) - @RequiresPermissions("sys:depart:del") - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + @RequiresPermissions("sys:depart:del") + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) - public Result delete(@RequestParam(name="id",required=true) String id) { - SysDepart sysDepart = sysDepartService.getById(id); - if(sysDepart==null) { + public Result delete(@RequestParam(name="id",required=true) String id) { + SysDepart sysDepart = sysDepartService.getById(id); + if(sysDepart==null) { return Result.error500("未找到对应实体"); - }else { - boolean ok = sysDepartService.delete(id); - if(ok) { + }else { + boolean ok = sysDepartService.delete(id); + if(ok) { return Result.OK("删除成功!"); - } - } - return Result.OK(); - } + } + } + return Result.OK(); + } /** diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java index f4c4c3dc..c3420add 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java @@ -37,6 +37,7 @@ import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; @@ -100,8 +101,6 @@ public class SysUserController { @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { Result> result = new Result>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(user, req.getParameterMap()); - //TODO 外部模拟登陆临时账号,列表不显示 - queryWrapper.ne("username","_reserve_user_external"); Page page = new Page(pageNo, pageSize); IPage pageList = sysUserService.page(page, queryWrapper); @@ -500,7 +499,7 @@ public class SysUserController { log.error(e.getMessage(), e); } } - // 批量将部门和用户信息建立关联关系 + // 批量将部门和用户信息建立关联关系 TODO 错误需修改 String departIds = sysUserExcel.getDepartIds(); if (StringUtils.isNotBlank(departIds)) { String userId = sysUserExcel.getId(); @@ -763,6 +762,7 @@ public class SysUserController { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("dep_id", depId).eq("user_id",userId); sysUserDepartService.remove(queryWrapper); + sysDepartService.deleteHeadDeptAndUserRelatedByUser(depId, userId); return Result.OK("删除成功!"); }catch(Exception e) { log.error(e.getMessage(), e); @@ -774,13 +774,19 @@ public class SysUserController { * 批量删除指定机构的用户关系 */ @RequestMapping(value = "/deleteUserInDepartBatch", method = RequestMethod.DELETE) + @Transactional public Result deleteUserInDepartBatch( @RequestParam(name="depId") String depId, @RequestParam(name="userIds",required=true) String userIds) { try { + List userIdList = new ArrayList<>(Arrays.asList(userIds.split(","))); + QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("dep_id", depId).in("user_id",Arrays.asList(userIds.split(","))); + queryWrapper.eq("dep_id", depId).in("user_id", userIdList); sysUserDepartService.remove(queryWrapper); + for (String userId : userIdList){ + sysDepartService.deleteHeadDeptAndUserRelatedByUser(depId, userId); + } return Result.OK("删除成功!"); }catch(Exception e) { log.error(e.getMessage(), e); @@ -1170,6 +1176,7 @@ public class SysUserController { } return result; } + /** * 根据userid获取用户信息和部门员工信息 * @@ -1185,7 +1192,7 @@ public class SysUserController { Integer identity = sysUser.getUserIdentity(); map.put("sysUser",sysUser); if(identity!=null && identity==2){ - //获取部门用户信息 + //获取部门用户信息 TODO错误,需修改 String departIds = sysUser.getDepartIds(); if(StringUtils.isNotBlank(departIds)){ List departIdList = Arrays.asList(departIds.split(",")); @@ -1195,6 +1202,7 @@ public class SysUserController { } return Result.OK(map); } + /** * 移动端查询部门用户信息 * @param departId diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java index f27d5aec..2672718f 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java @@ -1,10 +1,16 @@ package com.jero.modules.system.service; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.jero.common.system.vo.SysDepartTreeModel; import com.jero.modules.system.entity.SysDepart; +import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.model.DepartIdModel; + +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -69,12 +75,18 @@ public interface ISysDepartService extends IService{ */ boolean delete(String id); + /** + * 删除部门的时候同步删除用户对应的负责部门 + * @param id + */ + void deleteHeadDeptAndUserRelatedByUser(String id, String userIds); + /** * 查询SysDepart集合 * @param userId * @return */ - public List queryUserDeparts(String userId); + List queryUserDeparts(String userId); /** * 根据用户名查询部门 @@ -86,7 +98,7 @@ public interface ISysDepartService extends IService{ /** * 根据部门id批量删除并删除其可能存在的子级部门 - * @param id + * @param ids * @return */ void deleteBatchWithChildren(List ids); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java index cb496739..8e922644 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java @@ -2,6 +2,7 @@ package com.jero.modules.system.service.impl; import java.util.*; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -41,9 +42,13 @@ public class SysDepartServiceImpl extends ServiceImpl queryMyDeptTreeList(String departIds) { //根据部门id获取所负责部门 @@ -221,6 +226,10 @@ public class SysDepartServiceImpl extends ServiceImpl().in(SysUserDepart::getDepId,idList)); //根据部门id删除部门授权 departPermissionMapper.delete(new LambdaQueryWrapper().in(SysDepartPermission::getDepartId,idList)); + //删除人员负责部门 + for (String id : ids){ + deleteHeadDeptAndUserRelated(id); + } } @Override @@ -288,16 +297,58 @@ public class SysDepartServiceImpl extends ServiceImpl idList = new ArrayList<>(); idList.add(id); this.checkChildrenExists(id, idList); - //清空部门树内存 - //FindsDepartsChildrenUtil.clearDepartIdModel(); boolean ok = this.removeByIds(idList); //根据部门id删除用户与部门关系 userDepartMapper.delete(new LambdaQueryWrapper().in(SysUserDepart::getDepId,idList)); //根据部门id删除部门授权 departPermissionMapper.delete(new LambdaQueryWrapper().in(SysDepartPermission::getDepartId,idList)); + //查找用户中的上级部门关联的数据并删除 + deleteHeadDeptAndUserRelated(id); + return ok; } + /** + * 删除部门的时候同步删除用户对应的负责部门 + * @param id + */ + private void deleteHeadDeptAndUserRelated(String id) { + List containParentDeptUser = userMapper.selectList(new LambdaQueryWrapper().like(SysUser::getDepartIds, id)); + this.deleteHeadDpetFromUserInfo(id, containParentDeptUser); + } + + /** + * 删除部门的时候同步删除用户对应的负责部门 + * @param id + */ + public void deleteHeadDeptAndUserRelatedByUser(String id, String userIds) { + List containParentDeptUser = userMapper.selectList(new LambdaQueryWrapper().like(SysUser::getDepartIds, id).in(SysUser::getId, userIds)); + this.deleteHeadDpetFromUserInfo(id, containParentDeptUser); + } + + /** + * 根据部门id和用户信息进行数据的删除处理 + * @param id + * @param containParentDeptUser + */ + private void deleteHeadDpetFromUserInfo(String id, List containParentDeptUser) { + for (SysUser sysUser : containParentDeptUser) { + List headDepartList = new ArrayList(Arrays.asList(sysUser.getDepartIds().split(","))); + // 遍历负责部门的list,如果存在本次删除id,则从list中移除 + int headDepartNum = headDepartList.size(); + for (int i = 0; i < headDepartNum; i++) { + String next = headDepartList.get(i); + if (next.equals(id)) { + headDepartList.remove(i); + break; + } + } + + sysUser.setDepartIds(StrUtil.join(",", headDepartList)); + userMapper.updateById(sysUser); + } + } + /** * delete 方法调用 * @param id