| | |
| | | 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; |
| | |
| | | @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); |
| | |
| | | |
| | | @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; |