feat: 支持一级需求任务明细完善功能
- 修改updatePipelineTask方法允许detailCompleterId编辑任务 - 添加pending_detail_completion状态到允许编辑的状态列表 - 添加handlePrimaryTaskDetailCompletion方法处理明细完善后的状态转换 - 明细完善后任务直接进入接单部门审核流程 - 将determineReceivingLeader方法改为public以便跨服务调用
This commit is contained in:
parent
40be47290f
commit
3bbbd20098
@ -834,7 +834,7 @@ public class TaskApprovalService {
|
||||
* 确定接单部门负责人(支持三级分类继承二级分类的配置)
|
||||
* 🔥 优先使用子任务上设置的接单部门
|
||||
*/
|
||||
private Long determineReceivingLeader(Task task) {
|
||||
public Long determineReceivingLeader(Task task) {
|
||||
// 🔥 步骤1:优先从子任务获取接单部门
|
||||
// 流水线任务:查找第一个子任务的 receiver_dept_id
|
||||
if (task.getIsPipeline() != null && task.getIsPipeline() == 1) {
|
||||
|
||||
@ -1455,10 +1455,14 @@ public class TaskService {
|
||||
public void updatePipelineTask(Long id, com.designhub.dto.PipelineTaskDTO dto, Long userId) {
|
||||
Task existTask = getTaskById(id);
|
||||
|
||||
// 验证权限:只有任务发布人才能更新任务
|
||||
// 验证权限:任务发布人、一级需求任务的明细完善人可以更新任务
|
||||
boolean isAdmin = isAdminUser(userId);
|
||||
if (!isAdmin && !userId.equals(existTask.getPublisherId())) {
|
||||
throw new BusinessException(ResultCode.FORBIDDEN, "只有任务发布人可以更新任务");
|
||||
boolean isPrimaryTaskDetailCompleter = "pending_detail_completion".equals(existTask.getApprovalStatus())
|
||||
&& existTask.getDetailCompleterId() != null
|
||||
&& userId.equals(existTask.getDetailCompleterId());
|
||||
|
||||
if (!isAdmin && !userId.equals(existTask.getPublisherId()) && !isPrimaryTaskDetailCompleter) {
|
||||
throw new BusinessException(ResultCode.FORBIDDEN, "只有任务发布人或指定的明细完善人可以更新任务");
|
||||
}
|
||||
|
||||
// 验证任务是否是流水线任务
|
||||
@ -1466,7 +1470,7 @@ public class TaskService {
|
||||
throw new BusinessException(ResultCode.PARAM_ERROR, "该任务不是流水线任务");
|
||||
}
|
||||
|
||||
// 允许更新的任务状态:草稿、待审核(需求/接单部门审核)、被驳回
|
||||
// 允许更新的任务状态:草稿、待审核(需求/接单部门审核)、被驳回、待完善明细
|
||||
// 不允许更新的状态:进行中(in_progress)、已完成(completed)、已取消(cancelled)
|
||||
String status = existTask.getStatus();
|
||||
String approvalStatus = existTask.getApprovalStatus();
|
||||
@ -1477,6 +1481,7 @@ public class TaskService {
|
||||
"draft".equals(approvalStatus) ||
|
||||
"pending_demand_approval".equals(approvalStatus) ||
|
||||
"pending_receiving_approval".equals(approvalStatus) ||
|
||||
"pending_detail_completion".equals(approvalStatus) || // 一级需求任务待完善明细
|
||||
approvalStatus.contains("rejected")
|
||||
));
|
||||
|
||||
@ -1596,12 +1601,18 @@ public class TaskService {
|
||||
// 重新创建子任务(使用与createPipelineTask相同的逻辑)
|
||||
createPipelineTaskItemsForUpdate(existTask, dto);
|
||||
|
||||
// 重新初始化审核状态并发送通知
|
||||
initApprovalStatus(existTask);
|
||||
// 判断是否是一级需求任务的明细完善
|
||||
if (isPrimaryTaskDetailCompleter && "pending_detail_completion".equals(approvalStatus)) {
|
||||
// 一级需求任务明细完善后,进入需求部门审核流程
|
||||
handlePrimaryTaskDetailCompletion(existTask, userId);
|
||||
} else {
|
||||
// 普通任务:重新初始化审核状态并发送通知
|
||||
initApprovalStatus(existTask);
|
||||
}
|
||||
|
||||
// 再次保存任务,因为initApprovalStatus修改了approvalStatus、currentApproverId等字段
|
||||
// 再次保存任务,因为审核状态可能被修改
|
||||
taskMapper.updateById(existTask);
|
||||
log.info("任务审核状态已重新初始化: taskId={}, approvalStatus={}, currentApproverId={}",
|
||||
log.info("任务审核状态已更新: taskId={}, approvalStatus={}, currentApproverId={}",
|
||||
existTask.getId(), existTask.getApprovalStatus(), existTask.getCurrentApproverId());
|
||||
|
||||
sendApprovalNotification(existTask);
|
||||
@ -3348,6 +3359,34 @@ public class TaskService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理一级需求任务明细完善后的状态转换
|
||||
* 明细完善后,任务直接进入接单部门审核流程(因为需求部门已经审核过了)
|
||||
*/
|
||||
private void handlePrimaryTaskDetailCompletion(Task task, Long completerId) {
|
||||
log.info("一级需求任务明细已完善: taskId={}, completerId={}", task.getId(), completerId);
|
||||
|
||||
// 记录审核日志
|
||||
taskApprovalService.addApprovalLog(task.getId(), completerId, "complete_detail", "已完善任务明细", null);
|
||||
|
||||
// 确定接单部门负责人
|
||||
Long receivingLeaderId = taskApprovalService.determineReceivingLeader(task);
|
||||
if (receivingLeaderId != null) {
|
||||
// 更新任务状态为待接单部门审核
|
||||
task.setApprovalStatus("pending_receiving_approval");
|
||||
task.setStatus("pending_audit");
|
||||
task.setDemandApprovalTime(LocalDateTime.now());
|
||||
task.setCurrentApproverId(receivingLeaderId);
|
||||
task.setCurrentApproverRole("receiving_leader");
|
||||
log.info("一级需求任务明细完善后,等待接单部门负责人审核:leaderId={}", receivingLeaderId);
|
||||
} else {
|
||||
// 如果无法确定接单部门负责人,直接发布到任务大厅
|
||||
log.warn("无法确定接单部门负责人,任务将直接发布到任务大厅");
|
||||
task.setApprovalStatus("approved");
|
||||
task.setStatus("pending");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化普通任务审核状态
|
||||
*/
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user