| | |
| | | package com.ard.work.service.impl; |
| | | |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.ard.common.annotation.DataScope; |
| | | import com.ard.common.constant.CacheConstants; |
| | | import com.ard.common.core.redis.RedisCache; |
| | | import com.ard.common.exception.ServiceException; |
| | |
| | | import com.ard.system.authorize.service.AuthorizeService; |
| | | import com.ard.work.domain.entity.ArdDroneInfo; |
| | | import com.ard.work.domain.receiver.BoxInfoReceiver; |
| | | import com.ard.work.domain.receiver.BoxStreamUrlReceiver; |
| | | import com.ard.work.mapper.ArdDroneInfoMapper; |
| | | import com.ard.work.service.IArdDroneInfoService; |
| | | import com.ard.work.service.ITyService; |
| | |
| | | /** |
| | | * 查询无人机盒子列表 |
| | | * |
| | | * @param ArdDroneInfo 无人机盒子 |
| | | * @param ardDroneInfo 无人机盒子 |
| | | * @return 无人机盒子 |
| | | */ |
| | | @Override |
| | | public List<ArdDroneInfo> selectArdDroneList(ArdDroneInfo ArdDroneInfo) { |
| | | return ArdDroneInfoMapper.selectArdDroneList(ArdDroneInfo); |
| | | @DataScope(deptAlias = "d", userAlias = "u") |
| | | public List<ArdDroneInfo> selectArdDroneList(ArdDroneInfo ardDroneInfo) { |
| | | List<ArdDroneInfo> ardDroneInfos = ArdDroneInfoMapper.selectArdDroneList(ardDroneInfo); |
| | | // 使用传统的 for 循环避免 forEach 带来的性能开销 |
| | | for (ArdDroneInfo uav : ardDroneInfos) { |
| | | try { |
| | | BoxStreamUrlReceiver boxLiveUrl = tyService.getBoxLiveUrl(uav.getBoxSn()); |
| | | if (boxLiveUrl != null) { |
| | | uav.setWebrtcUrl(boxLiveUrl.getRtc()); |
| | | } else { |
| | | log.warn("设备 {} 的直播地址为空", uav.getBoxSn()); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("获取设备 {} 的直播地址失败", uav.getBoxSn(), e); |
| | | } |
| | | } |
| | | return ardDroneInfos; |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | /** |
| | | * 同步盒子属性 |
| | | * |
| | | */ |
| | | @Scheduled(fixedRate = 1000 * 5) |
| | | public void syncBoxInfo() { |
| | | List<ArdDroneInfo> localList = selectArdDroneList(new ArdDroneInfo()); |
| | | List<ArdDroneInfo> localList = selectArdDroneList(new ArdDroneInfo() {{ |
| | | setUseDataScope(false); |
| | | }}); |
| | | Map<String, ArdDroneInfo> localMap = localList.stream() |
| | | .collect(Collectors.toMap(ArdDroneInfo::getBoxSn, drone -> drone)); |
| | | |