From 275f6181ceaf1654bde1ed2615435618b43db5ed Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 16 Mar 2026 14:10:17 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E5=9C=A8=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E4=B8=AD=E6=B7=BB=E5=8A=A0=E5=90=88=E5=8D=B7?= =?UTF-8?q?=E4=B9=8B=E5=90=8E=E7=9A=84=E9=92=A2=E5=8D=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 IWmsMaterialCoilService 中新增 mergeCoils 方法实现合卷操作 - 扩展 WmsMaterialCoilBo 类添加 actionId、actionType 和 mergedCoilId 字段 - 在 WmsMaterialCoilController 中添加 /merge 接口支持合卷新功能 - 实现合卷逻辑为 newCoils 中每个被合的卷添加 actionId 和 actionType - 支持通过 actionId 更新操作记录状态并设置完成时间 - 实现合卷后新钢卷 ID 的返回和操作记录的自动创建更新 --- .../controller/WmsMaterialCoilController.java | 13 ++++ .../com/klp/domain/bo/WmsMaterialCoilBo.java | 15 ++++ .../klp/service/IWmsMaterialCoilService.java | 8 ++ .../impl/WmsMaterialCoilServiceImpl.java | 74 +++++++++++++++++++ 4 files changed, 110 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 d98036df..61d80e01 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java @@ -163,6 +163,19 @@ public class WmsMaterialCoilController extends BaseController { return toAjax(iWmsMaterialCoilService.updateByBo(bo)); } + /** + * 合卷操作 + * 在批量更新逻辑的基础上,为newCoils中的每个被合的卷加入actionId和actionType + * 如果传递了actionId,则更新操作记录状态为已完成,并设置完成时间和合卷后的钢卷ID到processedCoilIds + * 如果未传actionId,则创建新的操作记录 + */ + @Log(title = "钢卷物料表-合卷", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PostMapping("/merge") + public R mergeCoils(@Validated(EditGroup.class) @RequestBody WmsMaterialCoilBo bo) { + return toAjax(iWmsMaterialCoilService.mergeCoils(bo)); + } + /** * 简单更新钢卷物料表 * 直接更新属性内容,不进行历史记录处理 diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java index bbf8bbfb..78c5dbe2 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java @@ -126,6 +126,21 @@ public class WmsMaterialCoilBo extends BaseEntity { */ private List newCoils; + /** + * 操作记录ID(用于合卷操作关联) + */ + private Long actionId; + + /** + * 操作类型(1=分卷,2=合卷,3=更新) + */ + private Integer actionType; + + /** + * 合卷后的新钢卷ID(用于返回) + */ + private Long mergedCoilId; + //时间格式化 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 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 c68b8594..17d98f03 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java @@ -48,6 +48,14 @@ public interface IWmsMaterialCoilService { */ Boolean updateByBo(WmsMaterialCoilBo bo); + /** + * 合卷操作 + * 在批量更新逻辑的基础上,为newCoils中的每个被合的卷加入actionId和actionType + * 如果传递了actionId,则更新操作记录状态为已完成,并设置完成时间和合卷后的钢卷ID到processedCoilIds + * 如果未传actionId,则创建新的操作记录 + */ + Boolean mergeCoils(WmsMaterialCoilBo bo); + /** * 简单更新钢卷物料表 * 直接更新属性内容,不进行历史记录处理 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 2a2e1be9..72f033a4 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 @@ -47,6 +47,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import java.util.*; import java.util.stream.Collectors; import java.math.BigDecimal; +import java.util.Arrays; /** * 钢卷物料表Service业务层处理 @@ -1673,6 +1674,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { if (mergeNewActualWarehouseId != null && mergeNewActualWarehouseId != -1L) { recordWarehouseOperationLog(newCoil.getCoilId(), mergeNewActualWarehouseId, 2, 1, "合卷操作-加工入库"); } + // 合卷完成后,设置新钢卷ID到bo对象中,方便外部获取 + bo.setMergedCoilId(newCoil.getCoilId()); } return true; @@ -2553,6 +2556,77 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { log.warn("记录钢卷库区操作日志失败:{}", e.getMessage()); } } + + /** + * 合卷操作 + * 在批量更新逻辑的基础上,为newCoils中的每个被合的卷加入actionId和actionType + * 如果传递了actionId,则更新操作记录状态为已完成,并设置完成时间和合卷后的钢卷ID到processedCoilIds + * 如果未传actionId,则创建新的操作记录 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean mergeCoils(WmsMaterialCoilBo bo) { + if (bo.getNewCoils() == null || bo.getNewCoils().isEmpty()) { + throw new RuntimeException("合卷操作需要提供参与合卷的钢卷列表"); + } + + // 先执行批量更新逻辑(分卷/合卷) + Boolean batchResult = updateByBatch(bo); + if (!Boolean.TRUE.equals(batchResult)) { + throw new RuntimeException("合卷操作失败"); + } + + // 直接从bo中获取合卷后的新钢卷ID + Long mergedCoilId = bo.getMergedCoilId(); + if (mergedCoilId == null) { + throw new RuntimeException("未找到合卷后的新钢卷ID"); + } + + Date now = new Date(); + + // 为newCoils中的每个被合的卷处理操作记录 + for (WmsMaterialCoilBo originalCoilBo : bo.getNewCoils()) { + Long coilId = originalCoilBo.getCoilId(); + Integer actionType = originalCoilBo.getActionType(); + Long actionId = originalCoilBo.getActionId(); + + if (coilId == null) { + continue; + } + + // 获取原始钢卷信息 + WmsMaterialCoil originalCoil = baseMapper.selectById(coilId); + if (originalCoil == null) { + continue; + } + + if (actionId != null) { + // 如果传递了actionId,则更新操作记录状态为已完成 + WmsCoilPendingActionBo pendingActionBo = new WmsCoilPendingActionBo(); + pendingActionBo.setActionId(actionId); + pendingActionBo.setActionStatus(2); + pendingActionBo.setCompleteTime(now); + // 将合卷后的钢卷ID添加到processedCoilIds + pendingActionBo.setProcessedCoilIds(mergedCoilId.toString()); + coilPendingActionService.updateByBo(pendingActionBo); + } else if (actionType != null) { + // 如果未传actionId,则创建新的操作记录 + WmsCoilPendingActionBo pendingActionBo = new WmsCoilPendingActionBo(); + pendingActionBo.setCoilId(coilId); + pendingActionBo.setCurrentCoilNo(originalCoil.getCurrentCoilNo()); + pendingActionBo.setActionType(actionType); + pendingActionBo.setActionStatus(2); + pendingActionBo.setSourceType("manual"); + pendingActionBo.setPriority(0); + pendingActionBo.setCompleteTime(now); + pendingActionBo.setProcessedCoilIds(mergedCoilId.toString()); + coilPendingActionService.insertByBo(pendingActionBo); + } + } + + return true; + } + /** * 钢卷发货撤回 * @param coilId