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; + } + }