| | |
| | | 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; |
| | |
| | | import org.springframework.scheduling.annotation.Async; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.validation.Validator; |
| | | import java.util.*; |
| | |
| | | ardCamera.setUpdateBy(SecurityUtils.getUsername()); |
| | | int res = ardCameraMapper.updateArdCamera(ardCamera); |
| | | if (res > 0) { |
| | | cameraSDKService.logout(ardCamera.getId());//sdk注销 |
| | | cameraSDKService.logout(ardCamera);//sdk注销 |
| | | cameraSDKService.login(ardCamera);//sdk登录获取通道信息 |
| | | } |
| | | return res; |
| | |
| | | //删除当前相机的所有通道 |
| | | ardChannelService.deleteArdChannelByDeviceId(id); |
| | | //sdk注销 |
| | | cameraSDKService.logout(id); |
| | | cameraSDKService.logout(camera); |
| | | } |
| | | } |
| | | return ardCameraMapper.deleteArdCameraByIds(ids); |
| | |
| | | //删除当前相机的所有通道 |
| | | ardChannelService.deleteArdChannelByDeviceId(id); |
| | | //sdk注销 |
| | | cameraSDKService.logout(id); |
| | | cameraSDKService.logout(ArdCamera.builder().id(id).build()); |
| | | } |
| | | return i; |
| | | } |
| | |
| | | return DeviceConstants.UNIQUE; |
| | | } |
| | | |
| | | /** |
| | | * 校验机场是否已关联相机 |
| | | * |
| | | * @param camera 相机 |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public ArdCamera checkAirportHasCamera(ArdCamera camera) { |
| | | ArdCamera info = ardCameraMapper.checkAirportHasCamera(camera); |
| | | if (StringUtils.isNotNull(info)&& !info.getId().equals(camera.getId())) { |
| | | return info; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 同步通道 |
| | |
| | | // SDK 登录成功后写入 Redis |
| | | redisService.setCacheObject(getCacheKey(camera.getId()), camera); |
| | | } |
| | | |
| | | /** |
| | | * 同步设备通道与本地通道库信息 |
| | | * |
| | | * @author 刘苏义 |
| | | * @date 2024/8/22 14:37 |
| | | * 定时执行登录失败相机重新登录 |
| | | */ |
| | | @Scheduled(cron = "0/10 * * * * ?") |
| | | public void failedReconnect() { |
| | | try { |
| | | log.debug("定时执行失败相机重连任务"); |
| | | // 从数据库取全部设备 |
| | | ArdCamera ardCamera = new ArdCamera(); |
| | | ardCamera.setUseDataScope(false); |
| | | List<ArdCamera> cameraList = this.selectArdCameraList(ardCamera); |
| | | cameraList.stream() |
| | | // 只处理登录失败或离线的设备 |
| | | .filter(camera -> camera.getLoginId() == null || camera.getLoginId() < 0 || "0".equals(camera.getState())) |
| | | .forEach(camera -> { |
| | | log.info("尝试重新登录设备 {}:{}", camera.getIp(), camera.getPort()); |
| | | cameraSDKService.login(camera); |
| | | }); |
| | | |
| | | } catch (Exception ex) { |
| | | log.error("定时执行失败相机重连任务异常:{}", ex.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 同步相机在线状态 |
| | | */ |
| | | @Scheduled(cron = "0/10 * * * * ?") |
| | | public void syncCameraState() { |
| | | try { |
| | | log.debug("定时执行同步相机在线状态任务"); |
| | | //调用查询方法 |
| | | ArdCamera ardCamera = new ArdCamera(); |
| | | ardCamera.setUseDataScope(false); |
| | | List<ArdCamera> ardCameraList = this.selectArdCameraList(ardCamera); |
| | | ardCameraList |
| | | .forEach(camera -> { |
| | | boolean onLineNew = cameraSDKService.isOnLine(camera); |
| | | 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()); |
| | | } |
| | | } |
| | | /** |
| | | * 同步相机通道 |
| | | */ |
| | | @Scheduled(cron = "0/10 * * * * ?") |
| | | public void syncChannel() { |
| | | try { |
| | | log.info("定时执行同步通道任务"); |
| | | List<ArdCamera> ardCameraList = this.selectArdCameraList(new ArdCamera()); |
| | | log.debug("定时执行同步通道任务"); |
| | | ArdCamera camera = new ArdCamera(); |
| | | camera.setUseDataScope(false); |
| | | List<ArdCamera> ardCameraList = this.selectArdCameraList(camera); |
| | | if (!ardCameraList.isEmpty()) { |
| | | ardCameraList |
| | | .forEach(ardCamera -> { |
| | |
| | | List<ArdChannel> ardChannelListSDK = cameraSDKService.getChannels(ardCamera); |
| | | //数据库获取通道 |
| | | ArdChannel ardChannel = new ArdChannel(); |
| | | ardChannel.setUseDataScope(false); |
| | | ardChannel.setDeviceId(ardCamera.getId()); |
| | | List<ArdChannel> ardChannelListDb = ardChannelService.selectArdChannelList(ardChannel); |
| | | //同步通道 |
| | |
| | | log.error("定时执行同步通道任务异常:{}", ex.getMessage()); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |