【添加】处理取消关联或删除部门,但负责部门未同步删除的情况

This commit is contained in:
zer0Black
2022-04-17 20:36:12 +08:00
parent 2ebb7bd20a
commit 7ce4d0547c
5 changed files with 93 additions and 25 deletions
@@ -215,7 +215,7 @@ public class QueryGenerator {
}
}
//多字段排序 TODO 需要修改前端
//多字段排序
public static void doMultiFieldsOrder(QueryWrapper<?> queryWrapper,Map<String, String[]> 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));
@@ -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<Object> delete(@RequestParam(name="id",required=true) String id) {
SysDepart sysDepart = sysDepartService.getById(id);
if(sysDepart==null) {
public Result<Object> 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();
}
/**
@@ -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<IPage<SysUser>> result = new Result<IPage<SysUser>>();
QueryWrapper<SysUser> queryWrapper = QueryGenerator.initQueryWrapper(user, req.getParameterMap());
//TODO 外部模拟登陆临时账号,列表不显示
queryWrapper.ne("username","_reserve_user_external");
Page<SysUser> page = new Page<SysUser>(pageNo, pageSize);
IPage<SysUser> 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<SysUserDepart> queryWrapper = new QueryWrapper<SysUserDepart>();
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<Object> deleteUserInDepartBatch(
@RequestParam(name="depId") String depId,
@RequestParam(name="userIds",required=true) String userIds) {
try {
List<String> userIdList = new ArrayList<>(Arrays.asList(userIds.split(",")));
QueryWrapper<SysUserDepart> queryWrapper = new QueryWrapper<SysUserDepart>();
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<String> departIdList = Arrays.asList(departIds.split(","));
@@ -1195,6 +1202,7 @@ public class SysUserController {
}
return Result.OK(map);
}
/**
* 移动端查询部门用户信息
* @param departId
@@ -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<SysDepart>{
*/
boolean delete(String id);
/**
* 删除部门的时候同步删除用户对应的负责部门
* @param id
*/
void deleteHeadDeptAndUserRelatedByUser(String id, String userIds);
/**
* 查询SysDepart集合
* @param userId
* @return
*/
public List<SysDepart> queryUserDeparts(String userId);
List<SysDepart> queryUserDeparts(String userId);
/**
* 根据用户名查询部门
@@ -86,7 +98,7 @@ public interface ISysDepartService extends IService<SysDepart>{
/**
* 根据部门id批量删除并删除其可能存在的子级部门
* @param id
* @param ids
* @return
*/
void deleteBatchWithChildren(List<String> ids);
@@ -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<SysDepartMapper, SysDepart
@Autowired
private SysUserDepartMapper userDepartMapper;
@Autowired
private SysDepartPermissionMapper departPermissionMapper;
@Autowired
private SysUserMapper userMapper;
@Override
public List<SysDepartTreeModel> queryMyDeptTreeList(String departIds) {
//根据部门id获取所负责部门
@@ -221,6 +226,10 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
userDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getDepId,idList));
//根据部门id删除部门授权
departPermissionMapper.delete(new LambdaQueryWrapper<SysDepartPermission>().in(SysDepartPermission::getDepartId,idList));
//删除人员负责部门
for (String id : ids){
deleteHeadDeptAndUserRelated(id);
}
}
@Override
@@ -288,16 +297,58 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
List<String> idList = new ArrayList<>();
idList.add(id);
this.checkChildrenExists(id, idList);
//清空部门树内存
//FindsDepartsChildrenUtil.clearDepartIdModel();
boolean ok = this.removeByIds(idList);
//根据部门id删除用户与部门关系
userDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getDepId,idList));
//根据部门id删除部门授权
departPermissionMapper.delete(new LambdaQueryWrapper<SysDepartPermission>().in(SysDepartPermission::getDepartId,idList));
//查找用户中的上级部门关联的数据并删除
deleteHeadDeptAndUserRelated(id);
return ok;
}
/**
* 删除部门的时候同步删除用户对应的负责部门
* @param id
*/
private void deleteHeadDeptAndUserRelated(String id) {
List<SysUser> containParentDeptUser = userMapper.selectList(new LambdaQueryWrapper<SysUser>().like(SysUser::getDepartIds, id));
this.deleteHeadDpetFromUserInfo(id, containParentDeptUser);
}
/**
* 删除部门的时候同步删除用户对应的负责部门
* @param id
*/
public void deleteHeadDeptAndUserRelatedByUser(String id, String userIds) {
List<SysUser> containParentDeptUser = userMapper.selectList(new LambdaQueryWrapper<SysUser>().like(SysUser::getDepartIds, id).in(SysUser::getId, userIds));
this.deleteHeadDpetFromUserInfo(id, containParentDeptUser);
}
/**
* 根据部门id和用户信息进行数据的删除处理
* @param id
* @param containParentDeptUser
*/
private void deleteHeadDpetFromUserInfo(String id, List<SysUser> containParentDeptUser) {
for (SysUser sysUser : containParentDeptUser) {
List<String> headDepartList = new ArrayList<String>(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