fix:流程执行完成,更新算列状态
This commit is contained in:
@@ -395,4 +395,13 @@ public class SimulationRunController implements ISimulationRunFeignClient {
|
||||
return runService.syncKeyResultToTask(req);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据流程实例ID更新算例状态 (内部调用)
|
||||
* 由Flowable全局事件监听器调用
|
||||
*/
|
||||
@PostMapping("/updateStatusByProcessInstanceId")
|
||||
public SdmResponse updateStatusByProcessInstanceId(@RequestParam String processInstanceId, @RequestParam Integer statusCode) {
|
||||
return runService.updateStatusByProcessInstanceId(processInstanceId, statusCode);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -110,4 +110,12 @@ public interface ISimulationRunService extends IService<SimulationRun> {
|
||||
|
||||
SdmResponse syncKeyResultToTask(KeyResultReq req);
|
||||
|
||||
/**
|
||||
* 根据流程实例ID更新算例状态
|
||||
* @param processInstanceId 流程实例ID
|
||||
* @param statusCode 状态值(RUNNING/SUSPENDED/COMPLETED/CANCELLED/ERROR)
|
||||
* @return SdmResponse
|
||||
*/
|
||||
SdmResponse updateStatusByProcessInstanceId(String processInstanceId, Integer statusCode);
|
||||
|
||||
}
|
||||
@@ -623,7 +623,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
|
||||
runPerformance.setId(null);
|
||||
runPerformance.setRunId(simulationRun.getUuid());
|
||||
runPerformance.setUuid(RandomUtil.generateString(32));
|
||||
runPerformance.setCompleteStatus(PerformanceStatusEnum.UNCOMPLETED.getCode());
|
||||
runPerformance.setCompleteStatus(RunPerformanceStatusEnum.UNCOMPLETED.getCode());
|
||||
runPerformance.setCreator(userId);
|
||||
runPerformance.setCreateTime(null);
|
||||
runPerformanceList.add(runPerformance);
|
||||
@@ -2303,4 +2303,61 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
|
||||
}
|
||||
return SdmResponse.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据流程实例ID更新算例状态
|
||||
* 由Flowable全局事件监听器调用,实现流程状态与算例状态的实时同步
|
||||
*
|
||||
* @param processInstanceId 流程实例ID
|
||||
* @param statusCode 状态值(RUNNING/SUSPENDED/COMPLETED/CANCELLED/ERROR)
|
||||
* @return SdmResponse
|
||||
*/
|
||||
@Override
|
||||
public SdmResponse updateStatusByProcessInstanceId(String processInstanceId, Integer statusCode) {
|
||||
log.info("根据流程实例ID更新算例状态: processInstanceId={}, statusCode={}", processInstanceId, statusCode);
|
||||
|
||||
if (StringUtils.isBlank(processInstanceId)) {
|
||||
log.error("流程实例ID为空");
|
||||
return SdmResponse.failed("流程实例ID为空");
|
||||
}
|
||||
|
||||
if (ObjectUtils.isEmpty(statusCode)) {
|
||||
log.error("状态值为空");
|
||||
return SdmResponse.failed("状态值为空");
|
||||
}
|
||||
|
||||
try {
|
||||
// 根据flowInstanceId查找算例
|
||||
SimulationRun run = this.lambdaQuery()
|
||||
.eq(SimulationRun::getFlowInstanceId, processInstanceId)
|
||||
.one();
|
||||
|
||||
if (run == null) {
|
||||
log.warn("未找到对应的算例: processInstanceId={}", processInstanceId);
|
||||
return SdmResponse.failed("未找到对应的算例");
|
||||
}
|
||||
|
||||
|
||||
// 更新算例状态
|
||||
boolean updated = this.lambdaUpdate()
|
||||
.set(SimulationRun::getStatus, statusCode)
|
||||
.set(SimulationRun::getUpdateTime, LocalDateTime.now())
|
||||
.set(statusCode.equals(RunStatusEnum.COMPLETED.getCode()) || statusCode.equals(RunStatusEnum.FAILED.getCode()),
|
||||
SimulationRun::getFinishTime, LocalDateTime.now())
|
||||
.eq(SimulationRun::getFlowInstanceId, processInstanceId)
|
||||
.update();
|
||||
|
||||
if (updated) {
|
||||
log.info("算例状态更新成功: runId={}, flowInstanceId={}, statusCode={}",
|
||||
run.getUuid(), processInstanceId, statusCode);
|
||||
return SdmResponse.success("状态更新成功");
|
||||
} else {
|
||||
log.error("算例状态更新失败: runId={}, flowInstanceId={}", run.getUuid(), processInstanceId);
|
||||
return SdmResponse.failed("状态更新失败");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("更新算例状态异常: processInstanceId={}, status={}", processInstanceId, statusCode, e);
|
||||
return SdmResponse.failed("更新状态异常: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user