From 2d9795e16a8b2c2c2d6357ae41941a4e8842cd39 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 19 Jan 2026 14:11:06 +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=A4=8D=E6=B4=BB=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 IWmsMaterialCoilService 中新增 reviveCoil 方法定义 - 在 WmsMaterialCoilController 中添加 /reviveCoil/{coilId} 接口 - 在 WmsMaterialCoilServiceImpl 中实现复活逻辑 - 实现将 dataType=0 的历史钢卷恢复为 dataType=1 的当前钢卷 - 添加实际库位绑定清空和钢卷号重复检查功能 - 完善异常处理和事务回滚机制 --- .../controller/WmsMaterialCoilController.java | 26 +++++++ .../klp/service/IWmsMaterialCoilService.java | 10 +++ .../impl/WmsMaterialCoilServiceImpl.java | 69 +++++++++++++++++++ 3 files changed, 105 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 bcb7254e..e432dd2a 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java @@ -300,5 +300,31 @@ public class WmsMaterialCoilController extends BaseController { return R.ok(result); } + /** + * 复活历史钢卷 + * 将dataType=0的历史钢卷恢复为dataType=1的当前钢卷 + * 同时清空实际库位绑定,并检查当前钢卷号是否重复 + * + * @param coilId 钢卷ID + * @return 复活结果,包含success状态、错误信息、钢卷ID和当前钢卷号 + */ + @Log(title = "钢卷物料表", businessType = BusinessType.UPDATE) + @GetMapping("/reviveCoil/{coilId}") + public R> reviveCoil( + @NotNull(message = "钢卷ID不能为空") + @PathVariable("coilId") Long coilId) { + try { + Map result = iWmsMaterialCoilService.reviveCoil(coilId); + // 根据业务结果返回成功/失败的统一响应 + if (Boolean.TRUE.equals(result.get("success"))) { + return R.ok(result); + } else { + return R.fail(result.get("message").toString(), result); + } + } catch (Exception 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 3b3f4f91..afc7e36a 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java @@ -148,5 +148,15 @@ public interface IWmsMaterialCoilService { * } */ Map getDuplicateCoilGroups(); + + /** + * 复活历史钢卷 + * 将dataType=0的历史钢卷恢复为dataType=1的当前钢卷 + * 同时清空实际库位绑定,并检查当前钢卷号是否重复 + * + * @param coilId 钢卷ID + * @return 复活结果,包含success状态和错误信息 + */ + Map reviveCoil(@NotNull(message = "钢卷ID不能为空") Long coilId); } 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 b324a0e4..6f946ddb 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 @@ -2753,4 +2753,73 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { return result; } + /** + * 复活历史钢卷 + * 将dataType=0的历史钢卷恢复为dataType=1的当前钢卷 + * 同时清空实际库位绑定,并检查当前钢卷号是否重复 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Map reviveCoil(Long coilId) { + Map result = new HashMap<>(); + result.put("success", false); + + // 1. 查询钢卷信息 + WmsMaterialCoil coil = baseMapper.selectById(coilId); + if (coil == null) { + result.put("message", "钢卷不存在"); + return result; + } + + // 2. 检查是否为历史数据 + if (coil.getDataType() != 0) { + result.put("message", "该钢卷不是历史数据,无需复活"); + return result; + } + + // 3. 检查当前钢卷号是否重复(现存且未逻辑删除的) + if (StringUtils.isNotBlank(coil.getCurrentCoilNo())) { + LambdaQueryWrapper duplicateCheck = Wrappers.lambdaQuery(); + duplicateCheck.eq(WmsMaterialCoil::getCurrentCoilNo, coil.getCurrentCoilNo()) + .eq(WmsMaterialCoil::getDelFlag, 0) + .eq(WmsMaterialCoil::getDataType, 1) // 只检查当前数据 + .ne(WmsMaterialCoil::getCoilId, coilId); // 排除自身 + + long duplicateCount = baseMapper.selectCount(duplicateCheck); + if (duplicateCount > 0) { + result.put("message", "当前钢卷号[" + coil.getCurrentCoilNo() + "]已存在重复记录,请先删除错误钢卷后再复活"); + result.put("duplicateCoilNo", coil.getCurrentCoilNo()); + return result; + } + } + + // 4. 执行复活操作 + try { + // 记录原实际库位ID,用于后续释放 + Long oldActualWarehouseId = coil.getActualWarehouseId(); + + // 更新钢卷状态:dataType=1,actualWarehouseId=null + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(); + updateWrapper.eq(WmsMaterialCoil::getCoilId, coilId) + .set(WmsMaterialCoil::getDataType, 1) // 恢复为当前数据 + .set(WmsMaterialCoil::getActualWarehouseId, (Long) null); // 清空实际库位绑定 + + int updateCount = baseMapper.update(null, updateWrapper); + if (updateCount <= 0) { + throw new RuntimeException("复活钢卷失败:数据库更新异常"); + } + + result.put("success", true); + result.put("message", "钢卷复活成功"); + result.put("coilId", coilId); + result.put("currentCoilNo", coil.getCurrentCoilNo()); + + } catch (Exception e) { + log.error("复活钢卷失败,coilId: {}", coilId, e); + throw new RuntimeException("复活钢卷失败: " + e.getMessage()); + } + + return result; + } + }