diff --git a/project/src/main/java/com/sdm/project/service/impl/SimulationWorkServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/SimulationWorkServiceImpl.java index 60c0461e..3649c8ce 100644 --- a/project/src/main/java/com/sdm/project/service/impl/SimulationWorkServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/SimulationWorkServiceImpl.java @@ -33,9 +33,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -62,6 +60,12 @@ public class SimulationWorkServiceImpl extends ServiceImpl PROGRESS_PROPERTY_NAMES = Arrays.asList( + SimulationTaskExtra.PROPERTY_NAME_ACTUAL_PROGRESS, + SimulationTaskExtra.PROPERTY_NAME_SHOULD_PROGRESS + ); + /** * 更新任务应达成进度(删除旧值+保存新值) */ @@ -178,10 +182,11 @@ public class SimulationWorkServiceImpl extends ServiceImpl buildTaskExtraList(String taskId, String actualProgress, String shouldProgress) { + List extraList = new ArrayList<>(2); + // 实际进度非空则构建 + if (StringUtils.isNotBlank(actualProgress)) { + extraList.add(createTaskExtra(taskId, SimulationTaskExtra.PROPERTY_NAME_ACTUAL_PROGRESS, actualProgress)); + } + // 应完成进度非空则构建 + if (StringUtils.isNotBlank(shouldProgress)) { + extraList.add(createTaskExtra(taskId, SimulationTaskExtra.PROPERTY_NAME_SHOULD_PROGRESS, shouldProgress)); + } + return extraList; + } + + /** + * 封装任务扩展数据对象的创建逻辑,避免重复代码 + */ + private SimulationTaskExtra createTaskExtra(String taskId, String propertyName, String propertyValue) { + SimulationTaskExtra taskExtra = new SimulationTaskExtra(); + taskExtra.setTaskId(taskId); + taskExtra.setPropertyName(propertyName); + taskExtra.setPropertyValue(propertyValue); + return taskExtra; + } + + /** + * 同步更新任务实际进度和应完成进度:删旧存新 + */ + private void syncTaskProgress(Long workId, String actualProgress, String shouldProgress) { + // 1. 校验报工数据,无有效数据直接返回 SimulationWork simulationWork = this.getById(workId); - if (ObjectUtils.isEmpty(simulationWork) || ObjectUtils.isEmpty(simulationWork.getTaskId())) { + if (ObjectUtils.isEmpty(simulationWork) || StringUtils.isBlank(simulationWork.getTaskId())) { log.warn("报工记录不存在或任务ID为空,报工ID:{}", workId); return; } - - // 报工关联的任务uuid String taskId = simulationWork.getTaskId(); - // 删除原有进度配置 + // 2. 批量删除旧的进度数据 taskExtraService.lambdaUpdate() .eq(SimulationTaskExtra::getTaskId, taskId) - .eq(SimulationTaskExtra::getPropertyName, SimulationTaskExtra.PROPERTY_NAME_ACTUAL_PROGRESS) + .in(SimulationTaskExtra::getPropertyName, PROGRESS_PROPERTY_NAMES) .remove(); - // 保存最新进度配置 - SimulationTaskExtra taskExtra = new SimulationTaskExtra(); - taskExtra.setTaskId(taskId); - taskExtra.setPropertyName(SimulationTaskExtra.PROPERTY_NAME_ACTUAL_PROGRESS); - taskExtra.setPropertyValue(actualProgress); - taskExtraService.save(taskExtra); + // 3. 构建待保存的进度数据列表,统一批量保存 + List saveList = buildTaskExtraList(taskId, actualProgress, shouldProgress); + if (CollectionUtils.isEmpty(saveList)) { + return; + } + taskExtraService.saveBatch(saveList); + } /**