From 939a99e2b94ca9dc96cf88b1ec403fc357f50e8a Mon Sep 17 00:00:00 2001
From: rain <1679827795@qq.com>
Date: Wed, 21 Jan 2026 15:37:26 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdPatrolTaskServiceImpl.java |   67 +++++++++++++++++++++++++++++++++
 1 files changed, 66 insertions(+), 1 deletions(-)

diff --git a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdPatrolTaskServiceImpl.java b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdPatrolTaskServiceImpl.java
index deb7e49..59a7d75 100644
--- a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdPatrolTaskServiceImpl.java
+++ b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdPatrolTaskServiceImpl.java
@@ -141,7 +141,7 @@
         if (currentStatus == null || !currentStatus.isAllowedTransition(auditStatus)) {
             throw new RuntimeException("当前任务状态无法进行该操作");
         }
-        // 1.同意签收、2.拒绝签收 、3.撤回任务 、4.同意审核、 5.拒绝审核、 6.验收通过、 7.验收拒绝
+        // 1.同意签收、2.拒绝签收 、3.撤回任务 、4.同意审核、 5.拒绝审核、 6.验收通过、 7.验收拒绝、8.执行完成
         // 3. 确定新状态和流转名称
         PatrolTaskStatusEnum newStatusEnum;
         switch (auditStatus) {
@@ -165,6 +165,9 @@
                 break;
             case 7: // 验收拒绝
                 newStatusEnum = PatrolTaskStatusEnum.REJECTED_ACCEPTANCE;
+				break;
+			case 8: // 执行完成
+				newStatusEnum = PatrolTaskStatusEnum.PENDING_ACCEPTANCE;
                 break;
             default: // 无效操作类型
                 return false;
@@ -232,6 +235,36 @@
                 return gdWorkOrderFlowService.save(flowEntity);
             }
         }
+        // 7. 验收通过
+        if (auditStatus == 7) {
+            // 查询同一个工单下的所有子任务
+            List<GdPatrolTaskEntity> subTasks = list(Wrappers.<GdPatrolTaskEntity>lambdaQuery()
+                    .eq(GdPatrolTaskEntity::getWorkOrderId, task.getWorkOrderId()));
+
+            // 检查是否所有子任务都审核成功(除了被撤回和验收拒绝的)
+            boolean allSubTasksAudited = checkAllSubTasksAcceptancePassed(subTasks);
+            // 这里可以根据allSubTasksAudited的结果执行后续逻辑,比如更新工单状态等
+            if (allSubTasksAudited) {
+                // 执行工单状态更新逻辑
+                // 注意:需要注入工单相关的Service才能执行更新
+                GdWorkOrderEntity gdWorkOrderEntity = new GdWorkOrderEntity();
+                gdWorkOrderEntity.setId(task.getWorkOrderId());
+                gdWorkOrderEntity.setWorkOrderStatus(WorkOrderStatusEnum.ACCEPTED_TO_BE_SETTLED.getCode());
+                Integer b1 = baseMapper.updateWorkOrderById(gdWorkOrderEntity);
+                if (b1 > 0) {
+                    // 6. 保存流转记录:使用枚举设置flowName
+                    GdWorkOrderFlowEntity flowEntity = new GdWorkOrderFlowEntity();
+                    flowEntity.setCreateUser(AuthUtil.getUserId());
+                    flowEntity.setWorkOrderId(task.getWorkOrderId());
+                    flowEntity.setFlowName(WorkOrderStatusEnum.ACCEPTED_TO_BE_SETTLED.getDesc());
+                    flowEntity.setFlowDesc(AuthUtil.getUserName() + " " + org.springblade.core.tool.utils.DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss") + " 更新了任务信息,状态转换为:" + WorkOrderStatusEnum.ACCEPTED_TO_BE_SETTLED.getDesc());
+                    flowEntity.setOperator(AuthUtil.getUserName());
+                    flowEntity.setType(WorkOrderTypeEnum.PATROL_TASK.getValue());
+                    flowEntity.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+                    return gdWorkOrderFlowService.save(flowEntity);
+                }
+            }
+        }
         return b;
     }
 
@@ -268,6 +301,38 @@
         return statusEnum == PatrolTaskStatusEnum.AUDIT_PASSED;
     }
 
+    /**
+     * 判断单个任务是否验收通过
+     *
+     * @param statusEnum 任务状态枚举
+     * @return 是否验收通过
+     */
+    private boolean isTaskAcceptancePassed(PatrolTaskStatusEnum statusEnum) {
+        // 验收通过的任务状态包括:验收通过
+        return statusEnum == PatrolTaskStatusEnum.ACCEPTANCE_PASSED;
+    }
+
+    /**
+     * 检查是否所有子任务都验收通过(除了被撤回和验收拒绝的)
+     *
+     * @param subTasks 子任务列表
+     * @return 是否所有子任务都验收通过
+     */
+    private boolean checkAllSubTasksAcceptancePassed(List<GdPatrolTaskEntity> subTasks) {
+        for (GdPatrolTaskEntity subTask : subTasks) {
+            String taskStatus = subTask.getTaskStatus();
+            PatrolTaskStatusEnum statusEnum = PatrolTaskStatusEnum.getByValue(taskStatus);
+
+            // 如果任务状态不是验收通过状态,且不是被撤回和验收拒绝的,则返回false
+            if (!isTaskAcceptancePassed(statusEnum) &&
+                    statusEnum != PatrolTaskStatusEnum.WITHDRAWN &&
+                    statusEnum != PatrolTaskStatusEnum.REJECTED_ACCEPTANCE) {
+                return false;
+            }
+        }
+        return true;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean republishPatrolTask(GdPatrolTaskEntity taskEntity) {

--
Gitblit v1.9.3