WMS出库导入单位处理修改

This commit is contained in:
秦鸿展
2026-03-10 13:51:18 +08:00
parent 906c65c164
commit 27fdb5cd3b
2 changed files with 66 additions and 2 deletions
@@ -533,7 +533,7 @@ public class StockReceiptOrderApplicationService {
}
/**
* 递归填充明细行的物料单位信息(如果单位信息为空)
* 递归填充明细行的物料单位信息、包装规格(如果为空)
* @param receiptMaterialDetailPOList 收货物料明细列表
* @param materialBaseInfoMap 物料基础信息Mapkey: materialBaseInfoId, value: MaterialBaseInfoPO
* @param packDetailMap 包装规格明细Mapkey: materialBaseInfoId, value: PackDetailFeignPO,单位代码为EA
@@ -549,6 +549,19 @@ public class StockReceiptOrderApplicationService {
Long materialBaseInfoId = receiptMaterialDetailPO.getMaterialBaseInfoId();
if (materialBaseInfoId != null) {
MaterialBaseInfoPO materialBaseInfoPO = materialBaseInfoMap.get(materialBaseInfoId);
// 填充包装规格(packCode、packName、packId)为空时从物料基础信息获取
if (materialBaseInfoPO != null) {
if (receiptMaterialDetailPO.getPackId() == null && materialBaseInfoPO.getPackId() != null) {
receiptMaterialDetailPO.setPackId(materialBaseInfoPO.getPackId());
}
if (StringUtils.isBlank(receiptMaterialDetailPO.getPackCode()) && StringUtils.isNotBlank(materialBaseInfoPO.getPackCode())) {
receiptMaterialDetailPO.setPackCode(materialBaseInfoPO.getPackCode());
}
if (StringUtils.isBlank(receiptMaterialDetailPO.getPackName()) && StringUtils.isNotBlank(materialBaseInfoPO.getPackName())) {
receiptMaterialDetailPO.setPackName(materialBaseInfoPO.getPackName());
}
}
// 只有当单位信息为空时才填充
if (StringUtils.isBlank(receiptMaterialDetailPO.getUnitCode())
|| StringUtils.isBlank(receiptMaterialDetailPO.getUnitName())) {
@@ -874,11 +887,53 @@ public class StockReceiptOrderApplicationService {
* @return Boolean
*/
public Boolean receivingGoodsByApp(StockReceiptOrderDO stockReceiptOrderDO){
// PDA 收货与 PC 一致,保留主项子项结构
// PDA 收货回传时,将第一项作为主项,其余作为其子项
ensureFirstItemAsParent(stockReceiptOrderDO);
StockReceiptOrderDO assembleStockReceiptOrderDO = assembleParamByReceipt(stockReceiptOrderDO);
return stockReceiptOrderDomainService.receivingGoods(assembleStockReceiptOrderDO);
}
/**
* PDA 收货回传时,将 materialDetailList 的第一项作为主项(level 1),其余项作为其子项(level 2)
*/
private void ensureFirstItemAsParent(StockReceiptOrderDO stockReceiptOrderDO) {
List<ReceiptMaterialDetailDO> list = stockReceiptOrderDO.getMaterialDetailList();
if (CollectionUtils.isEmpty(list) || list.size() <= 1) {
return;
}
// 若第一项已有子项,说明已是主项子项结构,不处理
if (!CollectionUtils.isEmpty(list.get(0).getChildren())) {
return;
}
StockReceiptOrderPO stockReceiptOrderPO = stockReceiptOrderDomainService.getInfo(stockReceiptOrderDO.getReceiptOrderId());
if (stockReceiptOrderPO == null) {
return;
}
ReceiptMaterialDetailDO receiptMaterialDetailDOByQuery = new ReceiptMaterialDetailDO();
receiptMaterialDetailDOByQuery.setReceiptOrderNumber(stockReceiptOrderPO.getReceiptOrderNumber());
List<ReceiptMaterialDetailPO> receiptMaterialDetailPODbList = receiptMaterialDetailDomainService.queryList(receiptMaterialDetailDOByQuery);
Map<Long, ReceiptMaterialDetailPO> dbMap = receiptMaterialDetailPODbList.stream()
.collect(Collectors.toMap(ReceiptMaterialDetailPO::getMaterialDetailId, Function.identity()));
ReceiptMaterialDetailDO first = list.get(0);
ReceiptMaterialDetailPO firstPO = dbMap.get(first.getMaterialDetailId());
if (firstPO == null || firstPO.getUniqueId() == null) {
return;
}
Long parentUniqueId = firstPO.getUniqueId();
List<ReceiptMaterialDetailDO> children = new ArrayList<>();
for (int i = 1; i < list.size(); i++) {
ReceiptMaterialDetailDO child = list.get(i);
child.setLevel(2);
child.setParentUniqueId(parentUniqueId);
children.add(child);
}
first.setLevel(1);
first.setChildren(children);
List<ReceiptMaterialDetailDO> newList = new ArrayList<>();
newList.add(first);
stockReceiptOrderDO.setMaterialDetailList(newList);
}
/**
* @description 完成收货
* @author ZhouGY
@@ -386,6 +386,15 @@ public class ExcelParseService {
outMaterialDetailDO.setSkucode(materialBaseInfoPO.getBarCode());
}
}
// 单位:优先使用Excel中的"单位"字段,如果为空则使用"申报单位",如果还为空则从物料主数据获取(与入库单导入处理一致)
String unit = StringUtils.isNotBlank(outMaterialDetailDO.getUnit()) ? outMaterialDetailDO.getUnit() : null;
if (StringUtils.isBlank(unit) && StringUtils.isNotBlank(outMaterialDetailDO.getDeclareUnit())) {
unit = outMaterialDetailDO.getDeclareUnit();
}
if (StringUtils.isBlank(unit) && materialBaseInfoPO != null && StringUtils.isNotBlank(materialBaseInfoPO.getUnitName())) {
unit = materialBaseInfoPO.getUnitName();
}
outMaterialDetailDO.setUnit(unit);
}
}