feat(workflow): 完善任务日志和安全措施记录功能
- 在 TaskLogUpdateExe 中添加 EightworkInfoE 的导入依赖 - 实现 eightworkInfo.info 字段的更新逻辑,将步骤信息存入 JSON 结构 - 添加 SKIPPED 状态步骤的处理逻辑,将其视为已完成状态 - 优化并行步骤合并节点的前置步骤检查逻辑 - 在 MeasuresLogs 相关类中添加 taskLogId 字段用于步骤关联 - 更新 MeasuresLogsDO 构造函数,支持传入 taskLogId 参数 - 优化日志输出,增加 taskLogId 关联信息的记录master
parent
929cab9c05
commit
6f9146dc55
|
|
@ -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<TaskLogE> logs) {
|
||||
EightworkInfoDO infoDO = eightworkInfoRepository.getOne(
|
||||
new LambdaQueryWrapper<EightworkInfoDO>()
|
||||
.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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ public class MeasuresLogsE extends BaseE {
|
|||
private String questions;
|
||||
//作业票id
|
||||
private String workId;
|
||||
//所属步骤id
|
||||
private String taskLogId;
|
||||
//答案 &&分割
|
||||
private String answer;
|
||||
//签字
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue