fix: persist receiving dept during approval routing
This commit is contained in:
parent
462e1a4e88
commit
7f60c484a0
@ -274,8 +274,15 @@ public class TaskApprovalService {
|
||||
// 3. 所有任务都需要接单部门负责人审核(无论是否预先指定了设计师)
|
||||
String releaseType = task.getReleaseType();
|
||||
|
||||
// 确定接单部门负责人
|
||||
Long receivingLeaderId = determineReceivingLeader(task);
|
||||
// 确定接单部门和负责人,并把部门落库,避免后续部门调整时出现待审核任务无法追溯归属
|
||||
Long receivingDeptId = determineReceivingDeptId(task);
|
||||
Long receivingLeaderId = null;
|
||||
if (receivingDeptId != null) {
|
||||
Department receivingDept = departmentMapper.selectById(receivingDeptId);
|
||||
if (receivingDept != null) {
|
||||
receivingLeaderId = receivingDept.getLeaderId();
|
||||
}
|
||||
}
|
||||
if (receivingLeaderId == null) {
|
||||
throw new BusinessException(ResultCode.PARAM_ERROR, "无法确定接单部门负责人,请在系统设置中为接单部门配置负责人");
|
||||
}
|
||||
@ -283,6 +290,7 @@ public class TaskApprovalService {
|
||||
// 更新任务状态为待接单部门审核
|
||||
task.setApprovalStatus("pending_receiving_approval");
|
||||
task.setDemandApprovalTime(LocalDateTime.now());
|
||||
task.setReceiverDeptId(receivingDeptId);
|
||||
task.setCurrentApproverId(receivingLeaderId);
|
||||
task.setCurrentApproverRole("receiving_leader");
|
||||
taskMapper.updateById(task);
|
||||
@ -476,12 +484,18 @@ public class TaskApprovalService {
|
||||
throw new BusinessException(ResultCode.PARAM_ERROR, "指定的接收人不存在");
|
||||
}
|
||||
task.setReceiverId(assignedReceiverId);
|
||||
task.setReceiverDeptId(receiver.getDeptId());
|
||||
task.setReleaseType("assigned"); // 设置为指定模式
|
||||
finalReceiverId = assignedReceiverId;
|
||||
log.info("任务【{}】已指定给设计师【{}】", task.getTitle(), receiver.getRealName());
|
||||
}
|
||||
|
||||
if (finalReceiverId != null) {
|
||||
com.designhub.entity.User receiver = userMapper.selectById(finalReceiverId);
|
||||
if (receiver != null && receiver.getDeptId() != null) {
|
||||
task.setReceiverDeptId(receiver.getDeptId());
|
||||
}
|
||||
}
|
||||
|
||||
// 判断是否为流水线任务
|
||||
if (task.getIsPipeline() != null && task.getIsPipeline() == 1) {
|
||||
// 流水线任务:先保存主任务的receiverId(如果已设置),确保updatePipelineSubTasksForAssigned能读取到
|
||||
@ -495,14 +509,6 @@ public class TaskApprovalService {
|
||||
} else {
|
||||
// 普通任务:根据是否有接收人设置状态
|
||||
if (finalReceiverId != null) {
|
||||
// 如果接收人部门ID还没设置,需要设置
|
||||
if (task.getReceiverDeptId() == null) {
|
||||
com.designhub.entity.User receiver = userMapper.selectById(finalReceiverId);
|
||||
if (receiver != null) {
|
||||
task.setReceiverDeptId(receiver.getDeptId());
|
||||
}
|
||||
}
|
||||
|
||||
task.setStatus("in_progress"); // 指定接单直接进入进行中状态
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
task.setStartTime(now);
|
||||
@ -952,12 +958,12 @@ public class TaskApprovalService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 确定接单部门负责人(支持三级分类继承二级分类的配置)
|
||||
* 🔥 优先使用子任务上设置的接单部门
|
||||
* 确定接单部门(支持三级分类继承二级分类的配置)
|
||||
* 优先使用子任务上设置的接单部门,其次使用主任务已存在的接单部门,最后根据任务类型兜底。
|
||||
*/
|
||||
public Long determineReceivingLeader(Task task) {
|
||||
// 🔥 步骤1:优先从子任务获取接单部门
|
||||
// 流水线任务:查找第一个子任务的 receiver_dept_id
|
||||
public Long determineReceivingDeptId(Task task) {
|
||||
// 步骤1:优先从子任务获取接单部门
|
||||
// 流水线任务:查找第一个有 receiver_dept_id 的子任务
|
||||
if (task.getIsPipeline() != null && task.getIsPipeline() == 1) {
|
||||
List<TaskItem> taskItems = taskItemMapper.selectList(
|
||||
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<TaskItem>()
|
||||
@ -966,32 +972,29 @@ public class TaskApprovalService {
|
||||
);
|
||||
|
||||
if (taskItems != null && !taskItems.isEmpty()) {
|
||||
// 查找第一个有 receiver_dept_id 的子任务
|
||||
for (TaskItem item : taskItems) {
|
||||
if (item.getReceiverDeptId() != null) {
|
||||
Department dept = departmentMapper.selectById(item.getReceiverDeptId());
|
||||
if (dept != null && dept.getLeaderId() != null) {
|
||||
log.info("从子任务 {} 获取接单部门负责人: 部门={}, 负责人ID={}",
|
||||
item.getItemNo(), dept.getDeptName(), dept.getLeaderId());
|
||||
return dept.getLeaderId();
|
||||
if (dept != null) {
|
||||
log.info("从子任务 {} 获取接单部门: 部门ID={}, 部门={}",
|
||||
item.getItemNo(), dept.getId(), dept.getDeptName());
|
||||
return dept.getId();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 🔥 步骤2:如果主任务有 receiver_dept_id,使用它
|
||||
|
||||
// 步骤2:如果主任务有 receiver_dept_id,直接复用
|
||||
if (task.getReceiverDeptId() != null) {
|
||||
Department dept = departmentMapper.selectById(task.getReceiverDeptId());
|
||||
if (dept != null && dept.getLeaderId() != null) {
|
||||
log.info("从主任务获取接单部门负责人: 部门={}, 负责人ID={}",
|
||||
dept.getDeptName(), dept.getLeaderId());
|
||||
return dept.getLeaderId();
|
||||
if (dept != null) {
|
||||
log.info("从主任务获取接单部门: 部门ID={}, 部门={}", dept.getId(), dept.getDeptName());
|
||||
return dept.getId();
|
||||
}
|
||||
}
|
||||
|
||||
// 🔥 步骤3:降级方案 - 根据任务类型的allowedDeptIds确定接单部门
|
||||
// 取第一个任务类型的第一个允许部门
|
||||
|
||||
// 步骤3:降级方案 - 根据任务类型的 allowedDeptIds 确定接单部门
|
||||
String taskTypeIds = task.getTaskTypeIds();
|
||||
if (taskTypeIds == null || taskTypeIds.isEmpty()) {
|
||||
return null;
|
||||
@ -1017,10 +1020,12 @@ public class TaskApprovalService {
|
||||
List<Long> expandedDeptIds = departmentService.expandDeptIdsWithChildren(allowedDeptIds);
|
||||
for (Long deptId : expandedDeptIds) {
|
||||
Department dept = departmentMapper.selectById(deptId);
|
||||
if (dept != null && dept.getLeaderId() != null) {
|
||||
log.info("从任务类型配置获取接单部门负责人(降级方案): 部门={}, 负责人ID={}",
|
||||
dept.getDeptName(), dept.getLeaderId());
|
||||
return dept.getLeaderId();
|
||||
if (dept != null && "receiving".equals(dept.getDeptType())
|
||||
&& Integer.valueOf(1).equals(dept.getStatus())
|
||||
&& !Integer.valueOf(1).equals(dept.getDeleted())) {
|
||||
log.info("从任务类型配置获取接单部门(降级方案): 部门ID={}, 部门={}",
|
||||
dept.getId(), dept.getDeptName());
|
||||
return dept.getId();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1032,6 +1037,24 @@ public class TaskApprovalService {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 确定接单部门负责人(支持三级分类继承二级分类的配置)
|
||||
*/
|
||||
public Long determineReceivingLeader(Task task) {
|
||||
Long receivingDeptId = determineReceivingDeptId(task);
|
||||
if (receivingDeptId == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Department dept = departmentMapper.selectById(receivingDeptId);
|
||||
if (dept == null || dept.getLeaderId() == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
log.info("确定接单部门负责人: 部门={}, 负责人ID={}", dept.getDeptName(), dept.getLeaderId());
|
||||
return dept.getLeaderId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用任务更新
|
||||
*/
|
||||
|
||||
@ -3834,13 +3834,21 @@ public class TaskService {
|
||||
// 记录审核日志 (level=0 表示明细完善阶段)
|
||||
taskApprovalService.logApproval(task.getId(), completerId, 0, "complete_detail", "已完善任务明细");
|
||||
|
||||
// 确定接单部门负责人
|
||||
Long receivingLeaderId = taskApprovalService.determineReceivingLeader(task);
|
||||
// 确定接单部门负责人,并把部门归属同步写入任务,避免后续组织架构调整时待审核任务失联
|
||||
Long receivingDeptId = taskApprovalService.determineReceivingDeptId(task);
|
||||
Long receivingLeaderId = null;
|
||||
if (receivingDeptId != null) {
|
||||
Department receivingDept = departmentService.getDepartmentById(receivingDeptId);
|
||||
if (receivingDept != null) {
|
||||
receivingLeaderId = receivingDept.getLeaderId();
|
||||
}
|
||||
}
|
||||
if (receivingLeaderId != null) {
|
||||
// 更新任务状态为待接单部门审核
|
||||
task.setApprovalStatus("pending_receiving_approval");
|
||||
task.setStatus("pending_audit");
|
||||
task.setDemandApprovalTime(LocalDateTime.now());
|
||||
task.setReceiverDeptId(receivingDeptId);
|
||||
task.setCurrentApproverId(receivingLeaderId);
|
||||
task.setCurrentApproverRole("receiving_leader");
|
||||
log.info("一级需求任务明细完善后,等待接单部门负责人审核:leaderId={}", receivingLeaderId);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user