feat(department): 增加部门搜索显示所有选项及级联禁用功能
- 为部门搜索接口添加showAll参数,支持显示全部部门包括禁用部门 - 部门服务层searchSimple方法新增showAll参数,支持过滤禁用状态 - 在部门启用状态更新时,新增逻辑批量禁用所有子部门及其关联用户 - 部门数据访问层实现中,添加disableWithChildren方法实现对子部门和用户的级联禁用 - 部门树形结构查询和简单信息查询中,增加对showAll参数的支持,控制是否过滤禁用数据 - 对方法调用链进行参数调整,确保新增showAll参数正确传递和处理 - 保持部门列表及子部门查询结果按ID升序排序,提高结果稳定性
This commit is contained in:
parent
73c2ca6440
commit
a64278010a
|
|
@ -84,9 +84,11 @@ public class DepartmentController extends BaseController {
|
||||||
/**
|
/**
|
||||||
* 搜索部门返回基本信息
|
* 搜索部门返回基本信息
|
||||||
* @param key 部门名称或代码
|
* @param key 部门名称或代码
|
||||||
|
* @param showAll 是否显示所有部门,默认false(不显示禁用的部门)
|
||||||
*/
|
*/
|
||||||
@GetMapping("searchSimple")
|
@GetMapping("searchSimple")
|
||||||
public ApiResult<List<DepartmentSimpleVO>> searchSimple(@RequestParam(required = false) String key) {
|
public ApiResult<List<DepartmentSimpleVO>> searchSimple(@RequestParam(required = false) String key
|
||||||
return ApiResult.success(departmentControllerService.searchSimple(key));
|
, @RequestParam(required = false,defaultValue = "false") Boolean showAll) {
|
||||||
|
return ApiResult.success(departmentControllerService.searchSimple(key,showAll));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -48,6 +48,7 @@ public class DepartmentControllerService {
|
||||||
deptService.add(request);
|
deptService.add(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
public void update(DepartmentUpdateQO request) {
|
public void update(DepartmentUpdateQO request) {
|
||||||
Department department = deptService.getById(request.getId());
|
Department department = deptService.getById(request.getId());
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(department)).throwMessage("部门不存在");
|
VUtil.trueThrowBusinessError(Objects.isNull(department)).throwMessage("部门不存在");
|
||||||
|
|
@ -118,18 +119,24 @@ public class DepartmentControllerService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DepartmentSimpleVO> searchSimple(String key) {
|
public List<DepartmentSimpleVO> searchSimple(String key,Boolean showAll) {
|
||||||
return deptService.searchSimple(key);
|
return deptService.searchSimple(key,showAll);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
public void enable(@Valid EnableQO request) {
|
public void enable(@Valid EnableQO request) {
|
||||||
Department department = deptService.getById(request.getId());
|
Department department = deptService.getById(request.getId());
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(department)).throwMessage("部门不存在");
|
VUtil.trueThrowBusinessError(Objects.isNull(department)).throwMessage("部门不存在");
|
||||||
VUtil.trueThrowBusinessError(Objects.equals(department.getSource(), 1)).throwMessage("不能禁用启用从AD域同步的部门信息");
|
|
||||||
deptService.updateById(new Department()
|
deptService.updateById(new Department()
|
||||||
|
.setId(request.getId())
|
||||||
.setEnable(request.getEnable())
|
.setEnable(request.getEnable())
|
||||||
.setUpdateBy(UserUtil.getUserName())
|
.setUpdateBy(UserUtil.getUserName())
|
||||||
.setUpdateTime(LocalDateTime.now()));
|
.setUpdateTime(LocalDateTime.now()));
|
||||||
|
|
||||||
|
// 如果修改为禁用状态,级联禁用所有子部门及对应用户
|
||||||
|
if (Boolean.FALSE.equals(request.getEnable())) {
|
||||||
|
deptService.disableWithChildren(request.getId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public PageData<DepartmentVO> search(DepartmentSearchQO request) {
|
public PageData<DepartmentVO> search(DepartmentSearchQO request) {
|
||||||
|
|
|
||||||
|
|
@ -32,9 +32,11 @@ public interface IDepartmentService extends IService<Department> {
|
||||||
|
|
||||||
void delete(Long id);
|
void delete(Long id);
|
||||||
|
|
||||||
List<DepartmentSimpleVO> searchSimple(String key);
|
List<DepartmentSimpleVO> searchSimple(String key,Boolean showAll);
|
||||||
|
|
||||||
PageData<DepartmentVO> search(DepartmentSearchQO request);
|
PageData<DepartmentVO> search(DepartmentSearchQO request);
|
||||||
|
|
||||||
Set<Long> getWithChildren(Long deptId);
|
Set<Long> getWithChildren(Long deptId);
|
||||||
|
|
||||||
|
void disableWithChildren(Long deptId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,12 +11,17 @@ import com.nflg.wms.common.pojo.qo.DepartmentSearchQO;
|
||||||
import com.nflg.wms.common.pojo.qo.DepartmentUpdateQO;
|
import com.nflg.wms.common.pojo.qo.DepartmentUpdateQO;
|
||||||
import com.nflg.wms.common.pojo.vo.DepartmentSimpleVO;
|
import com.nflg.wms.common.pojo.vo.DepartmentSimpleVO;
|
||||||
import com.nflg.wms.common.pojo.vo.DepartmentVO;
|
import com.nflg.wms.common.pojo.vo.DepartmentVO;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.nflg.wms.common.util.UserUtil;
|
import com.nflg.wms.common.util.UserUtil;
|
||||||
import com.nflg.wms.common.util.VUtil;
|
import com.nflg.wms.common.util.VUtil;
|
||||||
import com.nflg.wms.repository.entity.Department;
|
import com.nflg.wms.repository.entity.Department;
|
||||||
|
import com.nflg.wms.repository.entity.User;
|
||||||
|
import com.nflg.wms.repository.entity.UserInterior;
|
||||||
import com.nflg.wms.repository.mapper.DepartmentMapper;
|
import com.nflg.wms.repository.mapper.DepartmentMapper;
|
||||||
import com.nflg.wms.repository.service.IAuditLogService;
|
import com.nflg.wms.repository.service.IAuditLogService;
|
||||||
import com.nflg.wms.repository.service.IDepartmentService;
|
import com.nflg.wms.repository.service.IDepartmentService;
|
||||||
|
import com.nflg.wms.repository.service.IUserInteriorService;
|
||||||
|
import com.nflg.wms.repository.service.IUserService;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
@ -39,6 +44,12 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
|
||||||
@Resource
|
@Resource
|
||||||
private IAuditLogService auditLogService;
|
private IAuditLogService auditLogService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IUserService userService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IUserInteriorService userInteriorService;
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public void add(DepartmentAddQO request) {
|
public void add(DepartmentAddQO request) {
|
||||||
|
|
@ -84,6 +95,11 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
|
||||||
// .setUpdateTime(LocalDateTime.now());
|
// .setUpdateTime(LocalDateTime.now());
|
||||||
updateById(dept2);
|
updateById(dept2);
|
||||||
auditLogService.addUpdate(Department.class, dept1, dept2, UserUtil.getUserName());
|
auditLogService.addUpdate(Department.class, dept1, dept2, UserUtil.getUserName());
|
||||||
|
|
||||||
|
// 如果修改为禁用状态,级联禁用所有子部门及对应用户
|
||||||
|
if (Boolean.FALSE.equals(request.getEnable())) {
|
||||||
|
disableWithChildren(dept1.getId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -103,11 +119,11 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<DepartmentSimpleVO> searchSimple(String key) {
|
public List<DepartmentSimpleVO> searchSimple(String key, Boolean showAll) {
|
||||||
if (StrUtil.isBlank(key)) {
|
if (StrUtil.isBlank(key)) {
|
||||||
return getAllSimple();
|
return getAllSimple(showAll);
|
||||||
} else {
|
} else {
|
||||||
return searchSimpleByKey(key);
|
return searchSimpleByKey(key, showAll);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -124,6 +140,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
|
||||||
List<Department> departments = lambdaQuery()
|
List<Department> departments = lambdaQuery()
|
||||||
.like(StrUtil.isNotBlank(request.getName()), Department::getName, request.getName())
|
.like(StrUtil.isNotBlank(request.getName()), Department::getName, request.getName())
|
||||||
.like(StrUtil.isNotBlank(request.getNo()), Department::getSourceId, request.getNo())
|
.like(StrUtil.isNotBlank(request.getNo()), Department::getSourceId, request.getNo())
|
||||||
|
.orderByAsc(Department::getId)
|
||||||
.list();
|
.list();
|
||||||
if (CollectionUtil.isEmpty(departments)) {
|
if (CollectionUtil.isEmpty(departments)) {
|
||||||
return new PageData<>();
|
return new PageData<>();
|
||||||
|
|
@ -139,6 +156,42 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
|
||||||
.setItems(datas);
|
.setItems(datas);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
@Override
|
||||||
|
public void disableWithChildren(Long deptId) {
|
||||||
|
// 获取当前部门及所有子部门ID
|
||||||
|
Set<Long> allDeptIds = getWithChildren(deptId);
|
||||||
|
Set<Long> childDeptIds = new HashSet<>(allDeptIds);
|
||||||
|
childDeptIds.remove(deptId);
|
||||||
|
|
||||||
|
// 批量禁用子部门
|
||||||
|
if (CollectionUtil.isNotEmpty(childDeptIds)) {
|
||||||
|
lambdaUpdate()
|
||||||
|
.set(Department::getEnable, false)
|
||||||
|
.in(Department::getId, childDeptIds)
|
||||||
|
.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询所有相关部门下的用户ID
|
||||||
|
List<Long> userIds = userInteriorService.lambdaQuery()
|
||||||
|
.select(UserInterior::getUserId)
|
||||||
|
.in(UserInterior::getDeptId, allDeptIds)
|
||||||
|
.list()
|
||||||
|
.stream()
|
||||||
|
.map(UserInterior::getUserId)
|
||||||
|
.distinct()
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 批量禁用用户
|
||||||
|
if (CollectionUtil.isNotEmpty(userIds)) {
|
||||||
|
userService.update(
|
||||||
|
new LambdaUpdateWrapper<User>()
|
||||||
|
.set(User::getState, 2)
|
||||||
|
.in(User::getId, userIds)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<Long> getWithChildren(Long deptId) {
|
public Set<Long> getWithChildren(Long deptId) {
|
||||||
Set<Long> ids = lambdaQuery()
|
Set<Long> ids = lambdaQuery()
|
||||||
|
|
@ -155,9 +208,10 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
|
||||||
return ids;
|
return ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<DepartmentSimpleVO> searchSimpleByKey(String key) {
|
private List<DepartmentSimpleVO> searchSimpleByKey(String key, Boolean showAll) {
|
||||||
List<Department> departments = lambdaQuery()
|
List<Department> departments = lambdaQuery()
|
||||||
.select(Department::getId, Department::getParentId, Department::getName)
|
.select(Department::getId, Department::getParentId, Department::getName)
|
||||||
|
.eq(!Objects.equals(showAll, true), Department::getEnable, true)
|
||||||
.like(Department::getName, key)
|
.like(Department::getName, key)
|
||||||
.list();
|
.list();
|
||||||
if (CollectionUtil.isEmpty(departments)) {
|
if (CollectionUtil.isEmpty(departments)) {
|
||||||
|
|
@ -213,6 +267,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
|
||||||
List<Department> departments = lambdaQuery()
|
List<Department> departments = lambdaQuery()
|
||||||
.eq(Objects.isNull(request.getDeptId()), Department::getParentId, 0L)
|
.eq(Objects.isNull(request.getDeptId()), Department::getParentId, 0L)
|
||||||
.eq(Objects.nonNull(request.getDeptId()), Department::getId, request.getDeptId())
|
.eq(Objects.nonNull(request.getDeptId()), Department::getId, request.getDeptId())
|
||||||
|
.orderByAsc(Department::getId)
|
||||||
.list();
|
.list();
|
||||||
List<DepartmentVO> datas = Convert.toList(DepartmentVO.class, departments);
|
List<DepartmentVO> datas = Convert.toList(DepartmentVO.class, departments);
|
||||||
datas = datas.stream().skip((long) (request.getPage() - 1) * request.getPageSize()).limit(request.getPageSize()).toList();
|
datas = datas.stream().skip((long) (request.getPage() - 1) * request.getPageSize()).limit(request.getPageSize()).toList();
|
||||||
|
|
@ -229,6 +284,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
|
||||||
datas.forEach(dept -> {
|
datas.forEach(dept -> {
|
||||||
List<Department> departments = lambdaQuery()
|
List<Department> departments = lambdaQuery()
|
||||||
.eq(Department::getParentId, dept.getId())
|
.eq(Department::getParentId, dept.getId())
|
||||||
|
.orderByAsc(Department::getId)
|
||||||
.list();
|
.list();
|
||||||
if (CollectionUtil.isNotEmpty(departments)) {
|
if (CollectionUtil.isNotEmpty(departments)) {
|
||||||
List<DepartmentVO> children = Convert.toList(DepartmentVO.class, departments);
|
List<DepartmentVO> children = Convert.toList(DepartmentVO.class, departments);
|
||||||
|
|
@ -238,24 +294,29 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<DepartmentSimpleVO> getAllSimple() {
|
private List<DepartmentSimpleVO> getAllSimple(Boolean showAll) {
|
||||||
List<Department> departments = lambdaQuery()
|
List<Department> departments = lambdaQuery()
|
||||||
.eq(Department::getParentId, 0L)
|
.eq(Department::getParentId, 0L)
|
||||||
|
.eq(Department::getEnable, true)
|
||||||
|
.eq(!Objects.equals(showAll, true), Department::getEnable, true)
|
||||||
|
.orderByAsc(Department::getId)
|
||||||
.list();
|
.list();
|
||||||
List<DepartmentSimpleVO> datas = Convert.toList(DepartmentSimpleVO.class, departments);
|
List<DepartmentSimpleVO> datas = Convert.toList(DepartmentSimpleVO.class, departments);
|
||||||
bindSimpleChildren(datas);
|
bindSimpleChildren(datas, showAll);
|
||||||
return datas;
|
return datas;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bindSimpleChildren(List<DepartmentSimpleVO> datas) {
|
private void bindSimpleChildren(List<DepartmentSimpleVO> datas,Boolean showAll) {
|
||||||
datas.forEach(dept -> {
|
datas.forEach(dept -> {
|
||||||
List<Department> departments = lambdaQuery()
|
List<Department> departments = lambdaQuery()
|
||||||
.eq(Department::getParentId, dept.getId())
|
.eq(Department::getParentId, dept.getId())
|
||||||
|
.eq(!Objects.equals(showAll, true), Department::getEnable, true)
|
||||||
|
.orderByAsc(Department::getId)
|
||||||
.list();
|
.list();
|
||||||
if (CollectionUtil.isNotEmpty(departments)) {
|
if (CollectionUtil.isNotEmpty(departments)) {
|
||||||
List<DepartmentSimpleVO> children = Convert.toList(DepartmentSimpleVO.class, departments);
|
List<DepartmentSimpleVO> children = Convert.toList(DepartmentSimpleVO.class, departments);
|
||||||
dept.setChildren(children);
|
dept.setChildren(children);
|
||||||
this.bindSimpleChildren(children);
|
this.bindSimpleChildren(children, showAll);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue