huminmin
7 小时以前 3aeb90eaaf54e1a1af32de5efb9c944910ac9005
bom改变规格后,修改关联数据规格
已修改3个文件
101 ■■■■■ 文件已修改
src/main/java/com/ruoyi/production/controller/ProductBomController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/ProductBomService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/controller/ProductBomController.java
@@ -73,7 +73,7 @@
    @Log(title = "修改", businessType = BusinessType.UPDATE)
    @PutMapping("/update")
    public AjaxResult update(@RequestBody ProductBom productBom) {
        return AjaxResult.success(productBomService.updateById(productBom));
        return AjaxResult.success(productBomService.update(productBom));
    }
    @ApiOperation("删除BOM")
src/main/java/com/ruoyi/production/service/ProductBomService.java
@@ -27,4 +27,6 @@
    AjaxResult uploadBom(MultipartFile file);
    void exportBom(HttpServletResponse response, Integer bomId);
    AjaxResult update(ProductBom productBom);
}
src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
@@ -15,10 +15,8 @@
import com.ruoyi.production.dto.BomImportDto;
import com.ruoyi.production.dto.ProductBomDto;
import com.ruoyi.production.dto.ProductStructureDto;
import com.ruoyi.production.mapper.ProductBomMapper;
import com.ruoyi.production.pojo.ProductBom;
import com.ruoyi.production.pojo.ProductProcess;
import com.ruoyi.production.pojo.ProductStructure;
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.*;
import com.ruoyi.production.service.ProductBomService;
import com.ruoyi.production.service.ProductProcessService;
import com.ruoyi.production.service.ProductStructureService;
@@ -59,6 +57,18 @@
    @Autowired
    private ProductProcessService productProcessService;
    @Autowired
    private ProductStructureMapper productStructureMapper;
    @Autowired
    private ProductOrderMapper productOrderMapper;
    @Autowired
    private ProductProcessRouteMapper productProcessRouteMapper;
    @Autowired
    private ProcessRouteMapper processRouteMapper;
    @Override
    public IPage<ProductBomDto> listPage(Page page, ProductBomDto productBomDto) {
        return productBomMapper.listPage(page, productBomDto);
@@ -99,6 +109,85 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult update(ProductBom productBom) {
        //  查询出产品模型信息
        if (productBom.getProductModelId() == null) {
            throw new ServiceException("请选择产品模型");
        }
        ProductBom oldBom = productBomMapper.selectById(productBom.getId());
        // 如果规格改变,关联的生产订单如果订单完成数量>0,则不许改bom;否则删除之前关联的产品结构, 修改关联订单的产品信息
        if (!oldBom.getProductModelId().equals(productBom.getProductModelId())) {
            ProductModel productModel = productModelService.getById(productBom.getProductModelId());
            if (productModel == null) {
                throw new ServiceException("选择的产品模型不存在");
            }
            // 关联的生产订单如果订单完成数量>0,则不许改bom
            // 先查询与该BOM关联的工艺路线
            List<ProductProcessRoute> productProcessRoutes = productProcessRouteMapper.selectList(new LambdaQueryWrapper<ProductProcessRoute>()
                    .eq(ProductProcessRoute::getBomId, oldBom.getId()));
            // 检查是否有关联的工艺路线
            if (!productProcessRoutes.isEmpty()) {
                // 提取工艺路线关联的生产订单ID
                List<Long> orderIds = productProcessRoutes.stream()
                        .map(ProductProcessRoute::getProductOrderId)
                        .filter(Objects::nonNull)
                        .collect(Collectors.toList());
                // 查询关联的生产订单
                if (!orderIds.isEmpty()) {
                    List<ProductOrder> productOrders = productOrderMapper.selectList(new LambdaQueryWrapper<ProductOrder>()
                            .in(ProductOrder::getId, orderIds));
                    // 检查订单完成数量
                    for (ProductOrder order : productOrders) {
                        if (order.getCompleteQuantity() != null && order.getCompleteQuantity().compareTo(BigDecimal.ZERO) > 0) {
                            throw new ServiceException("该BOM已关联生产订单且有完成数量,无法修改");
                        } else {
                            // 修改关联订单的产品信息
                            order.setProductModelId(productBom.getProductModelId());
                            productOrderMapper.updateById(order);
                        }
                    }
                }
                // 修改关联产品工艺路线的产品信息
                for (ProductProcessRoute route : productProcessRoutes) {
                    route.setProductModelId(productBom.getProductModelId());
                    productProcessRouteMapper.updateById(route);
                }
                // 查询关联的工艺路线
                List<ProcessRoute> processRoutes = processRouteMapper.selectList(new LambdaQueryWrapper<ProcessRoute>()
                        .eq(ProcessRoute::getBomId, oldBom.getId()));
                if (!processRoutes.isEmpty()) {
                    // 修改关联工艺路线的产品信息
                    for (ProcessRoute route : processRoutes) {
                        route.setProductModelId(productBom.getProductModelId());
                        processRouteMapper.updateById(route);
                    }
                }
            }
            // 删除之前关联的产品结构
            productStructureMapper.delete(new LambdaQueryWrapper<ProductStructure>().eq(ProductStructure::getBomId, productBom.getId()));
            // 关联新的产品结构
            ProductStructure productStructure = new ProductStructure();
            productStructure.setProductModelId(productBom.getProductModelId());
            productStructure.setUnit(productModel.getUnit());
            productStructure.setUnitQuantity(BigDecimal.valueOf(1));
            productStructure.setBomId(productBom.getId());
            productStructureService.save(productStructure);
        }
        productBomMapper.updateById(productBom);
        return AjaxResult.success();
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult uploadBom(MultipartFile file) {
        ExcelUtil<BomImportDto> util = new ExcelUtil<>(BomImportDto.class);
        List<BomImportDto> list;