feat(wms): 添加转库批量入库接口
- 在IWmsTransferOrderItemService中新增matchOrCreateItemByCoilIds方法 - 添加WmsTransferOrderItemBo的itemTypeAfter字段 - 新增WmsCoilItemTypePairBo导入依赖 - 实现matchOrCreateItemByCoilIds服务端逻辑 - 添加控制器端点/itemType/matchOrCreateByCoils - 优化material coil更新逻辑的空行格式 - 实现基于钢卷ID列表的物料匹配或创建映射功能
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量新增调拨单明细
|
||||
*/
|
||||
|
||||
@@ -79,4 +79,7 @@ public class WmsTransferOrderItemBo extends BaseEntity {
|
||||
*/
|
||||
private Integer isTransferred;
|
||||
|
||||
// 修改之后的itemType
|
||||
private String itemTypeAfter;
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user