fix: 修复一级需求部门任务子任务状态设置,支持顺序和并行流水线模式
This commit is contained in:
parent
781d3f66f5
commit
e2feece96b
@ -281,28 +281,49 @@ public class TaskApprovalService {
|
||||
task.setCurrentApproverRole("receiving_leader");
|
||||
taskMapper.updateById(task);
|
||||
|
||||
// 🔥 如果是一级需求部门任务且是流水线任务,将第一个部门的子任务状态更新为pending_approval
|
||||
// 🔥 如果是一级需求部门任务且是流水线任务,将子任务状态更新为pending_approval
|
||||
// 这样接单部门负责人才能看到子任务组进行审核
|
||||
if (task.getIsPrimaryTask() != null && task.getIsPrimaryTask() == 1
|
||||
&& task.getIsPipeline() != null && task.getIsPipeline() == 1) {
|
||||
// 查询第一个部门的子任务(status='pending' 且 isLocked=0)
|
||||
List<TaskItem> firstDeptItems = taskItemMapper.selectList(
|
||||
new LambdaQueryWrapper<TaskItem>()
|
||||
.eq(TaskItem::getTaskId, taskId)
|
||||
.eq(TaskItem::getStatus, "pending")
|
||||
.eq(TaskItem::getIsLocked, 0)
|
||||
);
|
||||
|
||||
// 将第一个部门的子任务状态更新为pending_approval(待审核)
|
||||
for (TaskItem item : firstDeptItems) {
|
||||
String pipelineMode = task.getPipelineMode();
|
||||
if (pipelineMode == null || pipelineMode.isEmpty()) {
|
||||
pipelineMode = "sequential"; // 默认顺序模式
|
||||
}
|
||||
|
||||
List<TaskItem> itemsToUpdate;
|
||||
|
||||
if ("sequential".equals(pipelineMode)) {
|
||||
// 顺序模式:只更新第一个部门的子任务(status='pending' 且 isLocked=0)
|
||||
itemsToUpdate = taskItemMapper.selectList(
|
||||
new LambdaQueryWrapper<TaskItem>()
|
||||
.eq(TaskItem::getTaskId, taskId)
|
||||
.eq(TaskItem::getStatus, "pending")
|
||||
.eq(TaskItem::getIsLocked, 0)
|
||||
);
|
||||
log.info("顺序模式:更新第一个部门的子任务状态");
|
||||
} else {
|
||||
// 并行模式:更新所有部门的子任务(status='pending' 且 isLocked=0)
|
||||
itemsToUpdate = taskItemMapper.selectList(
|
||||
new LambdaQueryWrapper<TaskItem>()
|
||||
.eq(TaskItem::getTaskId, taskId)
|
||||
.eq(TaskItem::getStatus, "pending")
|
||||
.eq(TaskItem::getIsLocked, 0)
|
||||
);
|
||||
log.info("并行模式:更新所有部门的子任务状态");
|
||||
}
|
||||
|
||||
// 将子任务状态更新为pending_approval(待审核)
|
||||
for (TaskItem item : itemsToUpdate) {
|
||||
item.setStatus("pending_approval");
|
||||
item.setUpdateTime(LocalDateTime.now());
|
||||
taskItemMapper.updateById(item);
|
||||
log.info("一级需求任务第一个部门子任务 {} 状态已更新为pending_approval", item.getItemNo());
|
||||
log.info("一级需求任务子任务 {} 状态已更新为pending_approval", item.getItemNo());
|
||||
}
|
||||
|
||||
if (!firstDeptItems.isEmpty()) {
|
||||
log.info("一级需求任务 {} 的第一个部门共 {} 个子任务已设置为待审核状态", taskId, firstDeptItems.size());
|
||||
if (!itemsToUpdate.isEmpty()) {
|
||||
log.info("一级需求任务 {} 共 {} 个子任务已设置为待审核状态(模式:{})",
|
||||
taskId, itemsToUpdate.size(), pipelineMode);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -4306,8 +4306,33 @@ public class TaskService {
|
||||
item.setEstimatedHours(groupTotalHours);
|
||||
item.setSortOrder(itemIndex);
|
||||
item.setProgress(0);
|
||||
item.setStatus("pending");
|
||||
item.setIsLocked(itemIndex == 1 ? 0 : 1); // 第一个子任务解锁,其他锁定
|
||||
|
||||
// 🔥 根据流水线模式和部门序号设置子任务状态
|
||||
// 获取主任务的流水线模式(一级需求部门任务默认为sequential)
|
||||
String pipelineMode = task.getPipelineMode();
|
||||
if (pipelineMode == null || pipelineMode.isEmpty()) {
|
||||
pipelineMode = "sequential"; // 默认顺序模式
|
||||
}
|
||||
|
||||
if ("sequential".equals(pipelineMode)) {
|
||||
// 顺序流水线:第一个部门的所有子任务可接单(部门内并行)
|
||||
// 只有当第一个部门的所有子任务完成后,才解锁下一个部门的子任务
|
||||
if (currentDeptIndex == 1) {
|
||||
item.setStatus("pending");
|
||||
item.setIsLocked(0);
|
||||
log.info("子任务 {} 属于第一个部门,设置为待接单状态", item.getItemNo());
|
||||
} else {
|
||||
// 其他部门的子任务都是 locked(锁定),等待前一个部门完成后解锁
|
||||
item.setStatus("locked");
|
||||
item.setIsLocked(1);
|
||||
log.info("子任务 {} 属于第{}个部门,设置为锁定状态", item.getItemNo(), currentDeptIndex);
|
||||
}
|
||||
} else {
|
||||
// 并行流水线:全部待接单
|
||||
item.setStatus("pending");
|
||||
item.setIsLocked(0);
|
||||
log.info("子任务 {} 并行模式,设置为待接单状态", item.getItemNo());
|
||||
}
|
||||
|
||||
// 🔥 设置子任务的接单部门
|
||||
// 优先使用用户选择的部门,否则尝试从任务类型配置获取
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user