liusuyi
2025-10-10 b159a0c7dea033f833bcc4554e69ac420ce1d198
优化同步日志打印;增加在线和重连同步
3 files modified
60 ■■■■■ changed files
ard-device/src/main/java/com/ard/device/camera/service/impl/ArdCameraServiceImpl.java 55 ●●●●● patch | view | raw | blame | history
ard-device/src/main/java/com/ard/device/channel/service/impl/ArdChannelServiceImpl.java 3 ●●●●● patch | view | raw | blame | history
ard-vtdu/src/main/java/com/ard/vtdu/service/impl/ArdVtduServiceImpl.java 2 ●●●●● patch | view | raw | blame | history
ard-device/src/main/java/com/ard/device/camera/service/impl/ArdCameraServiceImpl.java
@@ -13,10 +13,12 @@
import com.ard.common.utils.spring.SpringUtils;
import com.ard.common.utils.uuid.IdUtils;
import com.ard.device.camera.domain.ArdCamera;
import com.ard.device.camera.domain.CameraCmd;
import com.ard.device.camera.mapper.ArdCameraMapper;
import com.ard.device.camera.service.IArdCameraService;
import com.ard.device.channel.domain.ArdChannel;
import com.ard.device.channel.service.IArdChannelService;
import com.ard.device.component.sdk.common.GlobalVariable;
import com.ard.device.component.sdk.event.LoginEvent;
import com.ard.device.component.sdk.service.CameraSDKService;
import lombok.extern.slf4j.Slf4j;
@@ -364,7 +366,7 @@
    @Scheduled(cron = "0/10 * * * * ?")
    public void syncChannel() {
        try {
            log.info("定时执行同步通道任务");
            log.debug("定时执行同步通道任务");
            List<ArdCamera> ardCameraList = this.selectArdCameraList(new ArdCamera());
            if (!ardCameraList.isEmpty()) {
                ardCameraList
@@ -383,4 +385,55 @@
            log.error("定时执行同步通道任务异常:{}", ex.getMessage());
        }
    }
    /**
     * 定时执行登录失败相机重新登录
     *
     * @author 刘苏义
     * @date 2024/8/22 14:37
     */
    @Scheduled(cron = "0/30 * * * * ?")
    public void failedReconnect() {
        try {
            log.debug("定时执行失败相机重连任务");
            List<Object> ardCameras = redisService.getListKey(CacheConstants.CAMERA_LIST_KEY);
            ardCameras.stream()
                    .map(object -> (ArdCamera) object) // 将Object转换为ArdCameras
                    .filter(camera -> !GlobalVariable.loginMap.containsKey(camera.getId()))
                    .forEach(camera -> cameraSDKService.login(camera));
        } catch (Exception ex) {
            log.error("定时执行失败相机重连任务异常:{}", ex.getMessage());
        }
    }
    /**
     * 同步相机在线状态
     * 刘苏义
     * 2023/10/8 14:54:41
     */
    @Scheduled(cron = "0/10 * * * * ?")
    public void cameraState() {
        try {
            log.debug("定时执行同步相机在线状态任务");
            //调用查询方法
            List<ArdCamera> ardCameraList = selectArdCameraList(new ArdCamera());
            ardCameraList
                    .forEach(camera -> {
                        CameraCmd cmd = new CameraCmd();
                        cmd.setCameraId(camera.getId());
                        boolean onLineNew = cameraSDKService.isOnLine(cmd);
                        boolean onLineOld = "1".equals(camera.getState());
                        if (onLineNew != onLineOld) {
                            if (onLineNew) {
                                camera.setState("1");
                            } else {
                                camera.setState("0");
                            }
                            camera.setUpdateTime(DateUtils.getNowDate());
                            ardCameraMapper.updateArdCamera(camera);
                        }
                    });
        } catch (Exception ex) {
            log.error("同步相机在线状态异常:{}", ex.getMessage());
        }
    }
}
ard-device/src/main/java/com/ard/device/channel/service/impl/ArdChannelServiceImpl.java
@@ -140,7 +140,7 @@
    @Scheduled(cron = "0/5 * * * * ?")
    public void syncVtdu() {
        log.info("定时同步Vtdu任务");
        log.debug("定时同步Vtdu任务");
        List<ArdChannel> channels = this.selectArdChannelList(new ArdChannel());
        if (channels == null || channels.isEmpty()) {
            log.warn("没有获取到通道数据,退出同步");
@@ -154,7 +154,6 @@
        // 2. 合并操作:增、删、改
        channels.forEach(channel -> {
            String name = channel.getDeviceId() + "_" + channel.getChanNo();  // 生成媒体表的 name
            int isCode = "标准h264".equals(channel.getVideoCode()) ? 0 : 1;  // 根据 videoCode 生成 isCode
            String cameraId = channel.getDeviceId();  // cameraId 就是通道的 deviceId
            String rtspSourceUrl = getRtspSource(channel);
            String rtspUrl = "rtsp://" + mediamtxConfig.getPlayHost() + ":8554" + "/" + name;  // 拼接 webrtcUrl
ard-vtdu/src/main/java/com/ard/vtdu/service/impl/ArdVtduServiceImpl.java
@@ -40,7 +40,7 @@
    @Scheduled(cron = "0/5 * * * * ?")
    public void syncMediamtx() {
        log.info("定时同步MediaMTX任务");
        log.debug("定时同步MediaMTX任务");
        List<String> nameList = mediaService.getNameList();
        List<ArdVtdu> ardVtduList = selectArdVtduList(new ArdVtdu());
        asyncMediaMTX(ardVtduList, nameList);