From fea3c78c4f79f22f43980d35f3da418c765af7b3 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 14 Apr 2026 10:06:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(product):=20=E6=B7=BB=E5=8A=A0=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E6=9B=B4=E6=96=B0=E9=92=A2=E5=8D=B7itemId=E5=8A=9F?= =?UTF-8?q?=E8=83=BD,=E7=94=B1=E4=BA=8E=E5=8F=AA=E6=98=AF=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=E6=80=A7=E6=8E=A5=E5=8F=A3=E6=9A=82=E6=97=B6=E4=B8=8D?= =?UTF-8?q?=E8=80=83=E8=99=91=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在IWmsProductService接口中添加batchUpdateCoilItemId方法定义 - 在WmsProductController中添加batchUpdateCoilItem REST端点 - 在WmsProductServiceImpl中实现批量更新逻辑 - 添加对WmsMaterialCoil和WmsRawMaterial实体的操作支持 - 实现根据逻辑库区ID查询并按itemType分类处理的功能 - 添加事务管理和异常回滚机制 - 返回产品和原料的数量统计结果 --- .../klp/controller/WmsProductController.java | 12 ++ .../com/klp/service/IWmsProductService.java | 10 ++ .../service/impl/WmsProductServiceImpl.java | 104 ++++++++++++++++++ 3 files changed, 126 insertions(+) diff --git a/klp-wms/src/main/java/com/klp/controller/WmsProductController.java b/klp-wms/src/main/java/com/klp/controller/WmsProductController.java index ba7519f3..a7fbc9c7 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsProductController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsProductController.java @@ -19,6 +19,8 @@ import com.klp.common.core.validate.AddGroup; import com.klp.common.core.validate.EditGroup; import com.klp.common.enums.BusinessType; import com.klp.common.utils.poi.ExcelUtil; +import java.util.Map; + import com.klp.domain.vo.WmsProductVo; import com.klp.domain.bo.WmsProductBo; import com.klp.service.IWmsProductService; @@ -125,4 +127,14 @@ public class WmsProductController extends BaseController { public R addWithBom(@Validated(AddGroup.class) @RequestBody WmsProductBo bo) { return toAjax(iWmsProductService.insertByBo(bo)); } + + /** + * 批量更新钢卷的itemId + * 根据逻辑库区ID查询所有钢卷,然后根据itemType分别去产品表或原料表新增记录 + */ + @Log(title = "批量更新钢卷itemId", businessType = BusinessType.UPDATE) + @PostMapping("/batchUpdateCoilItem") + public R> batchUpdateCoilItem(@RequestParam Long warehouseId, @RequestParam String newName) { + return R.ok(iWmsProductService.batchUpdateCoilItemId(warehouseId, newName)); + } } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsProductService.java b/klp-wms/src/main/java/com/klp/service/IWmsProductService.java index cb548d13..c5d9f3be 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsProductService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsProductService.java @@ -9,6 +9,7 @@ import com.klp.common.core.domain.PageQuery; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 产品Service接口 @@ -54,4 +55,13 @@ public interface IWmsProductService { TableDataInfo queryPageListWithBom(WmsProductBo bo, PageQuery pageQuery); DashboardOverviewVO getDashboardOverview(); + + /** + * 批量更新钢卷的itemId + * 根据逻辑库区ID查询所有钢卷,然后根据itemType分别去产品表或原料表新增记录 + * @param warehouseId 逻辑库区ID + * @param newName 新名称 + * @return 更新结果(产品数量,原料数量) + */ + Map batchUpdateCoilItemId(Long warehouseId, String newName); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsProductServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsProductServiceImpl.java index feb36869..b800b7ce 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsProductServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsProductServiceImpl.java @@ -15,7 +15,11 @@ import org.springframework.stereotype.Service; import com.klp.domain.bo.WmsProductBo; import com.klp.domain.vo.WmsProductVo; import com.klp.domain.WmsProduct; +import com.klp.domain.WmsMaterialCoil; +import com.klp.domain.WmsRawMaterial; import com.klp.mapper.WmsProductMapper; +import com.klp.mapper.WmsMaterialCoilMapper; +import com.klp.mapper.WmsRawMaterialMapper; import com.klp.service.IWmsProductService; import com.klp.domain.vo.PerformanceAreaVO; import com.klp.domain.vo.CurrentSituationAreaVO; @@ -45,6 +49,8 @@ public class WmsProductServiceImpl implements IWmsProductService { private final WmsProductMapper baseMapper; private final IWmsBomService wmsBomService; private final IWmsBomItemService wmsBomItemService; + private final WmsMaterialCoilMapper coilMapper; + private final WmsRawMaterialMapper rawMaterialMapper; /** * 查询产品 @@ -321,4 +327,102 @@ public class WmsProductServiceImpl implements IWmsProductService { return vo; } + + @Override + @Transactional(rollbackFor = Exception.class) + public Map batchUpdateCoilItemId(Long warehouseId, String newName) { + LambdaQueryWrapper coilWrapper = Wrappers.lambdaQuery(); + coilWrapper.eq(WmsMaterialCoil::getWarehouseId, warehouseId); + coilWrapper.eq(WmsMaterialCoil::getDelFlag, 0); + List coils = coilMapper.selectList(coilWrapper); + + Map result = new java.util.HashMap<>(); + result.put("productUpdateCount", 0); + result.put("rawMaterialUpdateCount", 0); + + if (coils == null || coils.isEmpty()) { + return result; + } + + List productItemIds = coils.stream() + .filter(c -> "product".equals(c.getItemType()) && c.getItemId() != null) + .map(WmsMaterialCoil::getItemId) + .distinct() + .collect(java.util.stream.Collectors.toList()); + + List rawMaterialItemIds = coils.stream() + .filter(c -> "raw_material".equals(c.getItemType()) && c.getItemId() != null) + .map(WmsMaterialCoil::getItemId) + .distinct() + .collect(java.util.stream.Collectors.toList()); + + Map productMap = new java.util.HashMap<>(); + if (!productItemIds.isEmpty()) { + List products = baseMapper.selectBatchIds(productItemIds); + for (WmsProduct p : products) { + productMap.put(p.getProductId(), p); + } + } + + Map rawMaterialMap = new java.util.HashMap<>(); + if (!rawMaterialItemIds.isEmpty()) { + List rawMaterials = rawMaterialMapper.selectBatchIds(rawMaterialItemIds); + for (WmsRawMaterial r : rawMaterials) { + rawMaterialMap.put(r.getRawMaterialId(), r); + } + } + + int productUpdateCount = 0; + int rawMaterialUpdateCount = 0; + + for (WmsMaterialCoil coil : coils) { + Long itemId = coil.getItemId(); + String itemType = coil.getItemType(); + + if (itemId == null || StringUtils.isBlank(itemType)) { + continue; + } + + Long newItemId = null; + + if ("product".equals(itemType)) { + WmsProduct originalProduct = productMap.get(itemId); + if (originalProduct == null) { + continue; + } + + WmsProduct newProduct = BeanUtil.toBean(originalProduct, WmsProduct.class); + newProduct.setProductId(null); + newProduct.setProductName(newName); + newProduct.setProductCode(null); + baseMapper.insert(newProduct); + newItemId = newProduct.getProductId(); + productUpdateCount++; + + } else if ("raw_material".equals(itemType)) { + WmsRawMaterial originalRawMaterial = rawMaterialMap.get(itemId); + if (originalRawMaterial == null) { + continue; + } + + WmsRawMaterial newRawMaterial = BeanUtil.toBean(originalRawMaterial, WmsRawMaterial.class); + newRawMaterial.setRawMaterialId(null); + newRawMaterial.setRawMaterialName(newName); + newRawMaterial.setRawMaterialCode(null); + rawMaterialMapper.insert(newRawMaterial); + newItemId = newRawMaterial.getRawMaterialId(); + rawMaterialUpdateCount++; + } + + if (newItemId != null) { + coil.setItemId(newItemId); + coilMapper.updateById(coil); + } + } + + result.put("productUpdateCount", productUpdateCount); + result.put("rawMaterialUpdateCount", rawMaterialUpdateCount); + + return result; + } }