吉安感知网项目-后端
linwei
2026-05-22 1d2b7c3172a9a61634de47febd845d67fcf2f417
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdWorkOrderFlowServiceImpl.java
@@ -84,7 +84,6 @@
         currentStageCode = lastFlow.getFlowStatus();
      }
      // 3. 遍历所有工单阶段
      // 工单发布阶段
      stages.add(buildStage(WorkOrderStatusEnum.STAGE_WORK_ORDER_RELEASE.getStageDesc(), Arrays.asList(
            WorkOrderStatusEnum.PUBLISHING_ACCEPTING.getStageDesc(),
@@ -99,6 +98,11 @@
            WorkOrderStatusEnum.RESPONDING_CANCELED.getStageDesc()
      ), actualFlows, WorkOrderStatusEnum.STAGE_ORDER_RESPONSE.getMaxCode(), currentStageCode));
      // 如果当前状态是已取消,则不组装后续阶段
      if (isCancellationState(actualFlows)) {
         stages.add(new WorkOrderStageVO("结束", new ArrayList<>(), true));
         return stages;
      }
      // 执行中阶段
      stages.add(buildStage(WorkOrderStatusEnum.STAGE_IN_EXECUTION.getStageDesc(), Arrays.asList(
            WorkOrderStatusEnum.EXECUTING_TO_BE_COMPLETED.getStageDesc(),
@@ -136,18 +140,6 @@
   private WorkOrderStageVO buildStage(String stageName, List<String> statusNames, List<GdWorkOrderFlowEntity> actualFlows, String flowStatus, String currentStageCode) {
      List<WorkOrderStatusDetailVO> statuses = new ArrayList<>();
      // 检查该阶段是否在当前阶段之后
      // 注意:即使流程回退,之前到达过的阶段仍然需要显示其记录
      // 而是让所有阶段都能显示其已到达的状态,只对未到达的状态进行处理
      // boolean isStageAfterCurrent = false;
      // try {
      //    int stageCode = Integer.parseInt(flowStatus);
      //    int currentCode = Integer.parseInt(currentStageCode);
      //    isStageAfterCurrent = stageCode > currentCode;
      // } catch (NumberFormatException e) {
      //    // 如果转换失败,默认不视为在当前阶段之后
      // }
      // 临时列表,用于收集所有状态详情
      List<WorkOrderStatusDetailVO> tempStatuses = new ArrayList<>();
@@ -169,7 +161,6 @@
               }
            });
            // 为每个排序后的流程记录创建状态详情
            // 无论阶段是否在当前阶段之后,只要有匹配的流程记录,就标记为已到达
            for (GdWorkOrderFlowEntity matchingFlow : matchingFlows) {
               tempStatuses.add(new WorkOrderStatusDetailVO(
@@ -218,6 +209,25 @@
   }
   /**
    * 判断流程记录中是否存在已取消状态
    *
    * @param actualFlows 实际流程记录列表
    * @return 如果存在已取消状态返回true,否则返回false
    */
   private boolean isCancellationState(List<GdWorkOrderFlowEntity> actualFlows) {
      if (actualFlows == null || actualFlows.isEmpty()) {
         return false;
      }
      // 遍历所有流程记录,检查是否存在已取消状态(23)
      for (GdWorkOrderFlowEntity flow : actualFlows) {
         if (WorkOrderStatusEnum.RESPONDING_CANCELED.getCode().equals(flow.getWorkStatus())) {
            return true;
         }
      }
      return false;
   }
   /**
    * 查找所有匹配的流程记录
    *
    * @param actualFlows 实际流程记录