1、调整仿真任务修改报工逻辑

This commit is contained in:
2026-01-29 19:08:14 +08:00
parent 85a79353c7
commit 3cf9cb692f

View File

@@ -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<SimulationWorkMapper,
public static final int WORK_TYPE_FINISH = 1; // 完成报工
public static final int WORK_TYPE_EDIT = 2; // 编辑报工
// 应完成进度和实际完成进度的拓展属性名称集合
private static final List<String> PROGRESS_PROPERTY_NAMES = Arrays.asList(
SimulationTaskExtra.PROPERTY_NAME_ACTUAL_PROGRESS,
SimulationTaskExtra.PROPERTY_NAME_SHOULD_PROGRESS
);
/**
* 更新任务应达成进度(删除旧值+保存新值)
*/
@@ -178,10 +182,11 @@ public class SimulationWorkServiceImpl extends ServiceImpl<SimulationWorkMapper,
// 3. 更新报工
boolean updateFlag = updateWrapper.eq(SimulationWork::getId, workId).update();
// 4. 同步更新任务实际进度(有值时才执行)
// 4. 同步更新任务实际进度和任务应完成进度(有值时才执行)
String actualProgress = req.getActualProgress();
if (StringUtils.isNotBlank(actualProgress) && updateFlag) {
syncTaskActualProgress(workId, actualProgress);
String shouldProgress = req.getShouldProgress();
if (updateFlag) {
syncTaskProgress(workId, actualProgress, shouldProgress);
}
return updateFlag;
@@ -216,31 +221,57 @@ public class SimulationWorkServiceImpl extends ServiceImpl<SimulationWorkMapper,
}
/**
* 同步更新任务实际进度:删旧存新
* 构建待保存的任务扩展进度数据列表,非空参数才构建对应对象
*/
private void syncTaskActualProgress(Long workId, String actualProgress) {
// 查询报工主数据(未查询到直接返回,不抛异常)
private List<SimulationTaskExtra> buildTaskExtraList(String taskId, String actualProgress, String shouldProgress) {
List<SimulationTaskExtra> 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<SimulationTaskExtra> saveList = buildTaskExtraList(taskId, actualProgress, shouldProgress);
if (CollectionUtils.isEmpty(saveList)) {
return;
}
taskExtraService.saveBatch(saveList);
}
/**