feat(approval): 完善审批流程并新增部门管理功能

- 修改审批任务服务接口返回类型为Map以支持复杂数据结构
- 新增WMS部门管理模块,包括实体、业务对象、控制器和实现类
- 添加部门树形结构支持和部门负责人管理功能
- 更新审批流程逻辑,集成部门领导审批机制
- 重构审批任务查询方法以关联审批详情和申请人信息
- 添加部门ID字段到请假和外出申请相关实体中
- 优化多级审批流程,支持基于部门层级的审批链路
- 移除废弃的导入语句并整理代码结构
This commit is contained in:
2026-03-02 14:41:43 +08:00
parent f47e1f529c
commit 05447c21ef
18 changed files with 628 additions and 52 deletions

View File

@@ -14,6 +14,8 @@ import com.klp.common.core.service.UserService;
import com.klp.common.helper.LoginHelper;
import com.klp.common.utils.StringUtils;
import com.klp.domain.WmsApprovalTask;
import com.klp.domain.WmsDept;
import com.klp.mapper.*;
import com.klp.system.mapper.SysDeptMapper;
import com.klp.system.mapper.SysUserMapper;
import com.klp.system.service.ISysUserService;
@@ -25,8 +27,6 @@ import com.klp.domain.vo.WmsApprovalVo;
import com.klp.domain.WmsApproval;
import com.klp.domain.bo.WmsApprovalTaskBo;
import com.klp.domain.vo.WmsApprovalTaskVo;
import com.klp.mapper.WmsApprovalMapper;
import com.klp.mapper.WmsApprovalTaskMapper;
import com.klp.service.IWmsApprovalService;
import com.klp.service.IWmsApprovalTaskService;
@@ -34,8 +34,6 @@ import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import com.klp.mapper.WmsLeaveRequestMapper;
import com.klp.mapper.WmsOutRequestMapper;
import com.klp.domain.vo.WmsLeaveRequestVo;
import com.klp.domain.vo.WmsOutRequestVo;
import com.klp.domain.WmsLeaveRequest;
@@ -55,7 +53,7 @@ public class WmsApprovalServiceImpl implements IWmsApprovalService {
private final WmsLeaveRequestMapper leaveRequestMapper;
private final WmsOutRequestMapper outRequestMapper;
private final ISysUserService userService;
private final SysDeptMapper deptMapper;
private final WmsDeptMapper wmsDeptMapper;
private final SysUserMapper userMapper;
/**
@@ -262,13 +260,13 @@ public class WmsApprovalServiceImpl implements IWmsApprovalService {
bo.setApprovalId(add.getApprovalId());
if ("leave".equals(add.getApplyType()) && add.getApplyId() != null) {
createApprovalTasks(add.getApprovalId(), add.getApplyId(), add.getApplyType(),add.getApprovalType());
createApprovalTasks(add.getApprovalId(), add.getApplyId(), add.getApplyType(), add.getApprovalType(), bo.getDeptId());
}
}
return flag;
}
private void createApprovalTasks(Long approvalId, Long applyId, String applyType, String approvalType) {
private void createApprovalTasks(Long approvalId, Long applyId, String applyType, String approvalType, Long deptId) {
if (!"leave".equals(applyType)) {
return;
}
@@ -285,7 +283,7 @@ public class WmsApprovalServiceImpl implements IWmsApprovalService {
updateApproval.setApprovalType(approvalType);
if (isMultiLevel) {
List<Long> leaderUserIds = getDeptLeaders(leaveRequest.getApplicantDeptName());
List<Long> leaderUserIds = getDeptLeaders(deptId);
updateApproval.setRequiredApprovers(leaderUserIds.size());
for (Long leaderUserId : leaderUserIds) {
@@ -302,13 +300,13 @@ public class WmsApprovalServiceImpl implements IWmsApprovalService {
} else {
updateApproval.setRequiredApprovers(1);
// 根据applicantId查询审批人name和id
WmsApproval approval = baseMapper.selectOne(new LambdaQueryWrapper<WmsApproval>().eq(WmsApproval::getApprovalId, approvalId));
List<SysUser> currentUser = userMapper.selectList(new LambdaQueryWrapper<SysUser>().eq(SysUser::getNickName, approval.getApproverName()));
if (currentUser != null) {
WmsDept dept = wmsDeptMapper.selectById(deptId);
SysUser leader = userMapper.selectById(dept.getLeader());
if (leader != null) {
WmsApprovalTaskBo taskBo = new WmsApprovalTaskBo();
taskBo.setApprovalId(approvalId);
taskBo.setApproverId(currentUser.get(0).getUserId());
taskBo.setApproverName(approval.getApproverName());
taskBo.setApproverId(dept.getLeader());
taskBo.setApproverName(leader.getNickName());
taskBo.setTaskStatus("pending");
approvalTaskMapper.insert(BeanUtil.toBean(taskBo, WmsApprovalTask.class));
}
@@ -317,28 +315,20 @@ public class WmsApprovalServiceImpl implements IWmsApprovalService {
baseMapper.updateById(updateApproval);
}
private List<Long> getDeptLeaders(String applicantDeptName) {
private List<Long> getDeptLeaders(Long deptId) {
List<Long> leaderUserIds = new ArrayList<>();
if (StringUtils.isBlank(applicantDeptName)) {
return leaderUserIds;
}
// 根据部门名称查询部门信息
SysDept dept = deptMapper.selectOne(new LambdaQueryWrapper<SysDept>()
.eq(SysDept::getDeptName, applicantDeptName));
if (dept == null) {
if (deptId == null) {
return leaderUserIds;
}
// 获取部门的所有祖先部门ID包括自己
List<Long> ancestorDeptIds = new ArrayList<>();
Long currentDeptId = dept.getDeptId();
Long currentDeptId = deptId;
while (currentDeptId != null) {
ancestorDeptIds.add(currentDeptId);
SysDept currentDept = deptMapper.selectById(currentDeptId);
WmsDept currentDept = wmsDeptMapper.selectById(currentDeptId);
if (currentDept != null) {
currentDeptId = currentDept.getParentId();
} else {
@@ -348,29 +338,29 @@ public class WmsApprovalServiceImpl implements IWmsApprovalService {
// 查询每个祖先部门的leader字段内容
if (!ancestorDeptIds.isEmpty()) {
List<SysDept> ancestorDepts = deptMapper.selectList(new LambdaQueryWrapper<SysDept>()
.in(SysDept::getDeptId, ancestorDeptIds));
List<WmsDept> ancestorDepts = wmsDeptMapper.selectList(new LambdaQueryWrapper<WmsDept>()
.in(WmsDept::getDeptId, ancestorDeptIds));
if (CollectionUtil.isNotEmpty(ancestorDepts)) {
// 提取所有leader字段的内容
List<String> leaderNames = ancestorDepts.stream()
.map(SysDept::getLeader)
.filter(StringUtils::isNotBlank)
leaderUserIds = ancestorDepts.stream()
.map(WmsDept::getLeader)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
// 根据leader名称查询对应的用户ID
if (!leaderNames.isEmpty()) {
List<SysUser> leaders = userMapper.selectList(new LambdaQueryWrapper<SysUser>()
.in(SysUser::getNickName, leaderNames));
if (CollectionUtil.isNotEmpty(leaders)) {
leaderUserIds = leaders.stream()
.map(SysUser::getUserId)
.distinct()
.collect(Collectors.toList());
}
}
// // 根据leader名称查询对应的用户ID
// if (!leaderNames.isEmpty()) {
// List<SysUser> leaders = userMapper.selectList(new LambdaQueryWrapper<SysUser>()
// .in(SysUser::getNickName, leaderNames));
//
// if (CollectionUtil.isNotEmpty(leaders)) {
// leaderUserIds = leaders.stream()
// .map(SysUser::getUserId)
// .distinct()
// .collect(Collectors.toList());
// }
// }
}
}