zhaowenyu
2025-12-09 da3e63a308e4b209d53b049074d47f0c04b0bb30
Merge remote-tracking branch 'origin/dev' into dev
4 files modified
58 ■■■■■ changed files
ard-admin/src/main/resources/application.yml 6 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java 31 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/component/websocket/handler/TyMessageHandler.java 13 ●●●●● patch | view | raw | blame | history
ard-work/src/main/resources/mapper/ArdMediaMapper.xml 8 ●●●●● patch | view | raw | blame | history
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>