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
@@ -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<>();
// 批量查询入库单明细,用于获取净重、毛重、体积、面积等字段