xujunwei 1 год назад
Родитель
Сommit
7a04cd9a7b

+ 22 - 0
src/main/java/com/genersoft/iot/vmp/extend/controller/ExtendDeviceController.java

@@ -1,10 +1,13 @@
 package com.genersoft.iot.vmp.extend.controller;
 
 import com.genersoft.iot.vmp.extend.dto.ExtendDevicePageDto;
+import com.genersoft.iot.vmp.extend.dto.ExtendRecordPageDto;
 import com.genersoft.iot.vmp.extend.entity.ExtendDevice;
 import com.genersoft.iot.vmp.extend.entity.ExtendDeviceChannel;
+import com.genersoft.iot.vmp.extend.entity.ExtendRecord;
 import com.genersoft.iot.vmp.extend.service.ExtendDeviceChannelService;
 import com.genersoft.iot.vmp.extend.service.ExtendDeviceService;
+import com.genersoft.iot.vmp.extend.service.ExtendRecordService;
 import com.genersoft.iot.vmp.vmanager.bean.StreamContent;
 import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
 import com.genersoft.iot.vmp.vmanager.gb28181.play.PlayController;
@@ -28,6 +31,9 @@ public class ExtendDeviceController {
     @Resource
     private ExtendDeviceChannelService deviceChannelService;
 
+    @Resource
+    private ExtendRecordService recordService;
+
     @Resource
     private PlayController playController;
 
@@ -98,4 +104,20 @@ public class ExtendDeviceController {
         ptzController.ptz(deviceId,channelId,command,horizonSpeed,verticalSpeed,zoomSpeed);
     }
 
+    /**
+     * 历史视频分页查询
+     * @param dto
+     * @return
+     */
+    @PostMapping("/recordPage")
+    public PageInfo<ExtendRecord> recordPage(@RequestBody ExtendRecordPageDto dto) {
+        if (dto.getPageNum() == 0) {
+            dto.setPageNum(1);
+        }
+        if (dto.getPageSize() == 0) {
+            dto.setPageSize(10);
+        }
+        return recordService.page(dto);
+    }
+
 }

+ 26 - 0
src/main/java/com/genersoft/iot/vmp/extend/dto/ExtendRecordPageDto.java

@@ -0,0 +1,26 @@
+package com.genersoft.iot.vmp.extend.dto;
+
+import com.github.pagehelper.PageInfo;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class ExtendRecordPageDto extends PageInfo {
+
+    /**
+     * 设备id
+     */
+    private String deviceId;
+
+    /**
+     * 渠道id
+     */
+    private String channelId;
+
+    /**
+     * 视频日期 格式:2024-09-14
+     */
+    private String date;
+
+}

+ 102 - 0
src/main/java/com/genersoft/iot/vmp/extend/entity/ExtendRecord.java

@@ -0,0 +1,102 @@
+package com.genersoft.iot.vmp.extend.entity;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.genersoft.iot.vmp.service.bean.DownloadFileInfo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+
+@Schema(description = "历史视频")
+@TableName("wvp_cloud_record")
+@Data
+public class ExtendRecord {
+
+    /**
+     * 主键
+     */
+    private int id;
+
+    /**
+     * 应用名
+     */
+    private String app;
+
+    /**
+     * 流
+     */
+    private String stream;
+
+    /**
+     * 健全ID
+     */
+    private String callId;
+
+    /**
+     * 开始时间
+     */
+    private long startTime;
+
+    /**
+     * 结束时间
+     */
+    private long endTime;
+
+    /**
+     * ZLM Id
+     */
+    private String mediaServerId;
+
+    /**
+     * 文件名称
+     */
+    private String fileName;
+
+    /**
+     * 文件路径
+     */
+    private String filePath;
+
+    /**
+     * 文件夹
+     */
+    private String folder;
+
+    /**
+     * 收藏,收藏的文件不移除
+     */
+    private Boolean collect;
+
+    /**
+     * 文件大小
+     */
+    private long fileSize;
+
+    /**
+     * 文件时长
+     */
+    private long timeLen;
+
+    /**
+     * 下载文件信息
+     */
+    @TableField(exist = false)
+    private DownloadFileInfo downloadFileInfo;
+
+    /**
+     * 开始时间字符串
+     */
+    public String getStartTimeStr() {
+        return DateUtil.formatDateTime(new Date(startTime));
+    }
+
+    /**
+     * 结束时间字符串
+     */
+    public String getEndTimeStr() {
+        return DateUtil.formatDateTime(new Date(endTime));
+    }
+
+}

+ 7 - 0
src/main/java/com/genersoft/iot/vmp/extend/mapper/ExtendRecordMapper.java

@@ -0,0 +1,7 @@
+package com.genersoft.iot.vmp.extend.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.genersoft.iot.vmp.extend.entity.ExtendRecord;
+
+public interface ExtendRecordMapper extends BaseMapper<ExtendRecord> {
+}

+ 75 - 0
src/main/java/com/genersoft/iot/vmp/extend/service/ExtendRecordService.java

@@ -0,0 +1,75 @@
+package com.genersoft.iot.vmp.extend.service;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.genersoft.iot.vmp.extend.dto.ExtendRecordPageDto;
+import com.genersoft.iot.vmp.extend.entity.ExtendRecord;
+import com.genersoft.iot.vmp.extend.mapper.ExtendRecordMapper;
+import com.genersoft.iot.vmp.media.bean.MediaServer;
+import com.genersoft.iot.vmp.media.service.IMediaServerService;
+import com.genersoft.iot.vmp.utils.CloudRecordUtils;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class ExtendRecordService extends ServiceImpl<ExtendRecordMapper, ExtendRecord> {
+
+    @Autowired
+    private IMediaServerService mediaServerService;
+
+    /**
+     * 分页查询
+     * @param dto
+     * @return
+     */
+    public PageInfo<ExtendRecord> page(ExtendRecordPageDto dto) {
+        PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
+        LambdaQueryWrapper<ExtendRecord> lqw = new LambdaQueryWrapper<>();
+        if(StrUtil.isNotBlank(dto.getDeviceId())) {
+            if(StrUtil.isNotBlank(dto.getChannelId())) {
+                lqw.eq(ExtendRecord :: getStream,dto.getDeviceId()+"_"+dto.getChannelId());
+            }
+            else {
+                lqw.likeRight(ExtendRecord :: getStream,dto.getDeviceId()+"_");
+            }
+        }
+        else {
+            if(StrUtil.isNotBlank(dto.getChannelId())) {
+                lqw.likeLeft(ExtendRecord :: getStream,"_"+dto.getChannelId());
+            }
+        }
+        if(StrUtil.isNotBlank(dto.getDate())) {
+            Date date = DateUtil.parse(dto.getDate(),"yyyy-MM-dd");
+            long dateStart = date.getTime();
+            long dateEnd = dateStart + 1000l*60*60*24 -1;
+            lqw.and((wrapper)->{
+                wrapper.between(ExtendRecord :: getStartTime,dateStart,dateEnd);
+                wrapper.or().between(ExtendRecord :: getEndTime,dateStart,dateEnd);
+            });
+        }
+        List<ExtendRecord> rsList = list(lqw);
+
+        // 填充播放完整路径
+        Map<String,MediaServer> mediaServerMap = new HashMap<>();
+        for(ExtendRecord temp : rsList) {
+            String mediaServerId = temp.getMediaServerId();
+            MediaServer mediaServer = mediaServerMap.get(mediaServerId);
+            if(mediaServer == null) {
+                mediaServer = mediaServerService.getOne(mediaServerId);
+                mediaServerMap.put(mediaServerId,mediaServer);
+            }
+            temp.setDownloadFileInfo(CloudRecordUtils.getDownloadFilePath(mediaServer, temp.getFilePath()));
+        }
+        return new PageInfo<>(rsList);
+    }
+
+}

+ 1 - 1
src/main/resources/application-local.yml

@@ -60,7 +60,7 @@ sip:
   # 如果要监听多张网卡,可以使用逗号分隔多个IP, 例如: 192.168.1.4,10.0.0.4
   # 如果不明白,就使用0.0.0.0,大部分情况都是可以的
   # 请不要使用127.0.0.1,任何包括localhost在内的域名都是不可以的。
-  ip: 10.11.20.68
+  ip: 10.11.20.94
   # [可选] 28181服务监听的端口
   port: 8116
   # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)