package com.ruoyi.production.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.pojo.ProductModel;
import com.ruoyi.basic.service.IProductModelService;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.production.dto.ProductBomDto;
import com.ruoyi.production.mapper.ProductBomMapper;
import com.ruoyi.production.mapper.ProductStructureMapper;
import com.ruoyi.production.pojo.ProductBom;
import com.ruoyi.production.pojo.ProductStructure;
import com.ruoyi.production.service.ProductBomService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
/**
*
* BOM主表 服务实现类
*
*
* @author 芯导软件(江苏)有限公司
* @since 2026-01-15 09:59:27
*/
@Service
public class ProductBomServiceImpl extends ServiceImpl implements ProductBomService {
@Autowired
private ProductBomMapper productBomMapper;
@Autowired
private IProductModelService productModelService;
@Autowired
private ProductStructureMapper productStructureMapper;
@Override
public IPage listPage(Page page, ProductBomDto productBomDto) {
return productBomMapper.listPage(page, productBomDto);
}
@Override
@Transactional(rollbackFor = Exception.class)
public AjaxResult add(ProductBom productBom) {
boolean save = productBomMapper.insert(productBom) > 0;
if (save) {
// 根据id生成no字段:GX + 8位数字(不足8位前面补0)
String no = "BM." + String.format("%05d", productBom.getId());
productBom.setBomNo(no);
productBomMapper.updateById(productBom);
// 查询出产品模型信息
if (productBom.getProductModelId() == null) {
throw new ServiceException("请选择产品模型");
}
ProductModel productModel = productModelService.getById(productBom.getProductModelId());
if (productModel == null) {
throw new ServiceException("选择的产品模型不存在");
}
// 添加初始的产品结构
ProductStructure productStructure = new ProductStructure();
productStructure.setProductModelId(productBom.getProductModelId());
productStructure.setUnit(productModel.getUnit());
productStructure.setUnitQuantity(BigDecimal.valueOf(1));
productStructure.setBomId(Long.valueOf(productBom.getId()));
productStructureMapper.insert(productStructure);
return AjaxResult.success();
}
return AjaxResult.error();
}
}