修复:一级需求任务明细完善后子任务状态未正确更新的问题

问题原因:
- 当管理员或任务发布人(非明细完善人、非需求部门成员)编辑一级需求任务时
- 原有条件判断 isPrimaryTaskDetailCompletion 为 false
- 导致进入 initApprovalStatus 重新初始化审核状态,而不是 handlePrimaryTaskDetailCompletion
- 子任务状态没有被更新为 pending_approval,导致接单部门负责人看不到待审核的子任务组

修复方案:
- 简化条件判断:只要是一级需求任务且原状态为 pending_detail_completion,都应该调用 handlePrimaryTaskDetailCompletion
- 这样可以确保无论谁编辑提交,子任务状态都会被正确更新
This commit is contained in:
Your Name 2026-01-24 11:17:26 +08:00
parent f48a43dd9a
commit b4bafab04f

View File

@ -1842,14 +1842,19 @@ public class TaskService {
createPipelineTaskItemsForUpdate(existTask, dto);
// 判断是否是一级需求任务的明细完善
// 条件:1) 是指定的明细完善人 或 2) 是需求部门成员编辑待完善明细的一级需求任务
boolean isPrimaryTaskDetailCompletion = (isPrimaryTaskDetailCompleter || isDemandDeptMemberForPrimaryTask)
&& "pending_detail_completion".equals(approvalStatus);
// 🔥 修复: 一级需求任务在 pending_detail_completion 状态下被编辑提交时,
// 无论是谁编辑(明细完善人、需求部门成员、管理员),都应该进入 handlePrimaryTaskDetailCompletion
// 因为一级审核已经通过了,不需要再次进入一级审核流程
boolean isPrimaryTask = existTask.getIsPrimaryTask() != null && existTask.getIsPrimaryTask() == 1;
boolean wasPendingDetailCompletion = "pending_detail_completion".equals(approvalStatus);
boolean isPrimaryTaskDetailCompletion = isPrimaryTask && wasPendingDetailCompletion;
log.info("判断明细完善条件: taskId={}, isPrimaryTask={}, approvalStatus={}, isPrimaryTaskDetailCompletion={}",
id, isPrimaryTask, approvalStatus, isPrimaryTaskDetailCompletion);
if (isPrimaryTaskDetailCompletion) {
// 一级需求任务明细完善后,进入接单部门审核流程
log.info("一级需求任务明细完善: taskId={}, userId={}, isPrimaryTaskDetailCompleter={}, isDemandDeptMemberForPrimaryTask={}",
id, userId, isPrimaryTaskDetailCompleter, isDemandDeptMemberForPrimaryTask);
// 一级需求任务明细完善后,进入接单部门审核流程(跳过需求部门审核,因为一级审核已通过)
log.info("一级需求任务明细完善: taskId={}, userId={}", id, userId);
handlePrimaryTaskDetailCompletion(existTask, userId);
} else {
// 普通任务:重新初始化审核状态并发送通知
@ -3688,6 +3693,10 @@ public class TaskService {
taskItemMapper.updateById(item);
log.info("一级需求任务子任务 {} 状态已更新为 pending_approval", item.getItemNo());
}
if (taskItems.isEmpty()) {
log.warn("警告: 任务 {} 没有找到可更新的子任务,请检查子任务创建逻辑", task.getId());
}
} else {
// 如果无法确定接单部门负责人,直接发布到任务大厅
log.warn("无法确定接单部门负责人,任务将直接发布到任务大厅");