Browse Source

Merge branch 'master' of http://124.70.58.209:3000/ytrd-project-management/GeoHazardMonitor

gao.qiang 1 year ago
parent
commit
aeeb9fd164

+ 3 - 0
business-service/src/main/java/com/ozs/service/mapper/BaseCameraManagementMapper.java

@@ -6,6 +6,7 @@ import com.ozs.service.entity.MsgAlarm;
 import com.ozs.service.entity.vo.BaseCameraManagementVo;
 import com.ozs.service.entity.vo.MsgAlarmVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -23,4 +24,6 @@ public interface BaseCameraManagementMapper extends BaseMapper<BaseCameraManagem
     List<BaseCameraManagement> selectCameraManagementList(BaseCameraManagementVo baseCameraManagementVo);
 
     Integer countCamera(MsgAlarmVo msgAlarmVo);
+
+    String getCameraChannelByAlarmId(@Param("alarmId") String alarmId);
 }

+ 3 - 1
business-service/src/main/java/com/ozs/service/service/BaseCameraManagementService.java

@@ -29,7 +29,7 @@ public interface BaseCameraManagementService extends IService<BaseCameraManageme
     String importBaseAccountManagement(List<BaseCameraManagementVos> accountManageList, boolean updateSupport, String userId);
 
     List<BaseCameraManagementHomeVo> selectCameraAll(BaseCameraManagementVo baseCameraManagementVo);
-    
+
 //    List<String> getUserIds(String userId);
 
     List<String> getUserIdList(String userId);
@@ -37,4 +37,6 @@ public interface BaseCameraManagementService extends IService<BaseCameraManageme
     IPage<BaseCameraManagement> queryPage(BaseCameraManagementVo baseCameraManagementVo);
 
     List<BaseCameraManagement> baseCameraManagementList(BaseCameraManagementVo baseCameraManagementVo);
+
+    String getCameraChannelByAlarmId(String alarmId);
 }

+ 5 - 0
business-service/src/main/java/com/ozs/service/service/impl/BaseCameraManagementServiceImpl.java

@@ -309,4 +309,9 @@ public class BaseCameraManagementServiceImpl extends ServiceImpl<BaseCameraManag
     public List<BaseCameraManagement> baseCameraManagementList(BaseCameraManagementVo baseCameraManagementVo) {
         return baseCameraManagementMapper.selectCameraManagementList(baseCameraManagementVo);
     }
+
+    @Override
+    public String getCameraChannelByAlarmId(String alarmId) {
+        return baseCameraManagementMapper.getCameraChannelByAlarmId(alarmId);
+    }
 }

+ 11 - 2
business-service/src/main/resources/mapper/service/BaseCameraManagementMapper.xml

@@ -45,10 +45,10 @@
                 and
                 <trim prefix="(" prefixOverrides="or" suffix=")">
                 <if test="dsUserId != null and dsUserId != ''">
-                    or a.create_by=#{dsUserId}  
+                    or a.create_by=#{dsUserId}
                 </if>
                 <if test="dsDeptId != null and dsDeptId != 0">
-                    or  a.dept_id=#{dsDeptId}  
+                    or a.dept_id=#{dsDeptId}
                 </if>
                 <if test="dsDeptIds != null">
                     or a.dept_id in
@@ -83,4 +83,13 @@
             </if>
         </where>
     </select>
+
+
+    <select id="getCameraChannelByAlarmId" resultType="java.lang.String">
+        select b.channel
+        from msg_alarm ma
+                 left join
+             base_camera_management b on ma.camera_code = b.camera_code
+        where ma.alarm_id = #{alarmId}
+    </select>
 </mapper>

+ 20 - 0
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java

@@ -11,6 +11,7 @@ import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.common.core.domain.entity.SysDept;
 import com.ozs.common.core.domain.entity.SysUser;
 import com.ozs.common.core.domain.model.LoginUser;
+import com.ozs.common.core.redis.RedisCache;
 import com.ozs.common.enums.BusinessType;
 import com.ozs.common.exception.base.BaseException;
 import com.ozs.common.utils.ApiTokenUtils;
@@ -100,6 +101,8 @@ public class BaseCameraManagementController extends BaseController {
     private DataScoreUtil dataScoreUtil;
     @Resource
     private BaseUserService baseUserService;
+    @Autowired
+    private RedisCache redisCache;
 
     /**
      * 所有相机列表+权限
@@ -835,5 +838,22 @@ public class BaseCameraManagementController extends BaseController {
         }
         return new AjaxResult(200, "ok", CameraUtil.getRecordList(one.getChannel(), vo.getStartTime(), vo.getEntTime()));
     }
+
+    @ApiOperation("查询回放视频根据报警ID")
+    @GetMapping("/api/getRecordByAlarmId")
+    @Log(title = "相机台账管理", businessType = BusinessType.OTHER)
+    public AjaxResult getRecordByAlarmId(@RequestParam("alarmId") String alarmId) {
+        Object cacheObject = redisCache.getCacheObject("STREAMING_ALARM_VIDEO:" + alarmId);
+        Map<String, Object> wait_merge_video_alarm_id = redisCache.getCacheMap("WAIT_MERGE_VIDEO_ALARM_ID");
+        log.info("待合成视频的报警信息集合:{}", wait_merge_video_alarm_id);
+        if (!wait_merge_video_alarm_id.keySet().contains(alarmId)) {
+            return error("报警UUID:" + alarmId + ",是属于旧数据。请用新数据测试");
+        }
+        if (ObjectUtils.isEmpty(cacheObject)) {
+            return error("报警UUID:" + alarmId + ",没有视频录像");
+        }
+        return new AjaxResult(200, "ok", cacheObject);
+    }
+
 }
 

+ 10 - 0
hazard-admin/src/main/java/com/ozs/web/controller/tool/TestController.java

@@ -55,6 +55,16 @@ public class TestController extends BaseController {
         return R.ok();
     }
 
+    @GetMapping("/mergeVideo")
+    public R<String> mergeVideo() {
+        try {
+            cameraUtil.mergeVideo();
+        } catch (Exception e) {
+            return R.ok(e.getMessage().toString());
+        }
+        return R.ok();
+    }
+
     @ApiOperation("获取用户列表")
     @GetMapping("/list")
     public R<List<UserEntity>> userList() {

+ 42 - 0
hazard-admin/src/main/java/com/ozs/web/core/util/CameraUtil.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ozs.common.config.BaseConfig;
 import com.ozs.common.constant.Constants;
 import com.ozs.common.core.domain.entity.SysDictData;
+import com.ozs.common.core.redis.RedisCache;
 import com.ozs.common.exception.base.BaseException;
 import com.ozs.common.utils.DateUtils;
 import com.ozs.common.utils.http.HttpUtils;
@@ -63,6 +64,9 @@ public class CameraUtil {
 
     @Autowired
     private SysDictDataMapper dictDataMapper;
+
+    @Autowired
+    private RedisCache redisCache;
     @Resource
     BaseCameraManagementService baseCameraManagementService;
 
@@ -770,4 +774,42 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.flv
         return null;
     }
 
+
+    /**
+     * 定时合成视频
+     */
+    public void mergeVideo() {
+        Date date = new Date();
+        Calendar calendar = new GregorianCalendar();
+
+
+        Map<String, Object> alarmIdMap = redisCache.getCacheMap("WAIT_MERGE_VIDEO_ALARM_ID");
+        log.info("WAIT_MERGE_VIDEO_ALARM_ID:{}", alarmIdMap);
+        if (!ObjectUtils.isEmpty(alarmIdMap)) {
+            Set<String> alarmIds = alarmIdMap.keySet();
+            if (!ObjectUtils.isEmpty(alarmIds) && alarmIds.size() > 0) {
+                for (String alarmId : alarmIds) {
+                    Object oTime = alarmIdMap.get(alarmId);
+                    Date alarmTime = (Date) oTime;
+                    // 判断当前时间是否超过报警时间 20分钟
+                    calendar.setTime(alarmTime);
+                    calendar.add(calendar.MINUTE, 20); //把日期往后增加一天,整数  往后推,负数往前移动
+                    alarmTime = calendar.getTime(); //这个时间就是日期往后推一天的结果
+                    if (date.compareTo(alarmTime) > 0) {
+                        // 表示已经超过报警时间20分钟,可以合成视频
+                        String cameraChannelByAlarmId = baseCameraManagementService.getCameraChannelByAlarmId(alarmId);
+                        if (!StringUtils.isBlank(cameraChannelByAlarmId)) {
+                            log.info("报警UUID:{},相机通道:{},开始时间:{},结束时间:{}", alarmId, cameraChannelByAlarmId, (Date) oTime, date);
+                            String url = historyPlayListStr(cameraChannelByAlarmId, (Date) oTime, date);
+                            redisCache.setCacheObject("STREAMING_ALARM_VIDEO:" + alarmId, url);
+                            redisCache.expire("STREAMING_ALARM_VIDEO:" + alarmId, 365L, TimeUnit.DAYS);
+                            alarmIdMap.remove(alarmId);
+                        }
+                    }
+                }
+            }
+        }
+        redisCache.setCacheMap("WAIT_MERGE_VIDEO_ALARM_ID", alarmIdMap);
+
+    }
 }

+ 9 - 2
hazard-sdk/src/main/java/com/ozs/controller/upload/GeoHazardMonitorTokenController.java

@@ -3,6 +3,7 @@ package com.ozs.controller.upload;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ozs.common.core.redis.RedisCache;
 import com.ozs.common.utils.ApiTokenUtils;
 import com.ozs.common.utils.HttpClientUtil;
 import com.ozs.common.utils.StringUtils;
@@ -60,6 +61,8 @@ public class GeoHazardMonitorTokenController {
     private String sdkUrl;
     @Autowired
     private BaseUserService baseUserService;
+    @Autowired
+    private RedisCache redisCache;
 
     /**
      * 获取web访问令牌
@@ -73,7 +76,7 @@ public class GeoHazardMonitorTokenController {
         LambdaQueryWrapper<SvcAddress> lw = new LambdaQueryWrapper<SvcAddress>();
         if (!ObjectUtils.isEmpty(svcAddress.getClientId())) {
             lw.eq(SvcAddress::getClientId, svcAddress.getClientId());
-        }else {
+        } else {
             jsonObject.put("resultCode", 0);
             jsonObject.put("message", "失败");
             jsonObject.put("data", "客户端编号不能为空");
@@ -100,7 +103,7 @@ public class GeoHazardMonitorTokenController {
                     jsonObject.put("data", "生成token失败");
                     return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
                 }
-            }else {
+            } else {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "客户端密钥错误");
@@ -193,6 +196,10 @@ public class GeoHazardMonitorTokenController {
                 respMsgAlarmVo.setCameraCode(reqMsgAlarmVo.getAlarmCamera());
                 respMsgAlarmVo.setIsCancel(2);
                 respMsgAlarmVo.setCancelTime(null);
+                // 记录要合成报警视频的报警id
+                Map<String, Object> map = redisCache.getCacheMap("WAIT_MERGE_VIDEO_ALARM_ID");
+                map.put(msgAlarm.getAlarmId(), msgAlarm.getAlarmTime());
+                redisCache.setCacheMap("WAIT_MERGE_VIDEO_ALARM_ID", map);
             } else {
                 BeanUtils.copyProperties(reqMsgAlarmVo, msgAlarmVice);
                 String[] imageUrl = reqMsgAlarmVo.getImageUrls();