From 4e0247aedf0decab92ef5088e783562d6609d42a Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 22 Jan 2026 14:58:03 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E6=B7=BB=E5=8A=A0=E9=92=A2?= =?UTF-8?q?=E5=8D=B7=E5=88=86=E5=8D=B7=E5=8F=96=E6=B6=88=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 IWmsMaterialCoilService 接口中新增 cancelSpecialSplit 方法 - 在 WmsMaterialCoilController 中添加 /specialSplit/cancel 接口 - 在 WmsMaterialCoilServiceImpl 中实现 cancelSpecialSplit 业务逻辑 - 实现分卷操作的取消功能,包括释放锁和删除待操作记录 - 添加对已完成分卷操作的校验,防止误取消 - 实现母卷状态检查和独占锁释放机制 --- .../controller/WmsMaterialCoilController.java | 16 ++++++ .../klp/service/IWmsMaterialCoilService.java | 1 + .../impl/WmsMaterialCoilServiceImpl.java | 54 +++++++++++++++++++ 3 files changed, 71 insertions(+) diff --git a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java index 69285dd6..f3b9c451 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java @@ -394,6 +394,22 @@ public class WmsMaterialCoilController extends BaseController { } + // 取消单步分卷操作 + @Log(title = "钢卷物料表", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PostMapping("/specialSplit/cancel") + public R> cancelSpecialSplit( + @NotNull(message = "待操作记录ID不能为空") + @RequestParam Long pendingActionId) { + + try { + Map result = iWmsMaterialCoilService.cancelSpecialSplit(pendingActionId); + return R.ok(result); + } catch (RuntimeException e) { + return R.fail("取消分卷失败:" + e.getMessage()); + } + } + } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java index d6c9e693..3a1bc0df 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java @@ -190,5 +190,6 @@ public interface IWmsMaterialCoilService { */ Map completeSpecialSplit(@NotNull(message = "待操作记录ID不能为空") Long pendingActionId); + Map cancelSpecialSplit(@NotNull(message = "待操作记录ID不能为空") Long pendingActionId); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index 69ff4f72..0d80e542 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -3468,6 +3468,60 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { return result; } + //Map cancelSpecialSplit(@NotNull(message = "待操作记录ID不能为空") Long pendingActionId); + /** + * 单步分卷 - 取消分卷(释放锁 + 回滚子卷) + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Map cancelSpecialSplit(Long pendingActionId) { + + Map result = new HashMap<>(); + result.put("success", false); + + // 1. 查询待操作记录 + WmsCoilPendingActionVo pendingAction = coilPendingActionService.queryById(pendingActionId); + if (pendingAction == null) { + throw new RuntimeException("待操作记录不存在"); + } + + // 2. 已完成的分卷不允许取消 + if (Objects.equals(pendingAction.getActionStatus(), 2)) { + throw new RuntimeException("该分卷操作已完成,无法取消"); + } + + // 删除待操作记录 + coilPendingActionService.deleteWithValidByIds(Arrays.asList(pendingActionId), false); + // 3. 查询母卷 + WmsMaterialCoil parentCoil = baseMapper.selectById(pendingAction.getCoilId()); + if (parentCoil == null) { + throw new RuntimeException("母卷不存在"); + } + + if (parentCoil.getDataType() == 0) { + throw new RuntimeException("母卷已成为历史数据,无法取消分卷"); + } + + // 4. 校验母卷是否处于“单步分卷中” + if (Objects.equals(parentCoil.getExclusiveStatus(), 0)) { + throw new RuntimeException("母卷未处于单步分卷状态,无法取消"); + } + + // 释放母卷独占锁 + if (Objects.equals(parentCoil.getExclusiveStatus(), 1)) { + LambdaUpdateWrapper parentUpdate = new LambdaUpdateWrapper<>(); + parentUpdate.eq(WmsMaterialCoil::getCoilId, parentCoil.getCoilId()) + .set(WmsMaterialCoil::getExclusiveStatus, 0); + baseMapper.update(null, parentUpdate); + } + + result.put("success", true); + result.put("message", "取消单步分卷成功"); + + return result; + } + + }