refactor(wms): 优化调拨订单和钢卷信息更新逻辑

- 使用LambdaUpdateWrapper替代直接对象更新,支持显式设置NULL值
- 在审批通过时设置调拨状态为1
- 修复钢卷信息批量更新逻辑,使用updateBatchById提高性能
- 添加调拨后物料ID和类型校验,确保数据一致性
- 批量更新调拨明细的isTransferred字段标记为已调拨
- 过滤条件从调拨前值改为调拨后值进行验证
- 添加空值检查避免无效更新操作
This commit is contained in:
2026-04-10 15:07:29 +08:00
parent 92441e569e
commit 57b07885e3
2 changed files with 53 additions and 23 deletions

View File

@@ -5,6 +5,7 @@ import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.utils.StringUtils;
import com.klp.domain.*;
@@ -620,17 +621,23 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
Long originalMaterialType = item.getMaterialTypeBefore();
Long originalWarehouseId = item.getWarehouseIdBefore();
// 使用 UpdateWrapper 显式更新字段包括NULL值
LambdaUpdateWrapper<WmsMaterialCoil> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(WmsMaterialCoil::getCoilId, coilId);
// 设置需要更新的字段
if (originalItemId != null && originalMaterialType != null) {
coil.setItemId(originalItemId);
coil.setItemType(originalMaterialType == 1 ? "raw_material" : "product");
coil.setMaterialType(originalMaterialType == 1 ? "原料" : "成品");
updateWrapper.set(WmsMaterialCoil::getItemId, originalItemId);
updateWrapper.set(WmsMaterialCoil::getItemType, originalMaterialType == 1 ? "raw_material" : "product");
updateWrapper.set(WmsMaterialCoil::getMaterialType, originalMaterialType == 1 ? "原料" : "成品");
}
if (originalWarehouseId != null) {
coil.setWarehouseId(originalWarehouseId);
updateWrapper.set(WmsMaterialCoil::getWarehouseId, originalWarehouseId);
}
// 清空调拨类型
coil.setTransferType(null);
coilMapper.updateById(coil);
// 清空调拨类型显式设置为NULL
updateWrapper.set(WmsMaterialCoil::getTransferType, null);
coilMapper.update(null, updateWrapper);
// 逻辑删除调拨明细记录使用MyBatis-Plus的逻辑删除
baseMapper.deleteById(orderItemId);