feat(wms): 添加转库批量入库接口

- 在IWmsTransferOrderItemService中新增matchOrCreateItemByCoilIds方法
- 添加WmsTransferOrderItemBo的itemTypeAfter字段
- 新增WmsCoilItemTypePairBo导入依赖
- 实现matchOrCreateItemByCoilIds服务端逻辑
- 添加控制器端点/itemType/matchOrCreateByCoils
- 优化material coil更新逻辑的空行格式
- 实现基于钢卷ID列表的物料匹配或创建映射功能
This commit is contained in:
2026-05-18 11:09:39 +08:00
parent 825879c1a8
commit 4010a4dca5
4 changed files with 59 additions and 2 deletions

View File

@@ -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<Map<Long, Long>> matchOrCreateItemByCoilIds(@RequestBody List<WmsTransferOrderItemBo> pairs) {
return R.ok(iWmsTransferOrderItemService.matchOrCreateItemByCoilIds(pairs));
}
/**
* 批量新增调拨单明细
*/

View File

@@ -79,4 +79,7 @@ public class WmsTransferOrderItemBo extends BaseEntity {
*/
private Integer isTransferred;
// 修改之后的itemType
private String itemTypeAfter;
}

View File

@@ -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<Long, Long> matchOrCreateItemByCoilIds(List<WmsTransferOrderItemBo> pairs);
}

View File

@@ -624,7 +624,7 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
// 使用 UpdateWrapper 显式更新字段包括NULL值
LambdaUpdateWrapper<WmsMaterialCoil> 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<Long, Long> matchOrCreateItemByCoilIds(List<WmsTransferOrderItemBo> pairs) {
List<Long> coilIds = pairs.stream().map(WmsTransferOrderItemBo::getCoilId).collect(Collectors.toList());
List<WmsMaterialCoil> coils = coilMapper.selectBatchIds(coilIds);
Map<Long, WmsMaterialCoil> coilMap = coils.stream().collect(Collectors.toMap(WmsMaterialCoil::getCoilId, v -> v, (a, b) -> a));
Map<Long, Long> result = new HashMap<>();
Map<Long, Long> 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;
}
}