diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderItemServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderItemServiceImpl.java index 3f206100..c816b9df 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderItemServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderItemServiceImpl.java @@ -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 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); diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderServiceImpl.java index 2531ab7e..c0b78438 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderServiceImpl.java @@ -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 lombok.RequiredArgsConstructor; @@ -26,11 +27,7 @@ import com.klp.mapper.WmsProductMapper; import com.klp.service.IWmsTransferOrderService; import com.klp.service.IWmsTransferOrderItemService; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; import java.util.stream.Collectors; /** @@ -162,6 +159,7 @@ public class WmsTransferOrderServiceImpl implements IWmsTransferOrderService { order.setApproveStatus(approveStatus); order.setApproveBy(LoginHelper.getUsername()); order.setApproveTime(new Date()); + order.setTransferStatus(1L); boolean updateResult = baseMapper.updateById(order) > 0; // 3. 如果审批通过,批量更新钢卷信息 @@ -173,7 +171,7 @@ public class WmsTransferOrderServiceImpl implements IWmsTransferOrderService { } /** - * 审批通过时批量更新钢卷信息 + * 审批通过时批量更新钢卷信息 需要测试是否报错以及明细isTransfer字段是否改成1 钢卷是否被修改如果不改类型和逻辑库区钢卷的更新人时间就不会变 */ private void batchUpdateCoilsOnApprove(Long orderId, String transferType) { // 1. 批量查询调拨明细 @@ -207,9 +205,9 @@ public class WmsTransferOrderServiceImpl implements IWmsTransferOrderService { throw new RuntimeException("部分钢卷不存在"); } - // 5. 收集所有需要校验的itemId(使用调拨前的值) + // 5. 收集所有需要校验的itemId(使用调拨后的值) List itemIdsToValidate = items.stream() - .map(WmsTransferOrderItem::getItemIdBefore) + .map(WmsTransferOrderItem::getItemIdAfter) .filter(itemId -> itemId != null) .distinct() .collect(Collectors.toList()); @@ -230,6 +228,20 @@ public class WmsTransferOrderServiceImpl implements IWmsTransferOrderService { Long finalItemId = item.getItemIdAfter(); Long finalMaterialType = item.getMaterialTypeAfter(); Long finalWarehouseId = item.getWarehouseIdAfter(); + + // 如果调拨后的值为空,则不修改该钢卷 + if (finalItemId == null && finalMaterialType == null && finalWarehouseId == null) { + return null; + } + + // 如果不为空,必须itemId和itemType都不为空才能修改 + if ((finalItemId != null || finalMaterialType != null) + && (finalItemId == null || finalMaterialType == null)) { + // itemId和materialType只有一个有值,不符合要求,跳过 + return null; + } + + // 计算itemType String finalItemType = finalMaterialType != null && finalMaterialType == 1 ? "raw_material" : "product"; // 更新钢卷信息 @@ -241,14 +253,25 @@ public class WmsTransferOrderServiceImpl implements IWmsTransferOrderService { return coil; }) - .filter(coil -> coil != null) + .filter(Objects::nonNull) .collect(Collectors.toList()); - // 8. 批量更新数据库 + // 8. 批量更新钢卷数据库 if (!coilsToUpdate.isEmpty()) { - for (WmsMaterialCoil coil : coilsToUpdate) { - coilMapper.updateById(coil); - } + coilMapper.updateBatchById(coilsToUpdate); + } + + // 9. 批量更新明细的isTransferred字段为1(已调拨) + List itemIds = items.stream() + .map(WmsTransferOrderItem::getOrderItemId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + if (!itemIds.isEmpty()) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.in(WmsTransferOrderItem::getOrderItemId, itemIds); + updateWrapper.set(WmsTransferOrderItem::getIsTransferred, 1); + wmsTransferOrderItemMapper.update(null, updateWrapper); } } @@ -262,10 +285,10 @@ public class WmsTransferOrderServiceImpl implements IWmsTransferOrderService { // 按物料类型分组 Map> materialTypeGroupMap = items.stream() - .filter(item -> item.getItemIdBefore() != null && item.getMaterialTypeBefore() != null) + .filter(item -> item.getItemIdAfter() != null && item.getMaterialTypeAfter() != null) .collect(Collectors.groupingBy( - WmsTransferOrderItem::getMaterialTypeBefore, - Collectors.mapping(WmsTransferOrderItem::getItemIdBefore, Collectors.toList()) + WmsTransferOrderItem::getMaterialTypeAfter, + Collectors.mapping(WmsTransferOrderItem::getItemIdAfter, Collectors.toList()) )); // 校验原料