fix: 修复一级需求任务明细完善后再次编辑导致重新启动一级审批的问题

问题描述:
- 一级需求任务在明细完善后被再次编辑时,如果approval_status为null
- 系统无法识别一级审批已通过,导致任务被重新设为pending_primary_approval
- 需求部门负责人需要再次审批并指定明细完善人

解决方案:
- 在updatePipelineTask方法中增强判断逻辑
- 通过查询审批日志(approve_primary记录)判断一级审批是否已通过
- 如果已通过,直接进入接单部门审核流程,跳过重复的一级审批

新增方法:
- TaskApprovalService.hasPrimaryApprovalPassed() - 检查一级审批是否已通过
This commit is contained in:
Your Name 2026-01-26 18:51:06 +08:00
parent 62a6357d1e
commit 20e7ede2d5
2 changed files with 31 additions and 3 deletions

View File

@ -1165,6 +1165,22 @@ public class TaskApprovalService {
this.log.error("记录审核日志失败", e);
}
}
/**
* 检查一级需求任务的一级审批是否已通过
* 用于判断任务在明细完善后再次编辑时,是否应该跳过一级审批
* @param taskId 任务ID
* @return true 如果一级审批已通过
*/
public boolean hasPrimaryApprovalPassed(Long taskId) {
// 查询是否有 approve_primary 的审批日志记录
Long count = approvalLogMapper.selectCount(
new LambdaQueryWrapper<TaskApprovalLog>()
.eq(TaskApprovalLog::getTaskId, taskId)
.eq(TaskApprovalLog::getAction, "approve_primary")
);
return count != null && count > 0;
}
/**
* 格式化预估工时显示(基于工作时间配置)

View File

@ -1993,10 +1993,22 @@ public class TaskService {
// 因为一级审核已经通过了,不需要再次进入一级审核流程
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);
// 🔥 增强判断:如果 approvalStatus 为 null 或其他状态,但一级审批已通过(审批日志中有 approve_primary 记录)
// 则应该直接进入接单部门审核流程,而不是重新启动一级审批
boolean primaryApprovalPassed = false;
if (isPrimaryTask && !wasPendingDetailCompletion) {
// 检查审批日志,判断一级审批是否已通过
primaryApprovalPassed = taskApprovalService.hasPrimaryApprovalPassed(id);
if (primaryApprovalPassed) {
log.info("一级需求任务一级审批已通过(通过审批日志判断): taskId={}", id);
}
}
boolean isPrimaryTaskDetailCompletion = isPrimaryTask && (wasPendingDetailCompletion || primaryApprovalPassed);
log.info("判断明细完善条件: taskId={}, isPrimaryTask={}, approvalStatus={}, wasPendingDetailCompletion={}, primaryApprovalPassed={}, isPrimaryTaskDetailCompletion={}",
id, isPrimaryTask, approvalStatus, wasPendingDetailCompletion, primaryApprovalPassed, isPrimaryTaskDetailCompletion);
if (isPrimaryTaskDetailCompletion) {
// 一级需求任务明细完善后,进入接单部门审核流程(跳过需求部门审核,因为一级审核已通过)