2026-04-16 6ad5c2cdc193cf7bb02884961b7434cd7f607a0d
src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
@@ -19,11 +19,14 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@Service
@AllArgsConstructor
@@ -44,26 +47,28 @@
    @Override
    public IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto) {
        return processRouteMapper.pageProcessRouteDto(page, processRouteDto);
    }
    @Override
    public Integer saveProcessRoute(ProcessRoute processRoute) {
        normalizeProductModelIds(processRoute);
        this.save(processRoute);
        String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        String idStr = String.format("%06d", processRoute.getId());
        String newProductCode = "GYLX" + dateStr + idStr;
        // 更新数据库中的productCode
        processRoute.setProcessRouteCode(newProductCode);
        // 查询bom清单
        String routeCode = "GYLX" + dateStr + idStr;
        processRoute.setProcessRouteCode(routeCode);
        List<ProductStructureDto> productStructureDtos = productStructureService.listDetailBybomId(processRoute.getBomId());
        if(CollectionUtils.isNotEmpty(productStructureDtos)){
        if (CollectionUtils.isNotEmpty(productStructureDtos)) {
            AtomicInteger i = new AtomicInteger(1);
            productStructureDtos.forEach(productStructureDto -> {
                ProcessRouteItem processRouteItem = new ProcessRouteItem();
                processRouteItem.setRouteId(processRoute.getId());
                processRouteItem.setProcessId(productStructureDto.getProcessId());
                processRouteItem.setProductModelId(processRoute.getProductModelId());
                processRouteItem.setProductModelIds(processRoute.getProductModelIds());
                processRouteItem.setDragSort(i.get());
                processRouteItem.setIsQuality(false);
                processRouteItemMapper.insert(processRouteItem);
@@ -75,13 +80,59 @@
    @Override
    public int batchDelete(List<Long> ids) {
        //先判断是否已经引用了
        List<ProductOrder> productOrders = productOrderMapper.selectList(Wrappers.<ProductOrder>lambdaQuery().in(ProductOrder::getRouteId, ids));
        if (productOrders.size()>0){
            throw new RuntimeException("该工艺路线生产已引用,不能删除");
        List<ProductOrder> productOrders = productOrderMapper.selectList(
                Wrappers.<ProductOrder>lambdaQuery().in(ProductOrder::getRouteId, ids)
        );
        if (!productOrders.isEmpty()) {
            throw new RuntimeException("该工艺路线已被生产订单引用,不能删除");
        }
        //删除工艺路线详情
        processRouteItemMapper.delete(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getRouteId, ids));
        return processRouteMapper.deleteBatchIds(ids);
    }
    private void normalizeProductModelIds(ProcessRoute processRoute) {
        if (processRoute == null) {
            return;
        }
        String ids = joinProductModelIds(
                processRoute.getProductModelIdList(),
                processRoute.getProductModelIds(),
                processRoute.getProductModelId()
        );
        processRoute.setProductModelIds(ids);
        processRoute.setProductModelId(firstProductModelId(ids, processRoute.getProductModelId()));
    }
    private String joinProductModelIds(List<Long> idList, String ids, Long fallbackId) {
        if (CollectionUtils.isNotEmpty(idList)) {
            return idList.stream()
                    .filter(item -> item != null && item > 0)
                    .distinct()
                    .map(String::valueOf)
                    .collect(Collectors.joining(","));
        }
        if (StringUtils.hasText(ids)) {
            return Arrays.stream(ids.split(","))
                    .map(String::trim)
                    .filter(StringUtils::hasText)
                    .distinct()
                    .collect(Collectors.joining(","));
        }
        return fallbackId == null ? null : String.valueOf(fallbackId);
    }
    private Long firstProductModelId(String ids, Long fallbackId) {
        if (!StringUtils.hasText(ids)) {
            return fallbackId;
        }
        String first = ids.split(",")[0].trim();
        if (!StringUtils.hasText(first)) {
            return fallbackId;
        }
        try {
            return Long.parseLong(first);
        } catch (NumberFormatException ignore) {
            return fallbackId;
        }
    }
}