From 277b4f8a32c2332bc067a263bcce2e763e8d13aa Mon Sep 17 00:00:00 2001
From: Xiajijian <1176061145@qq.com>
Date: Wed, 21 Jan 2026 16:38:01 +0800
Subject: [PATCH] 1. 新增航线任务接口。 2. 新增查询航线任务列表接口。 3. 新增获取航线任务详细信息。 4. 新增航线任务接口。 5. 新增修改航线任务接口。 6. 新增删除航线任务接口。 7. 新增修改航线任务状态接口。 8. 优化查询分组业务逻辑。 9. 航线(kmz)对象增加航线任务ID信息。 10. 新增航线(kmz)业务增加航线任务数据加工校验相关业务逻辑。 11. 新增航向任务下航点信息业务相关接口。

---
 ard-route/src/main/java/com/ard/route/domain/route/ArdRoutePoint.java               |   32 +
 ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInfo.java                |   21 
 ard-route/src/main/java/com/ard/route/domain/route/ArdRouteMission.java             |   45 ++
 ard-route/src/main/java/com/ard/route/service/impl/ArdRoutePointServiceImpl.java    |   89 +++++
 ard-route/src/main/resources/mapper/ArdRouteInfoMapper.xml                          |    9 
 ard-route/src/main/java/com/ard/route/mapper/ArdRoutePointMapper.java               |   68 ++++
 ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java     |   20 +
 ard-route/src/main/java/com/ard/route/service/impl/ArdRouteMissionServiceImpl.java  |  144 ++++++++
 ard-route/src/main/resources/mapper/ArdRouteMissionMapper.xml                       |  115 ++++++
 ard-route/src/main/java/com/ard/route/service/impl/ArdRouteGroupServiceImpl.java    |   14 
 ard-route/src/main/java/com/ard/route/service/IArdRoutePointService.java            |   62 +++
 ard-route/src/main/java/com/ard/route/mapper/ArdRouteMissionMapper.java             |   73 ++++
 ard-route/src/main/java/com/ard/route/service/IArdRouteMissionService.java          |   72 ++++
 ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteMissionController.java |  108 ++++++
 ard-route/src/main/resources/mapper/ArdRoutePointMapper.xml                         |  103 ++++++
 15 files changed, 959 insertions(+), 16 deletions(-)

diff --git a/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteMissionController.java b/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteMissionController.java
new file mode 100644
index 0000000..1b63da0
--- /dev/null
+++ b/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteMissionController.java
@@ -0,0 +1,108 @@
+package com.ard.web.controller.route;
+
+import java.util.List;
+
+import com.ard.route.domain.route.ArdRouteMission;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ard.common.annotation.Log;
+import com.ard.common.core.controller.BaseController;
+import com.ard.common.core.domain.AjaxResult;
+import com.ard.common.enums.BusinessType;
+import com.ard.route.service.IArdRouteMissionService;
+import com.ard.common.core.page.TableDataInfo;
+
+/**
+ * 航线任务Controller
+ * 
+ * @author xia
+ * @date 2026-01-20
+ */
+@Api(tags = "航线任务接口")
+@RestController
+@RequestMapping("/route/mission")
+public class ArdRouteMissionController extends BaseController {
+
+    @Autowired
+    private IArdRouteMissionService ardRouteMissionService;
+
+    /**
+     * 查询航线任务列表
+     */
+    @ApiOperation("查询航线任务列表")
+    @PreAuthorize("@ss.hasPermi('route:mission:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ArdRouteMission ardRouteMission) {
+        startPage();
+        List<ArdRouteMission> list = ardRouteMissionService.selectArdRouteMissionList(ardRouteMission);
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取航线任务详细信息
+     */
+    @ApiOperation("获取航线任务详细信息")
+    @PreAuthorize("@ss.hasPermi('route:mission:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id) {
+        return success(ardRouteMissionService.selectArdRouteMissionById(id));
+    }
+
+    /**
+     * 新增航线任务
+     */
+    @ApiOperation("新增航线任务")
+    @PreAuthorize("@ss.hasPermi('route:mission:add')")
+    @Log(title = "航线任务", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ArdRouteMission ardRouteMission) {
+        ardRouteMission.setCreateBy(getUsername());
+        return toAjax(ardRouteMissionService.insertArdRouteMission(ardRouteMission));
+    }
+
+    /**
+     * 修改航线任务
+     */
+    @ApiOperation("修改航线任务")
+    @PreAuthorize("@ss.hasPermi('route:mission:edit')")
+    @Log(title = "航线任务", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ArdRouteMission ardRouteMission) {
+        ardRouteMission.setUpdateBy(getUsername());
+        return toAjax(ardRouteMissionService.updateArdRouteMission(ardRouteMission));
+    }
+
+    /**
+     * 删除航线任务
+     */
+    @ApiOperation("删除航线任务")
+    @PreAuthorize("@ss.hasPermi('route:mission:remove')")
+    @Log(title = "航线任务", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids) {
+        return toAjax(ardRouteMissionService.deleteArdRouteMissionByIds(ids));
+    }
+
+    /**
+     * 修改航线任务状态
+     */
+    @ApiOperation("修改航线任务状态")
+    @PreAuthorize("@ss.hasPermi('route:mission:edit')")
+    @Log(title = "航线任务", businessType = BusinessType.UPDATE)
+    @PutMapping("updateStatus/{id}/{status}")
+    public AjaxResult updateExecuteStatus(@PathVariable String id,
+                                          @PathVariable String status) {
+        return toAjax(ardRouteMissionService.updateArdRouteMissionStatus(id,status));
+    }
+
+}
diff --git a/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInfo.java b/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInfo.java
index 3835f2c..1585a1f 100644
--- a/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInfo.java
+++ b/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInfo.java
@@ -1,6 +1,5 @@
 package com.ard.route.domain.route;
 
-import com.ard.common.annotation.Excel;
 import com.ard.common.core.domain.BaseEntity;
 import com.ard.route.domain.djuav.UavRouteReq;
 import lombok.Data;
@@ -22,27 +21,27 @@
     private String id;
 
     /** 文件名称 */
-    @Excel(name = "文件名称")
     private String name;
 
     /** 文件路径 */
-    @Excel(name = "文件路径")
     private String path;
 
     /** 分组ID */
-    @Excel(name = "分组ID")
     private String groupId;
 
-    /** 航线类型 */
-    @Excel(name = "航线类型")
+    /**
+     * 航线类型
+     * 1:逐点巡检
+     * 2:沿线巡检
+     * 3:任务航线
+     * 4:巡检航线
+     * */
     private String type;
 
     /** 飞行器产品 */
-    @Excel(name = "飞行器产品")
     private String aircraft;
 
     /** 负载类型 */
-    @Excel(name = "负载类型")
     private String payload;
 
     /**
@@ -50,7 +49,6 @@
      * 0:否
      * 1:是
      */
-    @Excel(name = "是否只读")
     private String readOnly;
 
     /**
@@ -58,7 +56,6 @@
      * 0:正序
      * 1:倒序
      */
-    @Excel(name = "时间排序")
     private String orderByTime;
 
     /**
@@ -66,7 +63,6 @@
      * 0:否
      * 1:是
      */
-    @Excel(name = "是否循环")
     private String isLoop;
 
     /**
@@ -80,4 +76,7 @@
     /** 行点总数 */
     private Integer pointCount;
 
+    /** 航线任务ID */
+    private String missionId;
+
 }
diff --git a/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteMission.java b/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteMission.java
new file mode 100644
index 0000000..708f10c
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteMission.java
@@ -0,0 +1,45 @@
+package com.ard.route.domain.route;
+
+import java.util.Date;
+import java.util.List;
+
+import com.ard.common.core.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 航线任务对象 ard_route_mission
+ * 
+ * @author xia
+ * @date 2026-01-20
+ */
+@Data
+public class ArdRouteMission extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    private String id;
+
+    /** 航线ID */
+    private String routeId;
+
+    /** 任务名称 */
+    private String missionName;
+
+    /**
+     * 执行状态
+     * 0:未执行
+     * 1:已执行
+     */
+    private String executeStatus;
+
+    /** 执行人 */
+    private String executeBy;
+
+    /** 执行时间 */
+    private Date executeTime;
+
+    /** 航线任务航点列表 */
+    private List<ArdRoutePoint> missionDetailList;
+
+}
diff --git a/ard-route/src/main/java/com/ard/route/domain/route/ArdRoutePoint.java b/ard-route/src/main/java/com/ard/route/domain/route/ArdRoutePoint.java
new file mode 100644
index 0000000..14e82a8
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/domain/route/ArdRoutePoint.java
@@ -0,0 +1,32 @@
+package com.ard.route.domain.route;
+
+import com.ard.common.core.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 航线任务航点对象 ard_route_point
+ * 
+ * @author xia
+ * @date 2026-01-20
+ */
+@Data
+public class ArdRoutePoint{
+
+    private static final long serialVersionUID = 1L;
+
+    /** 航线任务ID */
+    private String missionId;
+
+    /** 航点编号 */
+    private Long pointNum;
+
+    /** 经度 */
+    private Long longitude;
+
+    /** 纬度 */
+    private Long latitude;
+
+    /** 高度 */
+    private Long height;
+
+}
diff --git a/ard-route/src/main/java/com/ard/route/mapper/ArdRouteMissionMapper.java b/ard-route/src/main/java/com/ard/route/mapper/ArdRouteMissionMapper.java
new file mode 100644
index 0000000..9d02438
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/mapper/ArdRouteMissionMapper.java
@@ -0,0 +1,73 @@
+package com.ard.route.mapper;
+
+import com.ard.route.domain.route.ArdRouteMission;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 航线任务Mapper接口
+ * 
+ * @author xia
+ * @date 2026-01-20
+ */
+public interface ArdRouteMissionMapper {
+
+    /**
+     * 查询航线任务
+     * 
+     * @param id 航线任务主键
+     * @return 航线任务
+     */
+    public ArdRouteMission selectArdRouteMissionById(String id);
+
+    /**
+     * 查询航线任务列表
+     * 
+     * @param ardRouteMission 航线任务
+     * @return 航线任务集合
+     */
+    public List<ArdRouteMission> selectArdRouteMissionList(ArdRouteMission ardRouteMission);
+
+    /**
+     * 新增航线任务
+     * 
+     * @param ardRouteMission 航线任务
+     * @return 结果
+     */
+    public int insertArdRouteMission(ArdRouteMission ardRouteMission);
+
+    /**
+     * 修改航线任务
+     * 
+     * @param ardRouteMission 航线任务
+     * @return 结果
+     */
+    public int updateArdRouteMission(ArdRouteMission ardRouteMission);
+
+    /**
+     * 删除航线任务
+     * 
+     * @param id 航线任务主键
+     * @return 结果
+     */
+    public int deleteArdRouteMissionById(String id);
+
+    /**
+     * 批量删除航线任务
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteArdRouteMissionByIds(String[] ids);
+
+    /**
+     * 修改航线任务状态
+     *
+     * @param id 航线任务主键
+     * @param executeStatus 状态类型
+     * @return 结果
+     */
+    public int updateArdRouteMissionStatus(@Param("id")String id, @Param("executeStatus")String executeStatus);
+
+}
diff --git a/ard-route/src/main/java/com/ard/route/mapper/ArdRoutePointMapper.java b/ard-route/src/main/java/com/ard/route/mapper/ArdRoutePointMapper.java
new file mode 100644
index 0000000..25f3aac
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/mapper/ArdRoutePointMapper.java
@@ -0,0 +1,68 @@
+package com.ard.route.mapper;
+
+import com.ard.route.domain.route.ArdRoutePoint;
+
+import java.util.List;
+
+/**
+ * 航线任务航点Mapper接口
+ * 
+ * @author xia
+ * @date 2026-01-20
+ */
+public interface ArdRoutePointMapper {
+
+    /**
+     * 查询航线任务航点
+     * 
+     * @param missionId 航线任务航点主键
+     * @return 航线任务航点
+     */
+    public List<ArdRoutePoint> selectArdRoutePointByMissionId(String missionId);
+
+    /**
+     * 查询航线任务航点列表
+     * 
+     * @param ardRoutePoint 航线任务航点
+     * @return 航线任务航点集合
+     */
+    public List<ArdRoutePoint> selectArdRoutePointList(ArdRoutePoint ardRoutePoint);
+
+    /**
+     * 新增航线任务航点
+     * 
+     * @param ardRoutePoint 航线任务航点
+     * @return 结果
+     */
+    public int insertArdRoutePoint(ArdRoutePoint ardRoutePoint);
+
+    /**
+     * 修改航线任务航点
+     * 
+     * @param ardRoutePoint 航线任务航点
+     * @return 结果
+     */
+    public int updateArdRoutePoint(ArdRoutePoint ardRoutePoint);
+
+    /**
+     * 删除航线任务航点
+     * 
+     * @param missionId 航线任务航点主键
+     * @return 结果
+     */
+    public int deleteArdRoutePointByMissionId(String missionId);
+
+    /**
+     * 批量删除航线任务航点
+     * 
+     * @param missionIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteArdRoutePointByMissionIds(String[] missionIds);
+
+    /**
+     * 批量新增航线任务航点
+     */
+    public int insertArdRoutePointS(List<ArdRoutePoint> ardRoutePoint);
+
+}
diff --git a/ard-route/src/main/java/com/ard/route/service/IArdRouteMissionService.java b/ard-route/src/main/java/com/ard/route/service/IArdRouteMissionService.java
new file mode 100644
index 0000000..b0b4d20
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/service/IArdRouteMissionService.java
@@ -0,0 +1,72 @@
+package com.ard.route.service;
+
+import com.ard.route.domain.route.ArdRouteMission;
+
+import java.util.List;
+
+/**
+ * 航线任务Service接口
+ * 
+ * @author xia
+ * @date 2026-01-20
+ */
+public interface IArdRouteMissionService {
+
+    /**
+     * 查询航线任务
+     * 
+     * @param id 航线任务主键
+     * @return 航线任务
+     */
+    public ArdRouteMission selectArdRouteMissionById(String id);
+
+    /**
+     * 查询航线任务列表
+     * 
+     * @param ardRouteMission 航线任务
+     * @return 航线任务集合
+     */
+    public List<ArdRouteMission> selectArdRouteMissionList(ArdRouteMission ardRouteMission);
+
+    /**
+     * 新增航线任务
+     * 
+     * @param ardRouteMission 航线任务
+     * @return 结果
+     */
+    public int insertArdRouteMission(ArdRouteMission ardRouteMission);
+
+    /**
+     * 修改航线任务
+     * 
+     * @param ardRouteMission 航线任务
+     * @return 结果
+     */
+    public int updateArdRouteMission(ArdRouteMission ardRouteMission);
+
+    /**
+     * 批量删除航线任务
+     * 
+     * @param ids 需要删除的航线任务主键集合
+     * @return 结果
+     */
+    public int deleteArdRouteMissionByIds(String[] ids);
+
+    /**
+     * 删除航线任务信息
+     * 
+     * @param id 航线任务主键
+     * @return 结果
+     */
+    public int deleteArdRouteMissionById(String id);
+
+    /**
+     * 修改航线任务状态
+     *
+     * @param id 航线任务主键
+     * @param status 状态类型
+     * @return 结果
+     */
+    public int updateArdRouteMissionStatus(String id,String  status);
+
+}
diff --git a/ard-route/src/main/java/com/ard/route/service/IArdRoutePointService.java b/ard-route/src/main/java/com/ard/route/service/IArdRoutePointService.java
new file mode 100644
index 0000000..05019ba
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/service/IArdRoutePointService.java
@@ -0,0 +1,62 @@
+package com.ard.route.service;
+
+import com.ard.route.domain.route.ArdRoutePoint;
+
+import java.util.List;
+
+/**
+ * 航线任务航点Service接口
+ * 
+ * @author xia
+ * @date 2026-01-20
+ */
+public interface IArdRoutePointService {
+
+    /**
+     * 查询航线任务航点
+     * 
+     * @param missionId 航线任务航点主键
+     * @return 航线任务航点
+     */
+    public List<ArdRoutePoint> selectArdRoutePointByMissionId(String missionId);
+
+    /**
+     * 查询航线任务航点列表
+     * 
+     * @param ardRoutePoint 航线任务航点
+     * @return 航线任务航点集合
+     */
+    public List<ArdRoutePoint> selectArdRoutePointList(ArdRoutePoint ardRoutePoint);
+
+    /**
+     * 新增航线任务航点
+     * 
+     * @param ardRoutePoint 航线任务航点
+     * @return 结果
+     */
+    public int insertArdRoutePoint(ArdRoutePoint ardRoutePoint);
+
+    /**
+     * 修改航线任务航点
+     * 
+     * @param ardRoutePoint 航线任务航点
+     * @return 结果
+     */
+    public int updateArdRoutePoint(ArdRoutePoint ardRoutePoint);
+
+    /**
+     * 批量删除航线任务航点
+     * 
+     * @param missionIds 需要删除的航线任务航点主键集合
+     * @return 结果
+     */
+    public int deleteArdRoutePointByMissionIds(String[] missionIds);
+
+    /**
+     * 删除航线任务航点信息
+     * 
+     * @param missionId 航线任务航点主键
+     * @return 结果
+     */
+    public int deleteArdRoutePointByMissionId(String missionId);
+}
diff --git a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteGroupServiceImpl.java b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteGroupServiceImpl.java
index 61e1b6f..7fa2985 100644
--- a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteGroupServiceImpl.java
+++ b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteGroupServiceImpl.java
@@ -9,6 +9,7 @@
 import com.ard.common.utils.DateUtils;
 import com.ard.common.utils.uuid.IdUtils;
 import com.ard.route.domain.route.ArdRouteGroup;
+import com.ard.route.domain.route.ArdRouteInfo;
 import com.ard.route.domain.vo.ArdRouteGroupVo;
 import com.ard.route.mapper.ArdRouteGroupMapper;
 import com.ard.route.mapper.ArdRouteInfoMapper;
@@ -42,7 +43,7 @@
     @Override
     public ArdRouteGroup selectArdRouteGroupById(String id) {
         ArdRouteGroup ardRouteGroup = ardRouteGroupMapper.selectArdRouteGroupById(id);
-        ardRouteGroup.setArdRouteInfoLS(ardRouteInfoMapper.selectArdRouteInfoByGroupId(id));
+        ardRouteGroup.setArdRouteInfoLS(checkRouteData(id));
         return ardRouteGroup;
     }
 
@@ -57,11 +58,20 @@
     public List<ArdRouteGroup> selectArdRouteGroupList(ArdRouteGroup ardRouteGroup) {
         List<ArdRouteGroup> list = ardRouteGroupMapper.selectArdRouteGroupList(ardRouteGroup);
         for (ArdRouteGroup routeGroup : list) {
-            routeGroup.setArdRouteInfoLS(ardRouteInfoMapper.selectArdRouteInfoByGroupId(routeGroup.getId()));
+            routeGroup.setArdRouteInfoLS(checkRouteData(routeGroup.getId()));
         }
         return list;
     }
 
+    // 清空航线数据
+    private List<ArdRouteInfo> checkRouteData(String id){
+        List<ArdRouteInfo> routeInfos = ardRouteInfoMapper.selectArdRouteInfoByGroupId(id);
+        for (ArdRouteInfo ls : routeInfos) {
+            ls.setRouteData(null);
+        }
+        return routeInfos;
+    }
+
     /**
      * 新增分组
      * 
diff --git a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java
index 1bc4a7a..662f980 100644
--- a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java
+++ b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java
@@ -21,8 +21,10 @@
 import com.ard.route.domain.djuav.UavRouteReq;
 import com.ard.route.domain.dto.ArdNoflyDto;
 import com.ard.route.domain.route.ArdRouteInfo;
+import com.ard.route.domain.route.ArdRouteMission;
 import com.ard.route.domain.vo.KmzResultVo;
 import com.ard.route.mapper.ArdRouteInfoMapper;
+import com.ard.route.mapper.ArdRouteMissionMapper;
 import com.ard.route.service.IArdRouteInfoService;
 import com.ard.route.service.UavRouteService;
 import com.ard.work.domain.cache.UavTelemetryDataCache;
@@ -61,9 +63,11 @@
     @Autowired
     private OssServiceContext ossService;
 
-
     @Autowired
     private UavRouteService routeService;
+
+    @Autowired
+    private ArdRouteMissionMapper ardRouteMissionMapper;
 
     @Resource
     private IArdNoFlyZoneService ardNoFlyZoneService;
@@ -138,6 +142,7 @@
      */
     @Override
     public String insertArdRouteInfo(ArdRouteInfo ardRouteInfo) {
+        processRouteMission(ardRouteInfo);
         ardRouteInfo.setId(IdUtils.simpleUUID());
         ardRouteInfo.setCreateTime(DateUtils.getNowDate());
         ardRouteInfo.setUpdateTime(DateUtils.getNowDate()); // 修改时间,用于排序
@@ -153,6 +158,19 @@
         return kmzResult.getPath();
     }
 
+    // 航线任务数据加工校验
+    private void processRouteMission(ArdRouteInfo ardRouteInfo){
+        if ("3".equals(ardRouteInfo.getType())) {
+            ArdRouteMission ardRouteMission = ardRouteMissionMapper.selectArdRouteMissionById(ardRouteInfo.getMissionId());
+            if ("0".equals(ardRouteMission.getRouteId())) {
+                ardRouteMission.setRouteId(ardRouteInfo.getId());
+                ardRouteMissionMapper.updateArdRouteMission(ardRouteMission);
+            }else {
+                throw new RuntimeException("不能修改默认分组");
+            }
+        }
+    }
+
     /**
      * 修改航线(kmz)
      * 
diff --git a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteMissionServiceImpl.java b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteMissionServiceImpl.java
new file mode 100644
index 0000000..ea5facc
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteMissionServiceImpl.java
@@ -0,0 +1,144 @@
+package com.ard.route.service.impl;
+
+import java.util.List;
+import com.ard.common.utils.DateUtils;
+import com.ard.common.utils.uuid.IdUtils;
+import com.ard.route.domain.route.ArdRouteMission;
+import com.ard.route.domain.route.ArdRoutePoint;
+import com.ard.route.mapper.ArdRoutePointMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ard.route.mapper.ArdRouteMissionMapper;
+import com.ard.route.service.IArdRouteMissionService;
+
+import static com.ard.common.utils.SecurityUtils.getUsername;
+
+/**
+ * 航线任务Service业务层处理
+ * 
+ * @author xia
+ * @date 2026-01-20
+ */
+@Service
+public class ArdRouteMissionServiceImpl implements IArdRouteMissionService {
+
+    @Autowired
+    private ArdRouteMissionMapper ardRouteMissionMapper;
+
+    @Autowired
+    private ArdRoutePointMapper ardRoutePointMapper;
+
+    /**
+     * 查询航线任务
+     * 
+     * @param id 航线任务主键
+     * @return 航线任务
+     */
+    @Override
+    public ArdRouteMission selectArdRouteMissionById(String id) {
+        ArdRouteMission ardRouteMission = ardRouteMissionMapper.selectArdRouteMissionById(id);
+        ardRouteMission.setMissionDetailList(getMissionDetailList(id));
+        return ardRouteMission;
+    }
+
+    /**
+     * 查询航线任务列表
+     * 
+     * @param ardRouteMission 航线任务
+     * @return 航线任务
+     */
+    @Override
+    public List<ArdRouteMission> selectArdRouteMissionList(ArdRouteMission ardRouteMission) {
+        List<ArdRouteMission> list = ardRouteMissionMapper.selectArdRouteMissionList(ardRouteMission);
+        for (ArdRouteMission routeMission : list) {
+            routeMission.setMissionDetailList(getMissionDetailList(routeMission.getId()));
+        }
+        return list;
+    }
+
+    private List<ArdRoutePoint> getMissionDetailList(String missionId) {
+        return ardRoutePointMapper.selectArdRoutePointByMissionId(missionId);
+    }
+
+    /**
+     * 新增航线任务
+     * 
+     * @param ardRouteMission 航线任务
+     * @return 结果
+     */
+    @Override
+    public int insertArdRouteMission(ArdRouteMission ardRouteMission) {
+        ardRouteMission.setId(IdUtils.simpleUUID());
+        ardRouteMission.setExecuteStatus("0");
+        ardRouteMission.setCreateTime(DateUtils.getNowDate());
+        dataProcessingRoutePoint(ardRouteMission.getMissionDetailList(),ardRouteMission.getId());
+        return ardRouteMissionMapper.insertArdRouteMission(ardRouteMission);
+    }
+
+    /**
+     * 修改航线任务
+     * 
+     * @param ardRouteMission 航线任务
+     * @return 结果
+     */
+    @Override
+    public int updateArdRouteMission(ArdRouteMission ardRouteMission) {
+        ardRouteMission.setUpdateTime(DateUtils.getNowDate());
+        // 删除航线任务航点
+        ardRoutePointMapper.deleteArdRoutePointByMissionId(ardRouteMission.getId());
+        // 重新插入航线任务航点
+        dataProcessingRoutePoint(ardRouteMission.getMissionDetailList(),ardRouteMission.getId());
+        return ardRouteMissionMapper.updateArdRouteMission(ardRouteMission);
+    }
+
+    /**
+     * 航线任务航点对象数据加工
+     */
+    private void dataProcessingRoutePoint(List<ArdRoutePoint> missionDetailList,String missionId){
+        for (ArdRoutePoint missionDetail : missionDetailList) {
+            missionDetail.setMissionId(missionId);
+        }
+        ardRoutePointMapper.insertArdRoutePointS(missionDetailList);
+    }
+
+    /**
+     * 批量删除航线任务
+     * 
+     * @param ids 需要删除的航线任务主键
+     * @return 结果
+     */
+    @Override
+    public int deleteArdRouteMissionByIds(String[] ids) {
+        return ardRouteMissionMapper.deleteArdRouteMissionByIds(ids);
+    }
+
+    /**
+     * 删除航线任务信息
+     * 
+     * @param id 航线任务主键
+     * @return 结果
+     */
+    @Override
+    public int deleteArdRouteMissionById(String id) {
+        return ardRouteMissionMapper.deleteArdRouteMissionById(id);
+    }
+
+    /**
+     * 修改航线任务状态
+     *
+     * @param id 航线任务主键
+     * @param status 状态类型
+     * @return 结果
+     */
+    @Override
+    public int updateArdRouteMissionStatus(String id, String status) {
+        ArdRouteMission ardRouteMission = new ArdRouteMission();
+        ardRouteMission.setId(id);
+        ardRouteMission.setExecuteStatus(status);
+        ardRouteMission.setExecuteBy(getUsername());
+        ardRouteMission.setExecuteTime(DateUtils.getNowDate());
+        ardRouteMission.setUpdateTime(DateUtils.getNowDate());
+        return ardRouteMissionMapper.updateArdRouteMission(ardRouteMission);
+    }
+
+}
diff --git a/ard-route/src/main/java/com/ard/route/service/impl/ArdRoutePointServiceImpl.java b/ard-route/src/main/java/com/ard/route/service/impl/ArdRoutePointServiceImpl.java
new file mode 100644
index 0000000..6b3d195
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/service/impl/ArdRoutePointServiceImpl.java
@@ -0,0 +1,89 @@
+package com.ard.route.service.impl;
+
+import com.ard.route.domain.route.ArdRoutePoint;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ard.route.mapper.ArdRoutePointMapper;
+import com.ard.route.service.IArdRoutePointService;
+
+import java.util.List;
+
+/**
+ * 航线任务航点Service业务层处理
+ * 
+ * @author xia
+ * @date 2026-01-20
+ */
+@Service
+public class ArdRoutePointServiceImpl implements IArdRoutePointService {
+
+    @Autowired
+    private ArdRoutePointMapper ardRoutePointMapper;
+
+    /**
+     * 查询航线任务航点
+     *
+     * @param missionId 航线任务航点主键
+     * @return 航线任务航点
+     */
+    @Override
+    public List<ArdRoutePoint> selectArdRoutePointByMissionId(String missionId) {
+        return ardRoutePointMapper.selectArdRoutePointByMissionId(missionId);
+    }
+
+    /**
+     * 查询航线任务航点列表
+     * 
+     * @param ardRoutePoint 航线任务航点
+     * @return 航线任务航点
+     */
+    @Override
+    public List<ArdRoutePoint> selectArdRoutePointList(ArdRoutePoint ardRoutePoint) {
+        return ardRoutePointMapper.selectArdRoutePointList(ardRoutePoint);
+    }
+
+    /**
+     * 新增航线任务航点
+     * 
+     * @param ardRoutePoint 航线任务航点
+     * @return 结果
+     */
+    @Override
+    public int insertArdRoutePoint(ArdRoutePoint ardRoutePoint) {
+        return ardRoutePointMapper.insertArdRoutePoint(ardRoutePoint);
+    }
+
+    /**
+     * 修改航线任务航点
+     * 
+     * @param ardRoutePoint 航线任务航点
+     * @return 结果
+     */
+    @Override
+    public int updateArdRoutePoint(ArdRoutePoint ardRoutePoint) {
+        return ardRoutePointMapper.updateArdRoutePoint(ardRoutePoint);
+    }
+
+    /**
+     * 批量删除航线任务航点
+     * 
+     * @param missionIds 需要删除的航线任务航点主键
+     * @return 结果
+     */
+    @Override
+    public int deleteArdRoutePointByMissionIds(String[] missionIds) {
+        return ardRoutePointMapper.deleteArdRoutePointByMissionIds(missionIds);
+    }
+
+    /**
+     * 删除航线任务航点信息
+     * 
+     * @param missionId 航线任务航点主键
+     * @return 结果
+     */
+    @Override
+    public int deleteArdRoutePointByMissionId(String missionId) {
+        return ardRoutePointMapper.deleteArdRoutePointByMissionId(missionId);
+    }
+
+}
diff --git a/ard-route/src/main/resources/mapper/ArdRouteInfoMapper.xml b/ard-route/src/main/resources/mapper/ArdRouteInfoMapper.xml
index 658cfeb..9fde058 100644
--- a/ard-route/src/main/resources/mapper/ArdRouteInfoMapper.xml
+++ b/ard-route/src/main/resources/mapper/ArdRouteInfoMapper.xml
@@ -20,6 +20,7 @@
         <result property="updateTime"    column="update_time"    />
         <result property="pointCount"    column="point_count"    />
         <result property="isLoop"    column="is_loop"    />
+        <result property="missionId"    column="mission_id"    />
     </resultMap>
 
     <sql id="selectArdRouteInfoVo">
@@ -37,7 +38,8 @@
                update_by,
                update_time,
                point_count,
-               is_loop
+               is_loop,
+               mission_id
         from ard_route_info
     </sql>
 
@@ -84,6 +86,7 @@
             <if test="updateTime != null">update_time,</if>
             <if test="pointCount != null">point_count,</if>
             <if test="isLoop != null">is_loop,</if>
+            <if test="missionId != null">mission_id,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
@@ -101,6 +104,7 @@
             <if test="updateTime != null">#{updateTime},</if>
             <if test="pointCount != null">#{pointCount},</if>
             <if test="isLoop != null">#{isLoop},</if>
+            <if test="missionId != null">#{missionId},</if>
          </trim>
     </insert>
 
@@ -121,6 +125,7 @@
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="pointCount != null">point_count = #{pointCount},</if>
             <if test="isLoop != null">is_loop = #{isLoop},</if>
+            <if test="missionId != null">mission_id = #{missionId},</if>
         </trim>
         where id = #{id}
     </update>
@@ -149,7 +154,7 @@
     </delete>
 
     <select id="selectArdRouteInfoByGroupId" parameterType="String" resultMap="ArdRouteInfoResult">
-        select id,name,path,group_id,type,aircraft,payload,read_only,create_by,create_time,update_by,update_time,point_count,is_loop from ard_route_info
+        <include refid="selectArdRouteInfoVo"/>
         <where>
             <if test="groupId != null "> and group_id = #{groupId}</if>
         </where>
diff --git a/ard-route/src/main/resources/mapper/ArdRouteMissionMapper.xml b/ard-route/src/main/resources/mapper/ArdRouteMissionMapper.xml
new file mode 100644
index 0000000..9c71e07
--- /dev/null
+++ b/ard-route/src/main/resources/mapper/ArdRouteMissionMapper.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ard.route.mapper.ArdRouteMissionMapper">
+    
+    <resultMap type="ArdRouteMission" id="ArdRouteMissionResult">
+        <result property="id"    column="id"    />
+        <result property="routeId"    column="route_id"    />
+        <result property="missionName"    column="mission_name"    />
+        <result property="executeStatus"    column="execute_status"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="executeBy"    column="execute_by"    />
+        <result property="executeTime"    column="execute_time"    />
+    </resultMap>
+
+    <sql id="selectArdRouteMissionVo">
+        select id,
+               route_id,
+               mission_name,
+               execute_status,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               execute_by,
+               execute_time
+        from ard_route_mission
+    </sql>
+
+    <select id="selectArdRouteMissionList" parameterType="ArdRouteMission" resultMap="ArdRouteMissionResult">
+        <include refid="selectArdRouteMissionVo"/>
+        <where>  
+            <if test="routeId != null  and routeId != ''"> and route_id = #{routeId}</if>
+            <if test="missionName != null  and missionName != ''"> and mission_name like concat('%', #{missionName}, '%')</if>
+            <if test="executeStatus != null  and executeStatus != ''"> and execute_status = #{executeStatus}</if>
+            <if test="executeBy != null  and executeBy != ''"> and execute_by = #{executeBy}</if>
+            <if test="executeTime != null "> and execute_time = #{executeTime}</if>
+        </where>
+        order by create_time asc
+    </select>
+    
+    <select id="selectArdRouteMissionById" parameterType="String" resultMap="ArdRouteMissionResult">
+        <include refid="selectArdRouteMissionVo"/>
+        where id = #{id}
+        order by create_time asc
+    </select>
+
+    <insert id="insertArdRouteMission" parameterType="ArdRouteMission">
+        insert into ard_route_mission
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="routeId != null">route_id,</if>
+            <if test="missionName != null">mission_name,</if>
+            <if test="executeStatus != null">execute_status,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="executeBy != null">execute_by,</if>
+            <if test="executeTime != null">execute_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="routeId != null">#{routeId},</if>
+            <if test="missionName != null">#{missionName},</if>
+            <if test="executeStatus != null">#{executeStatus},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="executeBy != null">#{executeBy},</if>
+            <if test="executeTime != null">#{executeTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateArdRouteMission" parameterType="ArdRouteMission">
+        update ard_route_mission
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="routeId != null">route_id = #{routeId},</if>
+            <if test="missionName != null">mission_name = #{missionName},</if>
+            <if test="executeStatus != null">execute_status = #{executeStatus},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="executeBy != null">execute_by = #{executeBy},</if>
+            <if test="executeTime != null">execute_time = #{executeTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteArdRouteMissionById" parameterType="String">
+        delete from ard_route_mission where id = #{id}
+    </delete>
+
+    <delete id="deleteArdRouteMissionByIds" parameterType="String">
+        delete from ard_route_mission where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <update id="updateArdRouteMissionStatus">
+        update ard_route_mission
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="executeStatus != null">execute_status = #{executeStatus},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+</mapper>
\ No newline at end of file
diff --git a/ard-route/src/main/resources/mapper/ArdRoutePointMapper.xml b/ard-route/src/main/resources/mapper/ArdRoutePointMapper.xml
new file mode 100644
index 0000000..ae04e36
--- /dev/null
+++ b/ard-route/src/main/resources/mapper/ArdRoutePointMapper.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ard.route.mapper.ArdRoutePointMapper">
+    
+    <resultMap type="ArdRoutePoint" id="ArdRoutePointResult">
+        <result property="missionId"    column="mission_id"    />
+        <result property="pointNum"    column="point_num"    />
+        <result property="longitude"    column="longitude"    />
+        <result property="latitude"    column="latitude"    />
+        <result property="height"    column="height"    />
+    </resultMap>
+
+    <sql id="selectArdRoutePointVo">
+        select mission_id,
+               point_num,
+               longitude,
+               latitude,
+               height
+        from ard_route_point
+    </sql>
+
+    <select id="selectArdRoutePointList" parameterType="ArdRoutePoint" resultMap="ArdRoutePointResult">
+        <include refid="selectArdRoutePointVo"/>
+        <where>  
+            <if test="pointNum != null "> and point_num = #{pointNum}</if>
+            <if test="longitude != null "> and longitude = #{longitude}</if>
+            <if test="latitude != null "> and latitude = #{latitude}</if>
+            <if test="height != null "> and height = #{height}</if>
+        </where>
+        order by point_num asc
+    </select>
+    
+    <select id="selectArdRoutePointByMissionId" parameterType="ArdRoutePoint" resultMap="ArdRoutePointResult">
+        <include refid="selectArdRoutePointVo"/>
+        where mission_id = #{missionId}
+        order by point_num asc
+    </select>
+
+    <insert id="insertArdRoutePoint" parameterType="ArdRoutePoint">
+        insert into ard_route_point
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="missionId != null">mission_id,</if>
+            <if test="pointNum != null">point_num,</if>
+            <if test="longitude != null">longitude,</if>
+            <if test="latitude != null">latitude,</if>
+            <if test="height != null">height,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="missionId != null">#{missionId},</if>
+            <if test="pointNum != null">#{pointNum},</if>
+            <if test="longitude != null">#{longitude},</if>
+            <if test="latitude != null">#{latitude},</if>
+            <if test="height != null">#{height},</if>
+         </trim>
+    </insert>
+
+    <update id="updateArdRoutePoint" parameterType="ArdRoutePoint">
+        update ard_route_point
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="pointNum != null">point_num = #{pointNum},</if>
+            <if test="longitude != null">longitude = #{longitude},</if>
+            <if test="latitude != null">latitude = #{latitude},</if>
+            <if test="height != null">height = #{height},</if>
+        </trim>
+        where mission_id = #{missionId}
+    </update>
+
+    <delete id="deleteArdRoutePointByMissionId" parameterType="String">
+        delete from ard_route_point where mission_id = #{missionId}
+    </delete>
+
+    <delete id="deleteArdRoutePointByMissionIds" parameterType="String">
+        delete from ard_route_point where mission_id in 
+        <foreach item="missionId" collection="array" open="(" separator="," close=")">
+            #{missionId}
+        </foreach>
+    </delete>
+
+    <!-- 批量插入 -->
+    <insert id="insertArdRoutePointS" parameterType="java.util.List">
+        INSERT INTO ard_route_point
+        (
+            mission_id,
+            point_num,
+            longitude,
+            latitude,
+            height
+        )
+        VALUES
+        <foreach item="item" index="index" collection="list" separator=",">
+            (
+            #{item.missionId},
+            #{item.pointNum},
+            #{item.longitude},
+            #{item.latitude},
+            #{item.height}
+            )
+        </foreach>
+    </insert>
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3