ard-admin/src/main/java/com/ard/web/controller/work/ArdDroneInfoController.java
@@ -125,5 +125,4 @@ return AjaxResult.error(e.getMessage()); } } } ard-work/src/main/java/com/ard/work/domain/entity/ArdDroneInfo.java
@@ -23,55 +23,81 @@ private static final long serialVersionUID = 1L; /** 主键 */ /** * 主键 */ private String id; /** 盒子编码 */ /** * 盒子编码 */ @Excel(name = "盒子编码") private String boxSn; /** 盒子名称 */ /** * 盒子名称 */ @Excel(name = "盒子名称") private String boxName; /** 盒子版本 */ /** * 盒子版本 */ @Excel(name = "盒子版本") private String boxVersion; /** 启动时间 */ /** * 启动时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "启动时间") private Date startTime; /** 在线状态 */ /** * 在线状态 */ @Excel(name = "在线状态") private Integer onLine; /** 视频服务器地址 */ /** * 视频服务器地址 */ @Excel(name = "视频服务器地址") private String videoServer; /** 视频服务器端口 */ /** * 视频服务器端口 */ @Excel(name = "视频服务器端口") private Integer videoPort; /** 最后任务id */ /** * 最后任务id */ @Excel(name = "最后任务id") private Integer lastTaskId; /** 用户ID */ /** * 用户ID */ @Excel(name = "用户ID") private Long userId; /** 部门ID */ /** * 部门ID */ @Excel(name = "部门ID") private Long deptId; /** 服务器管理ID */ /** * 服务器管理ID */ @Excel(name = "服务器管理ID") private String serverId; /** 盒子别名 */ /** * 盒子别名 */ @Excel(name = "盒子别名") private String boxAliasName; @@ -81,6 +107,11 @@ private ArdServerInfo ardServerInfo; /** * 无人机直播地址 */ private String webrtcUrl; /** * 判断两个无人机对象的属性是否相同 */ public boolean isSameAs(BoxInfoReceiver other) { ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java
@@ -10,6 +10,7 @@ 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; @@ -76,7 +77,21 @@ @Override @DataScope(deptAlias = "d", userAlias = "u") public List<ArdDroneInfo> selectArdDroneList(ArdDroneInfo ardDroneInfo) { return ArdDroneInfoMapper.selectArdDroneList(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; } /** @@ -258,11 +273,12 @@ /** * 同步盒子属性 * */ @Scheduled(fixedRate = 1000 * 5) public void syncBoxInfo() { List<ArdDroneInfo> localList = selectArdDroneList(new ArdDroneInfo(){{setUseDataScope(false);}}); List<ArdDroneInfo> localList = selectArdDroneList(new ArdDroneInfo() {{ setUseDataScope(false); }}); Map<String, ArdDroneInfo> localMap = localList.stream() .collect(Collectors.toMap(ArdDroneInfo::getBoxSn, drone -> drone));