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