feat(wms): 新增产品和原材料时自动创建BOM及默认属性

- 在产品和原材料控制器中新增 addWithBom 接口
- 实现新增产品/原材料时自动创建BOM头信息
- 新增方法 createDefaultBomItems 用于创建默认BOM明细项- 根据类型(产品或原料)设置不同的默认属性值
- 使用事务确保数据一致性
- 注入 IWmsBomService 和 IWmsBomItemService 服务依赖
This commit is contained in:
2025-10-31 11:22:38 +08:00
parent 26f504367e
commit fd40fa0e18
4 changed files with 138 additions and 0 deletions

View File

@@ -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<String[]> 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);
}
}
/**
* 修改原材料