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

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) { public static void doMultiFieldsOrder(QueryWrapper<?> queryWrapper,Map<String, String[]> parameterMap) {
String column=null,order=null; String column=null,order=null;
if(parameterMap!=null&& parameterMap.containsKey(ORDER_COLUMN)) { if(parameterMap!=null&& parameterMap.containsKey(ORDER_COLUMN)) {
@@ -224,7 +224,6 @@ public class QueryGenerator {
if(parameterMap!=null&& parameterMap.containsKey(ORDER_TYPE)) { if(parameterMap!=null&& parameterMap.containsKey(ORDER_TYPE)) {
order = parameterMap.get(ORDER_TYPE)[0]; order = parameterMap.get(ORDER_TYPE)[0];
} }
log.info("排序规则>>列:" + column + ",排序方式:" + order);
if (oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { if (oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) {
//字典字段,去掉字典翻译文本后缀 //字典字段,去掉字典翻译文本后缀
if(column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) { 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,column2 desc"
// 修改为 _ 前端传递排序条件{....,column: 'column1,column2',order: 'desc'} 翻译成sql "column1 desc,column2 desc" // 修改为 _ 前端传递排序条件{....,column: 'column1,column2',order: 'desc'} 翻译成sql "column1 desc,column2 desc"
if (order.toUpperCase().indexOf(ORDER_TYPE_ASC)>=0) { if (order.toUpperCase().indexOf(ORDER_TYPE_ASC)>=0) {
// queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column));
String columnStr = oConvertUtils.camelToUnderline(column); String columnStr = oConvertUtils.camelToUnderline(column);
String[] columnArray = columnStr.split(","); String[] columnArray = columnStr.split(",");
queryWrapper.orderByAsc(Arrays.asList(columnArray)); queryWrapper.orderByAsc(Arrays.asList(columnArray));
} else { } else {
// queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column));
String columnStr = oConvertUtils.camelToUnderline(column); String columnStr = oConvertUtils.camelToUnderline(column);
String[] columnArray = columnStr.split(","); String[] columnArray = columnStr.split(",");
queryWrapper.orderByDesc(Arrays.asList(columnArray)); queryWrapper.orderByDesc(Arrays.asList(columnArray));
@@ -217,21 +217,21 @@ public class SysDepartController {
* @return * @return
*/ */
//@RequiresRoles({"admin"}) //@RequiresRoles({"admin"})
@RequiresPermissions("sys:depart:del") @RequiresPermissions("sys:depart:del")
@RequestMapping(value = "/delete", method = RequestMethod.DELETE) @RequestMapping(value = "/delete", method = RequestMethod.DELETE)
@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
public Result<Object> delete(@RequestParam(name="id",required=true) String id) { public Result<Object> delete(@RequestParam(name="id",required=true) String id) {
SysDepart sysDepart = sysDepartService.getById(id); SysDepart sysDepart = sysDepartService.getById(id);
if(sysDepart==null) { if(sysDepart==null) {
return Result.error500("未找到对应实体"); return Result.error500("未找到对应实体");
}else { }else {
boolean ok = sysDepartService.delete(id); boolean ok = sysDepartService.delete(id);
if(ok) { if(ok) {
return Result.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.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartHttpServletRequest;
@@ -100,8 +101,6 @@ public class SysUserController {
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) {
Result<IPage<SysUser>> result = new Result<IPage<SysUser>>(); Result<IPage<SysUser>> result = new Result<IPage<SysUser>>();
QueryWrapper<SysUser> queryWrapper = QueryGenerator.initQueryWrapper(user, req.getParameterMap()); QueryWrapper<SysUser> queryWrapper = QueryGenerator.initQueryWrapper(user, req.getParameterMap());
//TODO 外部模拟登陆临时账号,列表不显示
queryWrapper.ne("username","_reserve_user_external");
Page<SysUser> page = new Page<SysUser>(pageNo, pageSize); Page<SysUser> page = new Page<SysUser>(pageNo, pageSize);
IPage<SysUser> pageList = sysUserService.page(page, queryWrapper); IPage<SysUser> pageList = sysUserService.page(page, queryWrapper);
@@ -500,7 +499,7 @@ public class SysUserController {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
} }
// 批量将部门和用户信息建立关联关系 // 批量将部门和用户信息建立关联关系 TODO 错误需修改
String departIds = sysUserExcel.getDepartIds(); String departIds = sysUserExcel.getDepartIds();
if (StringUtils.isNotBlank(departIds)) { if (StringUtils.isNotBlank(departIds)) {
String userId = sysUserExcel.getId(); String userId = sysUserExcel.getId();
@@ -763,6 +762,7 @@ public class SysUserController {
QueryWrapper<SysUserDepart> queryWrapper = new QueryWrapper<SysUserDepart>(); QueryWrapper<SysUserDepart> queryWrapper = new QueryWrapper<SysUserDepart>();
queryWrapper.eq("dep_id", depId).eq("user_id",userId); queryWrapper.eq("dep_id", depId).eq("user_id",userId);
sysUserDepartService.remove(queryWrapper); sysUserDepartService.remove(queryWrapper);
sysDepartService.deleteHeadDeptAndUserRelatedByUser(depId, userId);
return Result.OK("删除成功!"); return Result.OK("删除成功!");
}catch(Exception e) { }catch(Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
@@ -774,13 +774,19 @@ public class SysUserController {
* 批量删除指定机构的用户关系 * 批量删除指定机构的用户关系
*/ */
@RequestMapping(value = "/deleteUserInDepartBatch", method = RequestMethod.DELETE) @RequestMapping(value = "/deleteUserInDepartBatch", method = RequestMethod.DELETE)
@Transactional
public Result<Object> deleteUserInDepartBatch( public Result<Object> deleteUserInDepartBatch(
@RequestParam(name="depId") String depId, @RequestParam(name="depId") String depId,
@RequestParam(name="userIds",required=true) String userIds) { @RequestParam(name="userIds",required=true) String userIds) {
try { try {
List<String> userIdList = new ArrayList<>(Arrays.asList(userIds.split(",")));
QueryWrapper<SysUserDepart> queryWrapper = new QueryWrapper<SysUserDepart>(); 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); sysUserDepartService.remove(queryWrapper);
for (String userId : userIdList){
sysDepartService.deleteHeadDeptAndUserRelatedByUser(depId, userId);
}
return Result.OK("删除成功!"); return Result.OK("删除成功!");
}catch(Exception e) { }catch(Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
@@ -1170,6 +1176,7 @@ public class SysUserController {
} }
return result; return result;
} }
/** /**
* 根据userid获取用户信息和部门员工信息 * 根据userid获取用户信息和部门员工信息
* *
@@ -1185,7 +1192,7 @@ public class SysUserController {
Integer identity = sysUser.getUserIdentity(); Integer identity = sysUser.getUserIdentity();
map.put("sysUser",sysUser); map.put("sysUser",sysUser);
if(identity!=null && identity==2){ if(identity!=null && identity==2){
//获取部门用户信息 //获取部门用户信息 TODO错误,需修改
String departIds = sysUser.getDepartIds(); String departIds = sysUser.getDepartIds();
if(StringUtils.isNotBlank(departIds)){ if(StringUtils.isNotBlank(departIds)){
List<String> departIdList = Arrays.asList(departIds.split(",")); List<String> departIdList = Arrays.asList(departIds.split(","));
@@ -1195,6 +1202,7 @@ public class SysUserController {
} }
return Result.OK(map); return Result.OK(map);
} }
/** /**
* 移动端查询部门用户信息 * 移动端查询部门用户信息
* @param departId * @param departId
@@ -1,10 +1,16 @@
package com.jero.modules.system.service; package com.jero.modules.system.service;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.common.system.vo.SysDepartTreeModel; import com.jero.common.system.vo.SysDepartTreeModel;
import com.jero.modules.system.entity.SysDepart; import com.jero.modules.system.entity.SysDepart;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.model.DepartIdModel; import com.jero.modules.system.model.DepartIdModel;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**
@@ -69,12 +75,18 @@ public interface ISysDepartService extends IService<SysDepart>{
*/ */
boolean delete(String id); boolean delete(String id);
/**
* 删除部门的时候同步删除用户对应的负责部门
* @param id
*/
void deleteHeadDeptAndUserRelatedByUser(String id, String userIds);
/** /**
* 查询SysDepart集合 * 查询SysDepart集合
* @param userId * @param userId
* @return * @return
*/ */
public List<SysDepart> queryUserDeparts(String userId); List<SysDepart> queryUserDeparts(String userId);
/** /**
* 根据用户名查询部门 * 根据用户名查询部门
@@ -86,7 +98,7 @@ public interface ISysDepartService extends IService<SysDepart>{
/** /**
* 根据部门id批量删除并删除其可能存在的子级部门 * 根据部门id批量删除并删除其可能存在的子级部门
* @param id * @param ids
* @return * @return
*/ */
void deleteBatchWithChildren(List<String> ids); void deleteBatchWithChildren(List<String> ids);
@@ -2,6 +2,7 @@ package com.jero.modules.system.service.impl;
import java.util.*; import java.util.*;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -41,9 +42,13 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
@Autowired @Autowired
private SysUserDepartMapper userDepartMapper; private SysUserDepartMapper userDepartMapper;
@Autowired @Autowired
private SysDepartPermissionMapper departPermissionMapper; private SysDepartPermissionMapper departPermissionMapper;
@Autowired
private SysUserMapper userMapper;
@Override @Override
public List<SysDepartTreeModel> queryMyDeptTreeList(String departIds) { public List<SysDepartTreeModel> queryMyDeptTreeList(String departIds) {
//根据部门id获取所负责部门 //根据部门id获取所负责部门
@@ -221,6 +226,10 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
userDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getDepId,idList)); userDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getDepId,idList));
//根据部门id删除部门授权 //根据部门id删除部门授权
departPermissionMapper.delete(new LambdaQueryWrapper<SysDepartPermission>().in(SysDepartPermission::getDepartId,idList)); departPermissionMapper.delete(new LambdaQueryWrapper<SysDepartPermission>().in(SysDepartPermission::getDepartId,idList));
//删除人员负责部门
for (String id : ids){
deleteHeadDeptAndUserRelated(id);
}
} }
@Override @Override
@@ -288,16 +297,58 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
List<String> idList = new ArrayList<>(); List<String> idList = new ArrayList<>();
idList.add(id); idList.add(id);
this.checkChildrenExists(id, idList); this.checkChildrenExists(id, idList);
//清空部门树内存
//FindsDepartsChildrenUtil.clearDepartIdModel();
boolean ok = this.removeByIds(idList); boolean ok = this.removeByIds(idList);
//根据部门id删除用户与部门关系 //根据部门id删除用户与部门关系
userDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getDepId,idList)); userDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getDepId,idList));
//根据部门id删除部门授权 //根据部门id删除部门授权
departPermissionMapper.delete(new LambdaQueryWrapper<SysDepartPermission>().in(SysDepartPermission::getDepartId,idList)); departPermissionMapper.delete(new LambdaQueryWrapper<SysDepartPermission>().in(SysDepartPermission::getDepartId,idList));
//查找用户中的上级部门关联的数据并删除
deleteHeadDeptAndUserRelated(id);
return ok; 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 方法调用 * delete 方法调用
* @param id * @param id