diff --git a/klp-wms/src/main/java/com/klp/controller/WmsTransferOrderItemController.java b/klp-wms/src/main/java/com/klp/controller/WmsTransferOrderItemController.java index 5b023ac3..80bd1a80 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsTransferOrderItemController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsTransferOrderItemController.java @@ -2,6 +2,7 @@ package com.klp.controller; import java.util.List; import java.util.Arrays; +import java.util.Map; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; @@ -107,6 +108,14 @@ public class WmsTransferOrderItemController extends BaseController { return R.ok(iWmsTransferOrderItemService.matchOrCreateMaterial(itemId, itemType)); } + /** + * 根据钢卷列表匹配或创建物料 + */ + @PostMapping("/itemType/matchOrCreateByCoils") + public R> matchOrCreateItemByCoilIds(@RequestBody List pairs) { + return R.ok(iWmsTransferOrderItemService.matchOrCreateItemByCoilIds(pairs)); + } + /** * 批量新增调拨单明细 */ diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsTransferOrderItemBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsTransferOrderItemBo.java index 65da5305..82e54384 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsTransferOrderItemBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsTransferOrderItemBo.java @@ -79,4 +79,7 @@ public class WmsTransferOrderItemBo extends BaseEntity { */ private Integer isTransferred; + // 修改之后的itemType + private String itemTypeAfter; + } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsTransferOrderItemService.java b/klp-wms/src/main/java/com/klp/service/IWmsTransferOrderItemService.java index 0560051d..69c573e3 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsTransferOrderItemService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsTransferOrderItemService.java @@ -8,6 +8,7 @@ import com.klp.common.core.domain.PageQuery; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 调拨单明细Service接口 @@ -67,4 +68,9 @@ public interface IWmsTransferOrderItemService { * 取消调拨 */ Boolean cancelTransfer(Long orderItemId); + + /** + * 根据钢卷列表匹配或创建物料 + */ + Map matchOrCreateItemByCoilIds(List pairs); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderItemServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderItemServiceImpl.java index c816b9df..8e0d0076 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderItemServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderItemServiceImpl.java @@ -624,7 +624,7 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer // 使用 UpdateWrapper 显式更新字段(包括NULL值) LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(WmsMaterialCoil::getCoilId, coilId); - + // 设置需要更新的字段 if (originalItemId != null && originalMaterialType != null) { updateWrapper.set(WmsMaterialCoil::getItemId, originalItemId); @@ -636,7 +636,7 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer } // 清空调拨类型(显式设置为NULL) updateWrapper.set(WmsMaterialCoil::getTransferType, null); - + coilMapper.update(null, updateWrapper); // 逻辑删除调拨明细记录(使用MyBatis-Plus的逻辑删除) @@ -644,4 +644,43 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer return true; } + + /** + * 根据钢卷列表匹配或创建物料 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Map matchOrCreateItemByCoilIds(List pairs) { + List coilIds = pairs.stream().map(WmsTransferOrderItemBo::getCoilId).collect(Collectors.toList()); + List coils = coilMapper.selectBatchIds(coilIds); + Map coilMap = coils.stream().collect(Collectors.toMap(WmsMaterialCoil::getCoilId, v -> v, (a, b) -> a)); + + Map result = new HashMap<>(); + Map conversionCache = new HashMap<>(); + + for (WmsTransferOrderItemBo pair : pairs) { + Long coilId = pair.getCoilId(); + String itemTypeAfter = pair.getItemTypeAfter(); + + WmsMaterialCoil coil = coilMap.get(coilId); + if (coil == null) { + throw new IllegalArgumentException("钢卷不存在: " + coilId); + } + + Long itemId; + if (Objects.equals(coil.getItemType(), itemTypeAfter)) { + itemId = coil.getItemId(); + } else { + Long cached = conversionCache.get(coil.getItemId()); + if (cached != null) { + itemId = cached; + } else { + itemId = matchOrCreateMaterial(coil.getItemId(), coil.getItemType()); + conversionCache.put(coil.getItemId(), itemId); + } + } + result.put(coilId, itemId); + } + return result; + } }