Browse Source

报警视频回放修改逻辑

hexiao 1 year ago
parent
commit
b3eac2a284

+ 2 - 0
business-service/src/main/java/com/ozs/service/mapper/MsgAlarmMapper.java

@@ -50,4 +50,6 @@ public interface MsgAlarmMapper extends BaseMapper<MsgAlarm> {
     Integer countJC(MsgAlarmVo msgAlarmVo);
 
     Integer countWJC(MsgAlarmVo msgAlarmVo);
+
+    List<MsgAlarm> queryAlarmInfoByAfterTenMinute();
 }

+ 2 - 0
business-service/src/main/java/com/ozs/service/service/MsgAlarmService.java

@@ -55,4 +55,6 @@ public interface MsgAlarmService extends IService<MsgAlarm> {
     Integer appAlarmNum(MsgAlarmVo msgAlarmVo);
 
     List<MsgAlarm> msgAlarmList(MsgAlarmVo msgAlarmVo);
+
+    List<MsgAlarm> queryAlarmInfoByAfterTenMinute();
 }

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

@@ -142,4 +142,9 @@ public class MsgAlarmServiceImpl extends ServiceImpl<MsgAlarmMapper, MsgAlarm> i
     public List<MsgAlarm> msgAlarmList(MsgAlarmVo msgAlarmVo) {
         return msgAlarmMapper.selectMsgAlarmList(msgAlarmVo);
     }
+
+    @Override
+    public List<MsgAlarm> queryAlarmInfoByAfterTenMinute() {
+        return msgAlarmMapper.queryAlarmInfoByAfterTenMinute();
+    }
 }

+ 56 - 21
business-service/src/main/resources/mapper/service/MsgAlarmMapper.xml

@@ -216,11 +216,17 @@
         group by a.alarm_id) AS p group by p.daysta order by p.daysta
     </select>
     <select id="selectCameraCode" parameterType="java.lang.String" resultType="java.lang.Integer">
-        select is_lock from msg_alarm where camera_code = #{cameraCode} ORDER BY alarm_time DESC LIMIT 1
+        select is_lock
+        from msg_alarm
+        where camera_code = #{cameraCode}
+        ORDER BY alarm_time DESC LIMIT 1
     </select>
 
     <select id="selectByCameraCode" parameterType="java.lang.String" resultType="com.ozs.service.entity.MsgAlarm">
-        select * from msg_alarm where camera_code = #{cameraCode} order by alarm_time desc limit 1
+        select *
+        from msg_alarm
+        where camera_code = #{cameraCode}
+        order by alarm_time desc limit 1
     </select>
     <select id="selectMsgAlarmList" resultType="com.ozs.service.entity.MsgAlarm"
             parameterType="com.ozs.service.entity.vo.MsgAlarmVo">
@@ -231,7 +237,7 @@
         a.line_dir AS lineDir,
         a.alarm_type AS alarmType,
         a.camera_code AS cameraCode,
-        a.id  AS id,
+        a.id AS id,
         a.content AS content,
         a.alarm_confidence AS alarmConfidence,
         a.alarm_attr AS alarmAttr,
@@ -243,9 +249,9 @@
         a.released_reason AS releasedReason,
         a.remark AS remark
         FROM
-        msg_alarm AS a  join
+        msg_alarm AS a join
         base_camera_management AS b on a.camera_code=b.camera_code join
-        base_railway_management AS l  on  b.railway_code=l.railway_code
+        base_railway_management AS l on b.railway_code=l.railway_code
         <where>
             <if test="railwayCode != null and railwayCode != ''">
                 concat(l.railway_name,l.railway_code)
@@ -260,18 +266,18 @@
             <if test="!dsFlay">
                 and
                 <trim prefix="(" prefixOverrides="or" suffix=")">
-                <if test="dsUserId != null and dsUserId != ''">
-                    or  a.create_by=#{dsUserId}
-                </if>
-                <if test="dsDeptId != null and dsDeptId != 0">
-                    or b.dept_id=#{dsDeptId}
-                </if>
-                <if test="dsDeptIds != null">
-                    or b.dept_id in
-                    <foreach item="item" collection="dsDeptIds" separator="," open="(" close=")" index="">
-                        #{item}
-                    </foreach>
-                </if>
+                    <if test="dsUserId != null and dsUserId != ''">
+                        or a.create_by=#{dsUserId}
+                    </if>
+                    <if test="dsDeptId != null and dsDeptId != 0">
+                        or b.dept_id=#{dsDeptId}
+                    </if>
+                    <if test="dsDeptIds != null">
+                        or b.dept_id in
+                        <foreach item="item" collection="dsDeptIds" separator="," open="(" close=")" index="">
+                            #{item}
+                        </foreach>
+                    </if>
                 </trim>
             </if>
             <if test="alarmType != null and alarmType != 0">
@@ -296,11 +302,13 @@
                 AND date_format(a.alarm_time,'%Y-%m-%d') &lt;= date_format(#{endAlarmTime},'%Y-%m-%d')
             </if>
         </where>
-        order by  a.alarm_time desc
+        order by a.alarm_time desc
     </select>
 
     <select id="getByAlarmId" resultType="com.ozs.service.entity.MsgAlarm" parameterType="java.lang.String">
-        select * from msg_alarm where alarm_id = #{alarmId}
+        select *
+        from msg_alarm
+        where alarm_id = #{alarmId}
     </select>
 
     <select id="countMsg" parameterType="com.ozs.service.entity.vo.MsgAlarmVo" resultType="java.lang.Integer">
@@ -327,7 +335,7 @@
     </select>
 
     <select id="countJC" parameterType="com.ozs.service.entity.vo.MsgAlarmVo" resultType="java.lang.Integer">
-        select count(1) from msg_alarm AS a  join base_camera_management AS b on a.camera_code=b.camera_code
+        select count(1) from msg_alarm AS a join base_camera_management AS b on a.camera_code=b.camera_code
         <where>
             is_lock = 1
             <if test="!dsFlay">
@@ -351,7 +359,7 @@
     </select>
 
     <select id="countWJC" parameterType="com.ozs.service.entity.vo.MsgAlarmVo" resultType="java.lang.Integer">
-        select count(1) from msg_alarm AS a  join base_camera_management AS b on a.camera_code=b.camera_code
+        select count(1) from msg_alarm AS a join base_camera_management AS b on a.camera_code=b.camera_code
         <where>
             is_lock = 2
             <if test="!dsFlay">
@@ -373,4 +381,31 @@
             </if>
         </where>
     </select>
+
+
+    <select id="queryAlarmInfoByAfterTenMinute" resultType="com.ozs.service.entity.MsgAlarm">
+        SELECT a.id               as id,
+               a.alarm_id         AS alarmId,
+               a.alarm_time       AS alarmTime,
+               a.alarm_mile       AS alarmMile,
+               a.line_dir         AS lineDir,
+               a.alarm_type       AS alarmType,
+               a.camera_code      AS cameraCode,
+               a.id               AS id,
+               a.content          AS content,
+               a.alarm_confidence AS alarmConfidence,
+               a.alarm_attr       AS alarmAttr,
+               a.image_url        AS imageUrl,
+               a.released_by      AS releasedBy,
+               a.is_lock          AS isLock,
+               a.released_time    AS releasedTime,
+               a.released_type    AS releasedType,
+               a.released_url     AS releasedUrl,
+               a.released_reason  AS releasedReason,
+               a.remark           AS remark
+        from msg_alarm AS a
+        where a.is_lock = 2
+          and a.released_url is not null
+          and a.alarm_time &lt;= DATE_SUB(NOW(), INTERVAL 10 MINUTE)
+    </select>
 </mapper>

+ 3 - 18
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java

@@ -3,18 +3,13 @@ package com.ozs.web.controller.accountmanagment;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ozs.common.annotation.Log;
-import com.ozs.common.config.BaseConfig;
 import com.ozs.common.core.controller.BaseController;
 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;
 import com.ozs.common.utils.AppendUtils;
 import com.ozs.common.utils.ChineseToPingyin;
 import com.ozs.common.utils.IdempotenceUtils;
@@ -62,12 +57,8 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.NotNull;
 import java.io.InputStream;
-import java.text.Collator;
-import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * <p>
@@ -820,7 +811,7 @@ public class BaseCameraManagementController extends BaseController {
                     log.info("publish--------" + objects);
                     msgAlarmResp.setImageUrls(objects);
                 }
-            }else {
+            } else {
                 msgAlarmResp.setFailureToAlarm(2);
             }
             BeanUtils.copyProperties(baseCameraManagement, msgAlarmResp);
@@ -864,7 +855,6 @@ public class BaseCameraManagementController extends BaseController {
         wrapper.eq(MsgAlarm::getAlarmId, alarmId);
         MsgAlarm msgAlarm = msgAlarmService.getOne(wrapper);
         if (ObjectUtils.isEmpty(msgAlarm.getReleasedUrl())) {
-            // 表示已经超过报警时间20分钟,可以合成视频
             Map<String, Object> map = baseCameraManagementService.getCameraChannelByAlarmId(alarmId);
             if (!ObjectUtils.isEmpty(map)
                     && map.size() > 0
@@ -877,19 +867,14 @@ public class BaseCameraManagementController extends BaseController {
                             true);
                     msgAlarm.setReleasedUrl(url);
                     msgAlarmService.updateById(msgAlarm);
-                } else {
-                    url = com.ozs.web.core.util.CameraUtil.historyPlayListStr(map.get("channel").toString(),
-                            (Date) map.get("alarmTime"),
-                            new Date(),
-                            false);
                 }
-                return new AjaxResult(200, "ok",serverConfig.getUrl()+url);
+                return error("报警ID为:【" + alarmId + "】的相机信息还未生成报警回放视频");
             } else {
                 return error("报警ID为:【" + alarmId + "】的相机信息不存在");
             }
 
         } else {
-            return new AjaxResult(200, "ok", serverConfig.getUrl()+msgAlarm.getReleasedUrl());
+            return new AjaxResult(200, "ok", serverConfig.getUrl() + msgAlarm.getReleasedUrl());
         }
     }
 

+ 2 - 1
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmController.java

@@ -386,6 +386,7 @@ public class MsgAlarmController extends BaseController {
         }
     }
 
+    // todo  需要测试 验证 是否合成视频
     @PutMapping(value = "/updateIsLock")
     @ApiOperation("根据报警信息ID解除报警")
     @Log(title = "报警信息管理", businessType = BusinessType.UPDATE)
@@ -413,7 +414,7 @@ public class MsgAlarmController extends BaseController {
             url = CameraUtil.historyPlayListStr(baseCameraManagement.getChannel(),
                     msgAlarm.getAlarmTime(),
                     msgAlarm.getReleasedTime(),
-                    false);
+                    true);
         } catch (Exception exception) {
             log.error(exception.getMessage());
         }

+ 16 - 40
hazard-admin/src/main/java/com/ozs/web/core/util/CameraUtil.java

@@ -12,7 +12,9 @@ import com.ozs.common.utils.DateUtils;
 import com.ozs.common.utils.http.HttpUtils;
 import com.ozs.framework.config.ServerConfig;
 import com.ozs.service.entity.BaseCameraManagement;
+import com.ozs.service.entity.MsgAlarm;
 import com.ozs.service.service.BaseCameraManagementService;
+import com.ozs.service.service.MsgAlarmService;
 import com.ozs.system.mapper.SysDictDataMapper;
 import com.ozs.web.core.config.CaneraConfig;
 import lombok.SneakyThrows;
@@ -54,8 +56,6 @@ public class CameraUtil {
     private static RedisCache rc;
     private static ServerConfig sc;
 
-    public final static String mvkey = "WAIT_MERGE_VIDEO_ALARM_ID";
-
     public final static String tsFilekey = "mergeVideoTsFile";
 
     // 相机配置
@@ -77,7 +77,8 @@ public class CameraUtil {
     // redis
     @Autowired
     private ServerConfig serverConfig;
-
+    @Autowired
+    private MsgAlarmService msgAlarmService;
 
     @Resource
     BaseCameraManagementService baseCameraManagementService;
@@ -766,46 +767,21 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
      * ----------------------------废弃
      */
     public void mergeVideo() {
-        Date date = new Date();
-        Calendar calendar = new GregorianCalendar();
-        Map<String, Object> alarmIdMap = redisCache.getCacheMap(mvkey);
-        List<String> dl = new ArrayList<>();
-        log.info("WAIT_MERGE_VIDEO_ALARM_ID:{}", alarmIdMap);
-        if (!ObjectUtils.isEmpty(alarmIdMap)) {
-            Set<String> alarmIds = alarmIdMap.keySet();
-            log.info("mergeVideo方法:alarmIds:{}", alarmIds);
-            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分钟,可以合成视频
-                        Map<String, Object> map = baseCameraManagementService.getCameraChannelByAlarmId(alarmId);
-                        if (!StringUtils.isBlank(map.get("channel").toString())) {
-                            log.info("报警UUID:{},相机通道:{},开始时间:{},结束时间:{}", alarmId, map.get("channel").toString(), (Date) oTime, date);
-                            String url = historyPlayListStr(map.get("channel").toString(), (Date) oTime, date, false);
-
-                            redisCache.setCacheObject("STREAMING_ALARM_VIDEO:" + alarmId, url);
-                            redisCache.expire("STREAMING_ALARM_VIDEO:" + alarmId, 365L, TimeUnit.DAYS);
-                            dl.add(alarmId);
-                        }
-                    }
+        // todo 查询没有URl 和 未解除的 报警信息  且过报警时间10 分钟
+        List<MsgAlarm> msgAlarms = msgAlarmService.queryAlarmInfoByAfterTenMinute();
+        if (!ObjectUtils.isEmpty(msgAlarms)) {
+            for (MsgAlarm msgAlarm : msgAlarms) {
+                // 表示已经超过报警时间10分钟,且没有解除报警、也没有报警Url 的可以合成视频
+                Map<String, Object> map = baseCameraManagementService.getCameraChannelByAlarmId(msgAlarm.getAlarmId());
+                if (!StringUtils.isBlank(map.get("channel").toString())) {
+                    log.info("报警UUID:{},相机通道:{},开始时间:{},结束时间:{}", msgAlarm.getAlarmId(), map.get("channel").toString(), (Date) oTime, date);
+                    String url = historyPlayListStr(map.get("channel").toString(), msgAlarm.getAlarmTime(), new Date(), false);
+                    MsgAlarm byId = msgAlarmService.getById(msgAlarm.getId());
+                    byId.setReleasedUrl(url);
+                    msgAlarmService.updateById(byId);
                 }
             }
         }
-        if (dl.size() > 0) {
-            for (String s : dl) {
-                alarmIdMap.remove(s);
-            }
-        }
-        log.info("删除后的alarmIdMap:{}", alarmIdMap);
-        redisCache.deleteObject(mvkey);
-        redisCache.setCacheMap(mvkey, alarmIdMap);
-
     }