Browse Source

添加视频回放接口

hexiao 1 năm trước cách đây
mục cha
commit
922df824bc

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

@@ -818,5 +818,19 @@ public class BaseCameraManagementController extends BaseController {
             return error("该相机编码在相机台账表中不存在");
         }
     }
+
+
+    @ApiOperation("播放回放-new")
+    @PostMapping("/api/record")
+    @Log(title = "相机台账管理", businessType = BusinessType.OTHER)
+    public AjaxResult record(@Validated @RequestBody BaseCameraResVo vo) {
+        LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
+        lw.eq(BaseCameraManagement::getCameraCode, vo.getCameraCode());
+        BaseCameraManagement one = baseCameraManagementService.getOne(lw);
+        if (ObjectUtils.isEmpty(one)) {
+            throw new BaseException("相机编号【" + vo.getCameraCode() + "】不存在");
+        }
+        return new AjaxResult(200, "ok", CameraUtil.getRecordList(one.getChannel(), vo.getStartTime(), vo.getEntTime()));
+    }
 }
 

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

@@ -675,4 +675,93 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.flv
             }
         }
     }
+
+
+    public static List<Map<String, Object>> getRecordList(String channel, Date startTm, Date endTm) {
+        return filterRecordList(channel, startTm, endTm, filePath, webUrl + "/webRecord/");
+    }
+
+
+    public static List<Map<String, Object>> filterRecordList(String channel,
+                                                             Date startTm,
+                                                             Date endTm,
+                                                             String mappingUrl,
+                                                             String webUrl) {
+        List<Map<String, Object>> rmaps = new ArrayList<>();
+
+        if (StringUtils.isBlank(channel)
+                || ObjectUtils.isEmpty(startTm)
+                || ObjectUtils.isEmpty(endTm)) {
+            return null;
+        }
+        Map<Date, Map<String, Object>> m = new HashMap<>();
+        // 调用视频服务返回参数
+        String startTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, startTm);
+        String endTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, endTm);
+
+        String param = "channel=" + channel + "&startTime=" + startTime + "&endTime=" + endTime;
+        String s = HttpUtils.sendGet(historyUrl + "/api/record/flv/list", param);
+        // 视频拼接
+        if (!StringUtils.isBlank(s) || "null".equals(s)) {
+            List<Map<String, Object>> maps = JSON.parseArray(s, Map.class);
+            if (ObjectUtils.isEmpty(maps)) {
+                return null;
+            }
+            for (Map<String, Object> map : maps) {
+                Object path = map.get("Path");
+                if (!ObjectUtils.isEmpty(path)) {
+                    String s1 = path.toString();
+                    String substring = s1.substring(s1.lastIndexOf("/") + 1, s1.length());
+                    String substring1 = substring.substring(0, substring.indexOf("-"));
+                    String[] s2 = substring1.split("_");
+                    if (!ObjectUtils.isEmpty(s2)) {
+                        Map<String, Object> mo = new HashMap<>();
+
+                        String s3 = s2[0] + s2[1];
+                        String s4 = s2[0] + s2[2];
+                        Date sdate = DateUtils.dateTime(DateUtils.YYYYMMDDHHMMSS, s3);
+                        if (s2[1].startsWith("23") && s2[2].startsWith("00")) {
+                            sdate = DateUtils.addDays(sdate, -1);
+                        }
+                        Date edate = DateUtils.dateTime(DateUtils.YYYYMMDDHHMMSS, s4);
+                        mo.put("startTime", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, sdate));
+                        mo.put("entTime", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, edate));
+                        mo.put("url", webUrl + path.toString());
+                        mo.put("path", mappingUrl + path.toString());
+                        mo.put("fileName", substring);
+                        /*     sdate  |startTm|  edate     |endTm| */
+                        if (startTm.compareTo(sdate) >= 0
+                                && startTm.compareTo(edate) <= 0
+                                && endTm.compareTo(edate) >= 0) {
+                            m.put(sdate, mo);
+                            /*  |startTm|   sdate    edate   |endTm| */
+                        } else if (startTm.compareTo(sdate) <= 0 && endTm.compareTo(edate) >= 0) {
+                            m.put(sdate, mo);
+
+                            /*  |startTm|   sdate     |endTm|  edate  */
+                        } else if (startTm.compareTo(sdate) <= 0
+                                && endTm.compareTo(sdate) >= 0
+                                && endTm.compareTo(edate) <= 0) {
+                            m.put(sdate, mo);
+
+                            /*  sdate |startTm|      |endTm| edate  */
+                        } else if (startTm.compareTo(sdate) >= 0 && endTm.compareTo(edate) <= 0) {
+                            m.put(sdate, mo);
+                        }
+                    }
+                }
+            }
+        }
+        if (!ObjectUtils.isEmpty(m) && m.size() > 0) {
+            Set<Date> dates = m.keySet();
+            // 排序
+            dates.stream().parallel().collect(Collectors.toList()).stream().sorted().forEach(d -> {
+
+                rmaps.add(m.get(d));
+            });
+            return rmaps;
+        }
+        return null;
+    }
+
 }