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 193dda49..6e1de40b 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 @@ -68,7 +68,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { * 查询钢卷物料表 */ @Override - public WmsMaterialCoilVo queryById(Long coilId){ + public WmsMaterialCoilVo queryById(Long coilId) { WmsMaterialCoilVo vo = baseMapper.selectVoById(coilId); if (vo == null) { return null; @@ -79,8 +79,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { // 根据入场钢卷号查找当前数据 LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(WmsMaterialCoil::getEnterCoilNo, vo.getEnterCoilNo()) - .eq(WmsMaterialCoil::getDataType, 1) // 查找当前数据 - .orderByDesc(WmsMaterialCoil::getCreateTime); // 按创建时间倒序,获取最新的 + .eq(WmsMaterialCoil::getDataType, 1) // 查找当前数据 + .orderByDesc(WmsMaterialCoil::getCreateTime); // 按创建时间倒序,获取最新的 List currentDataList = baseMapper.selectVoList(lqw); if (!currentDataList.isEmpty()) { @@ -136,7 +136,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { if ("product".equals(vo.getItemType()) && vo.getItemId() != null) { // 产品和原材料的查询逻辑相同,都通过itemId查询 WmsRawMaterialVo rawMaterial = rawMaterialService.queryById(vo.getItemId()); - + // 查询原材料对应的BOM信息(通过bomId查询BomItem列表) if (rawMaterial != null && rawMaterial.getBomId() != null) { WmsBomItemBo bomItemBo = new WmsBomItemBo(); @@ -189,11 +189,10 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { Long qrcodeRecordId = generateQrcodeForInsert(bo); bo.setQrcodeRecordId(qrcodeRecordId); - // 2. 如果warehouseId为空,查找或创建stock - if (bo.getWarehouseId() == null) { - Long warehouseId = findOrCreateStock(bo); - bo.setWarehouseId(warehouseId); - } + // 2. 查找或创建stock + Long warehouseId = findOrCreateStock(bo); + bo.setWarehouseId(warehouseId); + // 3. 插入钢卷数据 WmsMaterialCoil add = BeanUtil.toBean(bo, WmsMaterialCoil.class); @@ -269,7 +268,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { throw new RuntimeException("物品类型和物品ID不能为空"); } - // 查询是否存在相同的stock + // 查询是否存在相同的stock(匹配itemType和itemId) WmsStockBo stockBo = new WmsStockBo(); stockBo.setItemType(bo.getItemType()); stockBo.setItemId(bo.getItemId()); @@ -279,13 +278,21 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { // 如果找到相同的stock,返回第一个的warehouseId return stockList.get(0).getWarehouseId(); } else { - // 如果没有找到,创建一个新的stock - WmsStock newStock = new WmsStock(); - newStock.setItemType(bo.getItemType()); - newStock.setItemId(bo.getItemId()); - // 新创建的stock没有指定warehouse,可以为null - stockMapper.insert(newStock); - return newStock.getWarehouseId(); + // 如果没有找到匹配的stock,新增一条stock记录 + WmsStockBo newStockBo = new WmsStockBo(); + newStockBo.setItemType(bo.getItemType()); + newStockBo.setItemId(bo.getItemId()); + // 如果有指定warehouseId,使用指定的;否则为null + if (bo.getWarehouseId() != null) { + newStockBo.setWarehouseId(bo.getWarehouseId()); + } + // 调用stockService新增stock + Boolean insertResult = stockService.insertByBo(newStockBo); + if (!insertResult) { + throw new RuntimeException("新增库存记录失败"); + } + // 返回新创建的stock的warehouseId + return newStockBo.getWarehouseId(); } } @@ -353,7 +360,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { // 2. 将原数据更新为历史数据(data_type=0) LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(WmsMaterialCoil::getCoilId, bo.getCoilId()) - .set(WmsMaterialCoil::getDataType, 0); // 设置为历史数据 + .set(WmsMaterialCoil::getDataType, 0); // 设置为历史数据 baseMapper.update(null, updateWrapper); // 3. 插入一条新的当前数据(data_type=1) @@ -419,7 +426,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { if (bo.getCoilId() != null) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(WmsMaterialCoil::getCoilId, bo.getCoilId()) - .set(WmsMaterialCoil::getDataType, 0); // 设置为历史数据 + .set(WmsMaterialCoil::getDataType, 0); // 设置为历史数据 baseMapper.update(null, updateWrapper); } @@ -440,33 +447,33 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { // 1. 将原始钢卷更新为历史数据(已在上面完成) - // 2. 为每个分卷后的子钢卷生成独立的二维码并插入数据库 - for (WmsMaterialCoilBo newCoilBo : bo.getNewCoils()) { - WmsMaterialCoil newCoil = BeanUtil.toBean(newCoilBo, WmsMaterialCoil.class); - newCoil.setCoilId(null); - newCoil.setDataType(1); - // 继承原钢卷的基本信息 - newCoil.setEnterCoilNo(oldCoil.getEnterCoilNo()); - newCoil.setSupplierCoilNo(oldCoil.getSupplierCoilNo()); // 保留厂家原料卷号 - newCoil.setItemType(oldCoil.getItemType()); - newCoil.setItemId(oldCoil.getItemId()); - newCoil.setTeam(oldCoil.getTeam()); - // 如果没有指定库区,使用原库区 - if (newCoil.getWarehouseId() == null) { - newCoil.setWarehouseId(oldCoil.getWarehouseId()); - } + // 2. 为每个分卷后的子钢卷生成独立的二维码并插入数据库 + for (WmsMaterialCoilBo newCoilBo : bo.getNewCoils()) { + WmsMaterialCoil newCoil = BeanUtil.toBean(newCoilBo, WmsMaterialCoil.class); + newCoil.setCoilId(null); + newCoil.setDataType(1); + // 继承原钢卷的基本信息 + newCoil.setEnterCoilNo(oldCoil.getEnterCoilNo()); + newCoil.setSupplierCoilNo(oldCoil.getSupplierCoilNo()); // 保留厂家原料卷号 + newCoil.setItemType(oldCoil.getItemType()); + newCoil.setItemId(oldCoil.getItemId()); + newCoil.setTeam(oldCoil.getTeam()); + // 如果没有指定库区,使用原库区 + if (newCoil.getWarehouseId() == null) { + newCoil.setWarehouseId(oldCoil.getWarehouseId()); + } - // 为每个子钢卷生成独立二维码 - Long newQrcodeId = generateQrcodeForSplit(oldCoil, newCoilBo, allNewCoilNos); - newCoil.setQrcodeRecordId(newQrcodeId); + // 为每个子钢卷生成独立二维码 + Long newQrcodeId = generateQrcodeForSplit(oldCoil, newCoilBo, allNewCoilNos); + newCoil.setQrcodeRecordId(newQrcodeId); - validEntityBeforeSave(newCoil); - baseMapper.insert(newCoil); - newCoils.add(newCoil); + validEntityBeforeSave(newCoil); + baseMapper.insert(newCoil); + newCoils.add(newCoil); - // 更新二维码内容中的coilId - updateQrcodeCoilId(newQrcodeId, newCoil.getCoilId()); - } + // 更新二维码内容中的coilId + updateQrcodeCoilId(newQrcodeId, newCoil.getCoilId()); + } } else if (isMerge) { // 合卷:将bo作为合卷后的新钢卷,newCoils中的对象作为参与合卷的原始钢卷 // 1. 将参与合卷的原始钢卷更新为历史数据 @@ -474,7 +481,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { if (originalCoilBo.getCoilId() != null) { LambdaUpdateWrapper originalUpdateWrapper = new LambdaUpdateWrapper<>(); originalUpdateWrapper.eq(WmsMaterialCoil::getCoilId, originalCoilBo.getCoilId()) - .set(WmsMaterialCoil::getDataType, 0); // 设置为历史数据 + .set(WmsMaterialCoil::getDataType, 0); // 设置为历史数据 baseMapper.update(null, originalUpdateWrapper); } } @@ -672,6 +679,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { throw new RuntimeException("生成合卷二维码失败: " + e.getMessage()); } } + /** * 更新二维码内容中的coilId */ @@ -766,7 +774,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { /** * 保存前的数据校验 */ - private void validEntityBeforeSave(WmsMaterialCoil entity){ + private void validEntityBeforeSave(WmsMaterialCoil entity) { //TODO 做一些数据校验,如唯一约束 } @@ -775,7 +783,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteBatchIds(ids) > 0; @@ -785,7 +793,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { * 钢卷溯源查询 * 根据入场钢卷号查询二维码,解析content中的steps,然后根据steps中的钢卷号反向查询数据库 * - * @param enterCoilNo 入场钢卷号 + * @param enterCoilNo 入场钢卷号 * @param currentCoilNo 当前钢卷号(可选,用于查询特定子钢卷) * @return 溯源结果(包含二维码信息和数据库记录) */ @@ -1013,7 +1021,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { * 按库区分组,统计每种物品类型和物品ID的钢卷数量和重量 * * @param itemType 物品类型(可选) - * @param itemId 物品ID(可选) + * @param itemId 物品ID(可选) * @return 分布情况列表,包含库区信息、物品类型、物品ID、数量、重量等 */ @Override @@ -1027,7 +1035,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { * 按物品类型和物品ID分组,统计每个库区的钢卷数量和重量 * * @param itemType 物品类型(可选) - * @param itemId 物品ID(可选) + * @param itemId 物品ID(可选) * @return 分布情况列表,包含物品类型、物品ID、库区信息、数量、重量等 */ @Override