fix(wms):total_volume,total_area字段可为空
This commit is contained in:
+45
@@ -492,6 +492,8 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
|
||||
}
|
||||
//保存物料明细信息
|
||||
saveOrUpdateBatch(receiptMaterialDetailList);
|
||||
// total_volume/total_area 为空时强制落库 NULL(绕开 MyBatis-Plus NOT_NULL 更新策略)
|
||||
applyForcedNullTotalMetrics(receiptMaterialDetailList);
|
||||
//批量新增/更新物料更多属性:保留已有值,仅更新有值的属性,不再先删后插
|
||||
mergeMaterialMoreDetail(materialMoreDetailList, stockReceiptOrderDO, receiptMaterialDetailDOList);
|
||||
//批量新增/更新物料更多属性:先删除该收货单下所有明细的旧批次属性,再插入新值,避免重复插入导致更新失效
|
||||
@@ -657,6 +659,49 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
|
||||
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) {
|
||||
List<MaterialMoreDetailDO> materialMoreDetailList = receiptMaterialDetailDO.getMaterialMoreDetailList();
|
||||
if (!CollectionUtils.isEmpty(materialMoreDetailList)) {
|
||||
|
||||
Reference in New Issue
Block a user