From 6f9146dc55d7025d4ba130e7938f0b5755744c3e Mon Sep 17 00:00:00 2001 From: fangjiakai <450850793@qq.com> Date: Mon, 16 Mar 2026 09:42:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(workflow):=20=E5=AE=8C=E5=96=84=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=97=A5=E5=BF=97=E5=92=8C=E5=AE=89=E5=85=A8=E6=8E=AA?= =?UTF-8?q?=E6=96=BD=E8=AE=B0=E5=BD=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 TaskLogUpdateExe 中添加 EightworkInfoE 的导入依赖 - 实现 eightworkInfo.info 字段的更新逻辑,将步骤信息存入 JSON 结构 - 添加 SKIPPED 状态步骤的处理逻辑,将其视为已完成状态 - 优化并行步骤合并节点的前置步骤检查逻辑 - 在 MeasuresLogs 相关类中添加 taskLogId 字段用于步骤关联 - 更新 MeasuresLogsDO 构造函数,支持传入 taskLogId 参数 - 优化日志输出,增加 taskLogId 关联信息的记录 --- .../eightwork/command/TaskLogUpdateExe.java | 69 +++++++++++++++++-- .../dto/clientobject/MeasuresLogsCO.java | 3 + .../eightwork/domain/model/MeasuresLogsE.java | 2 + .../dataobject/MeasuresLogsDO.java | 11 +++ 4 files changed, 81 insertions(+), 4 deletions(-) diff --git a/web-app/src/main/java/com/zcloud/eightwork/command/TaskLogUpdateExe.java b/web-app/src/main/java/com/zcloud/eightwork/command/TaskLogUpdateExe.java index ba5fcb3..968aa9b 100644 --- a/web-app/src/main/java/com/zcloud/eightwork/command/TaskLogUpdateExe.java +++ b/web-app/src/main/java/com/zcloud/eightwork/command/TaskLogUpdateExe.java @@ -11,6 +11,7 @@ import com.zcloud.eightwork.domain.gateway.TaskLogGateway; import com.zcloud.eightwork.domain.gateway.EightworkSupplementaryInfoGateway; import com.zcloud.eightwork.domain.model.MeasuresLogsE; import com.zcloud.eightwork.domain.model.EightworkSupplementaryInfoE; +import com.zcloud.eightwork.domain.model.EightworkInfoE; import com.zcloud.eightwork.domain.model.TaskLogE; import com.zcloud.eightwork.domain.model.enums.BranchFlag; import com.zcloud.eightwork.domain.model.enums.StepType; @@ -139,6 +140,9 @@ public class TaskLogUpdateExe { // 批量更新 taskLogRepository.updateBatchById(actionLogs); + // 更新 eightworkInfo.info 字段 + updateEightworkInfo(cmd.getWorkId(), logs); + log.info("步骤流转完成: workId={}, currentStep={}", cmd.getWorkId(), currentLog.getStepName()); } @@ -329,10 +333,11 @@ public class TaskLogUpdateExe { MeasuresLogsDO measuresLogsDO = new MeasuresLogsDO( otherMeasures, currentLog.getWorkId(), - currentLog.getWorkType() + currentLog.getWorkType(), + currentLog.getTaskLogId() ); measuresLogsRepository.save(measuresLogsDO); - log.info("已添加其他安全措施"); + log.info("已添加其他安全措施,关联步骤: taskLogId={}", currentLog.getTaskLogId()); } } } @@ -414,6 +419,7 @@ public class TaskLogUpdateExe { /** * 获取所有未完成的前置步骤 * 对于并行模式,需要检查所有指向合并节点的步骤(包括主流程和分支) + * SKIPPED 状态的步骤视为已完成 * * @param mergeNode 合并节点 * @param allLogs 所有步骤日志 @@ -426,8 +432,9 @@ public class TaskLogUpdateExe { // 找出所有指向该合并节点的步骤(通过 nextStep 判断) // 这样可以同时检查主流程和分支步骤 if (mergeNode.getStepId().equals(log.getNextStep())) { - // 检查是否已完成 - if (!TaskLogStatus.APPROVED.equalsCode(log.getStatus())) { + // 检查是否已完成(APPROVED 或 SKIPPED 都视为已完成) + if (!TaskLogStatus.APPROVED.equalsCode(log.getStatus()) + && !TaskLogStatus.SKIPPED.equalsCode(log.getStatus())) { pendingSteps.add(log); } } @@ -533,6 +540,12 @@ public class TaskLogUpdateExe { .orElse(null); if (branchStep != null) { + // 如果分支步骤已标记为跳过,则不激活 + if (TaskLogStatus.SKIPPED.equalsCode(branchStep.getStatus())) { + log.info("分支步骤已跳过,不激活: stepName={}", branchStep.getStepName()); + return; + } + branchStep.setStatus(TaskLogStatus.IN_PROGRESS.getCode()); actionLogs.add(TaskLogConvertUtil.toDO(branchStep)); sendTodoAddEvent(getWorkId(currentLog.getWorkId()), branchStep, currentLog.getWorkType()); @@ -626,4 +639,52 @@ public class TaskLogUpdateExe { .eq(EightworkInfoDO::getWorkId, workId) ).getId(); } + + /** + * 更新 eightworkInfo.info 字段 + * 将所有步骤的信息以 step_${step_id} 为 key 存入 info + */ + private void updateEightworkInfo(String workId, List logs) { + EightworkInfoDO infoDO = eightworkInfoRepository.getOne( + new LambdaQueryWrapper() + .eq(EightworkInfoDO::getWorkId, workId) + ); + + if (infoDO == null) { + log.warn("未找到作业信息: workId={}", workId); + return; + } + + // 解析现有的 info + JSONObject infoJson; + if (StringUtils.isNotBlank(infoDO.getInfo())) { + try { + infoJson = JSONObject.parseObject(infoDO.getInfo()); + } catch (Exception e) { + log.warn("解析 info 失败,使用空对象: workId={}", workId, e); + infoJson = new JSONObject(); + } + } else { + infoJson = new JSONObject(); + } + + // 遍历所有步骤,更新 info + for (TaskLogE log : logs) { + JSONObject stepInfo = new JSONObject(); + stepInfo.put("stepName", log.getStepName()); + stepInfo.put("actUserDepartment", log.getActUserDepartment()); + stepInfo.put("actUserDepartmentName", log.getActUserDepartmentName()); + stepInfo.put("actUser", log.getActUser()); + stepInfo.put("actUserName", log.getActUserName()); + stepInfo.put("status", log.getStatus()); + + infoJson.put("step_" + log.getStepId(), stepInfo); + } + + // 更新到数据库 + infoDO.setInfo(infoJson.toJSONString()); + eightworkInfoRepository.updateById(infoDO); + + log.info("已更新作业 info: workId={}", workId); + } } diff --git a/web-client/src/main/java/com/zcloud/eightwork/dto/clientobject/MeasuresLogsCO.java b/web-client/src/main/java/com/zcloud/eightwork/dto/clientobject/MeasuresLogsCO.java index 2cb4d5f..2675f47 100644 --- a/web-client/src/main/java/com/zcloud/eightwork/dto/clientobject/MeasuresLogsCO.java +++ b/web-client/src/main/java/com/zcloud/eightwork/dto/clientobject/MeasuresLogsCO.java @@ -28,6 +28,9 @@ public class MeasuresLogsCO extends ClientObject { //作业票id @ApiModelProperty(value = "作业票id") private String workId; + //所属步骤id + @ApiModelProperty(value = "所属步骤id") + private String taskLogId; //答案 &&分割 @ApiModelProperty(value = "答案 &&分割") private String answer; diff --git a/web-domain/src/main/java/com/zcloud/eightwork/domain/model/MeasuresLogsE.java b/web-domain/src/main/java/com/zcloud/eightwork/domain/model/MeasuresLogsE.java index 9103a87..605f8df 100644 --- a/web-domain/src/main/java/com/zcloud/eightwork/domain/model/MeasuresLogsE.java +++ b/web-domain/src/main/java/com/zcloud/eightwork/domain/model/MeasuresLogsE.java @@ -19,6 +19,8 @@ public class MeasuresLogsE extends BaseE { private String questions; //作业票id private String workId; + //所属步骤id + private String taskLogId; //答案 &&分割 private String answer; //签字 diff --git a/web-infrastructure/src/main/java/com/zcloud/eightwork/persistence/dataobject/MeasuresLogsDO.java b/web-infrastructure/src/main/java/com/zcloud/eightwork/persistence/dataobject/MeasuresLogsDO.java index 18ddd7a..e790783 100644 --- a/web-infrastructure/src/main/java/com/zcloud/eightwork/persistence/dataobject/MeasuresLogsDO.java +++ b/web-infrastructure/src/main/java/com/zcloud/eightwork/persistence/dataobject/MeasuresLogsDO.java @@ -31,6 +31,9 @@ public class MeasuresLogsDO extends BaseDO { //作业票id @ApiModelProperty(value = "作业票id") private String workId; + //所属步骤id + @ApiModelProperty(value = "所属步骤id") + private String taskLogId; //答案 &&分割 @ApiModelProperty(value = "答案 &&分割") private String answer; @@ -50,5 +53,13 @@ public class MeasuresLogsDO extends BaseDO { this.workType = workType; this.type = 2; } + + public MeasuresLogsDO(String measures, String workId, String workType, String taskLogId) { + this.content = measures; + this.workId = workId; + this.workType = workType; + this.taskLogId = taskLogId; + this.type = 2; + } }