收货批次号修改Sheet Ref NO's

This commit is contained in:
秦鸿展
2026-04-09 10:29:14 +08:00
parent 42ec0ec4ad
commit fd5e81e5ff
@@ -334,13 +334,8 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
List<MaterialMoreDetail> materialMoreDetailList = new ArrayList<>();
List<InMaterialDetailSerialNumber> materialDetailSerialNumberList = new ArrayList<>();
for (ReceiptMaterialDetailDO receiptMaterialDetailDO : receiptMaterialDetailDOList){
extractBatchAttributesToReceiptDetail(receiptMaterialDetailDO);
// 自动生成批次号并校验唯一性(包括子项)
// 批次号:默认取 Sheet Ref NO'ssheetRefNo),不再自动生成 PC 流水号(逻辑见 generateAndValidateBatchNumber
generateAndValidateBatchNumber(receiptMaterialDetailDO, shipperId);
// 当 materialMoreDetailList 为空时(如 PDA 未传),从 receiptMaterialDetailDO 的 batch_number、material_status_code 等字段构建,确保更多属性能保存并回显
if (CollectionUtils.isEmpty(receiptMaterialDetailDO.getMaterialMoreDetailList())) {
receiptMaterialDetailDO.setMaterialMoreDetailList(buildMaterialMoreDetailFromReceiptFields(receiptMaterialDetailDO));
}
//更多属性
materialMoreDetailList.addAll(genMaterialMoreDetail(receiptMaterialDetailDO));
//序列号
@@ -355,8 +350,7 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
List<ReceiptMaterialDetail> receiptMaterialDetailChildList = new ArrayList<>();
if (!CollectionUtils.isEmpty(receiptMaterialDetailDOChildList)){
for (ReceiptMaterialDetailDO receiptMaterialDetailDOChild : receiptMaterialDetailDOChildList){
// 子项也需从批次属性提取净重、毛重、体积、面积等字段
extractBatchAttributesToReceiptDetail(receiptMaterialDetailDOChild);
// 子项批次属性已在 generateAndValidateBatchNumber 递归中提取
ReceiptMaterialDetail receiptMaterialDetailChild = new ReceiptMaterialDetail();
BeanUtils.copyProperties(receiptMaterialDetailDOChild, receiptMaterialDetailChild);
alignPersistedReceiptQuantityToCumulative(receiptMaterialDetailDOChild, receiptMaterialDetailChild);
@@ -1128,7 +1122,7 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
}
/**
* @description 自动生成批次号并校验唯一性
* @description 批次号默认取 Sheet Ref NO'ssheetRefNo),并校验库存唯一性;不再使用 PC 流水号自动生成
* @author Auto
* @date 2026/1/28
* @param receiptMaterialDetailDO 收货明细
@@ -1139,7 +1133,12 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
if (receiptMaterialDetailDO == null) {
return;
}
// 与原先在 batchReceiptUpdate 中顺序一致:先补全更多属性列表,再从批次属性提取到明细字段(含 sheetRefNo)
if (CollectionUtils.isEmpty(receiptMaterialDetailDO.getMaterialMoreDetailList())) {
receiptMaterialDetailDO.setMaterialMoreDetailList(buildMaterialMoreDetailFromReceiptFields(receiptMaterialDetailDO));
}
extractBatchAttributesToReceiptDetail(receiptMaterialDetailDO);
// 处理当前明细
processBatchNumberForDetail(receiptMaterialDetailDO, shipperId);
@@ -1153,7 +1152,7 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
}
/**
* @description 为单个收货明细生成批次号并校验唯一性
* @description 批次号为空时默认取 Sheet Ref NO'ssheetRefNo);原 PC 流水号自动生成已停用
* @author Auto
* @date 2026/1/28
* @param receiptMaterialDetailDO 收货明细
@@ -1168,13 +1167,22 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
Long materialBaseInfoId = receiptMaterialDetailDO.getMaterialBaseInfoId();
String materialStatusCode = receiptMaterialDetailDO.getMaterialStatusCode();
String batchNumber = receiptMaterialDetailDO.getBatchNumber();
// 如果批次号为空,自动生成
// 批次号为空时默认取 Sheet Ref NO's(与批次属性「Sheet Ref NO's」/ 明细字段 sheetRefNo 一致)
if (batchNumber == null || batchNumber.trim().isEmpty()) {
batchNumber = OrderSequence.getOrderCode("PC"); // PC = 批次号前缀
receiptMaterialDetailDO.setBatchNumber(batchNumber);
String sheetRef = receiptMaterialDetailDO.getSheetRefNo();
if (StringUtils.isNotBlank(sheetRef)) {
receiptMaterialDetailDO.setBatchNumber(sheetRef.trim());
}
}
// 原自动生成批次号(已按业务要求停用)
// if (batchNumber == null || batchNumber.trim().isEmpty()) {
// batchNumber = OrderSequence.getOrderCode("PC"); // PC = 批次号前缀
// receiptMaterialDetailDO.setBatchNumber(batchNumber);
// }
batchNumber = receiptMaterialDetailDO.getBatchNumber();
// 校验批次号唯一性:货主+商品+库存属性值相同时,批次号不能重复
if (shipperId != null && materialBaseInfoId != null && batchNumber != null && !batchNumber.trim().isEmpty()) {
// 使用 LambdaQueryWrapper 查询库存表中是否存在相同的货主+商品+库存属性值+批次号的记录