字典添加组织查询,收货批次号逻辑修改

This commit is contained in:
秦鸿展
2026-05-29 22:03:20 +08:00
parent 19497d0681
commit 08165d5018
2 changed files with 72 additions and 15 deletions
@@ -43,6 +43,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="status != null and status != ''">
AND status = #{status}
</if>
<if test="organizationId != null">
AND organization_id = #{organizationId}
</if>
<if test="topOrganizationId != null">
AND (top_organization_id = #{topOrganizationId} OR is_default = 'Y')
</if>
@@ -439,8 +439,7 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
if (CollectionUtils.isEmpty(receiptMaterialDetailDO.getMaterialMoreDetailList())) {
receiptMaterialDetailDO.setMaterialMoreDetailList(buildMaterialMoreDetailFromReceiptFields(receiptMaterialDetailDO));
}
// 批次号:默认取 Sheet Ref NO'ssheetRefNo),不再自动生成 PC 流水号(逻辑见 generateAndValidateBatchNumber
//generateAndValidateBatchNumber(receiptMaterialDetailDO, shipperId);
// 批次号:batchRefNo 有值取 batchRefNo,无值自动生成;逻辑见 generateAndValidateBatchNumber
//更多属性
materialMoreDetailList.addAll(genMaterialMoreDetail(receiptMaterialDetailDO));
//序列号
@@ -638,6 +637,9 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
continue;
}
// 批次号回写入库单明细(与批次属性列表是否为空无关)
syncBatchNumberToInMaterialDetail(receiptMaterialDetailDO);
List<MaterialMoreDetailDO> materialMoreDetailList = receiptMaterialDetailDO.getMaterialMoreDetailList();
if (CollectionUtils.isEmpty(materialMoreDetailList)) {
// 处理子项
@@ -1342,7 +1344,7 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
}
/**
* @description 批次号默认取 Sheet Ref NO'ssheetRefNo),并校验库存唯一性;不再使用 PC 流水号自动生成
* @description 批次号batchRefNo 有值取 batchRefNo,无值自动生成 PC 流水号
* @author Auto
* @date 2026/1/28
* @param receiptMaterialDetailDO 收货明细
@@ -1374,7 +1376,7 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
}
/**
* @description 批次号为空时默认取 Sheet Ref NO'ssheetRefNo);原 PC 流水号自动生成已停用
* @description 批次号batchRefNo 有值取 batchRefNo;无 batchRefNo 且批次号为空时自动生成 PC 流水号
* @author Auto
* @date 2026/1/28
* @param receiptMaterialDetailDO 收货明细
@@ -1390,22 +1392,19 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
Long materialBaseInfoId = receiptMaterialDetailDO.getMaterialBaseInfoId();
String materialStatusCode = receiptMaterialDetailDO.getMaterialStatusCode();
String batchRefNo = receiptMaterialDetailDO.getBatchRefNo();
String batchNumber = receiptMaterialDetailDO.getBatchNumber();
// 批次号为空时默认取 Sheet Ref NO's(与批次属性「Sheet Ref NO's」/ 明细字段 sheetRefNo 一致)
if (batchNumber == null || batchNumber.trim().isEmpty()) {
String sheetRef = receiptMaterialDetailDO.getSheetRefNo();
if (StringUtils.isNotBlank(sheetRef)) {
receiptMaterialDetailDO.setBatchNumber(sheetRef.trim());
}
// batchRefNo 有值时,批次号取 batchRefNo
if (StringUtils.isNotBlank(batchRefNo)) {
receiptMaterialDetailDO.setBatchNumber(batchRefNo.trim());
} else if (StringUtils.isBlank(batchNumber)) {
// batchRefNo 无值且批次号为空时,自动生成批次号
receiptMaterialDetailDO.setBatchNumber(OrderSequence.getOrderCode("PC"));
}
// 原自动生成批次号(已按业务要求停用)
// if (batchNumber == null || batchNumber.trim().isEmpty()) {
// batchNumber = OrderSequence.getOrderCode("PC"); // PC = 批次号前缀
// receiptMaterialDetailDO.setBatchNumber(batchNumber);
// }
batchNumber = receiptMaterialDetailDO.getBatchNumber();
syncBatchNumberToMaterialMoreDetailList(receiptMaterialDetailDO);
// 校验批次号唯一性:货主+商品+库存属性值相同时,批次号不能重复
@@ -1446,4 +1445,59 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
// }
}
/**
* 将解析后的批次号同步到 materialMoreDetailList 的「批次号」属性,供落库与回显
*/
private void syncBatchNumberToMaterialMoreDetailList(ReceiptMaterialDetailDO receiptMaterialDetailDO) {
String batchNumber = receiptMaterialDetailDO.getBatchNumber();
if (StringUtils.isBlank(batchNumber)) {
return;
}
List<MaterialMoreDetailDO> list = receiptMaterialDetailDO.getMaterialMoreDetailList();
if (list == null) {
list = new ArrayList<>();
receiptMaterialDetailDO.setMaterialMoreDetailList(list);
}
boolean updated = false;
for (MaterialMoreDetailDO item : list) {
if ("批次号".equals(item.getBatchLabels())) {
item.setAttributeValue(batchNumber.trim());
updated = true;
break;
}
}
if (!updated) {
List<MaterialMoreDetailDO> built = buildMaterialMoreDetailFromReceiptFields(receiptMaterialDetailDO);
for (MaterialMoreDetailDO item : built) {
if ("批次号".equals(item.getBatchLabels())) {
list.add(item);
break;
}
}
}
}
/**
* 将收货明细批次号回写入库单明细 batch_number 字段
*/
private void syncBatchNumberToInMaterialDetail(ReceiptMaterialDetailDO receiptMaterialDetailDO) {
if (receiptMaterialDetailDO == null) {
return;
}
Long inUniqueId = receiptMaterialDetailDO.getInUniqueId();
String batchNumber = receiptMaterialDetailDO.getBatchNumber();
if (inUniqueId == null || StringUtils.isBlank(batchNumber)) {
return;
}
LoginUser loginUser = SecurityUtils.getLoginUser();
UpdateWrapper<InMaterialDetail> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("unique_id", inUniqueId)
.eq("del_flag", 1)
.set("batch_number", batchNumber.trim())
.set("update_by", loginUser.getUserid())
.set("update_by_name", loginUser.getUsername())
.set("update_time", new Date());
iInMaterialDetailService.update(updateWrapper);
}
}