PC收货生成上架的批次属性更新

This commit is contained in:
秦鸿展
2026-03-12 19:36:17 +08:00
parent 03a5c1fac8
commit 6b1097bcb8
3 changed files with 28 additions and 4 deletions
@@ -445,6 +445,17 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
continue; 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(); List<MaterialMoreDetailDO> materialMoreDetailList = receiptMaterialDetailDO.getMaterialMoreDetailList();
if (CollectionUtils.isEmpty(materialMoreDetailList)) { if (CollectionUtils.isEmpty(materialMoreDetailList)) {
// 处理子项 // 处理子项
@@ -69,9 +69,12 @@ public class ShelfMaterialDetailImpl extends ServiceImpl<ShelfMaterialDetailMapp
List<ShelfMaterialDetailPO> shelfMaterialDetailPOList = shelfMaterialDetailMapper.queryList(shelfMaterialDetailDO); List<ShelfMaterialDetailPO> shelfMaterialDetailPOList = shelfMaterialDetailMapper.queryList(shelfMaterialDetailDO);
//回显带上更多属性值(批次标签):根据物料绑定的批次属性动态显示,与收货一致 //回显带上更多属性值(批次标签):根据物料绑定的批次属性动态显示,与收货一致
// material_more_detail 存储时使用收货明细的 unique_id,上架明细需用 receipt_unique_id 查询
shelfMaterialDetailPOList.forEach(shelfMaterialDetailPO -> { shelfMaterialDetailPOList.forEach(shelfMaterialDetailPO -> {
MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO(); 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); List<MaterialMoreDetailPO> materialMoreDetailList = IMaterialMoreDetailService.queryList(materialMoreDetailDO);
if (CollectionUtils.isEmpty(materialMoreDetailList)) { if (CollectionUtils.isEmpty(materialMoreDetailList)) {
AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(shelfMaterialDetailPO.getMaterialBaseInfoId()); AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(shelfMaterialDetailPO.getMaterialBaseInfoId());
@@ -92,7 +95,9 @@ public class ShelfMaterialDetailImpl extends ServiceImpl<ShelfMaterialDetailMapp
List<ShelfMaterialDetailPO> children = getChildren(materialDetailPO.getUniqueId(), shelfMaterialDetailPOList, 2); List<ShelfMaterialDetailPO> children = getChildren(materialDetailPO.getUniqueId(), shelfMaterialDetailPOList, 2);
children.forEach(childrenDetailPO -> { children.forEach(childrenDetailPO -> {
MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO(); 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); List<MaterialMoreDetailPO> materialMoreDetailList = IMaterialMoreDetailService.queryList(materialMoreDetailDO);
if (CollectionUtils.isEmpty(materialMoreDetailList)) { if (CollectionUtils.isEmpty(materialMoreDetailList)) {
AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(childrenDetailPO.getMaterialBaseInfoId()); AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(childrenDetailPO.getMaterialBaseInfoId());
@@ -306,8 +306,16 @@ public class StockOutTaskOrderDomainService {
if (ObjectUtil.isNull(materialInventoryOldDb)){ if (ObjectUtil.isNull(materialInventoryOldDb)){
throw new ServiceException("物料原库位下的物料库存不存在,不能进行出库"); throw new ServiceException("物料原库位下的物料库存不存在,不能进行出库");
} }
if (materialInventoryOldDb.getInventoryQuantity().compareTo(actualQuantity) < 0){ BigDecimal invQty = materialInventoryOldDb.getInventoryQuantity() != null ? materialInventoryOldDb.getInventoryQuantity() : BigDecimal.ZERO;
throw new ServiceException("物料原库位下的物料库存不足,不能进行出库"); 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(); MaterialInventoryDO materialInventoryDOOld = new MaterialInventoryDO();