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 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)) 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) { 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>