From 0f31e605d083e330ccfe91a65d7ce9aed4aeebff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E4=B9=BE=E7=BF=94?= Date: Mon, 18 May 2026 15:14:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A7=BD=E6=B6=B2=E4=BB=BB=E5=8A=A1=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LiquidTankTaskController.java | 12 +-- .../service/ILiquidTankTaskService.java | 10 ++ .../impl/LiquidTankTaskServiceImpl.java | 91 +++++++++++++++++++ 3 files changed, 107 insertions(+), 6 deletions(-) diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskController.java index 09d7a4caf..070f228c6 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskController.java @@ -310,12 +310,12 @@ public class LiquidTankTaskController extends BladeController { /** * [槽液检测任务] 逻辑删除 */ -// @PostMapping("/remove") -// @ApiOperationSupport(order = 61) -// @Operation(summary = "逻辑删除", description = "传入ids") -// public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { -// return R.status(service.deleteLogic(Func.toLongList(ids))); -// } + @GetMapping("/remove") + @ApiOperationSupport(order = 61) + @Operation(summary = "逻辑删除", description = "传入ids,仅允许删除【正常完成】或【异常完成】状态的任务,会级联删除关联的历史记录") + public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { + return service.removeWithCheck(ids); + } /** * [槽液检测任务] 导出Excel diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskService.java index d47f56070..46ceb4066 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskService.java @@ -77,4 +77,14 @@ public interface ILiquidTankTaskService extends BaseService { void checkRemind(); void checkOut(); + + /** + * 删除任务(带状态校验) + * 只允许删除【正常完成】或【异常完成】状态的任务 + * 会级联删除关联的历史记录(LiquidTankTaskHi) + * + * @param ids 任务ID集合 + * @return R + */ + R removeWithCheck(String ids); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskServiceImpl.java index 5494fcad5..30c0a1886 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskServiceImpl.java @@ -6,6 +6,7 @@ package org.springblade.desk.quality.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.cron.task.Task; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import jakarta.annotation.Resource; @@ -632,4 +633,94 @@ public class LiquidTankTaskServiceImpl extends BaseServiceImpl idList = Func.toLongList(ids); + if (idList == null || idList.isEmpty()) { + return R.fail("请选择要删除的任务"); + } + + // 校验每个任务的状态,只允许删除已完成的任务 + List canDeleteIds = new ArrayList<>(); + List cannotDeleteReasons = new ArrayList<>(); + + for (Long id : idList) { + LiquidTankTask task = baseMapper.selectById(id); + if (task == null) { + cannotDeleteReasons.add("ID:" + id + " 任务不存在"); + continue; + } + + // 只允许删除以下状态的任务: + // S_FINISH_OK(11): 正常结束 + // S_FINISH_FAILED(10): 异常结束 + if (task.getStatus().equals(LiquidTankTaskConst.S_FINISH_OK) + || task.getStatus().equals(LiquidTankTaskConst.S_FINISH_FAILED)) { + canDeleteIds.add(id); + } else { + String statusName = getStatusName(task.getStatus()); + cannotDeleteReasons.add("ID:" + id + " 当前状态【" + statusName + "】不允许删除"); + } + } + + // 如果有不能删除的任务,返回错误信息 + if (!cannotDeleteReasons.isEmpty()) { + String errorMsg = String.join("; ", cannotDeleteReasons); + throw new RuntimeException("以下任务无法删除:" + errorMsg); + } + + // 执行删除操作(包含关联数据) + if (!canDeleteIds.isEmpty()) { + for (Long taskId : canDeleteIds) { + // 关联的历史记录 + hiService.remove(new LambdaQueryWrapper() + .eq(LiquidTankTaskHi::getLiquidTankTaskId, taskId)); + + // 删除 + basicDeleteLogic(java.util.Collections.singletonList(taskId)); + } + return R.success(); + } + + return R.success(); + } + + /** + * 获取状态名称 + */ + private String getStatusName(Integer status) { + if (status == null) { + return "未知"; + } + switch (status) { + case 0: + return "初始化"; + case 1: + return "待接收"; + case 2: + return "待检测"; + case 3: + return "已填报"; + case 4: + return "待编辑加药量"; + case 5: + return "待审核"; + case 6: + return "待领药"; + case 8: + return "待复检"; + case 9: + return "待下发"; + case 10: + return "异常结束"; + case 11: + return "正常结束"; + case 12: + return "暂存"; + default: + return "未知状态(" + status + ")"; + } + } }