From fd40fa0e18fa0726d3dbd2f78e5e98f9cb44d5a0 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Fri, 31 Oct 2025 11:22:38 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E6=96=B0=E5=A2=9E=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E5=92=8C=E5=8E=9F=E6=9D=90=E6=96=99=E6=97=B6=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=88=9B=E5=BB=BABOM=E5=8F=8A=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在产品和原材料控制器中新增 addWithBom 接口 - 实现新增产品/原材料时自动创建BOM头信息 - 新增方法 createDefaultBomItems 用于创建默认BOM明细项- 根据类型(产品或原料)设置不同的默认属性值 - 使用事务确保数据一致性 - 注入 IWmsBomService 和 IWmsBomItemService 服务依赖 --- .../klp/controller/WmsProductController.java | 10 ++++ .../controller/WmsRawMaterialController.java | 10 ++++ .../service/impl/WmsProductServiceImpl.java | 59 +++++++++++++++++++ .../impl/WmsRawMaterialServiceImpl.java | 59 +++++++++++++++++++ 4 files changed, 138 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 bf81c5f8..d3d27886 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsProductController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsProductController.java @@ -103,4 +103,14 @@ public class WmsProductController extends BaseController { public DashboardOverviewVO getDashboardOverview() { return iWmsProductService.getDashboardOverview(); } + + /** + * 新增产品并自动创建BOM(带默认属性) + */ + @Log(title = "产品", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/addWithBom") + public R addWithBom(@Validated(AddGroup.class) @RequestBody WmsProductBo bo) { + return toAjax(iWmsProductService.insertByBo(bo)); + } } diff --git a/klp-wms/src/main/java/com/klp/controller/WmsRawMaterialController.java b/klp-wms/src/main/java/com/klp/controller/WmsRawMaterialController.java index fb08ab12..fde4fb26 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsRawMaterialController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsRawMaterialController.java @@ -105,4 +105,14 @@ public class WmsRawMaterialController extends BaseController { public TableDataInfo listWithDemand(WmsRawMaterialBo bo, PageQuery pageQuery) { return iWmsRawMaterialService.queryPageListWithDemand(bo, pageQuery); } + + /** + * 新增原材料并自动创建BOM(带默认属性) + */ + @Log(title = "原材料", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/addWithBom") + public R addWithBom(@Validated(AddGroup.class) @RequestBody WmsRawMaterialBo bo) { + return R.ok(iWmsRawMaterialService.insertByBo(bo)); + } } 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 d39a4127..b27feef0 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 @@ -18,10 +18,16 @@ import com.klp.service.IWmsProductService; import com.klp.domain.vo.PerformanceAreaVO; import com.klp.domain.vo.CurrentSituationAreaVO; import com.klp.domain.vo.RecommendationAreaVO; +import com.klp.service.IWmsBomService; +import com.klp.service.IWmsBomItemService; +import com.klp.domain.bo.WmsBomBo; +import com.klp.domain.bo.WmsBomItemBo; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.Arrays; /** * 产品Service业务层处理 @@ -34,6 +40,8 @@ import java.util.Collection; public class WmsProductServiceImpl implements IWmsProductService { private final WmsProductMapper baseMapper; + private final IWmsBomService wmsBomService; + private final IWmsBomItemService wmsBomItemService; /** * 查询产品 @@ -85,15 +93,66 @@ public class WmsProductServiceImpl implements IWmsProductService { * 新增产品 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(WmsProductBo bo) { + // 1. 先创建BOM头 + WmsBomBo bomBo = new WmsBomBo(); + bomBo.setBomCode("产品BOM" + System.currentTimeMillis()); + bomBo.setBomName("产品BOM" + System.currentTimeMillis()); + bomBo.setIsEnabled(1); + bomBo.setRemark("产品创建时自动生成的BOM"); + + WmsBomBo savedBom = wmsBomService.insertByBo(bomBo); + Long bomId = savedBom.getBomId(); + + // 2. 创建产品并关联BOM WmsProduct add = BeanUtil.toBean(bo, WmsProduct.class); + add.setBomId(bomId); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setProductId(add.getProductId()); + + // 3. 创建默认的BOM明细项(根据截图的默认属性) + createDefaultBomItems(bomId, "产品"); } return flag; } + + /** + * 创建默认的BOM明细项 + */ + private void createDefaultBomItems(Long bomId, String type) { + List defaultAttrs; + + if ("产品".equals(type)) { + // 产品默认属性(根据截图) + defaultAttrs = Arrays.asList( + new String[]{"厚度", "0.6"}, + new String[]{"宽度", "1250"}, + new String[]{"材质", "SPCC"}, + new String[]{"表面处理", "涂油"} + ); + } else { + // 原料默认属性(根据截图) + defaultAttrs = Arrays.asList( + new String[]{"宽度", "1265"}, + new String[]{"厚度", "4"}, + new String[]{"材质", "Q195L"}, + new String[]{"厂家", "天铁"} + ); + } + + for (String[] attr : defaultAttrs) { + WmsBomItemBo itemBo = new WmsBomItemBo(); + itemBo.setBomId(bomId); + itemBo.setAttrKey(attr[0]); + itemBo.setAttrValue(attr[1]); + itemBo.setIsEnabled(1); + itemBo.setRemark("创建时自动生成的默认属性"); + wmsBomItemService.insertByBo(itemBo); + } + } /** * 修改产品 diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsRawMaterialServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsRawMaterialServiceImpl.java index 713b3c8d..4c5d320c 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsRawMaterialServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsRawMaterialServiceImpl.java @@ -26,11 +26,17 @@ import com.klp.domain.vo.WmsPurchasePlanDetailVo; import com.klp.domain.vo.WmsProductBomVo; import com.klp.domain.vo.WmsOrderDetailVo; import com.klp.domain.vo.WmsOrderVo; +import com.klp.service.IWmsBomService; +import com.klp.service.IWmsBomItemService; +import com.klp.domain.bo.WmsBomBo; +import com.klp.domain.bo.WmsBomItemBo; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.Arrays; /** * 原材料Service业务层处理 @@ -48,6 +54,8 @@ public class WmsRawMaterialServiceImpl implements IWmsRawMaterialService { private final IWmsOrderDetailService orderDetailService; private final IWmsProductBomService productBomService; private final IWmsOrderService orderService; + private final IWmsBomService wmsBomService; + private final IWmsBomItemService wmsBomItemService; /** * 查询原材料 @@ -195,15 +203,66 @@ public class WmsRawMaterialServiceImpl implements IWmsRawMaterialService { * 新增原材料 */ @Override + @Transactional(rollbackFor = Exception.class) public WmsRawMaterialBo insertByBo(WmsRawMaterialBo bo) { + // 1. 先创建BOM头 + WmsBomBo bomBo = new WmsBomBo(); + bomBo.setBomCode("原材料BOM" + System.currentTimeMillis()); + bomBo.setBomName("原材料BOM" + System.currentTimeMillis()); + bomBo.setIsEnabled(1); + bomBo.setRemark("原材料创建时自动生成的BOM"); + + WmsBomBo savedBom = wmsBomService.insertByBo(bomBo); + Long bomId = savedBom.getBomId(); + + // 2. 创建原材料并关联BOM WmsRawMaterial add = BeanUtil.toBean(bo, WmsRawMaterial.class); + add.setBomId(bomId); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setRawMaterialId(add.getRawMaterialId()); + + // 3. 创建默认的BOM明细项(根据截图的默认属性) + createDefaultBomItems(bomId, "原料"); } return bo; } + + /** + * 创建默认的BOM明细项 + */ + private void createDefaultBomItems(Long bomId, String type) { + List defaultAttrs; + + if ("产品".equals(type)) { + // 产品默认属性(根据截图) + defaultAttrs = Arrays.asList( + new String[]{"厚度", "0.6"}, + new String[]{"宽度", "1250"}, + new String[]{"材质", "SPCC"}, + new String[]{"表面处理", "涂油"} + ); + } else { + // 原料默认属性(根据截图) + defaultAttrs = Arrays.asList( + new String[]{"宽度", "1265"}, + new String[]{"厚度", "4"}, + new String[]{"材质", "Q195L"}, + new String[]{"厂家", "天铁"} + ); + } + + for (String[] attr : defaultAttrs) { + WmsBomItemBo itemBo = new WmsBomItemBo(); + itemBo.setBomId(bomId); + itemBo.setAttrKey(attr[0]); + itemBo.setAttrValue(attr[1]); + itemBo.setIsEnabled(1); + itemBo.setRemark("创建时自动生成的默认属性"); + wmsBomItemService.insertByBo(itemBo); + } + } /** * 修改原材料