fix(wms):total_volume,total_area字段可为空
This commit is contained in:
+45
@@ -492,6 +492,8 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
|
|||||||
}
|
}
|
||||||
//保存物料明细信息
|
//保存物料明细信息
|
||||||
saveOrUpdateBatch(receiptMaterialDetailList);
|
saveOrUpdateBatch(receiptMaterialDetailList);
|
||||||
|
// total_volume/total_area 为空时强制落库 NULL(绕开 MyBatis-Plus NOT_NULL 更新策略)
|
||||||
|
applyForcedNullTotalMetrics(receiptMaterialDetailList);
|
||||||
//批量新增/更新物料更多属性:保留已有值,仅更新有值的属性,不再先删后插
|
//批量新增/更新物料更多属性:保留已有值,仅更新有值的属性,不再先删后插
|
||||||
mergeMaterialMoreDetail(materialMoreDetailList, stockReceiptOrderDO, receiptMaterialDetailDOList);
|
mergeMaterialMoreDetail(materialMoreDetailList, stockReceiptOrderDO, receiptMaterialDetailDOList);
|
||||||
//批量新增/更新物料更多属性:先删除该收货单下所有明细的旧批次属性,再插入新值,避免重复插入导致更新失效
|
//批量新增/更新物料更多属性:先删除该收货单下所有明细的旧批次属性,再插入新值,避免重复插入导致更新失效
|
||||||
@@ -657,6 +659,49 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
|
|||||||
return val != null && val.compareTo(BigDecimal.ZERO) == 0;
|
return val != null && val.compareTo(BigDecimal.ZERO) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* total_volume / total_area 为空时强制 UPDATE 置 NULL。
|
||||||
|
* 仅对已存在明细(material_detail_id 非空)生效;新插入行由实体空值自然得到 null。
|
||||||
|
*/
|
||||||
|
private void applyForcedNullTotalMetrics(List<ReceiptMaterialDetail> receiptMaterialDetailList) {
|
||||||
|
if (CollectionUtils.isEmpty(receiptMaterialDetailList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 列名组合 -> materialDetailId 列表(total_volume / total_area / 两者)
|
||||||
|
Map<String, List<Long>> columnsToIds = new HashMap<>();
|
||||||
|
for (ReceiptMaterialDetail detail : receiptMaterialDetailList) {
|
||||||
|
if (detail == null || detail.getMaterialDetailId() == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
StringBuilder columns = new StringBuilder();
|
||||||
|
if (detail.getTotalVolume() == null) {
|
||||||
|
columns.append("total_volume");
|
||||||
|
}
|
||||||
|
if (detail.getTotalArea() == null) {
|
||||||
|
if (columns.length() > 0) {
|
||||||
|
columns.append(",");
|
||||||
|
}
|
||||||
|
columns.append("total_area");
|
||||||
|
}
|
||||||
|
if (columns.length() == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
columnsToIds.computeIfAbsent(columns.toString(), k -> new ArrayList<>())
|
||||||
|
.add(detail.getMaterialDetailId());
|
||||||
|
}
|
||||||
|
if (columnsToIds.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (Map.Entry<String, List<Long>> entry : columnsToIds.entrySet()) {
|
||||||
|
UpdateWrapper<ReceiptMaterialDetail> wrapper = new UpdateWrapper<>();
|
||||||
|
for (String column : entry.getKey().split(",")) {
|
||||||
|
wrapper.set(column, null);
|
||||||
|
}
|
||||||
|
wrapper.in("material_detail_id", entry.getValue());
|
||||||
|
receiptMaterialDetailMapper.update(null, wrapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void setMore(ReceiptMaterialDetailDO receiptMaterialDetailDO) {
|
private void setMore(ReceiptMaterialDetailDO receiptMaterialDetailDO) {
|
||||||
List<MaterialMoreDetailDO> materialMoreDetailList = receiptMaterialDetailDO.getMaterialMoreDetailList();
|
List<MaterialMoreDetailDO> materialMoreDetailList = receiptMaterialDetailDO.getMaterialMoreDetailList();
|
||||||
if (!CollectionUtils.isEmpty(materialMoreDetailList)) {
|
if (!CollectionUtils.isEmpty(materialMoreDetailList)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user