ard-admin/src/main/java/com/ard/web/controller/sample/DeviceController.java
@@ -251,6 +251,7 @@ .domain(dto.getDomain()) .firmwareVersion(dto.getFirmwareVersion()) .workType(dto.getWorkType()) .webrtcUrl(dto.getWebrtcUrl()) .compatibleStatus(dto.getFirmwareStatus() == null ? null : DeviceFirmwareStatusEnum.CONSISTENT_UPGRADE != DeviceFirmwareStatusEnum.find(dto.getFirmwareStatus())) .build(); ard-sample/src/main/java/com/ard/sample/component/websocket/handler/LiveStreamHandler.java
@@ -53,6 +53,11 @@ rlive.setType(MessageType.LIVESTREAM.getType()); resultLive = _objectMapper.writeValueAsString(rlive); RedisOpsUtils.set(RedisConst.WEBSOCKET_VIDEO_ADDRESS_PREFIX + sn, resultLive); LiveDTO live = (LiveDTO) rlive.getData(); Boolean isWeb = _deviceService.updateWebrtcUrl(sn,live.getWebrtcUrl()); if (isWeb) { log.info("SN: {}-更新webrtc地址成功!", sn); } } } _dockWebSocketHandler.sendMessageToSubscribers(sn, MessageType.LIVESTREAM.getType(), resultLive); ard-sample/src/main/java/com/ard/sample/manage/model/dto/DeviceDTO.java
@@ -66,4 +66,6 @@ private Integer firmwareProgress; private Long workType; private String webrtcUrl; } ard-sample/src/main/java/com/ard/sample/manage/model/entity/DeviceEntity.java
@@ -94,4 +94,7 @@ @TableField(value = "work_type") private Long workType; @TableField(value = "webrtcUrl") private String webrtcUrl; } ard-sample/src/main/java/com/ard/sample/manage/service/IDeviceService.java
@@ -157,9 +157,21 @@ */ Boolean updateDevice(DeviceDTO deviceDTO); /** * 修改狀態 * @param sn 設備sn * @param workType 狀態碼 * */ Boolean updateWorkType(String sn, Long workType); /** * 修改直播地址 * @param sn 設備sn * @param webrtcUrl 直播地址 * */ Boolean updateWebrtcUrl(String sn, String webrtcUrl); /** * Bind devices to organizations and people. * @param device */ ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceServiceImpl.java
@@ -1,6 +1,7 @@ package com.ard.sample.manage.service.impl; import com.alibaba.fastjson2.JSONObject; import com.ard.sample.component.websocket.handler.LiveStreamHandler; import com.ard.system.authorize.service.AuthorizeService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -65,6 +66,9 @@ @Slf4j @Transactional public class DeviceServiceImpl implements IDeviceService { @Autowired private LiveStreamHandler _liveStreamHandler; @Autowired private IMessageSenderService messageSender; @@ -355,6 +359,11 @@ DeviceQueryParam.builder() .domains(List.of(DeviceDomainEnum.GATEWAY.getVal(), DeviceDomainEnum.DOCK.getVal())) .build()); // 在獲取设备列表时,顺便获取直播地址 for(DeviceDTO devices : devicesList){ _liveStreamHandler.StartLiveStreaming(devices.getDeviceSn()); _liveStreamHandler.StartLiveStreaming(devices.getChildDeviceSn()); } devicesList.stream() .filter(gateway -> DeviceDomainEnum.DOCK.getVal() == gateway.getDomain() || @@ -753,6 +762,7 @@ .firmwareVersion(entity.getFirmwareVersion()) .deptId(entity.getDeptId()) .workType(entity.getWorkType()) .webrtcUrl(entity.getWebrtcUrl()) .workspaceName(entity.getDeptId() != null ? Optional.ofNullable(sysDeptService.selectDeptById(entity.getDeptId())) .map(SysDept::getDeptName) @@ -800,6 +810,15 @@ // 只更新workType字段 .set(DeviceEntity::getWorkType, workType); // 执行更新(第一个参数传null,因为更新字段已通过wrapper的set指定) int update = mapper.update(null, lambdaUpdateWrapper); return update > 0; } @Override public Boolean updateWebrtcUrl(String sn, String webrtcUrl){ LambdaUpdateWrapper<DeviceEntity> lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); lambdaUpdateWrapper.eq(DeviceEntity::getDeviceSn, sn) .set(DeviceEntity::getWebrtcUrl, webrtcUrl); int update = mapper.update(null, lambdaUpdateWrapper); return update > 0; } @@ -1193,6 +1212,7 @@ .domain(dto.getDomain()) .firmwareVersion(dto.getFirmwareVersion()) .workType(dto.getWorkType()) .webrtcUrl(dto.getWebrtcUrl()) .compatibleStatus(dto.getFirmwareStatus() == null ? null : DeviceFirmwareStatusEnum.CONSISTENT_UPGRADE != DeviceFirmwareStatusEnum.find(dto.getFirmwareStatus())) .build(); ard-sample/src/main/java/com/ard/sample/manage/service/impl/DockOnlineServiceImpl.java
@@ -3,20 +3,25 @@ import com.alibaba.fastjson2.JSON; import com.ard.common.core.redis.RedisConst; import com.ard.common.core.redis.RedisOpsUtils; import com.ard.ossdock.service.impl.OssDockServiceContext; import com.ard.sample.component.websocket.enums.MessageType; import com.ard.sample.component.websocket.handler.DockWebSocketHandler; import com.ard.sample.manage.model.dto.DeviceDTO; import com.ard.sample.manage.service.IDeviceService; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Slf4j @Component public class DockOnlineServiceImpl { @@ -28,6 +33,9 @@ @Autowired protected ObjectMapper _objectMapper; @Resource private OssDockServiceContext _ossService; /** * 定时任务,每5秒取一次机场设备的在线状态,如已离线更新状态 @@ -42,6 +50,10 @@ if(!_deviceService.checkDeviceOnline(device.getDeviceSn())){ _deviceService.updateWorkType(device.getDeviceSn(), 3L); RedisOpsUtils.setWithExpire(RedisConst.OSD_STATUS_PREFIX + device.getDeviceSn(), 3, RedisConst.DEVICE_ALIVE_SECOND); RedisOpsUtils.del(RedisConst.WEBSOCKET_VIDEO_ADDRESS_PREFIX + device.getDeviceSn()); } if(!_deviceService.checkDeviceOnline(device.getChildDeviceSn())){ RedisOpsUtils.del(RedisConst.WEBSOCKET_VIDEO_ADDRESS_PREFIX + device.getChildDeviceSn()); } } } @@ -51,6 +63,9 @@ * */ @Scheduled(cron = "0/5 * * * * ?") public void sendDeviceStatus(){ // 测试 机场oss读取文件 // URL url = _ossService.getObjectUrl("kmz","/2025/11/25/新建航点航线(1)_20251125161322A001.kmz"); // log.info("机场任务航线文件url地址:{}", url.toString()); // 发送设备状态到websocket客户端 List<DeviceDTO> devicesList = _deviceService.getDevicesTopoForWeb(); for (DeviceDTO device : devicesList) { ard-sample/src/main/java/com/ard/sample/manage/service/impl/LiveStreamServiceImpl.java
@@ -158,9 +158,13 @@ } } else{ live.setRtmpUrl(rtmpUrl); live.setRtspUrl(rtspUrl); live.setWebrtcUrl(webrtcUrl); i = ardVtduService.updateArdVtdu(vtdu); log.info("机场视频更新后 i:{}",i); if (i > 0) { live.setRtmpUrl(rtmpUrl); live.setRtspUrl(rtspUrl); live.setWebrtcUrl(webrtcUrl); } } //int i = ardVtduService.insertArdVtdu(vtdu); // 保存到媒体表 // if (i > 0) {