PDA上架修改

This commit is contained in:
秦鸿展
2026-03-11 14:02:12 +08:00
parent 9912271a7a
commit 6f6fa74908
5 changed files with 270 additions and 47 deletions
@@ -1024,10 +1024,10 @@ public class StockReceiptOrderApplicationService {
if (firstChildBaseInfoId != null && parentBaseInfoId != null && !firstChildBaseInfoId.equals(parentBaseInfoId)) {
return false;
}
// 6. PDA 未传 materialDetailId/uniqueId 时:getInfoByApp 的 parent_copy 总是 children 第一条,
// 真实子项通常会有 materialDetailId,故无 id 时视为 parent_copy 并合并
// 6. 子项无 materialDetailId 且无 uniqueId:可能是新创建的子项(同一次收 250+250),不能视为 parent_copy
// 收货 getInfoByApp 不添加 parent_copyparent_copy 必有 materialDetailId 或 uniqueId 与主项相同
if (firstChildId == null && firstChildUniqueId == null) {
return true;
return false;
}
return false;
}
@@ -337,36 +337,152 @@ public class StockShelfOrderApplicationService {
*/
public Boolean upShelfByApp(StockShelfOrderDO stockReceiptOrderDO){
List<ShelfMaterialDetailDO> shelfMaterialDetailDOList = stockReceiptOrderDO.getMaterialDetailList();
shelfMaterialDetailDOList.forEach(shelfMaterialDetailDO -> {
List<ShelfMaterialDetailDO> shelfMaterialDetailDOChildrenList1 = shelfMaterialDetailDO.getChildren();
if (shelfMaterialDetailDOChildrenList1 != null && !shelfMaterialDetailDOChildrenList1.isEmpty() && shelfMaterialDetailDOChildrenList1.size() > 0) {
ShelfMaterialDetailDO shelfMaterialDetailDOChildren = null;
List<ShelfMaterialDetailDO> shelfMaterialDetailDOChildrenList11 = shelfMaterialDetailDO.getChildren().stream()
.filter(p -> p.getLevel() != null && 1 == p.getLevel())
.collect(Collectors.toList());
if (shelfMaterialDetailDOChildrenList11 != null && !shelfMaterialDetailDOChildrenList11.isEmpty() && shelfMaterialDetailDOChildrenList11.size() > 0) shelfMaterialDetailDOChildren = shelfMaterialDetailDOChildrenList11.get(0);
if (shelfMaterialDetailDOChildren != null) {
shelfMaterialDetailDO.setMaterialDetailId(shelfMaterialDetailDOChildren.getMaterialDetailId());
shelfMaterialDetailDO.setShelvesQuantity(shelfMaterialDetailDOChildren.getShelvesQuantity());
shelfMaterialDetailDO.setWarehouseId(shelfMaterialDetailDOChildren.getWarehouseId());
shelfMaterialDetailDO.setStorageSectionId(shelfMaterialDetailDOChildren.getStorageSectionId());
shelfMaterialDetailDO.setStorageLocationId(shelfMaterialDetailDOChildren.getStorageLocationId());
shelfMaterialDetailDO.setContainerId(shelfMaterialDetailDOChildren.getContainerId());
shelfMaterialDetailDO.setLevel(shelfMaterialDetailDOChildren.getLevel());
shelfMaterialDetailDO.setMaterialDetailSerialNumberList(shelfMaterialDetailDOChildren.getMaterialDetailSerialNumberList());
boolean firstItemHadChildrenBefore = !CollectionUtils.isEmpty(shelfMaterialDetailDOList)
&& !CollectionUtils.isEmpty(shelfMaterialDetailDOList.get(0).getChildren());
// PDA 平铺结构转父子结构(与收货一致)
ensureFirstItemAsParentForShelf(stockReceiptOrderDO);
if (firstItemHadChildrenBefore) {
// 主项子项结构:将 children 第一条(parent_copy)赋值给主项并删除,与收货 assignFirstChildToParentAndRemove 一致
assignFirstChildToParentAndRemoveForShelf(stockReceiptOrderDO);
} else {
// 非 getInfoByApp 结构:取第一个子项赋值给主项,保留其余子项
shelfMaterialDetailDOList = stockReceiptOrderDO.getMaterialDetailList();
shelfMaterialDetailDOList.forEach(shelfMaterialDetailDO -> {
List<ShelfMaterialDetailDO> shelfMaterialDetailDOChildrenList1 = shelfMaterialDetailDO.getChildren();
if (shelfMaterialDetailDOChildrenList1 != null && !shelfMaterialDetailDOChildrenList1.isEmpty()) {
ShelfMaterialDetailDO firstChild = shelfMaterialDetailDOChildrenList1.get(0);
shelfMaterialDetailDO.setMaterialDetailId(firstChild.getMaterialDetailId());
shelfMaterialDetailDO.setShelvesQuantity(firstChild.getShelvesQuantity());
shelfMaterialDetailDO.setWarehouseId(firstChild.getWarehouseId());
shelfMaterialDetailDO.setStorageSectionId(firstChild.getStorageSectionId());
shelfMaterialDetailDO.setStorageLocationId(firstChild.getStorageLocationId());
shelfMaterialDetailDO.setContainerId(firstChild.getContainerId());
shelfMaterialDetailDO.setLevel(firstChild.getLevel());
shelfMaterialDetailDO.setMaterialDetailSerialNumberList(firstChild.getMaterialDetailSerialNumberList());
// 保留其余子项(从索引1开始),统一设为 level 2
List<ShelfMaterialDetailDO> restChildren = new ArrayList<>();
for (int i = 1; i < shelfMaterialDetailDOChildrenList1.size(); i++) {
ShelfMaterialDetailDO c = shelfMaterialDetailDOChildrenList1.get(i);
c.setLevel(2);
restChildren.add(c);
}
shelfMaterialDetailDO.setChildren(restChildren);
}
//只留二级
List<ShelfMaterialDetailDO> shelfMaterialDetailDOChildrenList2 = shelfMaterialDetailDOChildrenList1.stream()
.filter(p -> p.getLevel() != null && 2 == p.getLevel())
.collect(Collectors.toList());
shelfMaterialDetailDO.setChildren(shelfMaterialDetailDOChildrenList2);
}
});
});
}
//上架装配参数
StockShelfOrderDO assembleStockShelfOrderDO = assembleParamByShelf(stockReceiptOrderDO);
return stockShelfOrderDomainService.upShelf(assembleStockShelfOrderDO);
}
/**
* PDA 上架回传时,将 materialDetailList 的第一项作为主项(level 1),其余项作为其子项(level 2)
* 仅当数据库中第二项为 level 2(真实子项)时才转换,与收货 ensureFirstItemAsParent 逻辑一致
*/
private void ensureFirstItemAsParentForShelf(StockShelfOrderDO stockShelfOrderDO) {
List<ShelfMaterialDetailDO> list = stockShelfOrderDO.getMaterialDetailList();
if (CollectionUtils.isEmpty(list) || list.size() <= 1) {
return;
}
if (!CollectionUtils.isEmpty(list.get(0).getChildren())) {
return;
}
StockShelfOrderPO stockShelfOrderPO = stockShelfOrderDomainService.getInfo(stockShelfOrderDO.getShelfOrderId());
if (stockShelfOrderPO == null) {
return;
}
ShelfMaterialDetailDO shelfMaterialDetailDOByQuery = new ShelfMaterialDetailDO();
shelfMaterialDetailDOByQuery.setShelfOrderNumber(stockShelfOrderPO.getShelfOrderNumber());
List<ShelfMaterialDetailPO> shelfMaterialDetailPODbList = shelfMaterialDetailDomainService.queryList(shelfMaterialDetailDOByQuery);
Map<Long, ShelfMaterialDetailPO> dbMap = shelfMaterialDetailPODbList.stream()
.collect(Collectors.toMap(ShelfMaterialDetailPO::getMaterialDetailId, Function.identity()));
Map<Long, ShelfMaterialDetailPO> dbMapByUniqueId = shelfMaterialDetailPODbList.stream()
.filter(po -> po.getUniqueId() != null)
.collect(Collectors.toMap(ShelfMaterialDetailPO::getUniqueId, Function.identity()));
ShelfMaterialDetailDO first = list.get(0);
ShelfMaterialDetailPO firstPO = dbMap.get(first.getMaterialDetailId());
if (firstPO == null && first.getUniqueId() != null) {
firstPO = dbMapByUniqueId.get(first.getUniqueId());
}
if (firstPO == null || firstPO.getUniqueId() == null) {
return;
}
ShelfMaterialDetailDO second = list.get(1);
if (second != null) {
ShelfMaterialDetailPO secondPO = dbMap.get(second.getMaterialDetailId());
if (secondPO == null && second.getUniqueId() != null) {
secondPO = dbMapByUniqueId.get(second.getUniqueId());
}
if (secondPO != null && secondPO.getLevel() != null && secondPO.getLevel() == 1) {
return;
}
}
Long parentUniqueId = firstPO.getUniqueId();
List<ShelfMaterialDetailDO> children = new ArrayList<>();
for (int i = 1; i < list.size(); i++) {
ShelfMaterialDetailDO child = list.get(i);
child.setLevel(2);
child.setParentUniqueId(parentUniqueId);
children.add(child);
}
first.setLevel(1);
first.setChildren(children);
List<ShelfMaterialDetailDO> newList = new ArrayList<>();
newList.add(first);
stockShelfOrderDO.setMaterialDetailList(newList);
}
/**
* 上架时:将 children 中第一条(parent_copy)的值赋给主项,并删除第一条;与收货 assignFirstChildToParentAndRemove 一致。
* getInfoByApp 有子项时会将 parent_copy 作为 children 第一条,PDA 提交时需将其值回填主项并移除。
*/
private void assignFirstChildToParentAndRemoveForShelf(StockShelfOrderDO stockShelfOrderDO) {
List<ShelfMaterialDetailDO> list = stockShelfOrderDO.getMaterialDetailList();
if (CollectionUtils.isEmpty(list)) {
return;
}
for (ShelfMaterialDetailDO parent : list) {
List<ShelfMaterialDetailDO> children = parent.getChildren();
if (CollectionUtils.isEmpty(children)) {
continue;
}
ShelfMaterialDetailDO firstChild = children.get(0);
if (!isShelfParentCopy(parent, firstChild)) {
continue;
}
BeanUtils.copyProperties(firstChild, parent, "children", "parentUniqueId", "uniqueId", "materialDetailId");
List<ShelfMaterialDetailDO> newChildren = new ArrayList<>();
for (int i = 1; i < children.size(); i++) {
ShelfMaterialDetailDO c = children.get(i);
c.setLevel(2);
newChildren.add(c);
}
parent.setChildren(newChildren);
}
}
/**
* 判断第一条子项是否为 parent_copy(主项拷贝)。与主项同 materialDetailId/uniqueId 则为 parent_copy。
*/
private boolean isShelfParentCopy(ShelfMaterialDetailDO parent, ShelfMaterialDetailDO firstChild) {
Long parentId = parent.getMaterialDetailId();
Long firstChildId = firstChild.getMaterialDetailId();
Long parentUniqueId = parent.getUniqueId();
Long firstChildUniqueId = firstChild.getUniqueId();
if (parentId != null && parentId.equals(firstChildId)) {
return true;
}
if (parentUniqueId != null && parentUniqueId.equals(firstChildUniqueId)) {
return true;
}
if (firstChildId != null && parentId != null && !firstChildId.equals(parentId)) {
return false;
}
if (firstChildUniqueId != null && parentUniqueId != null && !firstChildUniqueId.equals(parentUniqueId)) {
return false;
}
return firstChildId == null && firstChildUniqueId == null;
}
private MaterialInventory getParam(ShelfMaterialDetailDO shelfMaterialDetailDO, List<String> fieldNames,Long shipperId){
MaterialInventory param = new MaterialInventory();
@@ -471,13 +587,22 @@ public class StockShelfOrderApplicationService {
ShelfMaterialDetailDO shelfMaterialDetailDOByQuery = new ShelfMaterialDetailDO();
shelfMaterialDetailDOByQuery.setShelfOrderNumber(stockShelfOrderPO.getShelfOrderNumber());
List<ShelfMaterialDetailPO> shelfMaterialDetailPODbList = shelfMaterialDetailDomainService.queryList(shelfMaterialDetailDOByQuery);
Map<Long, ShelfMaterialDetailPO> receiptMaterialDetailDbMap = shelfMaterialDetailPODbList.stream().collect(Collectors.toMap(ShelfMaterialDetailPO::getMaterialDetailId, Function.identity()));
Map<Long, ShelfMaterialDetailPO> shelfMaterialDetailDbMap = shelfMaterialDetailPODbList.stream().collect(Collectors.toMap(ShelfMaterialDetailPO::getMaterialDetailId, Function.identity()));
Map<Long, ShelfMaterialDetailPO> shelfMaterialDetailDbMapByUniqueId = shelfMaterialDetailPODbList.stream()
.filter(po -> po.getUniqueId() != null)
.collect(Collectors.toMap(ShelfMaterialDetailPO::getUniqueId, Function.identity()));
BigDecimal totalActualQuantity = BigDecimal.ZERO;//上架单当前作业收货数
int totalActualShelfMaterialQuantity = 0;//上架单收货物料种数
List<ShelfMaterialDetailDO> returnShelfMaterialDetailDOList = new ArrayList<>();
for (ShelfMaterialDetailDO shelfMaterialDetailDO : stockShelfOrderDO.getMaterialDetailList()){
//设置物料更多属性信息
ShelfMaterialDetailPO shelfMaterialDetailPO = receiptMaterialDetailDbMap.get(shelfMaterialDetailDO.getMaterialDetailId());
//设置物料更多属性信息:优先用 materialDetailId 查找,若为空则用 uniqueId 查找(兼容 PDA 只传 uniqueId 的场景,与收货一致)
ShelfMaterialDetailPO shelfMaterialDetailPO = shelfMaterialDetailDbMap.get(shelfMaterialDetailDO.getMaterialDetailId());
if (shelfMaterialDetailPO == null && shelfMaterialDetailDO.getUniqueId() != null) {
shelfMaterialDetailPO = shelfMaterialDetailDbMapByUniqueId.get(shelfMaterialDetailDO.getUniqueId());
if (shelfMaterialDetailPO != null) {
shelfMaterialDetailDO.setMaterialDetailId(shelfMaterialDetailPO.getMaterialDetailId());
}
}
if (shelfMaterialDetailPO == null){
throw new ServiceException("物料明细不存在");
}
@@ -512,32 +637,44 @@ public class StockShelfOrderApplicationService {
List<ShelfMaterialDetailDO> shelfMaterialDetailDOChildList = shelfMaterialDetailDO.getChildren();
if (!CollectionUtils.isEmpty(shelfMaterialDetailDOChildList)){
for (ShelfMaterialDetailDO shelfMaterialDetailDOChild : shelfMaterialDetailDOChildList){
ShelfMaterialDetailPO shelfMaterialDetailPOChildDb = receiptMaterialDetailDbMap.get(shelfMaterialDetailDOChild.getMaterialDetailId());
ShelfMaterialDetailPO shelfMaterialDetailPOChildDb = shelfMaterialDetailDbMap.get(shelfMaterialDetailDOChild.getMaterialDetailId());
if (shelfMaterialDetailPOChildDb == null && shelfMaterialDetailDOChild.getUniqueId() != null) {
shelfMaterialDetailPOChildDb = shelfMaterialDetailDbMapByUniqueId.get(shelfMaterialDetailDOChild.getUniqueId());
if (shelfMaterialDetailPOChildDb != null) {
shelfMaterialDetailDOChild.setMaterialDetailId(shelfMaterialDetailPOChildDb.getMaterialDetailId());
}
}
BigDecimal childShelvesQty = shelfMaterialDetailDOChild.getShelvesQuantity() != null ? shelfMaterialDetailDOChild.getShelvesQuantity() : BigDecimal.ZERO;
if (shelfMaterialDetailPOChildDb != null){
// 子项已存在:累加上架数量,并加入返回列表供 batchShelfUpdate 更新(与收货一致,避免重复提交/漏更新)
actualQuantity = actualQuantity.add(childShelvesQty);
ShelfMaterialDetailDO returnShelfMaterialDetailDOChild = new ShelfMaterialDetailDO();
BeanUtils.copyProperties(shelfMaterialDetailPOChildDb, returnShelfMaterialDetailDOChild);
BeanUtils.copyProperties(shelfMaterialDetailDOChild, returnShelfMaterialDetailDOChild, IgnoreNullUtil.getNullPropertyNames(shelfMaterialDetailDOChild));
setStorageLocationInfo(returnShelfMaterialDetailDOChild);
returnShelfMaterialDetailDOChild.setAllowModify(2);
returnShelfMaterialDetailDOChild.setLevel(2);
returnShelfMaterialDetailDOChild.setParentUniqueId(shelfMaterialDetailPO.getUniqueId());
returnShelfMaterialDetailDOChild.setActualQuantity(childShelvesQty);
returnShelfMaterialDetailDOChildList.add(returnShelfMaterialDetailDOChild);
continue;
}
ShelfMaterialDetailDO returnShelfMaterialDetailDOChild = new ShelfMaterialDetailDO();
BeanUtils.copyProperties(shelfMaterialDetailPO, returnShelfMaterialDetailDOChild, "materialDetailId","createBy","createByName","createTime",
"updateBy","updateByName","updateTime");
BeanUtils.copyProperties(shelfMaterialDetailDOChild, returnShelfMaterialDetailDOChild, IgnoreNullUtil.getNullPropertyNames(shelfMaterialDetailDOChild));
//设置上架信息
setStorageLocationInfo(shelfMaterialDetailDOChild);
//设置容器信息
// setContainerInfo(returnShelfMaterialDetailDOChild);
//上架后 设置该记录不允许被修改
returnShelfMaterialDetailDOChild.setAllowModify(2);
returnShelfMaterialDetailDOChild.setMaterialDetailSerialNumberList(shelfMaterialDetailDOChild.getMaterialDetailSerialNumberList());
returnShelfMaterialDetailDOChild.setUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId));
returnShelfMaterialDetailDOChild.setLevel(2);
returnShelfMaterialDetailDOChild.setParentUniqueId(shelfMaterialDetailPO.getUniqueId());
//是否开启了序列号管理
if (shelfMaterialDetailPO.getSerialNumberManage() == 1){
if (CollectionUtils.isEmpty(shelfMaterialDetailPO.getMaterialDetailSerialNumberList())){
throw new ServiceException("物料【" + shelfMaterialDetailPO.getMaterialName() + "】开启了序列号管理的序列号不能为空");
}
}
returnShelfMaterialDetailDOChild.setMaterialDetailSerialNumberList(shelfMaterialDetailDO.getMaterialDetailSerialNumberList());
//设置子项的实际数量(等于上架数量)
returnShelfMaterialDetailDOChild.setActualQuantity(returnShelfMaterialDetailDOChild.getShelvesQuantity());
returnShelfMaterialDetailDOChildList.add(returnShelfMaterialDetailDOChild);
actualQuantity = actualQuantity.add(returnShelfMaterialDetailDOChild.getShelvesQuantity());
@@ -20,6 +20,8 @@ import com.mhd.wms.domain.shelfMaterialDetail.repository.mapper.ShelfMaterialDet
import com.mhd.wms.domain.shelfMaterialDetail.repository.po.ShelfMaterialDetailPO;
import com.mhd.wms.domain.shelfMaterialDetail.repository.todo.ShelfMaterialDetailDO;
import com.mhd.wms.domain.stockShelfOrder.repository.todo.StockShelfOrderDO;
import com.mhd.common.core.utils.StringUtils;
import com.mhd.system.api.domain.BatchDetailFeignPO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -66,19 +68,19 @@ public class ShelfMaterialDetailImpl extends ServiceImpl<ShelfMaterialDetailMapp
public List<ShelfMaterialDetailPO> queryListChildren(ShelfMaterialDetailDO shelfMaterialDetailDO) {
List<ShelfMaterialDetailPO> shelfMaterialDetailPOList = shelfMaterialDetailMapper.queryList(shelfMaterialDetailDO);
//回显带上更多属性值批次标签
//回显带上更多属性值批次标签根据物料绑定的批次属性动态显示与收货一致
shelfMaterialDetailPOList.forEach(shelfMaterialDetailPO -> {
MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO();
materialMoreDetailDO.setMaterialDetailUniqueId(shelfMaterialDetailPO.getUniqueId());
List<MaterialMoreDetailPO> materialMoreDetailList = IMaterialMoreDetailService.queryList(materialMoreDetailDO);
//如果上架单的物料批属性还没存入值那么需要从批属性表获取
AjaxResult ajaxResult = null;
if (CollectionUtils.isEmpty(materialMoreDetailList)) {
ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(shelfMaterialDetailPO.getMaterialBaseInfoId());
AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(shelfMaterialDetailPO.getMaterialBaseInfoId());
if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) {
materialMoreDetailList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), MaterialMoreDetailPO.class);
List<BatchDetailFeignPO> batchList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class);
materialMoreDetailList = filterAndConvertToMaterialMoreDetail(batchList);
}
}
fillAttributeValueFromShelfMaterialDetail(shelfMaterialDetailPO, materialMoreDetailList);
shelfMaterialDetailPO.setMaterialMoreDetailList(materialMoreDetailList);
});
@@ -92,14 +94,14 @@ public class ShelfMaterialDetailImpl extends ServiceImpl<ShelfMaterialDetailMapp
MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO();
materialMoreDetailDO.setMaterialDetailUniqueId(childrenDetailPO.getUniqueId());
List<MaterialMoreDetailPO> materialMoreDetailList = IMaterialMoreDetailService.queryList(materialMoreDetailDO);
//如果上架单的物料批属性还没存入值那么需要从批属性表获取
AjaxResult ajaxResult = null;
if (CollectionUtils.isEmpty(materialMoreDetailList)) {
ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(childrenDetailPO.getMaterialBaseInfoId());
AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(childrenDetailPO.getMaterialBaseInfoId());
if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) {
materialMoreDetailList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), MaterialMoreDetailPO.class);
List<BatchDetailFeignPO> batchList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class);
materialMoreDetailList = filterAndConvertToMaterialMoreDetail(batchList);
}
}
fillAttributeValueFromShelfMaterialDetail(childrenDetailPO, materialMoreDetailList);
childrenDetailPO.setMaterialMoreDetailList(materialMoreDetailList);
});
materialDetailPO.setChildren(children);
@@ -107,6 +109,88 @@ public class ShelfMaterialDetailImpl extends ServiceImpl<ShelfMaterialDetailMapp
return receiptMaterialDetailPOParentList;
}
/**
* 过滤 isDisplay=1 的批次属性并转换为 MaterialMoreDetailPO与收货/PC 端一致
*/
private List<MaterialMoreDetailPO> filterAndConvertToMaterialMoreDetail(List<BatchDetailFeignPO> batchList) {
List<MaterialMoreDetailPO> result = new ArrayList<>();
if (CollectionUtils.isEmpty(batchList)) {
return result;
}
for (BatchDetailFeignPO po : batchList) {
if (po.getIsDisplay() == null || po.getIsDisplay() != 1) {
continue;
}
MaterialMoreDetailPO mpo = new MaterialMoreDetailPO();
mpo.setBatchId(po.getBatchId());
mpo.setBatchDetailId(po.getBatchDetailId());
mpo.setBatchLabels(po.getBatchLabels());
mpo.setInputControl(po.getInputControl());
mpo.setAttributeFormat(po.getAttributeFormat());
mpo.setAttributeOption(po.getAttributeOption());
result.add(mpo);
}
return result;
}
/**
* 从上架明细中获取收货数量重量体积面积批次属性值并填充到 materialMoreDetailList attributeValue
*/
private void fillAttributeValueFromShelfMaterialDetail(ShelfMaterialDetailPO shelfMaterialDetailPO, List<MaterialMoreDetailPO> materialMoreDetailList) {
if (CollectionUtils.isEmpty(materialMoreDetailList)) {
return;
}
for (MaterialMoreDetailPO materialMoreDetail : materialMoreDetailList) {
String attributeOption = materialMoreDetail.getAttributeOption();
String batchLabels = materialMoreDetail.getBatchLabels();
if (materialMoreDetail.getAttributeValue() != null && !materialMoreDetail.getAttributeValue().trim().isEmpty()) {
continue;
}
String refVal = null;
if ("InvoiceNo".equalsIgnoreCase(attributeOption) || "Invoice No".equalsIgnoreCase(batchLabels) || "发票号".equals(batchLabels)) {
refVal = shelfMaterialDetailPO.getExtAttr1();
} else if ("BatchRefNo".equalsIgnoreCase(attributeOption) || "Batch Ref NO's".equalsIgnoreCase(batchLabels) || "批次参考号".equals(batchLabels)) {
refVal = shelfMaterialDetailPO.getBatchRefNo();
} else if ("SheetRefNo".equalsIgnoreCase(attributeOption) || "Sheet Ref NO's".equalsIgnoreCase(batchLabels) || "单据参考号".equals(batchLabels)) {
refVal = shelfMaterialDetailPO.getSheetRefNo();
} else if ("BoxPalletNo".equalsIgnoreCase(attributeOption) || "Box No./Pallet No.".equalsIgnoreCase(batchLabels) || "箱号/卡板号".equals(batchLabels)) {
refVal = shelfMaterialDetailPO.getBoxPalletNo();
}
if (refVal != null) {
materialMoreDetail.setAttributeValue(refVal);
} else if (StringUtils.isNotBlank(batchLabels)) {
String val = null;
switch (batchLabels.trim()) {
case "总净重":
case "净重(KG)":
case "净重":
val = shelfMaterialDetailPO.getTotalNetWeight() != null ? shelfMaterialDetailPO.getTotalNetWeight().toString() : null;
break;
case "总毛重":
case "毛重(KG)":
case "毛重":
val = shelfMaterialDetailPO.getTotalGrossWeight() != null ? shelfMaterialDetailPO.getTotalGrossWeight().toString() : null;
break;
case "总体积":
case "体积(CBM)":
case "体积":
val = shelfMaterialDetailPO.getTotalVolume() != null ? shelfMaterialDetailPO.getTotalVolume().toString() : null;
break;
case "总面积":
case "面积(SQM)":
case "面积":
val = shelfMaterialDetailPO.getTotalArea() != null ? shelfMaterialDetailPO.getTotalArea().toString() : null;
break;
default:
break;
}
if (val != null) {
materialMoreDetail.setAttributeValue(val);
}
}
}
}
private List<ShelfMaterialDetailPO> getChildren(Long parentUniqueId, List<ShelfMaterialDetailPO> shelfMaterialDetailPOList, Integer maxLevel){
List<ShelfMaterialDetailPO> childrenCityList = shelfMaterialDetailPOList.stream().filter(materialDetailPO -> parentUniqueId.equals(materialDetailPO.getParentUniqueId())).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(childrenCityList)){
@@ -985,7 +985,8 @@ public class StockReceiptOrderDomainService {
//获取收货单明细
ReceiptMaterialDetailDO receiptMaterialDetailDO = new ReceiptMaterialDetailDO();
receiptMaterialDetailDO.setReceiptOrderNumber(stockReceiptOrderPO.getReceiptOrderNumber());
List<ReceiptMaterialDetailPO> receiptMaterialDetailPOS = receiptMaterialDetailService.queryList(receiptMaterialDetailDO);
// 使用 queryListChildren 获取父子结构避免重复添加只添加 level 1 主项主项 receiptQuantity 已含子项汇总
List<ReceiptMaterialDetailPO> receiptMaterialDetailPOS = receiptMaterialDetailService.queryListChildren(receiptMaterialDetailDO);
//上架单明细集合
List<ShelfMaterialDetailDO> shelfMaterialDetailDOList = new ArrayList<>();
// 批量查询入库单明细用于获取净重毛重体积面积等字段
@@ -14,6 +14,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="receiptTaskNumber" column="receipt_task_number" />
<result property="shelfOrderNumber" column="shelf_order_number" />
<result property="status" column="status" />
<result property="receiptQuantity" column="receipt_quantity" />
<result property="shelvesQuantity" column="shelves_quantity" />
<result property="abnormal" column="abnormal" />
<result property="taskDistribution" column="task_distribution" />