From 567e0262c5cc992a29e2837c9f386baba1fc63b3 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 13 Jan 2026 10:31:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E9=92=A2=E5=8D=B7=E5=8F=91?= =?UTF-8?q?=E8=B4=A7=E7=8A=B6=E6=80=81=E6=89=B9=E9=87=8F=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=B8=85=E9=99=A4=E5=BA=93=E5=8C=BAid=E9=87=8A=E6=94=BE?= =?UTF-8?q?=E5=8D=A0=E7=94=A8=E5=BA=93=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增批量查询钢卷信息的方法支持 - 实现发货状态更新时清空实际库区ID的功能 - 添加库区释放逻辑,更新对应库区为启用状态 - 优化状态参数说明,明确发货状态含义 - 使用BeanUtils进行对象属性复制转换 - 完善批量更新的成功状态返回机制 --- .../impl/WmsMaterialCoilServiceImpl.java | 59 +++++++++++++++++-- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index 927d419e..0c0b5145 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -23,6 +23,7 @@ import com.klp.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.klp.mapper.WmsMaterialCoilMapper; @@ -1134,8 +1135,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { // 标记钢卷为历史数据 LambdaUpdateWrapper originalUpdateWrapper = new LambdaUpdateWrapper<>(); originalUpdateWrapper.eq(WmsMaterialCoil::getCoilId, originalCoilBo.getCoilId()) - .set(WmsMaterialCoil::getDataType, 0) // 设置为历史数据 - .set(WmsMaterialCoil::getActualWarehouseId, (Long) null); // 同步清空实际库区绑定 + .set(WmsMaterialCoil::getDataType, 0); // 设置为历史数据 baseMapper.update(null, originalUpdateWrapper); // 启用原始钢卷的实际库区 @@ -2104,7 +2104,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { * 批量更新钢卷发货状态 * * @param coilIds 钢卷ID列表 - * @param status 目标状态 (0=在库, 1=在途, 2=已出库) + * @param status 目标状态 (0=在库, 1=在途/已发货, 2=已出库) * @return 是否更新成功 */ @Override @@ -2117,17 +2117,66 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { throw new RuntimeException("无效的状态值,状态必须在0-2之间"); } + // ********** 批量查询钢卷原库区ID(仅当发货状态时需要)********** + Map coilWarehouseMap = new HashMap<>(); // key: coilId, value: oldActualWarehouseId + if (status == 1) { // 仅当设置为"已发货/在途"状态时,才处理库区释放逻辑 + // 批量查询钢卷信息,获取原实际库区ID + List coilVoList = queryBatchByIds(coilIds); + for (WmsMaterialCoilVo vo : coilVoList) { + if (vo != null && vo.getActualWarehouseId() != null) { + coilWarehouseMap.put(vo.getCoilId(), vo.getActualWarehouseId()); + } + } + } + // 构造更新条件 LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(); updateWrapper.in(WmsMaterialCoil::getCoilId, coilIds); updateWrapper.set(WmsMaterialCoil::getStatus, status); - // 如果是设置为已出库状态,同时更新出库时间 + // ********** 发货状态时清空库区ID + 更新出库时间 ********** if (status == 1) { updateWrapper.set(WmsMaterialCoil::getExportTime, new Date()); + updateWrapper.set(WmsMaterialCoil::getActualWarehouseId, null); // 清空实际库区ID } - return baseMapper.update(null, updateWrapper) > 0; + // 执行批量更新 + int updateCount = baseMapper.update(null, updateWrapper); + boolean updateSuccess = updateCount > 0; + + // ********** 批量释放原库区占用(仅当更新成功且有库区ID时)********** + if (updateSuccess && status == 1 && !coilWarehouseMap.isEmpty()) { + // 去重库区ID(避免重复更新同一个库区) + Set warehouseIds = new HashSet<>(coilWarehouseMap.values()); + for (Long warehouseId : warehouseIds) { + WmsActualWarehouseBo releaseBo = new WmsActualWarehouseBo(); + releaseBo.setActualWarehouseId(warehouseId); + releaseBo.setIsEnabled(1); // 释放:设置为启用 + actualWarehouseService.updateByBo(releaseBo); + } + } + + return updateSuccess; + } + + // 补充:批量查询钢卷信息的方法(需要确保你的Mapper里有对应的批量查询逻辑) + private List queryBatchByIds(List coilIds) { + if (coilIds == null || coilIds.isEmpty()) { + return Collections.emptyList(); + } + // 这里替换成你实际的批量查询逻辑(比如用IN条件查询) + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.in(WmsMaterialCoil::getCoilId, coilIds); + List coilList = baseMapper.selectList(queryWrapper); + + // 转换为Vo + return coilList.stream() + .map(coil -> { + WmsMaterialCoilVo vo = new WmsMaterialCoilVo(); + BeanUtils.copyProperties(coil, vo); + return vo; + }) + .collect(Collectors.toList()); } /**