From da3e63a308e4b209d53b049074d47f0c04b0bb30 Mon Sep 17 00:00:00 2001
From: zhaowenyu <35589726@qq.com>
Date: Tue, 09 Dec 2025 11:22:10 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 ard-work/src/main/java/com/ard/work/component/websocket/handler/TyMessageHandler.java |   13 +++++++++++--
 ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java       |   31 +++++++++++++++++++------------
 ard-admin/src/main/resources/application.yml                                          |    6 +++---
 ard-work/src/main/resources/mapper/ArdMediaMapper.xml                                 |    8 ++++++--
 4 files changed, 39 insertions(+), 19 deletions(-)

diff --git a/ard-admin/src/main/resources/application.yml b/ard-admin/src/main/resources/application.yml
index 243a257..584dcd1 100644
--- a/ard-admin/src/main/resources/application.yml
+++ b/ard-admin/src/main/resources/application.yml
@@ -44,7 +44,7 @@
   # 令牌密钥
   secret: abcdefghijklmnopqrstuvwxyz
   # 令牌有效期(默认30分钟)
-  expireTime: 10
+  expireTime: 60
   # 是否允许账户多终端同时登录(true允许 false不允许)
   soloLogin: true
 
@@ -163,6 +163,6 @@
 
   # 激活配置文件
   profiles:
-    active: daqing-druid,daqing
-    #active: prod-druid,prod
+    #active: daqing-druid,daqing
+    active: prod-druid,prod
     #active: dev-druid,dev
\ No newline at end of file
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 b48775c..eb3795a 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
@@ -221,22 +221,29 @@
     @Override
     public MinioUploadResult uploadArdRouteInfo(MultipartFile file) {
         try {
-            String url = ossService.upload("kmz",file);
-            String urlDock = ossDockService.upload("kmz",file);
-            ArdRouteInfo information = new ArdRouteInfo();
-            information.setName(file.getOriginalFilename());
-            information.setPath(url);
-            information.setPath1(urlDock);
-            information.setGroupId("0");     // 默认分组
-            information.setReadOnly("1");   // 默认只读
             // 增加航线实体类信息
             UavRouteReq uavRouteReq = fileConversionEntity(file);
+            ArdRouteInfo ardRouteInfo = new ArdRouteInfo();
             if (uavRouteReq != null){
-                information.setUavRouteReq(uavRouteReq);
-                information.setType(templateTypeData(uavRouteReq));
-                information.setAircraft(droneTypeData(uavRouteReq));
+                ardRouteInfo.setUavRouteReq(uavRouteReq);
+                ardRouteInfo.setType(templateTypeData(uavRouteReq));
+                ardRouteInfo.setAircraft(droneTypeData(uavRouteReq));
             }
-            insertRouteInfomation(information);
+            // 判断禁飞区
+            List<RoutePointReq> routePointList = ardRouteInfo.getUavRouteReq().getRoutePointList();
+            for (RoutePointReq routePointReq : routePointList) {
+                ArdNoflyDto ardNoflyDto = new ArdNoflyDto();
+                ardNoflyDto.setCurrent(new Vertex(routePointReq.getLongitude(), routePointReq.getLatitude()));
+                verifyNoFlyZone(ardNoflyDto);
+            }
+            String url = ossService.upload("kmz",file);
+            String urlDock = ossDockService.upload("kmz",file);
+            ardRouteInfo.setName(file.getOriginalFilename());
+            ardRouteInfo.setPath(url);
+            ardRouteInfo.setPath1(urlDock);
+            ardRouteInfo.setGroupId("0");     // 默认分组
+            ardRouteInfo.setReadOnly("1");   // 默认只读
+            insertRouteInfomation(ardRouteInfo);
             return MinioUploadResult.builder()
                     .url(url)
                     .newFileName(FileUtils.getName(url))
diff --git a/ard-work/src/main/java/com/ard/work/component/websocket/handler/TyMessageHandler.java b/ard-work/src/main/java/com/ard/work/component/websocket/handler/TyMessageHandler.java
index fae1f50..93e7bc4 100644
--- a/ard-work/src/main/java/com/ard/work/component/websocket/handler/TyMessageHandler.java
+++ b/ard-work/src/main/java/com/ard/work/component/websocket/handler/TyMessageHandler.java
@@ -17,7 +17,10 @@
 import org.springframework.web.socket.handler.TextWebSocketHandler;
 
 import javax.annotation.Resource;
+import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
 
 
 @Component
@@ -40,7 +43,7 @@
     private UavAllManager uavAllManager;
     @Resource
     private TokenService tokenService;
-
+    private final Map<Long, Long> lastDisconnectTime = new ConcurrentHashMap<>();
     @Override
     public void handleTextMessage(WebSocketSession session, TextMessage message) {
         try {
@@ -276,6 +279,7 @@
             return;
         }
         Long userId = Long.parseLong(userIdStr);
+        lastDisconnectTime.remove(userId); // 清除断开标记
         WebSocketSessionManager.addSession(userId, session);
         log.info("【cmd】size: {}", WebSocketSessionManager.getOnlineUserCount());
     }
@@ -290,6 +294,8 @@
         Long userId = Long.parseLong(userIdStr);
         WebSocketSessionManager.removeSession(userId);
         log.info("【cmd】size: {}", WebSocketSessionManager.getOnlineUserCount());
+        long version = System.currentTimeMillis();
+        lastDisconnectTime.put(userId, version);
         // 释放该用户所有 UAV 控制权
 
         // 延迟10秒删除token(若期间没重连)
@@ -298,7 +304,10 @@
                 Thread.sleep(3_000); // 延迟3秒
             } catch (InterruptedException ignored) {
             }
-
+            // 如果版本号不一致,说明用户曾重连 → 不执行删除
+            if (!Objects.equals(lastDisconnectTime.get(userId), version)) {
+                return;
+            }
             if (!WebSocketSessionManager.containsUser(userId)) {
                 LoginUser loginUser = tokenService.getLoginUserByUserId(userId);
                 if (loginUser != null) {
diff --git a/ard-work/src/main/resources/mapper/ArdMediaMapper.xml b/ard-work/src/main/resources/mapper/ArdMediaMapper.xml
index 21f6459..2548d11 100644
--- a/ard-work/src/main/resources/mapper/ArdMediaMapper.xml
+++ b/ard-work/src/main/resources/mapper/ArdMediaMapper.xml
@@ -3,7 +3,7 @@
 <mapper namespace="com.ard.work.mapper.ArdMediaMapper">
 
     <!-- 结果映射 -->
-    <resultMap id="ArdMediaResult" type="com.ard.work.domain.entity.ArdMedia">
+    <resultMap id="ArdMediaResult" type="ArdMedia">
         <result property="id" column="id"/>
         <result property="taskId" column="task_id"/>
         <result property="mediaType" column="media_type"/>
@@ -42,7 +42,11 @@
             <if test="captureTime != null">AND capture_time = #{captureTime}</if>
             <if test="createTime != null">AND create_time = #{createTime}</if>
         </where>
-        ORDER BY create_time DESC
+        ORDER BY
+            CASE
+                WHEN media_type = 0 THEN capture_time
+                ELSE create_time
+            END DESC
     </select>
 
 

--
Gitblit v1.9.3