Kaynağa Gözat

视频播放地址

yangyue 2 yıl önce
ebeveyn
işleme
8720d0c759

+ 29 - 0
video/pom.xml

@@ -47,6 +47,35 @@
             <version>5.6.6</version>
         </dependency>
 
+
+        <!-- Mysql驱动包 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <version>1.1.22</version>
+        </dependency>
+
+        <!-- mybatis-plus -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.4.3</version>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-annotation</artifactId>
+            <version>3.4.3</version>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-extension</artifactId>
+            <version>3.4.3</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 4 - 0
video/src/main/java/cn/com/taiji/video/VideoApplication.java

@@ -1,8 +1,12 @@
 package cn.com.taiji.video;
 
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
 
+@MapperScan(basePackages = "cn.com.taiji.video.mapper")
 @SpringBootApplication
 public class VideoApplication {
 

+ 25 - 0
video/src/main/java/cn/com/taiji/video/config/MyBatisPlusConfig.java

@@ -0,0 +1,25 @@
+package cn.com.taiji.video.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @Description
+ *
+ * @Author  yangyue
+ * @Date 2023/7/24
+ */
+@Configuration
+@MapperScan("cn.com.taiji.openservice.mapper")
+public class MyBatisPlusConfig {
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+        return interceptor;
+    }
+}

+ 8 - 9
video/src/main/java/cn/com/taiji/video/cotroller/VideoUrlController.java

@@ -1,19 +1,13 @@
 package cn.com.taiji.video.cotroller;
 
 
+import cn.com.taiji.video.model.VideoDTO;
 import cn.com.taiji.video.service.IVideoUrlService;
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import javax.servlet.http.HttpServletResponse;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
 import java.util.List;
 
 
@@ -25,7 +19,12 @@ public class VideoUrlController {
     private IVideoUrlService urlService;
 
     @GetMapping("url")
-    public List<Object> queryUrl(String number) {
-        return urlService.httpsPost(number);
+    public void queryUrl(String number) {
+        urlService.httpsPost(number);
+    }
+
+    @GetMapping("record")
+    public List<VideoDTO> queryVideoList() {
+        return urlService.queryVideoList();
     }
 }

+ 26 - 0
video/src/main/java/cn/com/taiji/video/mapper/HtDpVideoMapper.java

@@ -0,0 +1,26 @@
+package cn.com.taiji.video.mapper;
+
+import cn.com.taiji.video.model.HtDpVideo;
+import cn.com.taiji.video.model.VideoDTO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @Description
+ *
+ * @Author  yangyue
+ * @Date 2023/7/24
+ */
+@Mapper
+public interface HtDpVideoMapper extends BaseMapper<HtDpVideo> {
+
+    /**
+     * 查询视频记录列表
+     *
+     * @return 视频记录集合
+     */
+    List<VideoDTO> selectVideoList();
+
+}

+ 45 - 0
video/src/main/java/cn/com/taiji/video/model/HtDpVideo.java

@@ -0,0 +1,45 @@
+package cn.com.taiji.video.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Description 河图视频记录表
+ *
+ * @Author  yangyue
+ * @Date 2023/7/24
+ */
+@Data
+@TableName("ht_dp_video")
+public class HtDpVideo implements Serializable {
+
+    /** 国标码 */
+    private String code;
+
+    /** 点位名称 */
+    private String name;
+
+    /** 所属区域名称 */
+    private String areaName;
+
+    /** 区域分类 */
+    private Integer areaType;
+
+    /** 播放地址 */
+    private String url;
+
+    /** 排序 */
+    private Integer sort;
+
+    /** rtsp播放地址 */
+    private String rtspUrl;
+
+    /** rtmp播放地址 */
+    private String rtmpUrl;
+
+    /** 页面播放地址 */
+    private String hlsUrl;
+
+}

+ 0 - 35
video/src/main/java/cn/com/taiji/video/model/Token.java

@@ -1,35 +0,0 @@
-package cn.com.taiji.video.model;
-
-import com.alibaba.fastjson.annotation.JSONField;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * @Description
- *
- * @Author  yangyue
- * @Date 2021/11/18
- */
-@Data
-public class Token implements Serializable {
-
-    /**
-     * 获取到的凭证
-     */
-    @JSONField(name = "access_token")
-    private String accessToken;
-
-    /**
-     * 凭证类型
-     */
-    @JSONField(name = "token_type")
-    private Integer tokenType;
-
-    /**
-     * 凭证有效时间
-     */
-    @JSONField(name = "expires_in")
-    private String expiresIn;
-
-}

+ 27 - 0
video/src/main/java/cn/com/taiji/video/model/VideoDTO.java

@@ -0,0 +1,27 @@
+package cn.com.taiji.video.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description 河图视频记录
+ *
+ * @Author  yangyue
+ * @Date 2023/7/24
+ */
+@Data
+public class VideoDTO implements Serializable {
+
+    /** 所属区域名称 */
+    private String areaName;
+
+    /** 区域分类 */
+    private Integer areaType;
+
+    /** 区域分类 */
+    private List<VideoRecord> viseoRecords;
+
+}

+ 35 - 0
video/src/main/java/cn/com/taiji/video/model/VideoRecord.java

@@ -0,0 +1,35 @@
+package cn.com.taiji.video.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Description 河图视频记录表
+ *
+ * @Author  yangyue
+ * @Date 2023/7/24
+ */
+@Data
+public class VideoRecord implements Serializable {
+
+    /** 国标码 */
+    private String code;
+
+    /** 点位名称 */
+    private String name;
+
+    /** 排序 */
+    private Integer sort;
+
+    /** rtsp播放地址 */
+    private String rtspUrl;
+
+    /** rtmp播放地址 */
+    private String rtmpUrl;
+
+    /** 页面播放地址 */
+    private String hlsUrl;
+
+}

+ 9 - 2
video/src/main/java/cn/com/taiji/video/service/IVideoUrlService.java

@@ -1,6 +1,8 @@
 package cn.com.taiji.video.service;
 
 
+import cn.com.taiji.video.model.VideoDTO;
+
 import java.util.List;
 
 /**
@@ -14,8 +16,13 @@ public interface IVideoUrlService {
     /**
      * 查询视频流地址
      * @param pre 海康入参
-     * @return List<Object>
      */
-    List<Object> httpsPost(String pre);
+    void httpsPost(String pre);
+
+    /**
+     * 查询视频记录
+     * @return List<VideoDTO>
+     */
+    List<VideoDTO> queryVideoList();
 
 }

+ 28 - 12
video/src/main/java/cn/com/taiji/video/service/impl/VideoUrlServiceImpl.java

@@ -1,12 +1,12 @@
 package cn.com.taiji.video.service.impl;
 
 
-import cn.com.taiji.video.model.Token;
+import cn.com.taiji.video.mapper.HtDpVideoMapper;
+import cn.com.taiji.video.model.HtDpVideo;
+import cn.com.taiji.video.model.VideoDTO;
 import cn.com.taiji.video.service.IVideoUrlService;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.hikvision.artemis.sdk.ArtemisHttpUtil;
-import com.hikvision.artemis.sdk.config.ArtemisConfig;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.*;
@@ -15,7 +15,7 @@ import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
 
-import java.util.HashMap;
+import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
 
@@ -32,10 +32,13 @@ public class VideoUrlServiceImpl implements IVideoUrlService {
     @Autowired
     private RestTemplate restTemplate;
 
+    @Autowired
+    private HtDpVideoMapper videoMapper;
+
     String url = "http://10.110.80.31:8888";
 
     @Override
-    public List<Object> httpsPost(String deviceids) {
+    public void httpsPost(String deviceids) {
         MultiValueMap<String,String> params = new LinkedMultiValueMap<>();
         params.add("client_id","5f1bf9b33df94328a559dfed33bf3605");
         params.add("client_secret","970f78a3c2704aa2be402933e558f371");
@@ -52,7 +55,7 @@ public class VideoUrlServiceImpl implements IVideoUrlService {
         log.info(token);
 
         //登录接口
-        String deviceUrl = url + "/api/CommonApi/GeMonitorListByDeviceId?client_id=5f1bf9b33df94328a559dfed33bf3605&deviceids="+deviceids;
+        String deviceUrl = url + "/api/Common/GeMonitorListByDeviceId?client_id=5f1bf9b33df94328a559dfed33bf3605&deviceids="+deviceids;
 
         headers.clear();
         headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
@@ -60,12 +63,25 @@ public class VideoUrlServiceImpl implements IVideoUrlService {
         HttpEntity reqEntity = new HttpEntity(headers);
         log.info(deviceUrl);
         ResponseEntity<List> mainServiceEntity = restTemplate.exchange(deviceUrl, HttpMethod.GET, reqEntity,List.class);
-        log.info(JSON.toJSONString(mainServiceEntity.getBody()));
+        // log.info(JSON.toJSONString(mainServiceEntity.getBody()));
         // return mainServiceEntity.getBody();
-        List<Object> datas = (List<Object>) mainServiceEntity.getBody();
-        if (null == datas || datas.size() == 0) {
-            return null;
+        List<Map> datas = (List<Map>) mainServiceEntity.getBody();
+        if (null != datas && datas.size() > 0) {
+            datas.forEach(o -> {
+                videoMapper.update(
+                        null,
+                        Wrappers.<HtDpVideo>lambdaUpdate()
+                                .set(HtDpVideo::getRtspUrl, o.get("RtspUrl"))
+                                .set(HtDpVideo::getRtmpUrl, o.get("RtmpUrl"))
+                                .set(HtDpVideo::getHlsUrl, o.get("HLSUrl"))
+                                .eq(HtDpVideo::getCode, o.get("DeviceID"))
+                );
+            });
         }
-        return datas;
+    }
+
+    @Override
+    public List<VideoDTO> queryVideoList() {
+        return videoMapper.selectVideoList();
     }
 }

+ 58 - 1
video/src/main/resources/application.yml

@@ -1,2 +1,59 @@
 server:
-  port: 9009
+  port: 9009
+
+spring:
+  # 数据源配置
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      driverClassName: com.mysql.cj.jdbc.Driver
+      url: jdbc:mysql://10.110.49.2:45371/ztpt?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true
+      username: root
+      password: Taiji@2023
+      # 初始连接数
+      initialSize: 5
+      # 最小连接池数量
+      minIdle: 10
+      # 最大连接池数量
+      maxActive: 20
+      # 配置获取连接等待超时的时间
+      maxWait: 60000
+      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+      timeBetweenEvictionRunsMillis: 60000
+      # 配置一个连接在池中最小生存的时间,单位是毫秒
+      minEvictableIdleTimeMillis: 300000
+      # 配置一个连接在池中最大生存的时间,单位是毫秒
+      maxEvictableIdleTimeMillis: 9000000
+      # 配置检测连接是否有效
+      validationQuery: SELECT 1 FROM DUAL
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter.enabled: false
+      statViewServlet.enabled: false
+
+# MyBatis配置
+mybatis-plus:
+  # 搜索指定包别名
+  typeAliasesPackage: cn.com.taiji.**.model
+  # 配置mapper的扫描,找到所有的mapper.xml映射文件
+  mapperLocations: classpath*:mapper/**/*Mapper.xml
+  #  mapperLocations: classpath*:cn/com/taiji/video/mapper/mapping/*Mapping.xml
+  # 加载全局的配置文件
+  # configLocation: classpath:mybatis/mybatis-config.xml
+  configuration:
+    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
+    #    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    # 返回类型为Map,显示null对应的字段
+    call-setters-on-nulls: true
+  global-config:
+    db-config:
+      # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
+      logic-delete-field: delFlag
+      # 逻辑已删除值(默认为 1)
+      logic-delete-value: 1
+      # 逻辑未删除值(默认为 0)
+      logic-not-delete-value: 0
+      id-type: assign_id
+      update-strategy: not_empty
+    banner: false   # 不打印banner

+ 45 - 0
video/src/main/resources/mapper/HtDpVideoMapper.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.taiji.video.mapper.HtDpVideoMapper">
+    <resultMap type="HtDpVideo" id="HtDpVideoResult">
+        <result property="code" column="code"/>
+        <result property="name" column="name"/>
+        <result property="areaName" column="area_name"/>
+        <result property="areaType" column="area_type"/>
+        <result property="url" column="url"/>
+        <result property="sort" column="sort"/>
+        <result property="rtspUrl" column="rtsp_url"/>
+        <result property="rtmpUrl" column="rtmp_url"/>
+        <result property="hlsUrl" column="hls_url"/>
+    </resultMap>
+
+    <resultMap type="VideoDTO" id="VideoDTOResult">
+        <result property="areaName" column="area_name"/>
+        <result property="areaType" column="area_type"/>
+        <collection property="viseoRecords" ofType="VideoRecord" select="selectViseoRecords" column="areaType = area_type"/>
+    </resultMap>
+
+    <resultMap type="VideoRecord" id="ViseoRecordResult">
+        <result property="code" column="code"/>
+        <result property="name" column="name"/>
+        <result property="sort" column="sort"/>
+        <result property="rtspUrl" column="rtsp_url"/>
+        <result property="rtmpUrl" column="rtmp_url"/>
+        <result property="hlsUrl" column="hls_url"/>
+    </resultMap>
+
+    <select id="selectVideoList" resultMap="VideoDTOResult">
+        select area_name,area_type from ht_dp_video
+        group by area_name,area_type
+        order by area_type
+    </select>
+
+    <select id="selectViseoRecords" resultMap="ViseoRecordResult">
+        select code,name,sort,rtsp_url,rtmp_url,hls_url from ht_dp_video
+        where area_type = #{areaType}
+        order by sort
+    </select>
+
+</mapper>