package com.ruoyi.appendix.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.appendix.pojo.ProcessRouteItemInstance; import com.ruoyi.appendix.pojo.ProcessRouteItemParamInstance; import com.ruoyi.appendix.pojo.ProductProcessParamInstance; import com.ruoyi.appendix.pojo.ProductStructureInstance; import com.ruoyi.appendix.service.*; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.*; import com.ruoyi.productionPlan.dto.ProductionPlanDto; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.stream.Collectors; /** *
* BOM-工艺路线附表Service接口实现类 *
* * @author deslrey * @version 1.0 * @since 2026/03/18 14:45 */ @Slf4j @Service public class AppendixServiceImpl implements AppendixService { @Resource private ProcessRouteItemInstanceService processRouteItemInstanceService; @Resource private ProcessRouteItemParamInstanceService processRouteItemParamInstanceService; @Resource private ProductProcessParamInstanceService productProcessParamInstanceService; @Resource private ProductStructureInstanceService productStructureInstanceService; @Resource private ProcessRouteService processRouteService; @Resource private ProcessRouteItemService processRouteItemService; @Resource private ProcessRouteItemParamService processRouteItemParamService; @Resource private ProductProcessParamService productProcessParamService; @Resource private ProductStructureService productStructureService; @Resource private ProductOrderService productOrderService; @Override public Long populateBlocks(ProductionPlanDto productionPlanDto) { if (productionPlanDto == null) { throw new ServiceException("下发数据不能为空"); } if (StringUtils.isEmpty(productionPlanDto.getStrength())) { throw new ServiceException("砌块的产品类型不能为空"); } ProcessRoute processRoute = processRouteService.latestTypeDate(productionPlanDto.getProductName(), productionPlanDto.getStrength()); if (processRoute == null) { log.info("下发产品【{}】未查询出工艺路线", productionPlanDto.getProductName()); return null; } migration(processRoute); return processRoute.getId(); } @Override public Long populatePlates(ProductionPlanDto productionPlanDto) { if (productionPlanDto == null) { throw new ServiceException("下发数据不能为空"); } // 板材不区分强度,strength传null ProcessRoute processRoute = processRouteService.latestTypeDate(productionPlanDto.getProductName(), null); if (processRoute == null) { log.info("下发产品【{}】未查询出工艺路线", productionPlanDto.getProductName()); return null; } migration(processRoute); return processRoute.getId(); } @Override public void populateData(Long productOrderId, Long processRouteId) { ProcessRoute processRoute = processRouteService.getById(processRouteId); if (processRoute == null) { log.info("生产订单【{}】未查询出工艺路线【{}】", productOrderId, processRouteId); return; } migration(processRoute); // 回写工艺路线id到生产订单 ProductOrder productOrder = new ProductOrder(); productOrder.setId(productOrderId); productOrder.setRouteId(processRouteId); productOrderService.updateById(productOrder); } @Override public void deleteData(Long processRouteId) { // 查出工艺路线子集,用于关联删除参数附表 List itemList = processRouteItemService.list(new LambdaQueryWrapper().eq(ProcessRouteItem::getRouteId, processRouteId)); if (itemList != null && !itemList.isEmpty()) { List itemIds = itemList.stream().map(ProcessRouteItem::getId).collect(Collectors.toList()); List processIds = itemList.stream().map(ProcessRouteItem::getProcessId).collect(Collectors.toList()); // 删除工艺路线工序参数附表 processRouteItemParamInstanceService.remove(new LambdaQueryWrapper().in(ProcessRouteItemParamInstance::getRouteItemId, itemIds)); // 删除工序绑定参数附表 productProcessParamInstanceService.remove(new LambdaQueryWrapper().in(ProductProcessParamInstance::getProcessId, processIds)); } // 删除工艺路线子集附表 processRouteItemInstanceService.remove( new LambdaQueryWrapper().eq(ProcessRouteItemInstance::getRouteId, processRouteId)); // 删除BOM子集附表 ProcessRoute processRoute = processRouteService.getById(processRouteId); if (processRoute != null && processRoute.getBomId() != null) { productStructureInstanceService.remove(new LambdaQueryWrapper().eq(ProductStructureInstance::getBomId, processRoute.getBomId())); } } /** * 根据工艺路线迁移四张附表数据 */ private void migration(ProcessRoute processRoute) { // 迁移工艺路线子集表数据 List processRouteItemList = processRouteItemService.list(new LambdaQueryWrapper().eq(ProcessRouteItem::getRouteId, processRoute.getId())); migrationProcessRouteItem(processRouteItemList); // 迁移工艺路线内绑定的工序及工序参数 if (processRouteItemList != null && !processRouteItemList.isEmpty()) { for (ProcessRouteItem item : processRouteItemList) { List paramList = processRouteItemParamService.list(new LambdaQueryWrapper().eq(ProcessRouteItemParam::getRouteItemId, item.getId())); migrationProcessRouteItemParam(paramList); List processParamList = productProcessParamService.list(new LambdaQueryWrapper().eq(ProductProcessParam::getProcessId, item.getProcessId())); migrationProductProcessParam(processParamList); } } // 迁移BOM子集表数据 if (processRoute.getBomId() != null) { List structureList = productStructureService.list(new LambdaQueryWrapper().eq(ProductStructure::getBomId, processRoute.getBomId())); migrationProductStructure(structureList); } } private void migrationProcessRouteItem(List list) { if (list == null || list.isEmpty()) { return; } List instances = list.stream().map(item -> { ProcessRouteItemInstance instance = new ProcessRouteItemInstance(); BeanUtils.copyProperties(item, instance, "id"); instance.setIsQuality(item.getIsQuality() != null && item.getIsQuality() ? 1 : 0); return instance; }).collect(Collectors.toList()); processRouteItemInstanceService.saveBatch(instances); } private void migrationProcessRouteItemParam(List list) { if (list == null || list.isEmpty()) { return; } List instances = list.stream().map(item -> { ProcessRouteItemParamInstance instance = new ProcessRouteItemParamInstance(); BeanUtils.copyProperties(item, instance, "id"); return instance; }).collect(Collectors.toList()); processRouteItemParamInstanceService.saveBatch(instances); } private void migrationProductProcessParam(List list) { if (list == null || list.isEmpty()) { return; } List instances = list.stream().map(item -> { ProductProcessParamInstance instance = new ProductProcessParamInstance(); BeanUtils.copyProperties(item, instance, "id"); instance.setIsRequired(item.getIsRequired() != null && item.getIsRequired() == 1); return instance; }).collect(Collectors.toList()); productProcessParamInstanceService.saveBatch(instances); } private void migrationProductStructure(List list) { if (list == null || list.isEmpty()) { return; } List instances = list.stream().map(item -> { ProductStructureInstance instance = new ProductStructureInstance(); BeanUtils.copyProperties(item, instance, "id"); instance.setBomId(item.getBomId() != null ? item.getBomId().longValue() : null); return instance; }).collect(Collectors.toList()); productStructureInstanceService.saveBatch(instances); } }