gongchunyi
2026-09-23 75503334ed1b911b3844d8d6f7343110ff3b69ab
fix: 生产追溯工序顺序调整
已修改1个文件
28 ■■■■■ 文件已修改
src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
@@ -845,8 +845,17 @@
                // 遍历处理数据并组装结果
                : workOrderPage.getRecords().stream()
                .filter(Objects::nonNull)
                .sorted(Comparator.comparing(ProductionOperationTaskVo::getId, Comparator.nullsLast(Comparator.naturalOrder())))
                .toList();
        if (!workOrderList.isEmpty()) {
            // 工序进度需要按工艺路线工序顺序(drag_sort 升序)从左到右展示,任务 id 仅作为兜底排序
            Map<Long, Integer> routingOperationDragSortMap = loadRoutingOperationDragSortMap(workOrderList);
            Comparator<ProductionOperationTaskVo> workOrderComparator = Comparator
                    .comparing((ProductionOperationTaskVo task) -> routingOperationDragSortMap.get(task.getProductionOrderRoutingOperationId()),
                            Comparator.nullsLast(Comparator.<Integer>naturalOrder()))
                    .thenComparing(ProductionOperationTaskVo::getId,
                            Comparator.nullsLast(Comparator.<Long>naturalOrder()));
            workOrderList = workOrderList.stream().sorted(workOrderComparator).toList();
        }
        if (workOrderList.isEmpty()) {
            detailVo.setWorkOrderList(Collections.emptyList());
            return detailVo;
@@ -995,6 +1004,23 @@
        return detailVo;
    }
    /**
     * 查询工单对应工艺路线工序的拖动排序,用于按工序先后顺序展示工序进度
     */
    private Map<Long, Integer> loadRoutingOperationDragSortMap(List<ProductionOperationTaskVo> workOrderList) {
        Set<Long> routingOperationIds = workOrderList.stream()
                .map(ProductionOperationTaskVo::getProductionOrderRoutingOperationId)
                .filter(Objects::nonNull)
                .collect(Collectors.toSet());
        if (routingOperationIds.isEmpty()) {
            return Collections.emptyMap();
        }
        return productionOrderRoutingOperationMapper.selectBatchIds(routingOperationIds).stream()
                .filter(Objects::nonNull)
                .filter(operation -> operation.getId() != null && operation.getDragSort() != null)
                .collect(Collectors.toMap(ProductionOrderRoutingOperation::getId, ProductionOrderRoutingOperation::getDragSort, (a, b) -> a));
    }
    private Long resolveProductionOrderId(ProductionOrderDto dto) {
        // 从入参中解析生产订单ID并校验
        if (dto == null) {