diff --git a/web-adapter/src/main/java/com/zcloud/eightwork/web/TaskLogController.java b/web-adapter/src/main/java/com/zcloud/eightwork/web/TaskLogController.java index 6d12dbf..502f24e 100644 --- a/web-adapter/src/main/java/com/zcloud/eightwork/web/TaskLogController.java +++ b/web-adapter/src/main/java/com/zcloud/eightwork/web/TaskLogController.java @@ -23,6 +23,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; +import java.util.stream.Collectors; /** * web-adapter @@ -62,7 +63,7 @@ public class TaskLogController { @ApiOperation("所有数据") @GetMapping("/listAll/{workId}") public MultiResponse listAll(@PathVariable("workId") String workId) { - return MultiResponse.of(taskLogService.listAll(workId)); + return MultiResponse.of(taskLogService.listAll(workId).stream().filter(taskLogCO -> taskLogCO.getStatus() != -1).collect(Collectors.toList())); } @ApiOperation("详情") diff --git a/web-app/src/main/java/com/zcloud/eightwork/command/ConfinedSpaceRemoveExe.java b/web-app/src/main/java/com/zcloud/eightwork/command/ConfinedSpaceRemoveExe.java index bbfffa6..a391d1c 100644 --- a/web-app/src/main/java/com/zcloud/eightwork/command/ConfinedSpaceRemoveExe.java +++ b/web-app/src/main/java/com/zcloud/eightwork/command/ConfinedSpaceRemoveExe.java @@ -18,6 +18,14 @@ import org.springframework.transaction.annotation.Transactional; public class ConfinedSpaceRemoveExe { private final ConfinedSpaceGateway confinedSpaceGateway; +/** + * 执行删除受限空间的操作,并带有事务回滚功能 + * 当发生异常时,事务会回滚,确保数据一致性 + * + * @param id 要删除的受限空间的ID + * @return 删除操作是否成功,成功返回true + * @throws BizException 当删除操作失败时抛出业务异常 + */ @Transactional(rollbackFor = Exception.class) public boolean execute(Long id) { boolean res = confinedSpaceGateway.deletedConfinedSpaceById(id); 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 32b163c..957db88 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 @@ -1,6 +1,8 @@ package com.zcloud.eightwork.command; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONUtil; import com.alibaba.cola.exception.BizException; import com.alibaba.fastjson.JSONArray; @@ -11,7 +13,6 @@ 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; @@ -37,6 +38,7 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -144,11 +146,12 @@ public class TaskLogUpdateExe { handleSignStepsIfNeeded(currentLog, cmd, actionLogs, logs); } - // 批量更新 - taskLogRepository.updateBatchById(actionLogs); + // 批量更新 task_log(先去重,避免同一步骤被多次更新导致数据丢失) + List uniqueActionLogs = deduplicateActionLogs(actionLogs); + taskLogRepository.updateBatchById(uniqueActionLogs); - // 更新 eightworkInfo.info 字段 - updateEightworkInfo(cmd.getWorkId(), logs); + // 批量更新 eightworkInfo.info(只更新本次变化的步骤) + updateEightworkInfo(cmd.getWorkId(), uniqueActionLogs); log.info("步骤流转完成: workId={}, currentStep={}", cmd.getWorkId(), currentLog.getStepName()); } @@ -653,10 +656,14 @@ public class TaskLogUpdateExe { } /** - * 更新 eightworkInfo.info 字段 - * 将所有步骤的信息以 step_${step_id} 为 key 存入 info + * 批量更新 eightworkInfo.info 字段 + * 只更新本次变化的步骤,减少数据库操作 */ - private void updateEightworkInfo(String workId, List logs) { + private void updateEightworkInfo(String workId, List actionLogs) { + if (actionLogs == null || actionLogs.isEmpty()) { + return; + } + EightworkInfoDO infoDO = eightworkInfoRepository.getOne( new LambdaQueryWrapper() .eq(EightworkInfoDO::getWorkId, workId) @@ -680,23 +687,25 @@ public class TaskLogUpdateExe { infoJson = new JSONObject(); } - // 遍历所有步骤,更新 info - for (TaskLogE log : logs) { + // 循环更新本次变化的步骤 + for (TaskLogDO logDO : actionLogs) { 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()); + stepInfo.put("stepName", logDO.getStepName()); + stepInfo.put("actUserDepartment", logDO.getActUserDepartment()); + stepInfo.put("actUserDepartmentName", logDO.getActUserDepartmentName()); + stepInfo.put("actUser", logDO.getActUser()); + stepInfo.put("actUserName", logDO.getActUserName()); + stepInfo.put("signPath", logDO.getSignPath()); + stepInfo.put("signTime", DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN)); + stepInfo.put("status", logDO.getStatus()); - infoJson.put("step_" + log.getStepId(), stepInfo); + infoJson.put("step_" + logDO.getStepId(), stepInfo); } // 更新到数据库 infoDO.setInfo(infoJson.toJSONString()); eightworkInfoRepository.updateById(infoDO); - log.info("已更新作业 info: workId={}", workId); + log.info("已批量更新步骤 info: workId={}, count={}", workId, actionLogs.size()); } } diff --git a/web-app/src/main/java/com/zcloud/eightwork/service/TaskLogServiceImpl.java b/web-app/src/main/java/com/zcloud/eightwork/service/TaskLogServiceImpl.java index 010bb60..7f5bb9e 100644 --- a/web-app/src/main/java/com/zcloud/eightwork/service/TaskLogServiceImpl.java +++ b/web-app/src/main/java/com/zcloud/eightwork/service/TaskLogServiceImpl.java @@ -55,7 +55,7 @@ public class TaskLogServiceImpl implements TaskLogServiceI { TaskLogNextCmd taskLogNextCmd = new TaskLogNextCmd(commitTaskLogDO.getId(), commitTaskLogDO.getWorkId(), commitTaskLogDO.getStepId(), - TaskLogStatus.APPROVED.getCode(),null,null,null,null); + TaskLogStatus.APPROVED.getCode(),null,null,null,cmd.getOthers()); taskLogUpdateExe.nextStep(taskLogNextCmd); return SingleResponse.buildSuccess(); diff --git a/web-client/src/main/java/com/zcloud/eightwork/dto/TaskLogAddCmd.java b/web-client/src/main/java/com/zcloud/eightwork/dto/TaskLogAddCmd.java index de9d1d6..6f92a07 100644 --- a/web-client/src/main/java/com/zcloud/eightwork/dto/TaskLogAddCmd.java +++ b/web-client/src/main/java/com/zcloud/eightwork/dto/TaskLogAddCmd.java @@ -51,5 +51,7 @@ public class TaskLogAddCmd extends Command { @ApiModelProperty(value = "部门id", name = "departmentId") private Long departmentId; + @ApiModelProperty(value = "其他参数", name = "others") + private JSONObject others; } 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 f044f2b..eaf682a 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 @@ -22,9 +22,6 @@ public class MeasuresLogsDO extends BaseDO { //作业类型 @ApiModelProperty(value = "作业类型") private String workType; - //填写步骤名 - @ApiModelProperty(value = "填写步骤名") - private String stepName; //防护措施 @ApiModelProperty(value = "防护措施") private String content;