Procházet zdrojové kódy

录像索引主动获取代码提交

jingyuanchao před 1 rokem
rodič
revize
3ced439c41

+ 6 - 1
project_data/sql/0.1.1/soc/soc.sql

@@ -326,7 +326,7 @@ CREATE TABLE `iot_power_off_alarm` (
                                        `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '通电备注',
                                        `recovery_time` datetime DEFAULT NULL COMMENT '恢复时间',
                                        PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='停电告警'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='停电告警';
 
 -- 新增空调设备表
 drop table if exists iot_air_conditioner;
@@ -898,6 +898,11 @@ INSERT INTO `sys_menu` VALUES ('01806206030435823618', '升级状态查询', '18
 INSERT INTO `sys_menu` VALUES ('01806206236392927233', '白令海管理', '1806204625679527938', '4', 'bering', 'deploy/bering/index', null, '1', '0', 'C', '0', '0', 'deploy:bering:list', '1', 'component', null, '超级管理员', '2024-06-27 14:01:39', '', null, '');
 INSERT INTO `sys_menu` VALUES ('01808375108978040834', '日志', '1806204625679527938', '5', 'log', 'deploy/log/index', null, '1', '0', 'C', '0', '0', 'deploy:log:list', '1', 'log', null, '超级管理员', '2024-07-03 13:39:58', '', null, '');
 
+-- 新增iot接入服务菜单
+delete from sys_menu where  id in ('1810216137011572738');
+INSERT INTO sys_menu (id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, platform_type, icon, image_path, create_by, create_time, update_by, update_time, remark) VALUES (1810216137011572738, 'Iot接入服务', 1747911340288892930, 0, 'server/center', 'iot/server/index', null, 1, 0, 'C', '0', '0', null, '1', 'tree', null, '景远超', '2024-07-08 15:35:39', '', null, '');
+
+
 -- 部署中心字典
 delete from sys_dict_type where dict_type='deploy_upgrade_status';
 delete from sys_dict_type where dict_type='deploy_bering_status';

+ 40 - 21
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/video/service/impl/VideoIntegrityCheckServiceImpl.java

@@ -1,5 +1,6 @@
 package com.xunmei.mediator.api.video.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -14,8 +15,6 @@ import com.xunmei.common.core.domain.video.MediatorVideoIntegrityCheck;
 import com.xunmei.common.core.domain.video.MediatorVideoIntegrityCheckLog;
 import com.xunmei.common.core.enums.iot.VideoIntegrityStatus;
 import com.xunmei.common.core.utils.JacksonUtils;
-import com.xunmei.mediator.api.host.service.IIotDeviceService;
-import com.xunmei.mediator.api.host.service.IIotDvrChannelService;
 import com.xunmei.mediator.api.north.service.NorthErrorService;
 import com.xunmei.mediator.api.server.service.IotServerInfoService;
 import com.xunmei.mediator.api.video.mapper.VideoIntegrityCheckMapper;
@@ -25,7 +24,6 @@ import com.xunmei.mediator.api.video.service.MediatorVideoIntegrityCheckLogServi
 import com.xunmei.mediator.domain.dto.videoIntegrityCheck.VideoIntegrityCheckDto;
 import com.xunmei.mediator.domain.dto.videoIntegrityCheck.VideoIntegrityCheckReq;
 import com.xunmei.mediator.iot.service.IIotDeviceInfoService;
-import com.xunmei.mediator.util.RedisUtil;
 import com.xunmei.mediator.websocket.constant.WebSocketConstants;
 import com.xunmei.mediator.websocket.dto.WebsocketExecuteReq;
 import com.xunmei.mediator.websocket.dto.WebsocketResult;
@@ -34,7 +32,6 @@ import com.xunmei.mediator.websocket.enums.ProductEnums;
 import com.xunmei.mediator.websocket.enums.TopicTypeEnums;
 import com.xunmei.mediator.websocket.holder.WebSocketSessionHolder;
 import com.xunmei.mediator.websocket.service.RouterService;
-import com.xunmei.mediator.websocket.utils.WebSocketUtils;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.iot.IotDeviceInfo;
@@ -42,6 +39,7 @@ import com.xunmei.system.api.domain.north.NorthError;
 import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 import com.xunmei.system.api.util.LogUtils;
 import io.netty.util.internal.StringUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -62,13 +60,11 @@ import java.util.*;
  * @author oygj
  * @since 2024-01-23
  */
+@Slf4j
 @Service
 public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCheckMapper, MediatorVideoIntegrityCheck> implements IVideoIntegrityCheckService, RouterService {
 
     @Resource
-    RedisUtil redisUtil;
-
-    @Resource
     RemoteOrgService orgService;
     @Resource
     NorthErrorService northErrorService;
@@ -77,11 +73,6 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
     @Resource
     MediatorVideoIntegrityCheckLogService integrityCheckLogService;
     @Resource
-    IIotDeviceService iIotDeviceService;
-    @Resource
-    IIotDvrChannelService dvrChannelService;
-
-    @Resource
     IotServerInfoService iotServerInfoService;
     @Resource
     IIotDeviceInfoService iotDeviceInfoService;
@@ -114,15 +105,43 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
 
     @Override
     public void invokeRecordInfosForSchedule() {
-        WebsocketResult websocketResult = new WebsocketResult();
-        websocketResult.setId(UUID.randomUUID().toString());
-        websocketResult.setTimestamp(new Date());
-        //websocketResult.setTopic(String.format(TopicTypeEnums.PRODUCT_EVENT_NOTICE_REPLY.getUrl(),));
-        HashMap<String, Object> hashMap = new HashMap<>();
-        hashMap.put(WebSocketConstants.SERVICE, WebSocketConstants.GET_RECORD_INFOS_SERVICES);
-        hashMap.put(WebSocketConstants.ARGS, new JSONObject());
-        websocketResult.setPayload(hashMap);
-        WebSocketSessionHolder.sendAll(JacksonUtils.toJSONString(websocketResult));
+        List<IotDeviceInfo> deviceInfoList = iotDeviceInfoService.selectAllDeviceByDeviceType(Arrays.asList(DeviceTypeEnum.MONITOR_CAMERA, DeviceTypeEnum.NUMBER_CAMERA));
+        if (ObjectUtil.isEmpty(deviceInfoList)){
+            return;
+        }
+        for (IotDeviceInfo iotDeviceInfo : deviceInfoList) {
+            WebsocketResult iotWebsocketResult = new WebsocketResult();
+            iotWebsocketResult.setTopic(TopicTypeEnums.formatUrl(TopicTypeEnums.PRODUCT_SERVICE_INVOKE, WebSocketConstants.IOT_SERVER,WebSocketConstants.IOT_SERVER_DEVICE));
+            iotWebsocketResult.setId(UUID.randomUUID().toString());
+            iotWebsocketResult.setTimestamp(new Date());
+            JSONObject iotHeaderObj = new JSONObject();
+            iotHeaderObj.put(WebSocketConstants.PRODUCT_NAME,WebSocketConstants.IOT_SERVER);
+            iotHeaderObj.put(WebSocketConstants.DEVICE_NAME, WebSocketConstants.IOT_SERVER_DEVICE);
+            iotWebsocketResult.setHeaders(iotHeaderObj);
+            JSONObject iotPayloadObj = new JSONObject();
+            iotWebsocketResult.setPayload(iotPayloadObj);
+            iotPayloadObj.put(WebSocketConstants.SERVICE, WebSocketConstants.DOWN_LINK_SERVICE_PASS_THROUGH);
+
+            WebsocketResult hostData = new WebsocketResult();
+            iotPayloadObj.put(WebSocketConstants.ARGS,hostData );
+            hostData.setId(UUID.randomUUID().toString());
+            hostData.setTopic(TopicTypeEnums.formatUrl(TopicTypeEnums.PRODUCT_SERVICE_INVOKE, iotDeviceInfo.getDeviceProduct(),iotDeviceInfo.getDeviceCode()));
+            JSONObject hostHeaderObj = new JSONObject();
+            hostHeaderObj.put(WebSocketConstants.PRODUCT_NAME,iotDeviceInfo.getDeviceProduct());
+            hostHeaderObj.put(WebSocketConstants.DEVICE_NAME, iotDeviceInfo.getDeviceCode());
+            hostData.setHeaders(hostHeaderObj);
+
+            JSONObject hostPayloadObj = new JSONObject();
+            hostPayloadObj.put(WebSocketConstants.SERVICE, WebSocketConstants.GET_RECORD_INFOS_SERVICES);
+            JSONObject object = new JSONObject();
+            hostPayloadObj.put(WebSocketConstants.ARGS, object);
+            object.put("dvsCode", iotDeviceInfo.getHostCode());
+            object.put("index", iotDeviceInfo.getDeviceCode());
+            object.put("recordDate", Arrays.asList(DateUtil.format(DateUtil.offsetDay(new Date(),-1),Constants.DAILY_FORMAT)));
+            hostData.setPayload(hostPayloadObj);
+            log.info("发送录像机录像信息请求:{}", JacksonUtils.toJSONString(iotWebsocketResult));
+            WebSocketSessionHolder.sendAll(JacksonUtils.toJSONString(iotWebsocketResult));
+        }
 
     }
 

+ 2 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/iot/service/IIotDeviceInfoService.java

@@ -1,6 +1,7 @@
 package com.xunmei.mediator.iot.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.mediator.websocket.enums.DeviceTypeEnum;
 import com.xunmei.system.api.domain.iot.IotDeviceInfo;
 
 import java.util.List;
@@ -70,4 +71,5 @@ public interface IIotDeviceInfoService extends IService<IotDeviceInfo> {
     void deleteAlarmHostDeviceByToken(String token);
 
     void deleteAlarmHostAndDvsByToken(String token);
+    List<IotDeviceInfo> selectAllDeviceByDeviceType(List<DeviceTypeEnum> deviceType);
 }

+ 15 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/iot/service/impl/IotDeviceInfoServiceImpl.java

@@ -1,6 +1,7 @@
 package com.xunmei.mediator.iot.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -15,7 +16,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.Duration;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 @Slf4j
@@ -190,4 +193,16 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
         uw.lambda().set(IotDeviceInfo::getDeleted, 1);
         update(uw);
     }
+
+    @Override
+    public List<IotDeviceInfo> selectAllDeviceByDeviceType(List<DeviceTypeEnum> deviceType) {
+        if (ObjectUtil.isEmpty(deviceType)){
+            return new ArrayList<>();
+        }
+        List<String> collect = deviceType.stream().map(DeviceTypeEnum::getCode).collect(Collectors.toList());
+        LambdaQueryWrapper<IotDeviceInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(IotDeviceInfo::getDeviceType, collect);
+        wrapper.eq(IotDeviceInfo::getDeleted, 0);
+        return baseMapper.selectList(wrapper);
+    }
 }

+ 13 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/websocket/constant/WebSocketConstants.java

@@ -66,6 +66,10 @@ public interface WebSocketConstants {
      * 服务端主动请求 录像完整性 服务名称
      */
     String GET_RECORD_INFOS_SERVICES = "getRecordInfos";
+    /**
+     * 下行服务调用透传
+     */
+    String DOWN_LINK_SERVICE_PASS_THROUGH = "downlinkServicePassthrough";
 
     /**
      * 获取Dvs状态
@@ -157,5 +161,14 @@ public interface WebSocketConstants {
     String DVS="Dvs";
 
     String ALARM_HOST="AlarmHost";
+
     String FSU_GATEWAY="FSU_Gateway";
+
+    String IOT_SERVER="IoTServer";
+
+    String IOT_SERVER_DEVICE="IoTServerDevice";
+
+    String PRODUCT_NAME="productName";
+
+    String DEVICE_NAME="deviceName";
 }

+ 5 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/websocket/enums/TopicTypeEnums.java

@@ -72,4 +72,9 @@ public enum TopicTypeEnums {
         return null;
     }
 
+    public static String formatUrl(TopicTypeEnums enumEnums,String productName, String deviceName) {
+        return  String.format(enumEnums.getUrl(), productName, deviceName);
+
+    }
+
 }