liding
昨天 acc94dd2dc309e50882f7b10c20d955ed2f14716
src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java
@@ -7,8 +7,12 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.OrderUtils;
import java.time.LocalDateTime;
import com.ruoyi.technology.bean.dto.TechnologyRoutingDto;
import com.ruoyi.technology.bean.vo.TechnologyRoutingVo;
import com.ruoyi.production.mapper.ProductionOrderRoutingMapper;
import com.ruoyi.production.pojo.ProductionOrderRouting;
import com.ruoyi.technology.mapper.*;
import com.ruoyi.technology.pojo.*;
import com.ruoyi.technology.service.TechnologyRoutingService;
@@ -40,6 +44,8 @@
    private final TechnologyParamMapper technologyParamMapper;
    private final TechnologyRoutingOperationParamMapper technologyRoutingOperationParamMapper;
    private final ProductionOrderRoutingMapper productionOrderRoutingMapper;
    @Override
    public IPage<TechnologyRoutingVo> pageTechnologyRouting(Page<TechnologyRoutingDto> page, TechnologyRoutingDto technologyRoutingDto) {
        return technologyRoutingMapper.pageTechnologyRouting(page, technologyRoutingDto);
@@ -56,7 +62,7 @@
    @Override
    public Long saveTechnologyRouting(TechnologyRouting technologyRouting) {
        String code = OrderUtils.countTodayByCreateTime(technologyRoutingMapper, "GYLX", "process_route_code");
        String code = OrderUtils.countTodayByCreateTime(technologyRoutingMapper, "GYLX", "process_route_code", technologyRouting.getCreateTime() != null ? technologyRouting.getCreateTime() : LocalDateTime.now());
        technologyRouting.setProcessRouteCode(code);
        technologyRoutingMapper.insert(technologyRouting);
        // 带入bom产品结构
@@ -78,6 +84,13 @@
    public boolean removeTechnologyRouting(List<Long> ids) {
        if (ids == null || ids.isEmpty()) {
            return false;
        }
        // 判断是否有生产订单绑定该工艺路线
        Long count = productionOrderRoutingMapper.selectCount(
                Wrappers.<ProductionOrderRouting>lambdaQuery()
                        .in(ProductionOrderRouting::getTechnologyRoutingId, ids));
        if (count > 0) {
            throw new ServiceException("该工艺路线已绑定生产订单,无法删除!");
        }
        List<TechnologyRoutingOperation> routingOperationList = technologyRoutingOperationMapper.selectList(
                Wrappers.<TechnologyRoutingOperation>lambdaQuery()
@@ -116,13 +129,13 @@
                Wrappers.<TechnologyBomStructure>lambdaQuery()
                        .eq(TechnologyBomStructure::getBomId, technologyRouting.getBomId())
                        .isNotNull(TechnologyBomStructure::getOperationId)
                        .orderByAsc(TechnologyBomStructure::getId)
                        .orderByDesc(TechnologyBomStructure::getId)
        );
        if (bomStructures.isEmpty()) {
            throw new ServiceException("bom产品结构为空!");
        }
        // 同一个 BOM 中可能重复引用相同工序,这里按首次出现顺序去重。
        // 同一个 BOM 中可能重复引用相同工序,按照上一层的父节点的产品是否相同和工序是否相同
        Map<Long, TechnologyBomStructure> structureById = new HashMap<>();
        for (TechnologyBomStructure bomStructure : bomStructures) {
            if (bomStructure != null && bomStructure.getId() != null) {
@@ -143,7 +156,10 @@
            routingOperation.setProductModelId(resolveOutputProductModelId(bomStructure, structureById, technologyRouting.getProductModelId()));
            routingOperation.setTechnologyOperationId(bomStructure.getOperationId());
            routingOperation.setDragSort(dragSort++);
            routingOperation.setIsQuality(getOperationQuality(bomStructure.getOperationId()));
            TechnologyOperation technologyOperation = getOperation(bomStructure.getOperationId());
            routingOperation.setIsQuality(technologyOperation != null ? technologyOperation.getIsQuality() : null);
            routingOperation.setIsProduction(technologyOperation != null ? technologyOperation.getIsProduction() : null);
            routingOperation.setType(technologyOperation != null ? technologyOperation.getType() : null);
            technologyRoutingOperationMapper.insert(routingOperation);
            syncRoutingOperationParams(routingOperation.getId(), bomStructure.getOperationId());
        }
@@ -204,12 +220,11 @@
        }
    }
    /**
     * 质检标识以工序基础表定义为准。
     */
    private Boolean getOperationQuality(Long operationId) {
        TechnologyOperation technologyOperation = technologyOperationMapper.selectById(operationId);
        return technologyOperation != null ? technologyOperation.getIsQuality() : null;
    private TechnologyOperation getOperation(Long operationId) {
        if (operationId == null) {
            return null;
        }
        return technologyOperationMapper.selectById(operationId);
    }
    private String buildProcessRouteCode(Long id) {