Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
zhou-hongcheng
2026-03-13 09:18:07 +08:00
4 changed files with 38 additions and 7 deletions
@@ -445,6 +445,17 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
continue;
}
// 仅使用 level=1 的主明细更新入库单明细的批次属性,避免子明细(level=2)覆盖主明细的值
Integer level = receiptMaterialDetailDO.getLevel();
if (level != null && level != 1) {
// 子明细不更新 in_material_detail,继续递归处理子项
List<ReceiptMaterialDetailDO> children = receiptMaterialDetailDO.getChildren();
if (!CollectionUtils.isEmpty(children)) {
updateInMaterialDetailFromAttributeOption(children, batchFieldNameCache);
}
continue;
}
List<MaterialMoreDetailDO> materialMoreDetailList = receiptMaterialDetailDO.getMaterialMoreDetailList();
if (CollectionUtils.isEmpty(materialMoreDetailList)) {
// 处理子项
@@ -801,15 +812,19 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
attributeValue = attributeValue.trim();
switch (batchLabels) {
case "扩展字段4":
case "扩展属性4":
receiptMaterialDetailDO.setExtAttr4(attributeValue);
break;
case "扩展字段3":
case "扩展属性3":
receiptMaterialDetailDO.setExtAttr3(attributeValue);
break;
case "扩展字段2":
case "扩展属性2":
receiptMaterialDetailDO.setExtAttr2(attributeValue);
break;
case "扩展字段1":
case "扩展属性1":
receiptMaterialDetailDO.setExtAttr1(attributeValue);
break;
case "箱号/卡板号":
@@ -69,9 +69,12 @@ public class ShelfMaterialDetailImpl extends ServiceImpl<ShelfMaterialDetailMapp
List<ShelfMaterialDetailPO> shelfMaterialDetailPOList = shelfMaterialDetailMapper.queryList(shelfMaterialDetailDO);
//回显带上更多属性值(批次标签):根据物料绑定的批次属性动态显示,与收货一致
// material_more_detail 存储时使用收货明细的 unique_id,上架明细需用 receipt_unique_id 查询
shelfMaterialDetailPOList.forEach(shelfMaterialDetailPO -> {
MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO();
materialMoreDetailDO.setMaterialDetailUniqueId(shelfMaterialDetailPO.getUniqueId());
Long materialDetailUniqueIdForQuery = shelfMaterialDetailPO.getReceiptUniqueId() != null
? shelfMaterialDetailPO.getReceiptUniqueId() : shelfMaterialDetailPO.getUniqueId();
materialMoreDetailDO.setMaterialDetailUniqueId(materialDetailUniqueIdForQuery);
List<MaterialMoreDetailPO> materialMoreDetailList = IMaterialMoreDetailService.queryList(materialMoreDetailDO);
if (CollectionUtils.isEmpty(materialMoreDetailList)) {
AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(shelfMaterialDetailPO.getMaterialBaseInfoId());
@@ -92,7 +95,9 @@ public class ShelfMaterialDetailImpl extends ServiceImpl<ShelfMaterialDetailMapp
List<ShelfMaterialDetailPO> children = getChildren(materialDetailPO.getUniqueId(), shelfMaterialDetailPOList, 2);
children.forEach(childrenDetailPO -> {
MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO();
materialMoreDetailDO.setMaterialDetailUniqueId(childrenDetailPO.getUniqueId());
Long materialDetailUniqueIdForQuery = childrenDetailPO.getReceiptUniqueId() != null
? childrenDetailPO.getReceiptUniqueId() : childrenDetailPO.getUniqueId();
materialMoreDetailDO.setMaterialDetailUniqueId(materialDetailUniqueIdForQuery);
List<MaterialMoreDetailPO> materialMoreDetailList = IMaterialMoreDetailService.queryList(materialMoreDetailDO);
if (CollectionUtils.isEmpty(materialMoreDetailList)) {
AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(childrenDetailPO.getMaterialBaseInfoId());
@@ -306,8 +306,16 @@ public class StockOutTaskOrderDomainService {
if (ObjectUtil.isNull(materialInventoryOldDb)){
throw new ServiceException("物料原库位下的物料库存不存在,不能进行出库");
}
if (materialInventoryOldDb.getInventoryQuantity().compareTo(actualQuantity) < 0){
throw new ServiceException("物料原库位下的物料库存不足,不能进行出库");
BigDecimal invQty = materialInventoryOldDb.getInventoryQuantity() != null ? materialInventoryOldDb.getInventoryQuantity() : BigDecimal.ZERO;
if (invQty.compareTo(actualQuantity) < 0){
String hint = "";
if (invQty.compareTo(BigDecimal.ZERO) == 0 && materialInventoryOldDb.getFreezeQuantity() != null
&& materialInventoryOldDb.getFreezeQuantity().compareTo(BigDecimal.ZERO) > 0) {
hint = String.format("(该库位库存为0,冻结数量=%s,可能需先解冻)", materialInventoryOldDb.getFreezeQuantity());
} else {
hint = String.format("库位库存=%s,拣货数量=%s", invQty, actualQuantity);
}
throw new ServiceException("物料原库位下的物料库存不足,不能进行出库。" + hint + ",物料=" + taskPickingMaterialDetailDO.getMaterialName() + ",库位=" + taskPickingMaterialDetailDO.getStorageLocationCode());
}
//原库位
MaterialInventoryDO materialInventoryDOOld = new MaterialInventoryDO();
@@ -916,7 +916,8 @@ public class StockReceiptOrderDomainService {
BeanUtils.copyProperties(receiptMaterialDetailDOChildren, shelfMaterialDetailDOChildren);
shelfMaterialDetailDOChildren.setQuantity(receiptMaterialDetailDOChildren.getReceiptQuantity());
shelfMaterialDetailDOChildren.setInUniqueId(receiptMaterialDetailDO.getInUniqueId());
shelfMaterialDetailDOChildren.setReceiptUniqueId(receiptMaterialDetailDO.getUniqueId());
// 子项使用自身的 uniqueId 作为 receiptUniqueId,以便正确关联 material_more_detail 中的扩展属性
shelfMaterialDetailDOChildren.setReceiptUniqueId(receiptMaterialDetailDOChildren.getUniqueId());
shelfMaterialDetailDOChildren.setTotalArea(receiptMaterialDetailDOChildren.getTotalArea());
shelfMaterialDetailDOChildren.setTotalVolume(receiptMaterialDetailDOChildren.getTotalVolume());
shelfMaterialDetailDOChildren.setTotalNetWeight(receiptMaterialDetailDOChildren.getTotalNetWeight());
@@ -1052,7 +1053,8 @@ public class StockReceiptOrderDomainService {
BeanUtils.copyProperties(receiptMaterialDetailPOChildren, shelfMaterialDetailDOChildren);
shelfMaterialDetailDOChildren.setQuantity(receiptMaterialDetailPOChildren.getReceiptQuantity());
shelfMaterialDetailDOChildren.setInUniqueId(receiptMaterialDetailPO.getInUniqueId());
shelfMaterialDetailDOChildren.setReceiptUniqueId(receiptMaterialDetailPO.getUniqueId());
// 子项使用自身的 uniqueId 作为 receiptUniqueId,以便正确关联 material_more_detail 中的扩展属性
shelfMaterialDetailDOChildren.setReceiptUniqueId(receiptMaterialDetailPOChildren.getUniqueId());
shelfMaterialDetailDOChildren.setTotalArea(receiptMaterialDetailPOChildren.getTotalArea());
shelfMaterialDetailDOChildren.setTotalVolume(receiptMaterialDetailPOChildren.getTotalVolume());
shelfMaterialDetailDOChildren.setTotalNetWeight(receiptMaterialDetailPOChildren.getTotalNetWeight());
@@ -1168,7 +1170,8 @@ public class StockReceiptOrderDomainService {
BeanUtils.copyProperties(receiptMaterialDetailDOChildren, shelfMaterialDetailDOChildren);
shelfMaterialDetailDOChildren.setQuantity(receiptMaterialDetailDOChildren.getReceiptQuantity());
shelfMaterialDetailDOChildren.setInUniqueId(receiptMaterialDetailPO.getInUniqueId());
shelfMaterialDetailDOChildren.setReceiptUniqueId(receiptMaterialDetailPO.getUniqueId());
// 子项使用自身的 uniqueId 作为 receiptUniqueId,以便正确关联 material_more_detail 中的扩展属性
shelfMaterialDetailDOChildren.setReceiptUniqueId(receiptMaterialDetailDOChildren.getUniqueId());
// 传递生产日期、过期日期、存货日期、Batch Ref NO's、Sheet Ref NO's、箱号/卡板号、扩展属性1-4
shelfMaterialDetailDOChildren.setProductionDate(receiptMaterialDetailDOChildren.getProductionDate());
shelfMaterialDetailDOChildren.setExpiryDate(receiptMaterialDetailDOChildren.getExpiryDate());