WMS3.9号修改
This commit is contained in:
+79
@@ -245,6 +245,9 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
|
||||
List<InMaterialDetailSerialNumber> materialDetailSerialNumberList = new ArrayList<>();
|
||||
for (ReceiptMaterialDetailDO receiptMaterialDetailDO : receiptMaterialDetailDOList){
|
||||
List<MaterialMoreDetailDO> materialMoreDetailList1 = receiptMaterialDetailDO.getMaterialMoreDetailList();
|
||||
if (CollectionUtils.isEmpty(materialMoreDetailList1)) {
|
||||
materialMoreDetailList1 = new ArrayList<>();
|
||||
}
|
||||
for (MaterialMoreDetailDO materialMoreDetailDO : materialMoreDetailList1) {
|
||||
String batchLabels = materialMoreDetailDO.getBatchLabels();
|
||||
String attributeValue = materialMoreDetailDO.getAttributeValue();
|
||||
@@ -310,6 +313,10 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
|
||||
}
|
||||
// 自动生成批次号并校验唯一性(包括子项)
|
||||
generateAndValidateBatchNumber(receiptMaterialDetailDO, shipperId);
|
||||
// 当 materialMoreDetailList 为空时(如 PDA 未传),从 receiptMaterialDetailDO 的 batch_number、material_status_code 等字段构建,确保更多属性能保存并回显
|
||||
if (CollectionUtils.isEmpty(receiptMaterialDetailDO.getMaterialMoreDetailList())) {
|
||||
receiptMaterialDetailDO.setMaterialMoreDetailList(buildMaterialMoreDetailFromReceiptFields(receiptMaterialDetailDO));
|
||||
}
|
||||
//更多属性
|
||||
materialMoreDetailList.addAll(genMaterialMoreDetail(receiptMaterialDetailDO));
|
||||
//序列号
|
||||
@@ -703,6 +710,78 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 当 PDA 未传 materialMoreDetailList 时,从 receiptMaterialDetailDO 的 batch_number、batch_ref_no、material_status_code 等字段构建,
|
||||
* 确保更多属性能保存到 material_more_detail 表并正确回显
|
||||
*/
|
||||
private List<MaterialMoreDetailDO> buildMaterialMoreDetailFromReceiptFields(ReceiptMaterialDetailDO receiptMaterialDetailDO) {
|
||||
List<MaterialMoreDetailDO> result = new ArrayList<>();
|
||||
Long materialBaseInfoId = receiptMaterialDetailDO.getMaterialBaseInfoId();
|
||||
if (materialBaseInfoId == null) {
|
||||
return result;
|
||||
}
|
||||
try {
|
||||
AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(materialBaseInfoId);
|
||||
if (ajaxResult == null || !"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||
return result;
|
||||
}
|
||||
List<BatchDetailFeignPO> list = JSON.parseArray(JSON.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class);
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return result;
|
||||
}
|
||||
Map<String, String> labelToField = new HashMap<>();
|
||||
labelToField.put("Batch Ref NO's", "batchRefNo");
|
||||
labelToField.put("Batch Ref NO", "batchRefNo");
|
||||
labelToField.put("批次参考号", "batchRefNo");
|
||||
labelToField.put("Sheet Ref NO's", "sheetRefNo");
|
||||
labelToField.put("Sheet Ref NO", "sheetRefNo");
|
||||
labelToField.put("单据参考号", "sheetRefNo");
|
||||
labelToField.put("箱号/卡板号", "boxPalletNo");
|
||||
labelToField.put("批次号", "batchNumber");
|
||||
labelToField.put("物料状态", "materialStatusCode");
|
||||
|
||||
for (BatchDetailFeignPO po : list) {
|
||||
if (po.getIsDisplay() == null || po.getIsDisplay() != 1) {
|
||||
continue;
|
||||
}
|
||||
String fieldName = po.getFieldName();
|
||||
if (StringUtils.isBlank(fieldName) && StringUtils.isNotBlank(po.getBatchLabels())) {
|
||||
fieldName = labelToField.get(po.getBatchLabels().trim());
|
||||
}
|
||||
if (StringUtils.isBlank(fieldName)) {
|
||||
continue;
|
||||
}
|
||||
String value = getReceiptFieldValue(receiptMaterialDetailDO, fieldName);
|
||||
if (StringUtils.isBlank(value)) {
|
||||
continue;
|
||||
}
|
||||
MaterialMoreDetailDO dto = new MaterialMoreDetailDO();
|
||||
dto.setBatchId(po.getBatchId());
|
||||
dto.setBatchDetailId(po.getBatchDetailId());
|
||||
dto.setBatchLabels(po.getBatchLabels());
|
||||
dto.setAttributeValue(value);
|
||||
result.add(dto);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("从收货明细构建更多属性失败,materialBaseInfoId:{},错误:{}", materialBaseInfoId, e.getMessage());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private String getReceiptFieldValue(ReceiptMaterialDetailDO dto, String fieldName) {
|
||||
if (dto == null || StringUtils.isBlank(fieldName)) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
java.lang.reflect.Field field = ReceiptMaterialDetailDO.class.getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
Object v = field.get(dto);
|
||||
return v != null ? v.toString().trim() : null;
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 生成物料明细
|
||||
* @author ZhouGY
|
||||
|
||||
+8
-2
@@ -216,6 +216,14 @@ public class StockReceiptOrderDomainService {
|
||||
.collect(Collectors.groupingBy(MaterialMoreDetailPO::getMaterialDetailUniqueId));
|
||||
receiptMaterialDetailPOList.forEach(receiptMaterialDetailPO -> {
|
||||
List<ReceiptMaterialDetailPO> receiptMaterialDetailPOChildrenNowList = new ArrayList<>();
|
||||
//子集(level 2 的真实子项)
|
||||
List<ReceiptMaterialDetailPO> receiptMaterialDetailPOChildrenList = receiptMaterialDetailPO.getChildren();
|
||||
if (CollectionUtils.isEmpty(receiptMaterialDetailPOChildrenList)) {
|
||||
//无 level 2 子项时,不添加父级拷贝,避免 PC 端显示重复
|
||||
receiptMaterialDetailPO.setChildren(receiptMaterialDetailPOChildrenNowList);
|
||||
return;
|
||||
}
|
||||
//有 level 2 子项时,添加父级拷贝(level 1)供 PDA 收货使用
|
||||
ReceiptMaterialDetailPO receiptMaterialDetailPOChildrenNow = new ReceiptMaterialDetailPO();
|
||||
BeanUtils.copyProperties(receiptMaterialDetailPO, receiptMaterialDetailPOChildrenNow, "children");
|
||||
List<InMaterialDetailSerialNumberPO> materialDetailSerialNumberList = inMaterialDetailSerialNumberMap.get(receiptMaterialDetailPO.getUniqueId());
|
||||
@@ -231,8 +239,6 @@ public class StockReceiptOrderDomainService {
|
||||
receiptMaterialDetailPOChildrenNow.setMaterialMoreDetailList(getMaterialMoreDetail(receiptMaterialDetailPO));
|
||||
}
|
||||
receiptMaterialDetailPOChildrenNowList.add(receiptMaterialDetailPOChildrenNow);
|
||||
//子集
|
||||
List<ReceiptMaterialDetailPO> receiptMaterialDetailPOChildrenList = receiptMaterialDetailPO.getChildren();
|
||||
receiptMaterialDetailPOChildrenList.forEach(receiptMaterialDetailPOChildren -> {
|
||||
List<InMaterialDetailSerialNumberPO> materialDetailSerialNumberChildrenList = inMaterialDetailSerialNumberMap.get(receiptMaterialDetailPOChildren.getUniqueId());
|
||||
if (!CollectionUtils.isEmpty(materialDetailSerialNumberChildrenList)) {
|
||||
|
||||
Reference in New Issue
Block a user