diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java index 0c1b2d9fd..b7d62b5c8 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java @@ -31,6 +31,8 @@ import com.mhd.wms.domain.materialGoodsRule.repository.po.MaterialGoodsRulePO; import com.mhd.wms.domain.materialWarehouseControl.repository.facade.IMaterialWarehouseControlService; import com.mhd.wms.domain.materialWarehouseControl.repository.po.MaterialWarehouseControlPO; import com.mhd.wms.domain.materialMoreDetail.repository.po.MaterialMoreDetailPO; +import com.mhd.wms.domain.materialMoreDetail.repository.todo.MaterialMoreDetailDO; +import com.mhd.wms.domain.materialMoreDetail.service.MaterialMoreDetailDomainService; import com.mhd.wms.domain.receiptMaterialDetail.repository.po.ReceiptMaterialDetailPO; import com.mhd.wms.domain.receiptMaterialDetail.repository.todo.ReceiptMaterialDetailDO; import com.mhd.wms.domain.receiptMaterialDetail.service.ReceiptMaterialDetailDomainService; @@ -82,6 +84,8 @@ public class StockReceiptOrderApplicationService { private IMaterialGoodsRuleService materialGoodsRuleService; @Autowired private SystemServiceFeign systemServiceFeign; + @Autowired + private MaterialMoreDetailDomainService materialMoreDetailDomainService; @Autowired private UserServiceFeign userServiceFeign; @@ -519,10 +523,36 @@ public class StockReceiptOrderApplicationService { } // 只有当获取到值时才更新attributeValue(避免覆盖已有的值) if (fieldValue != null) { - materialMoreDetailPO.setAttributeValue(fieldValue); - log.info("设置更多属性:batchDetailId={}, batchLabels={}, attributeValue={}", - materialMoreDetailPO.getBatchDetailId(), materialMoreDetailPO.getBatchLabels(), - materialMoreDetailPO.getAttributeValue()); + // 扩展属性1-4:优先使用 material_more_detail 的值(按 material_detail_unique_id 存储,每个明细独立) + // 避免从 ReceiptMaterialDetailPO 反射取值(主项/子项可能共用 in_unique_id,导致取到同一 in_material_detail 的错误值) + boolean isExtAttr = usedFieldName != null && ( + "ext_attr_1".equalsIgnoreCase(usedFieldName) || "extAttr1".equals(usedFieldName) + || "ext_attr_2".equalsIgnoreCase(usedFieldName) || "extAttr2".equals(usedFieldName) + || "ext_attr_3".equalsIgnoreCase(usedFieldName) || "extAttr3".equals(usedFieldName) + || "ext_attr_4".equalsIgnoreCase(usedFieldName) || "extAttr4".equals(usedFieldName)); + if (isExtAttr) { + // 扩展属性:优先从 material_more_detail 表查询(按 material_detail_unique_id + batch_detail_id) + String attrFromDb = getExtAttrFromMaterialMoreDetail(receiptMaterialDetailPO.getUniqueId(), batchDetailFeignPO.getBatchDetailId()); + if (StringUtils.isNotBlank(attrFromDb)) { + materialMoreDetailPO.setAttributeValue(attrFromDb); + log.debug("扩展属性 batchDetailId={}, 使用 material_more_detail 的值={}", + materialMoreDetailPO.getBatchDetailId(), attrFromDb); + } else if (StringUtils.isNotBlank(materialMoreDetailPO.getAttributeValue())) { + // 已有值(来自 queryListChildren 的 merge)则保留 + log.debug("扩展属性 batchDetailId={}, 保留已有值={}", + materialMoreDetailPO.getBatchDetailId(), materialMoreDetailPO.getAttributeValue()); + } else { + materialMoreDetailPO.setAttributeValue(fieldValue); + log.info("设置更多属性:batchDetailId={}, batchLabels={}, attributeValue={}(无 material_more_detail 时用反射值)", + materialMoreDetailPO.getBatchDetailId(), materialMoreDetailPO.getBatchLabels(), + materialMoreDetailPO.getAttributeValue()); + } + } else { + materialMoreDetailPO.setAttributeValue(fieldValue); + log.info("设置更多属性:batchDetailId={}, batchLabels={}, attributeValue={}", + materialMoreDetailPO.getBatchDetailId(), materialMoreDetailPO.getBatchLabels(), + materialMoreDetailPO.getAttributeValue()); + } } } } @@ -539,6 +569,29 @@ public class StockReceiptOrderApplicationService { }); } + /** + * 从 material_more_detail 表查询扩展属性值(按 material_detail_unique_id + batch_detail_id) + * 用于 PC 端正确显示每个明细独立的扩展属性,避免主项/子项共用 in_unique_id 导致取错值 + */ + private String getExtAttrFromMaterialMoreDetail(Long materialDetailUniqueId, Long batchDetailId) { + if (materialDetailUniqueId == null || batchDetailId == null) { + return null; + } + try { + MaterialMoreDetailDO do_ = new MaterialMoreDetailDO(); + do_.setMaterialDetailUniqueId(materialDetailUniqueId); + do_.setBatchDetailId(batchDetailId); + List list = materialMoreDetailDomainService.queryList(do_); + if (!CollectionUtils.isEmpty(list) && StringUtils.isNotBlank(list.get(0).getAttributeValue())) { + return list.get(0).getAttributeValue(); + } + } catch (Exception e) { + log.warn("查询 material_more_detail 扩展属性失败,materialDetailUniqueId={}, batchDetailId={},错误:{}", + materialDetailUniqueId, batchDetailId, e.getMessage()); + } + return null; + } + /** * 递归填充明细行的物料单位信息、包装规格(如果为空) * @param receiptMaterialDetailPOList 收货物料明细列表