Commit e2e22b46ba8911faa509982d6a6bbc4697e900a5

Authored by 王鑫
1 parent 93d6404b

fix():添加历史回放视频上传和下载

Showing 79 changed files with 449 additions and 557 deletions

Too many changes to show.

To preserve performance only 79 of 80 files are displayed.

@@ -155,10 +155,29 @@ @@ -155,10 +155,29 @@
155 </exclusions> 155 </exclusions>
156 </dependency> 156 </dependency>
157 <dependency> 157 <dependency>
  158 + <groupId>org.mybatis</groupId>
  159 + <artifactId>mybatis</artifactId>
  160 + <version>3.5.16</version>
  161 + </dependency>
  162 + <dependency>
158 <groupId>org.springframework.boot</groupId> 163 <groupId>org.springframework.boot</groupId>
159 <artifactId>spring-boot-starter-security</artifactId> 164 <artifactId>spring-boot-starter-security</artifactId>
160 </dependency> 165 </dependency>
161 166
  167 + <!-- mybatis-plus -->
  168 + <dependency>
  169 + <groupId>com.baomidou</groupId>
  170 + <artifactId>mybatis-plus-boot-starter</artifactId>
  171 + <version>3.5.5</version>
  172 + </dependency>
  173 +
  174 + <!-- mybatis-plus-join -->
  175 + <dependency>
  176 + <groupId>com.github.yulichang</groupId>
  177 + <artifactId>mybatis-plus-join-boot-starter</artifactId>
  178 + <version>1.5.2</version>
  179 + </dependency>
  180 +
162 <dependency> 181 <dependency>
163 <groupId>org.springframework.boot</groupId> 182 <groupId>org.springframework.boot</groupId>
164 <artifactId>spring-boot-starter-jdbc</artifactId> 183 <artifactId>spring-boot-starter-jdbc</artifactId>
src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java
@@ -24,7 +24,7 @@ import java.util.Objects; @@ -24,7 +24,7 @@ import java.util.Objects;
24 /** 24 /**
25 * 启动类 25 * 启动类
26 */ 26 */
27 -@ServletComponentScan("com.genersoft.iot.vmp.conf") 27 +
28 @SpringBootApplication 28 @SpringBootApplication
29 @EnableScheduling 29 @EnableScheduling
30 @ForestScan(basePackages = "com.genersoft.iot.vmp.vmanager.jt1078.platform.remote") 30 @ForestScan(basePackages = "com.genersoft.iot.vmp.vmanager.jt1078.platform.remote")
src/main/java/com/genersoft/iot/vmp/conf/ApiAccessFilter.java
1 package com.genersoft.iot.vmp.conf; 1 package com.genersoft.iot.vmp.conf;
2 2
3 import com.genersoft.iot.vmp.common.ApiSaveConstant; 3 import com.genersoft.iot.vmp.common.ApiSaveConstant;
4 -import com.genersoft.iot.vmp.conf.security.IpWhitelistFilter;  
5 import com.genersoft.iot.vmp.conf.security.SecurityUtils; 4 import com.genersoft.iot.vmp.conf.security.SecurityUtils;
6 -import com.genersoft.iot.vmp.conf.security.WebSecurityConfig;  
7 import com.genersoft.iot.vmp.service.ILogService; 5 import com.genersoft.iot.vmp.service.ILogService;
8 -import com.genersoft.iot.vmp.storager.dao.dto.LogDto; 6 +import com.genersoft.iot.vmp.storager.mapper.dto.LogDto;
9 import com.genersoft.iot.vmp.utils.DateUtil; 7 import com.genersoft.iot.vmp.utils.DateUtil;
10 import org.apache.commons.lang3.StringUtils; 8 import org.apache.commons.lang3.StringUtils;
11 import org.slf4j.Logger; 9 import org.slf4j.Logger;
src/main/java/com/genersoft/iot/vmp/conf/CloudRecordTimer.java
@@ -2,13 +2,11 @@ package com.genersoft.iot.vmp.conf; @@ -2,13 +2,11 @@ package com.genersoft.iot.vmp.conf;
2 2
3 3
4 import com.alibaba.fastjson2.JSONObject; 4 import com.alibaba.fastjson2.JSONObject;
5 -import com.genersoft.iot.vmp.media.zlm.AssistRESTfulUtils;  
6 import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; 5 import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
7 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; 6 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
8 import com.genersoft.iot.vmp.service.IMediaServerService; 7 import com.genersoft.iot.vmp.service.IMediaServerService;
9 import com.genersoft.iot.vmp.service.bean.CloudRecordItem; 8 import com.genersoft.iot.vmp.service.bean.CloudRecordItem;
10 -import com.genersoft.iot.vmp.storager.dao.CloudRecordServiceMapper;  
11 -import com.genersoft.iot.vmp.vmanager.cloudRecord.CloudRecordController; 9 +import com.genersoft.iot.vmp.storager.mapper.CloudRecordServiceMapper;
12 import org.slf4j.Logger; 10 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory; 11 import org.slf4j.LoggerFactory;
14 import org.springframework.beans.factory.annotation.Autowired; 12 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,7 +14,6 @@ import org.springframework.scheduling.annotation.Scheduled; @@ -16,7 +14,6 @@ import org.springframework.scheduling.annotation.Scheduled;
16 import org.springframework.stereotype.Component; 14 import org.springframework.stereotype.Component;
17 15
18 import java.io.File; 16 import java.io.File;
19 -import java.util.ArrayList;  
20 import java.util.Calendar; 17 import java.util.Calendar;
21 import java.util.Date; 18 import java.util.Date;
22 import java.util.List; 19 import java.util.List;
src/main/java/com/genersoft/iot/vmp/conf/GlobalResponseAdvice.java
@@ -32,7 +32,7 @@ public class GlobalResponseAdvice implements ResponseBodyAdvice&lt;Object&gt; { @@ -32,7 +32,7 @@ public class GlobalResponseAdvice implements ResponseBodyAdvice&lt;Object&gt; {
32 @Override 32 @Override
33 public Object beforeBodyWrite(Object body, @NotNull MethodParameter returnType, @NotNull MediaType selectedContentType, @NotNull Class<? extends HttpMessageConverter<?>> selectedConverterType, @NotNull ServerHttpRequest request, @NotNull ServerHttpResponse response) { 33 public Object beforeBodyWrite(Object body, @NotNull MethodParameter returnType, @NotNull MediaType selectedContentType, @NotNull Class<? extends HttpMessageConverter<?>> selectedConverterType, @NotNull ServerHttpRequest request, @NotNull ServerHttpResponse response) {
34 // 排除api文档的接口,这个接口不需要统一 34 // 排除api文档的接口,这个接口不需要统一
35 - String[] excludePath = {"/v3/api-docs","/api/v1","/index/hook","/api/video-"}; 35 + String[] excludePath = {"/v3/api-docs","/api/v1","/index/hook","/api/video-","/api/jt1078/query/history/download/"};
36 for (String path : excludePath) { 36 for (String path : excludePath) {
37 if (request.getURI().getPath().startsWith(path)) { 37 if (request.getURI().getPath().startsWith(path)) {
38 return body; 38 return body;
src/main/java/com/genersoft/iot/vmp/conf/MybatisConfig.java deleted 100644 → 0
1 -package com.genersoft.iot.vmp.conf;  
2 -  
3 -import org.apache.ibatis.logging.stdout.StdOutImpl;  
4 -import org.apache.ibatis.session.SqlSessionFactory;  
5 -import org.mybatis.spring.SqlSessionFactoryBean;  
6 -import org.springframework.beans.factory.annotation.Autowired;  
7 -import org.springframework.context.annotation.Bean;  
8 -import org.springframework.context.annotation.Configuration;  
9 -import org.springframework.core.annotation.Order;  
10 -  
11 -import javax.sql.DataSource;  
12 -  
13 -/**  
14 - * 配置mybatis  
15 - */  
16 -@Configuration  
17 -@Order(value=1)  
18 -public class MybatisConfig {  
19 -  
20 - @Autowired  
21 - private UserSetting userSetting;  
22 -  
23 - @Bean  
24 - public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {  
25 - final SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();  
26 - sqlSessionFactory.setDataSource(dataSource);  
27 - org.apache.ibatis.session.Configuration config = new org.apache.ibatis.session.Configuration();  
28 - if (userSetting.getSqlLog()){  
29 - config.setLogImpl(StdOutImpl.class);  
30 - }  
31 - config.setMapUnderscoreToCamelCase(true);  
32 - sqlSessionFactory.setConfiguration(config);  
33 - return sqlSessionFactory.getObject();  
34 - }  
35 -  
36 -}  
src/main/java/com/genersoft/iot/vmp/conf/MybatisPlusConfig.java 0 → 100644
  1 +package com.genersoft.iot.vmp.conf;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.DbType;
  4 +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
  5 +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
  6 +import org.mybatis.spring.annotation.MapperScan;
  7 +import org.springframework.context.annotation.Bean;
  8 +import org.springframework.context.annotation.Configuration;
  9 +
  10 +/**
  11 + * mybatis-plus分页配置
  12 + *
  13 + * @Author WangXin
  14 + * @Data 2024/12/4
  15 + * @Version 1.0.0
  16 + */
  17 +@Configuration
  18 +@MapperScan("com.genersoft.iot.vmp.**.mapper")
  19 +public class MybatisPlusConfig {
  20 +
  21 + @Bean
  22 + public MybatisPlusInterceptor mybatisPlusInterceptor() {
  23 + MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
  24 + mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
  25 + return mybatisPlusInterceptor;
  26 + }
  27 +}
src/main/java/com/genersoft/iot/vmp/conf/security/DefaultUserDetailsServiceImpl.java
@@ -3,7 +3,7 @@ package com.genersoft.iot.vmp.conf.security; @@ -3,7 +3,7 @@ package com.genersoft.iot.vmp.conf.security;
3 import com.alibaba.excel.util.StringUtils; 3 import com.alibaba.excel.util.StringUtils;
4 import com.genersoft.iot.vmp.conf.security.dto.LoginUser; 4 import com.genersoft.iot.vmp.conf.security.dto.LoginUser;
5 import com.genersoft.iot.vmp.service.IUserService; 5 import com.genersoft.iot.vmp.service.IUserService;
6 -import com.genersoft.iot.vmp.storager.dao.dto.User; 6 +import com.genersoft.iot.vmp.storager.mapper.dto.User;
7 import org.slf4j.Logger; 7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory; 8 import org.slf4j.LoggerFactory;
9 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.beans.factory.annotation.Autowired;
src/main/java/com/genersoft/iot/vmp/conf/security/JwtAuthenticationFilter.java
@@ -2,8 +2,8 @@ package com.genersoft.iot.vmp.conf.security; @@ -2,8 +2,8 @@ package com.genersoft.iot.vmp.conf.security;
2 2
3 import com.genersoft.iot.vmp.conf.UserSetting; 3 import com.genersoft.iot.vmp.conf.UserSetting;
4 import com.genersoft.iot.vmp.conf.security.dto.JwtUser; 4 import com.genersoft.iot.vmp.conf.security.dto.JwtUser;
5 -import com.genersoft.iot.vmp.storager.dao.dto.Role;  
6 -import com.genersoft.iot.vmp.storager.dao.dto.User; 5 +import com.genersoft.iot.vmp.storager.mapper.dto.Role;
  6 +import com.genersoft.iot.vmp.storager.mapper.dto.User;
7 import org.apache.commons.lang3.StringUtils; 7 import org.apache.commons.lang3.StringUtils;
8 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; 9 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
src/main/java/com/genersoft/iot/vmp/conf/security/JwtUtils.java
@@ -2,7 +2,7 @@ package com.genersoft.iot.vmp.conf.security; @@ -2,7 +2,7 @@ package com.genersoft.iot.vmp.conf.security;
2 2
3 import com.genersoft.iot.vmp.conf.security.dto.JwtUser; 3 import com.genersoft.iot.vmp.conf.security.dto.JwtUser;
4 import com.genersoft.iot.vmp.service.IUserService; 4 import com.genersoft.iot.vmp.service.IUserService;
5 -import com.genersoft.iot.vmp.storager.dao.dto.User; 5 +import com.genersoft.iot.vmp.storager.mapper.dto.User;
6 import org.jose4j.jwk.RsaJsonWebKey; 6 import org.jose4j.jwk.RsaJsonWebKey;
7 import org.jose4j.jwk.RsaJwkGenerator; 7 import org.jose4j.jwk.RsaJwkGenerator;
8 import org.jose4j.jws.AlgorithmIdentifiers; 8 import org.jose4j.jws.AlgorithmIdentifiers;
src/main/java/com/genersoft/iot/vmp/conf/security/SecurityUtils.java
1 package com.genersoft.iot.vmp.conf.security; 1 package com.genersoft.iot.vmp.conf.security;
2 2
3 import com.genersoft.iot.vmp.conf.security.dto.LoginUser; 3 import com.genersoft.iot.vmp.conf.security.dto.LoginUser;
4 -import com.genersoft.iot.vmp.storager.dao.dto.User; 4 +import com.genersoft.iot.vmp.storager.mapper.dto.User;
5 import org.springframework.security.authentication.AuthenticationManager; 5 import org.springframework.security.authentication.AuthenticationManager;
6 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; 6 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
7 import org.springframework.security.core.Authentication; 7 import org.springframework.security.core.Authentication;
src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java
1 package com.genersoft.iot.vmp.conf.security.dto; 1 package com.genersoft.iot.vmp.conf.security.dto;
2 2
3 -import com.genersoft.iot.vmp.storager.dao.dto.Role;  
4 -import com.genersoft.iot.vmp.storager.dao.dto.User; 3 +import com.genersoft.iot.vmp.storager.mapper.dto.Role;
  4 +import com.genersoft.iot.vmp.storager.mapper.dto.User;
5 import org.springframework.security.core.CredentialsContainer; 5 import org.springframework.security.core.CredentialsContainer;
6 import org.springframework.security.core.GrantedAuthority; 6 import org.springframework.security.core.GrantedAuthority;
7 import org.springframework.security.core.SpringSecurityCoreVersion; 7 import org.springframework.security.core.SpringSecurityCoreVersion;
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -23,7 +23,7 @@ import com.genersoft.iot.vmp.service.IMediaServerService; @@ -23,7 +23,7 @@ import com.genersoft.iot.vmp.service.IMediaServerService;
23 import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; 23 import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
24 import com.genersoft.iot.vmp.service.bean.SSRCInfo; 24 import com.genersoft.iot.vmp.service.bean.SSRCInfo;
25 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 25 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
26 -import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo; 26 +import com.genersoft.iot.vmp.storager.mapper.dto.PlatformRegisterInfo;
27 import com.genersoft.iot.vmp.utils.DateUtil; 27 import com.genersoft.iot.vmp.utils.DateUtil;
28 import com.genersoft.iot.vmp.utils.GitUtil; 28 import com.genersoft.iot.vmp.utils.GitUtil;
29 import gov.nist.javax.sip.message.MessageFactoryImpl; 29 import gov.nist.javax.sip.message.MessageFactoryImpl;
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java
@@ -11,7 +11,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessag @@ -11,7 +11,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessag
11 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler; 11 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler;
12 import com.genersoft.iot.vmp.utils.DateUtil; 12 import com.genersoft.iot.vmp.utils.DateUtil;
13 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 13 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
14 -import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo; 14 +import com.genersoft.iot.vmp.storager.mapper.dto.ChannelSourceInfo;
15 import gov.nist.javax.sip.message.SIPRequest; 15 import gov.nist.javax.sip.message.SIPRequest;
16 import org.dom4j.Element; 16 import org.dom4j.Element;
17 import org.slf4j.Logger; 17 import org.slf4j.Logger;
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java
@@ -10,7 +10,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.response.SIPResponseProcesso @@ -10,7 +10,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.response.SIPResponseProcesso
10 import com.genersoft.iot.vmp.service.IPlatformService; 10 import com.genersoft.iot.vmp.service.IPlatformService;
11 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 11 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
12 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 12 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
13 -import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo; 13 +import com.genersoft.iot.vmp.storager.mapper.dto.PlatformRegisterInfo;
14 import gov.nist.javax.sip.message.SIPResponse; 14 import gov.nist.javax.sip.message.SIPResponse;
15 import org.slf4j.Logger; 15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory; 16 import org.slf4j.LoggerFactory;
@@ -24,10 +24,10 @@ import javax.sip.header.WWWAuthenticateHeader; @@ -24,10 +24,10 @@ import javax.sip.header.WWWAuthenticateHeader;
24 import javax.sip.message.Response; 24 import javax.sip.message.Response;
25 import java.text.ParseException; 25 import java.text.ParseException;
26 26
27 -/** 27 +/**
28 * @description:Register响应处理器 28 * @description:Register响应处理器
29 * @author: swwheihei 29 * @author: swwheihei
30 - * @date: 2020年5月3日 下午5:32:23 30 + * @date: 2020年5月3日 下午5:32:23
31 */ 31 */
32 @Component 32 @Component
33 public class RegisterResponseProcessor extends SIPResponseProcessorAbstract { 33 public class RegisterResponseProcessor extends SIPResponseProcessorAbstract {
src/main/java/com/genersoft/iot/vmp/jtt1078/app/VideoServerApp.java
@@ -46,10 +46,10 @@ public class VideoServerApp @@ -46,10 +46,10 @@ public class VideoServerApp
46 case "wx-local": 46 case "wx-local":
47 configProperties = "/app.properties"; 47 configProperties = "/app.properties";
48 break; 48 break;
49 - case "dev100": 49 + case "jt1078-dev100":
50 configProperties = "/app-dev100.properties"; 50 configProperties = "/app-dev100.properties";
51 break; 51 break;
52 - case "dev103": 52 + case "jt1078-dev103":
53 configProperties = "/app-dev103.properties"; 53 configProperties = "/app-dev103.properties";
54 break; 54 break;
55 default: 55 default:
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
@@ -9,9 +9,9 @@ import com.genersoft.iot.vmp.service.IStreamProxyService; @@ -9,9 +9,9 @@ import com.genersoft.iot.vmp.service.IStreamProxyService;
9 import com.genersoft.iot.vmp.service.IStreamPushService; 9 import com.genersoft.iot.vmp.service.IStreamPushService;
10 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 10 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
11 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 11 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
12 -import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;  
13 -import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper;  
14 -import com.genersoft.iot.vmp.storager.dao.StreamPushMapper; 12 +import com.genersoft.iot.vmp.storager.mapper.GbStreamMapper;
  13 +import com.genersoft.iot.vmp.storager.mapper.PlatformGbStreamMapper;
  14 +import com.genersoft.iot.vmp.storager.mapper.StreamPushMapper;
15 import com.genersoft.iot.vmp.utils.DateUtil; 15 import com.genersoft.iot.vmp.utils.DateUtil;
16 import org.slf4j.Logger; 16 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory; 17 import org.slf4j.LoggerFactory;
src/main/java/com/genersoft/iot/vmp/service/ILogService.java
1 package com.genersoft.iot.vmp.service; 1 package com.genersoft.iot.vmp.service;
2 2
3 -import com.genersoft.iot.vmp.storager.dao.dto.LogDto; 3 +import com.genersoft.iot.vmp.storager.mapper.dto.LogDto;
4 import com.github.pagehelper.PageInfo; 4 import com.github.pagehelper.PageInfo;
5 5
6 /** 6 /**
src/main/java/com/genersoft/iot/vmp/service/IRoleService.java
1 package com.genersoft.iot.vmp.service; 1 package com.genersoft.iot.vmp.service;
2 2
3 -import com.genersoft.iot.vmp.storager.dao.dto.Role; 3 +import com.genersoft.iot.vmp.storager.mapper.dto.Role;
4 4
5 import java.util.List; 5 import java.util.List;
6 6
src/main/java/com/genersoft/iot/vmp/service/IUserService.java
1 package com.genersoft.iot.vmp.service; 1 package com.genersoft.iot.vmp.service;
2 2
3 -import com.genersoft.iot.vmp.storager.dao.dto.User; 3 +import com.genersoft.iot.vmp.storager.mapper.dto.User;
4 import com.github.pagehelper.PageInfo; 4 import com.github.pagehelper.PageInfo;
5 5
6 import java.util.List; 6 import java.util.List;
src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java
@@ -14,7 +14,7 @@ import com.genersoft.iot.vmp.service.IMediaServerService; @@ -14,7 +14,7 @@ import com.genersoft.iot.vmp.service.IMediaServerService;
14 import com.genersoft.iot.vmp.service.bean.CloudRecordItem; 14 import com.genersoft.iot.vmp.service.bean.CloudRecordItem;
15 import com.genersoft.iot.vmp.service.bean.DownloadFileInfo; 15 import com.genersoft.iot.vmp.service.bean.DownloadFileInfo;
16 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 16 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
17 -import com.genersoft.iot.vmp.storager.dao.CloudRecordServiceMapper; 17 +import com.genersoft.iot.vmp.storager.mapper.CloudRecordServiceMapper;
18 import com.genersoft.iot.vmp.utils.CloudRecordUtils; 18 import com.genersoft.iot.vmp.utils.CloudRecordUtils;
19 import com.genersoft.iot.vmp.utils.DateUtil; 19 import com.genersoft.iot.vmp.utils.DateUtil;
20 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; 20 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceAlarmServiceImpl.java
@@ -2,9 +2,8 @@ package com.genersoft.iot.vmp.service.impl; @@ -2,9 +2,8 @@ package com.genersoft.iot.vmp.service.impl;
2 2
3 import com.baomidou.dynamic.datasource.annotation.DS; 3 import com.baomidou.dynamic.datasource.annotation.DS;
4 import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm; 4 import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
5 -import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;  
6 import com.genersoft.iot.vmp.service.IDeviceAlarmService; 5 import com.genersoft.iot.vmp.service.IDeviceAlarmService;
7 -import com.genersoft.iot.vmp.storager.dao.DeviceAlarmMapper; 6 +import com.genersoft.iot.vmp.storager.mapper.DeviceAlarmMapper;
8 import com.github.pagehelper.PageHelper; 7 import com.github.pagehelper.PageHelper;
9 import com.github.pagehelper.PageInfo; 8 import com.github.pagehelper.PageInfo;
10 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.beans.factory.annotation.Autowired;
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
@@ -13,9 +13,9 @@ import com.genersoft.iot.vmp.gb28181.utils.Coordtransform; @@ -13,9 +13,9 @@ import com.genersoft.iot.vmp.gb28181.utils.Coordtransform;
13 import com.genersoft.iot.vmp.service.IDeviceChannelService; 13 import com.genersoft.iot.vmp.service.IDeviceChannelService;
14 import com.genersoft.iot.vmp.service.IInviteStreamService; 14 import com.genersoft.iot.vmp.service.IInviteStreamService;
15 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 15 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
16 -import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;  
17 -import com.genersoft.iot.vmp.storager.dao.DeviceMapper;  
18 -import com.genersoft.iot.vmp.storager.dao.DeviceMobilePositionMapper; 16 +import com.genersoft.iot.vmp.storager.mapper.DeviceChannelMapper;
  17 +import com.genersoft.iot.vmp.storager.mapper.DeviceMapper;
  18 +import com.genersoft.iot.vmp.storager.mapper.DeviceMobilePositionMapper;
19 import com.genersoft.iot.vmp.utils.DateUtil; 19 import com.genersoft.iot.vmp.utils.DateUtil;
20 import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; 20 import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
21 import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; 21 import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -22,9 +22,9 @@ import com.genersoft.iot.vmp.service.IDeviceService; @@ -22,9 +22,9 @@ import com.genersoft.iot.vmp.service.IDeviceService;
22 import com.genersoft.iot.vmp.service.IInviteStreamService; 22 import com.genersoft.iot.vmp.service.IInviteStreamService;
23 import com.genersoft.iot.vmp.service.IMediaServerService; 23 import com.genersoft.iot.vmp.service.IMediaServerService;
24 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 24 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
25 -import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;  
26 -import com.genersoft.iot.vmp.storager.dao.DeviceMapper;  
27 -import com.genersoft.iot.vmp.storager.dao.PlatformChannelMapper; 25 +import com.genersoft.iot.vmp.storager.mapper.DeviceChannelMapper;
  26 +import com.genersoft.iot.vmp.storager.mapper.DeviceMapper;
  27 +import com.genersoft.iot.vmp.storager.mapper.PlatformChannelMapper;
28 import com.genersoft.iot.vmp.utils.DateUtil; 28 import com.genersoft.iot.vmp.utils.DateUtil;
29 import com.genersoft.iot.vmp.vmanager.bean.BaseTree; 29 import com.genersoft.iot.vmp.vmanager.bean.BaseTree;
30 import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; 30 import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java
@@ -6,10 +6,10 @@ import com.genersoft.iot.vmp.gb28181.event.EventPublisher; @@ -6,10 +6,10 @@ import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
6 import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; 6 import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
7 import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; 7 import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
8 import com.genersoft.iot.vmp.service.IGbStreamService; 8 import com.genersoft.iot.vmp.service.IGbStreamService;
9 -import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;  
10 -import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper;  
11 -import com.genersoft.iot.vmp.storager.dao.PlatformCatalogMapper;  
12 -import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper; 9 +import com.genersoft.iot.vmp.storager.mapper.GbStreamMapper;
  10 +import com.genersoft.iot.vmp.storager.mapper.ParentPlatformMapper;
  11 +import com.genersoft.iot.vmp.storager.mapper.PlatformCatalogMapper;
  12 +import com.genersoft.iot.vmp.storager.mapper.PlatformGbStreamMapper;
13 import com.github.pagehelper.PageHelper; 13 import com.github.pagehelper.PageHelper;
14 import com.github.pagehelper.PageInfo; 14 import com.github.pagehelper.PageInfo;
15 import org.slf4j.Logger; 15 import org.slf4j.Logger;
src/main/java/com/genersoft/iot/vmp/service/impl/LogServiceImpl.java
1 package com.genersoft.iot.vmp.service.impl; 1 package com.genersoft.iot.vmp.service.impl;
2 2
3 import com.baomidou.dynamic.datasource.annotation.DS; 3 import com.baomidou.dynamic.datasource.annotation.DS;
4 -import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;  
5 import com.genersoft.iot.vmp.service.ILogService; 4 import com.genersoft.iot.vmp.service.ILogService;
6 -import com.genersoft.iot.vmp.storager.dao.LogMapper;  
7 -import com.genersoft.iot.vmp.storager.dao.dto.LogDto; 5 +import com.genersoft.iot.vmp.storager.mapper.LogMapper;
  6 +import com.genersoft.iot.vmp.storager.mapper.dto.LogDto;
8 import com.github.pagehelper.PageHelper; 7 import com.github.pagehelper.PageHelper;
9 import com.github.pagehelper.PageInfo; 8 import com.github.pagehelper.PageInfo;
10 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.beans.factory.annotation.Autowired;
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
@@ -20,12 +20,11 @@ import com.genersoft.iot.vmp.service.IMediaServerService; @@ -20,12 +20,11 @@ import com.genersoft.iot.vmp.service.IMediaServerService;
20 import com.genersoft.iot.vmp.service.bean.MediaServerLoad; 20 import com.genersoft.iot.vmp.service.bean.MediaServerLoad;
21 import com.genersoft.iot.vmp.service.bean.SSRCInfo; 21 import com.genersoft.iot.vmp.service.bean.SSRCInfo;
22 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 22 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
23 -import com.genersoft.iot.vmp.storager.dao.MediaServerMapper; 23 +import com.genersoft.iot.vmp.storager.mapper.MediaServerMapper;
24 import com.genersoft.iot.vmp.utils.DateUtil; 24 import com.genersoft.iot.vmp.utils.DateUtil;
25 import com.genersoft.iot.vmp.utils.JsonUtil; 25 import com.genersoft.iot.vmp.utils.JsonUtil;
26 import com.genersoft.iot.vmp.utils.redis.RedisUtil; 26 import com.genersoft.iot.vmp.utils.redis.RedisUtil;
27 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; 27 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
28 -import com.genersoft.iot.vmp.vmanager.bean.RecordFile;  
29 import okhttp3.OkHttpClient; 28 import okhttp3.OkHttpClient;
30 import okhttp3.Request; 29 import okhttp3.Request;
31 import okhttp3.Response; 30 import okhttp3.Response;
@@ -36,19 +35,16 @@ import org.springframework.beans.factory.annotation.Qualifier; @@ -36,19 +35,16 @@ import org.springframework.beans.factory.annotation.Qualifier;
36 import org.springframework.beans.factory.annotation.Value; 35 import org.springframework.beans.factory.annotation.Value;
37 import org.springframework.data.redis.core.RedisTemplate; 36 import org.springframework.data.redis.core.RedisTemplate;
38 import org.springframework.jdbc.datasource.DataSourceTransactionManager; 37 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
39 -import org.springframework.scheduling.annotation.Async;  
40 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; 38 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
41 import org.springframework.stereotype.Service; 39 import org.springframework.stereotype.Service;
42 import org.springframework.transaction.TransactionDefinition; 40 import org.springframework.transaction.TransactionDefinition;
43 import org.springframework.transaction.TransactionStatus; 41 import org.springframework.transaction.TransactionStatus;
44 -import org.springframework.util.Assert;  
45 import org.springframework.util.ObjectUtils; 42 import org.springframework.util.ObjectUtils;
46 43
  44 +import javax.annotation.Resource;
47 import java.io.File; 45 import java.io.File;
48 import java.time.LocalDateTime; 46 import java.time.LocalDateTime;
49 import java.util.*; 47 import java.util.*;
50 -import java.util.concurrent.CompletableFuture;  
51 -import java.util.concurrent.ExecutionException;  
52 48
53 /** 49 /**
54 * 媒体服务器节点管理 50 * 媒体服务器节点管理
@@ -85,7 +81,7 @@ public class MediaServerServiceImpl implements IMediaServerService { @@ -85,7 +81,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
85 @Autowired 81 @Autowired
86 private ZLMRESTfulUtils zlmresTfulUtils; 82 private ZLMRESTfulUtils zlmresTfulUtils;
87 83
88 - @Autowired 84 + @Resource
89 private MediaServerMapper mediaServerMapper; 85 private MediaServerMapper mediaServerMapper;
90 86
91 @Autowired 87 @Autowired
src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java
@@ -5,10 +5,10 @@ import com.genersoft.iot.vmp.gb28181.bean.*; @@ -5,10 +5,10 @@ import com.genersoft.iot.vmp.gb28181.bean.*;
5 import com.genersoft.iot.vmp.gb28181.event.EventPublisher; 5 import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
6 import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; 6 import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
7 import com.genersoft.iot.vmp.service.IPlatformChannelService; 7 import com.genersoft.iot.vmp.service.IPlatformChannelService;
8 -import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;  
9 -import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper;  
10 -import com.genersoft.iot.vmp.storager.dao.PlatformCatalogMapper;  
11 -import com.genersoft.iot.vmp.storager.dao.PlatformChannelMapper; 8 +import com.genersoft.iot.vmp.storager.mapper.DeviceChannelMapper;
  9 +import com.genersoft.iot.vmp.storager.mapper.ParentPlatformMapper;
  10 +import com.genersoft.iot.vmp.storager.mapper.PlatformCatalogMapper;
  11 +import com.genersoft.iot.vmp.storager.mapper.PlatformChannelMapper;
12 import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; 12 import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
13 import org.slf4j.Logger; 13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory; 14 import org.slf4j.LoggerFactory;
src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
@@ -15,8 +15,6 @@ import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; @@ -15,8 +15,6 @@ import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
15 import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; 15 import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
16 import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; 16 import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
17 import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe; 17 import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe;
18 -import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeFactory;  
19 -import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForStreamChange;  
20 import com.genersoft.iot.vmp.gb28181.utils.SipUtils; 18 import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
21 import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; 19 import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory;
22 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; 20 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
@@ -27,11 +25,10 @@ import com.genersoft.iot.vmp.service.IPlatformService; @@ -27,11 +25,10 @@ import com.genersoft.iot.vmp.service.IPlatformService;
27 import com.genersoft.iot.vmp.service.IPlayService; 25 import com.genersoft.iot.vmp.service.IPlayService;
28 import com.genersoft.iot.vmp.service.bean.*; 26 import com.genersoft.iot.vmp.service.bean.*;
29 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 27 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
30 -import com.genersoft.iot.vmp.storager.dao.*; 28 +import com.genersoft.iot.vmp.storager.mapper.*;
31 import com.genersoft.iot.vmp.utils.DateUtil; 29 import com.genersoft.iot.vmp.utils.DateUtil;
32 import com.github.pagehelper.PageHelper; 30 import com.github.pagehelper.PageHelper;
33 import com.github.pagehelper.PageInfo; 31 import com.github.pagehelper.PageInfo;
34 -import gov.nist.javax.sip.message.SIPRequest;  
35 import gov.nist.javax.sip.message.SIPResponse; 32 import gov.nist.javax.sip.message.SIPResponse;
36 import org.slf4j.Logger; 33 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory; 34 import org.slf4j.LoggerFactory;
@@ -41,17 +38,12 @@ import org.springframework.stereotype.Service; @@ -41,17 +38,12 @@ import org.springframework.stereotype.Service;
41 import javax.sdp.*; 38 import javax.sdp.*;
42 import javax.sip.InvalidArgumentException; 39 import javax.sip.InvalidArgumentException;
43 import javax.sip.ResponseEvent; 40 import javax.sip.ResponseEvent;
44 -import javax.sip.PeerUnavailableException;  
45 import javax.sip.SipException; 41 import javax.sip.SipException;
46 import java.text.ParseException; 42 import java.text.ParseException;
47 import java.util.HashMap; 43 import java.util.HashMap;
48 import java.util.List; 44 import java.util.List;
49 import java.util.Map; 45 import java.util.Map;
50 import java.util.UUID; 46 import java.util.UUID;
51 -import java.util.HashMap;  
52 -import java.util.List;  
53 -import java.util.Map;  
54 -import java.util.UUID;  
55 import java.util.*; 47 import java.util.*;
56 48
57 /** 49 /**
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -34,7 +34,7 @@ import com.genersoft.iot.vmp.service.bean.*; @@ -34,7 +34,7 @@ import com.genersoft.iot.vmp.service.bean.*;
34 import com.genersoft.iot.vmp.service.redisMsg.RedisGbPlayMsgListener; 34 import com.genersoft.iot.vmp.service.redisMsg.RedisGbPlayMsgListener;
35 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 35 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
36 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 36 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
37 -import com.genersoft.iot.vmp.storager.dao.CloudRecordServiceMapper; 37 +import com.genersoft.iot.vmp.storager.mapper.CloudRecordServiceMapper;
38 import com.genersoft.iot.vmp.utils.CloudRecordUtils; 38 import com.genersoft.iot.vmp.utils.CloudRecordUtils;
39 import com.genersoft.iot.vmp.utils.DateUtil; 39 import com.genersoft.iot.vmp.utils.DateUtil;
40 import com.genersoft.iot.vmp.vmanager.bean.AudioBroadcastResult; 40 import com.genersoft.iot.vmp.vmanager.bean.AudioBroadcastResult;
src/main/java/com/genersoft/iot/vmp/service/impl/RoleServerImpl.java
@@ -2,8 +2,8 @@ package com.genersoft.iot.vmp.service.impl; @@ -2,8 +2,8 @@ package com.genersoft.iot.vmp.service.impl;
2 2
3 import com.baomidou.dynamic.datasource.annotation.DS; 3 import com.baomidou.dynamic.datasource.annotation.DS;
4 import com.genersoft.iot.vmp.service.IRoleService; 4 import com.genersoft.iot.vmp.service.IRoleService;
5 -import com.genersoft.iot.vmp.storager.dao.RoleMapper;  
6 -import com.genersoft.iot.vmp.storager.dao.dto.Role; 5 +import com.genersoft.iot.vmp.storager.mapper.RoleMapper;
  6 +import com.genersoft.iot.vmp.storager.mapper.dto.Role;
7 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.beans.factory.annotation.Autowired;
8 import org.springframework.stereotype.Service; 8 import org.springframework.stereotype.Service;
9 9
src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
@@ -3,14 +3,12 @@ package com.genersoft.iot.vmp.service.impl; @@ -3,14 +3,12 @@ package com.genersoft.iot.vmp.service.impl;
3 import com.alibaba.fastjson2.JSONArray; 3 import com.alibaba.fastjson2.JSONArray;
4 import com.alibaba.fastjson2.JSONObject; 4 import com.alibaba.fastjson2.JSONObject;
5 import com.baomidou.dynamic.datasource.annotation.DS; 5 import com.baomidou.dynamic.datasource.annotation.DS;
6 -import com.genersoft.iot.vmp.VManageBootstrap;  
7 import com.genersoft.iot.vmp.common.GeneralCallback; 6 import com.genersoft.iot.vmp.common.GeneralCallback;
8 import com.genersoft.iot.vmp.common.StreamInfo; 7 import com.genersoft.iot.vmp.common.StreamInfo;
9 import com.genersoft.iot.vmp.conf.DynamicTask; 8 import com.genersoft.iot.vmp.conf.DynamicTask;
10 import com.genersoft.iot.vmp.conf.StreamProxyTask; 9 import com.genersoft.iot.vmp.conf.StreamProxyTask;
11 import com.genersoft.iot.vmp.conf.UserSetting; 10 import com.genersoft.iot.vmp.conf.UserSetting;
12 import com.genersoft.iot.vmp.conf.exception.ControllerException; 11 import com.genersoft.iot.vmp.conf.exception.ControllerException;
13 -import com.genersoft.iot.vmp.gb28181.event.EventPublisher;  
14 import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; 12 import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
15 import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; 13 import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
16 import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; 14 import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory;
@@ -23,10 +21,9 @@ import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; @@ -23,10 +21,9 @@ import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam;
23 import com.genersoft.iot.vmp.service.*; 21 import com.genersoft.iot.vmp.service.*;
24 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 22 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
25 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 23 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
26 -import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;  
27 -import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper;  
28 -import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper;  
29 -import com.genersoft.iot.vmp.storager.dao.StreamProxyMapper; 24 +import com.genersoft.iot.vmp.storager.mapper.GbStreamMapper;
  25 +import com.genersoft.iot.vmp.storager.mapper.PlatformGbStreamMapper;
  26 +import com.genersoft.iot.vmp.storager.mapper.StreamProxyMapper;
30 import com.genersoft.iot.vmp.utils.DateUtil; 27 import com.genersoft.iot.vmp.utils.DateUtil;
31 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; 28 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
32 import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; 29 import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
@@ -19,7 +19,7 @@ import com.genersoft.iot.vmp.service.IMediaServerService; @@ -19,7 +19,7 @@ import com.genersoft.iot.vmp.service.IMediaServerService;
19 import com.genersoft.iot.vmp.service.IStreamPushService; 19 import com.genersoft.iot.vmp.service.IStreamPushService;
20 import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis; 20 import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis;
21 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 21 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
22 -import com.genersoft.iot.vmp.storager.dao.*; 22 +import com.genersoft.iot.vmp.storager.mapper.*;
23 import com.genersoft.iot.vmp.utils.DateUtil; 23 import com.genersoft.iot.vmp.utils.DateUtil;
24 import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; 24 import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
25 import com.github.pagehelper.PageHelper; 25 import com.github.pagehelper.PageHelper;
src/main/java/com/genersoft/iot/vmp/service/impl/UserServiceImpl.java
@@ -2,8 +2,8 @@ package com.genersoft.iot.vmp.service.impl; @@ -2,8 +2,8 @@ package com.genersoft.iot.vmp.service.impl;
2 2
3 import com.baomidou.dynamic.datasource.annotation.DS; 3 import com.baomidou.dynamic.datasource.annotation.DS;
4 import com.genersoft.iot.vmp.service.IUserService; 4 import com.genersoft.iot.vmp.service.IUserService;
5 -import com.genersoft.iot.vmp.storager.dao.UserMapper;  
6 -import com.genersoft.iot.vmp.storager.dao.dto.User; 5 +import com.genersoft.iot.vmp.storager.mapper.UserMapper;
  6 +import com.genersoft.iot.vmp.storager.mapper.dto.User;
7 import com.github.pagehelper.PageHelper; 7 import com.github.pagehelper.PageHelper;
8 import com.github.pagehelper.PageInfo; 8 import com.github.pagehelper.PageInfo;
9 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.beans.factory.annotation.Autowired;
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
@@ -11,7 +11,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo; @@ -11,7 +11,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo;
11 import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; 11 import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam;
12 import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; 12 import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
13 import com.genersoft.iot.vmp.service.bean.MessageForPushChannel; 13 import com.genersoft.iot.vmp.service.bean.MessageForPushChannel;
14 -import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo; 14 +import com.genersoft.iot.vmp.storager.mapper.dto.PlatformRegisterInfo;
15 15
16 import java.util.List; 16 import java.util.List;
17 import java.util.Map; 17 import java.util.Map;
src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java
@@ -3,24 +3,24 @@ package com.genersoft.iot.vmp.storager; @@ -3,24 +3,24 @@ package com.genersoft.iot.vmp.storager;
3 import com.genersoft.iot.vmp.gb28181.bean.*; 3 import com.genersoft.iot.vmp.gb28181.bean.*;
4 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; 4 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
5 import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; 5 import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
6 -import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo; 6 +import com.genersoft.iot.vmp.storager.mapper.dto.ChannelSourceInfo;
7 import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; 7 import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
8 import com.genersoft.iot.vmp.web.gb28181.dto.DeviceChannelExtend; 8 import com.genersoft.iot.vmp.web.gb28181.dto.DeviceChannelExtend;
9 import com.github.pagehelper.PageInfo; 9 import com.github.pagehelper.PageInfo;
10 10
11 import java.util.List; 11 import java.util.List;
12 12
13 -/** 13 +/**
14 * @description:视频设备数据存储接口 14 * @description:视频设备数据存储接口
15 * @author: swwheihei 15 * @author: swwheihei
16 - * @date: 2020年5月6日 下午2:14:31 16 + * @date: 2020年5月6日 下午2:14:31
17 */ 17 */
18 @SuppressWarnings("rawtypes") 18 @SuppressWarnings("rawtypes")
19 public interface IVideoManagerStorage { 19 public interface IVideoManagerStorage {
20 20
21 - /** 21 + /**
22 * 根据设备ID判断设备是否存在 22 * 根据设备ID判断设备是否存在
23 - * 23 + *
24 * @param deviceId 设备ID 24 * @param deviceId 设备ID
25 * @return true:存在 false:不存在 25 * @return true:存在 false:不存在
26 */ 26 */
@@ -40,10 +40,10 @@ public interface IVideoManagerStorage { @@ -40,10 +40,10 @@ public interface IVideoManagerStorage {
40 * @param channelId 通道ID 40 * @param channelId 通道ID
41 */ 41 */
42 public void stopPlay(String deviceId, String channelId); 42 public void stopPlay(String deviceId, String channelId);
43 -  
44 - /** 43 +
  44 + /**
45 * 获取设备 45 * 获取设备
46 - * 46 + *
47 * @param deviceId 设备ID 47 * @param deviceId 设备ID
48 * @return DShadow 设备对象 48 * @return DShadow 设备对象
49 */ 49 */
@@ -58,7 +58,7 @@ public interface IVideoManagerStorage { @@ -58,7 +58,7 @@ public interface IVideoManagerStorage {
58 * @return 58 * @return
59 */ 59 */
60 public PageInfo<DeviceChannel> queryChannelsByDeviceId(String deviceId, String query, Boolean hasSubChannel, Boolean online, Boolean catalogUnderDevice, int page, int count); 60 public PageInfo<DeviceChannel> queryChannelsByDeviceId(String deviceId, String query, Boolean hasSubChannel, Boolean online, Boolean catalogUnderDevice, int page, int count);
61 - 61 +
62 public List<DeviceChannelExtend> queryChannelsByDeviceIdWithStartAndLimit(String deviceId, List<String> channelIds, String query, Boolean hasSubChannel, Boolean online, int start, int limit); 62 public List<DeviceChannelExtend> queryChannelsByDeviceIdWithStartAndLimit(String deviceId, List<String> channelIds, String query, Boolean hasSubChannel, Boolean online, int start, int limit);
63 63
64 64
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
@@ -15,9 +15,9 @@ import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; @@ -15,9 +15,9 @@ import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam;
15 import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; 15 import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
16 import com.genersoft.iot.vmp.service.bean.MessageForPushChannel; 16 import com.genersoft.iot.vmp.service.bean.MessageForPushChannel;
17 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 17 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
18 -import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;  
19 -import com.genersoft.iot.vmp.storager.dao.DeviceMapper;  
20 -import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo; 18 +import com.genersoft.iot.vmp.storager.mapper.DeviceChannelMapper;
  19 +import com.genersoft.iot.vmp.storager.mapper.DeviceMapper;
  20 +import com.genersoft.iot.vmp.storager.mapper.dto.PlatformRegisterInfo;
21 import com.genersoft.iot.vmp.utils.DateUtil; 21 import com.genersoft.iot.vmp.utils.DateUtil;
22 import com.genersoft.iot.vmp.utils.JsonUtil; 22 import com.genersoft.iot.vmp.utils.JsonUtil;
23 import com.genersoft.iot.vmp.utils.SystemInfoUtils; 23 import com.genersoft.iot.vmp.utils.SystemInfoUtils;
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
@@ -7,12 +7,11 @@ import com.genersoft.iot.vmp.gb28181.bean.*; @@ -7,12 +7,11 @@ import com.genersoft.iot.vmp.gb28181.bean.*;
7 import com.genersoft.iot.vmp.gb28181.event.EventPublisher; 7 import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
8 import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; 8 import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
9 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; 9 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
10 -import com.genersoft.iot.vmp.service.IGbStreamService;  
11 import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; 10 import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
12 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 11 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
13 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 12 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
14 -import com.genersoft.iot.vmp.storager.dao.*;  
15 -import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo; 13 +import com.genersoft.iot.vmp.storager.mapper.*;
  14 +import com.genersoft.iot.vmp.storager.mapper.dto.ChannelSourceInfo;
16 import com.genersoft.iot.vmp.utils.DateUtil; 15 import com.genersoft.iot.vmp.utils.DateUtil;
17 import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; 16 import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
18 import com.genersoft.iot.vmp.web.gb28181.dto.DeviceChannelExtend; 17 import com.genersoft.iot.vmp.web.gb28181.dto.DeviceChannelExtend;
src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/CloudRecordServiceMapper.java
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; 3 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
4 import com.genersoft.iot.vmp.service.bean.CloudRecordItem; 4 import com.genersoft.iot.vmp.service.bean.CloudRecordItem;
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceAlarmMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/DeviceAlarmMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm; 3 import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
4 import org.apache.ibatis.annotations.Delete; 4 import org.apache.ibatis.annotations.Delete;
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/DeviceChannelMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 import com.genersoft.iot.vmp.gb28181.bean.Device; 3 import com.genersoft.iot.vmp.gb28181.bean.Device;
4 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; 4 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/DeviceMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 import com.genersoft.iot.vmp.gb28181.bean.Device; 3 import com.genersoft.iot.vmp.gb28181.bean.Device;
4 import org.apache.ibatis.annotations.*; 4 import org.apache.ibatis.annotations.*;
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/DeviceMobilePositionMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 import com.genersoft.iot.vmp.gb28181.bean.MobilePosition; 3 import com.genersoft.iot.vmp.gb28181.bean.MobilePosition;
4 import org.apache.ibatis.annotations.Delete; 4 import org.apache.ibatis.annotations.Delete;
src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/GbStreamMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; 3 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
4 import com.genersoft.iot.vmp.gb28181.bean.GbStream; 4 import com.genersoft.iot.vmp.gb28181.bean.GbStream;
src/main/java/com/genersoft/iot/vmp/storager/dao/LogMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/LogMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 -import com.genersoft.iot.vmp.storager.dao.dto.LogDto; 3 +import com.genersoft.iot.vmp.storager.mapper.dto.LogDto;
4 import org.apache.ibatis.annotations.Delete; 4 import org.apache.ibatis.annotations.Delete;
5 import org.apache.ibatis.annotations.Insert; 5 import org.apache.ibatis.annotations.Insert;
6 import org.apache.ibatis.annotations.Mapper; 6 import org.apache.ibatis.annotations.Mapper;
src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/MediaServerMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; 3 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
4 import org.apache.ibatis.annotations.*; 4 import org.apache.ibatis.annotations.*;
5 import org.apache.ibatis.annotations.Param; 5 import org.apache.ibatis.annotations.Param;
6 -import org.springframework.stereotype.Repository;  
7 6
8 import java.util.List; 7 import java.util.List;
9 8
10 9
11 @Mapper 10 @Mapper
12 -@Repository  
13 public interface MediaServerMapper { 11 public interface MediaServerMapper {
14 12
15 @Insert("INSERT INTO wvp_media_server (" + 13 @Insert("INSERT INTO wvp_media_server (" +
src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/ParentPlatformMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; 3 import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
4 -import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo; 4 +import com.genersoft.iot.vmp.storager.mapper.dto.ChannelSourceInfo;
5 import org.apache.ibatis.annotations.*; 5 import org.apache.ibatis.annotations.*;
6 import org.apache.ibatis.annotations.Param; 6 import org.apache.ibatis.annotations.Param;
7 import org.springframework.stereotype.Repository; 7 import org.springframework.stereotype.Repository;
src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/PlatformCatalogMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; 3 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
4 import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog; 4 import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog;
src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/PlatformChannelMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 import com.genersoft.iot.vmp.gb28181.bean.Device; 3 import com.genersoft.iot.vmp.gb28181.bean.Device;
4 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; 4 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/PlatformGbStreamMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 import com.genersoft.iot.vmp.gb28181.bean.GbStream; 3 import com.genersoft.iot.vmp.gb28181.bean.GbStream;
4 import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; 4 import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
src/main/java/com/genersoft/iot/vmp/storager/dao/RoleMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/RoleMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 -import com.genersoft.iot.vmp.storager.dao.dto.Role; 3 +import com.genersoft.iot.vmp.storager.mapper.dto.Role;
4 import org.apache.ibatis.annotations.*; 4 import org.apache.ibatis.annotations.*;
5 import org.springframework.stereotype.Repository; 5 import org.springframework.stereotype.Repository;
6 6
src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/StreamProxyMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; 3 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
4 import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; 4 import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/StreamPushMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 import com.genersoft.iot.vmp.gb28181.bean.GbStream; 3 import com.genersoft.iot.vmp.gb28181.bean.GbStream;
4 import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; 4 import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
src/main/java/com/genersoft/iot/vmp/storager/dao/UserMapper.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/UserMapper.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao; 1 +package com.genersoft.iot.vmp.storager.mapper;
2 2
3 -import com.genersoft.iot.vmp.storager.dao.dto.User; 3 +import com.genersoft.iot.vmp.storager.mapper.dto.User;
4 import org.apache.ibatis.annotations.*; 4 import org.apache.ibatis.annotations.*;
5 import org.apache.ibatis.annotations.Param; 5 import org.apache.ibatis.annotations.Param;
6 import org.springframework.stereotype.Repository; 6 import org.springframework.stereotype.Repository;
src/main/java/com/genersoft/iot/vmp/storager/dao/dto/ChannelSourceInfo.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/dto/ChannelSourceInfo.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao.dto; 1 +package com.genersoft.iot.vmp.storager.mapper.dto;
2 2
3 public class ChannelSourceInfo { 3 public class ChannelSourceInfo {
4 private String name; 4 private String name;
src/main/java/com/genersoft/iot/vmp/storager/dao/dto/LogDto.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/dto/LogDto.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao.dto; 1 +package com.genersoft.iot.vmp.storager.mapper.dto;
2 2
3 public class LogDto { 3 public class LogDto {
4 4
src/main/java/com/genersoft/iot/vmp/storager/dao/dto/PlatformRegisterInfo.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/dto/PlatformRegisterInfo.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao.dto; 1 +package com.genersoft.iot.vmp.storager.mapper.dto;
2 2
3 /** 3 /**
4 * 平台发送注册/注销消息时缓存此消息 4 * 平台发送注册/注销消息时缓存此消息
src/main/java/com/genersoft/iot/vmp/storager/dao/dto/RecordInfo.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/dto/RecordInfo.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao.dto; 1 +package com.genersoft.iot.vmp.storager.mapper.dto;
2 2
3 /** 3 /**
4 * 录像记录 4 * 录像记录
src/main/java/com/genersoft/iot/vmp/storager/dao/dto/Role.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/dto/Role.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao.dto; 1 +package com.genersoft.iot.vmp.storager.mapper.dto;
2 2
3 public class Role { 3 public class Role {
4 4
src/main/java/com/genersoft/iot/vmp/storager/dao/dto/User.java renamed to src/main/java/com/genersoft/iot/vmp/storager/mapper/dto/User.java 100755 → 100644
1 -package com.genersoft.iot.vmp.storager.dao.dto; 1 +package com.genersoft.iot.vmp.storager.mapper.dto;
2 2
3 public class User { 3 public class User {
4 4
src/main/java/com/genersoft/iot/vmp/vmanager/jt1078/platform/Jt1078OfCarController.java
@@ -5,7 +5,6 @@ @@ -5,7 +5,6 @@
5 5
6 package com.genersoft.iot.vmp.vmanager.jt1078.platform; 6 package com.genersoft.iot.vmp.vmanager.jt1078.platform;
7 7
8 -import cn.hutool.core.io.resource.InputStreamResource;  
9 import com.alibaba.fastjson2.JSON; 8 import com.alibaba.fastjson2.JSON;
10 import com.alibaba.fastjson2.JSONArray; 9 import com.alibaba.fastjson2.JSONArray;
11 import com.alibaba.fastjson2.JSONException; 10 import com.alibaba.fastjson2.JSONException;
@@ -19,7 +18,6 @@ import com.genersoft.iot.vmp.conf.security.dto.JwtUser; @@ -19,7 +18,6 @@ import com.genersoft.iot.vmp.conf.security.dto.JwtUser;
19 import com.genersoft.iot.vmp.jtt1078.app.VideoServerApp; 18 import com.genersoft.iot.vmp.jtt1078.app.VideoServerApp;
20 import com.genersoft.iot.vmp.jtt1078.publisher.PublishManager; 19 import com.genersoft.iot.vmp.jtt1078.publisher.PublishManager;
21 import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; 20 import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
22 -import com.genersoft.iot.vmp.service.IStreamProxyService;  
23 import com.genersoft.iot.vmp.service.IStreamPushService; 21 import com.genersoft.iot.vmp.service.IStreamPushService;
24 import com.genersoft.iot.vmp.service.StremProxyService1078; 22 import com.genersoft.iot.vmp.service.StremProxyService1078;
25 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; 23 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
@@ -51,6 +49,7 @@ import org.slf4j.Logger; @@ -51,6 +49,7 @@ import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory; 49 import org.slf4j.LoggerFactory;
52 import org.springframework.beans.factory.annotation.Autowired; 50 import org.springframework.beans.factory.annotation.Autowired;
53 import org.springframework.beans.factory.annotation.Value; 51 import org.springframework.beans.factory.annotation.Value;
  52 +import org.springframework.core.io.InputStreamResource;
54 import org.springframework.data.redis.core.RedisTemplate; 53 import org.springframework.data.redis.core.RedisTemplate;
55 import org.springframework.http.HttpHeaders; 54 import org.springframework.http.HttpHeaders;
56 import org.springframework.http.MediaType; 55 import org.springframework.http.MediaType;
@@ -74,6 +73,7 @@ import java.security.Key; @@ -74,6 +73,7 @@ import java.security.Key;
74 import java.security.KeyFactory; 73 import java.security.KeyFactory;
75 import java.security.spec.X509EncodedKeySpec; 74 import java.security.spec.X509EncodedKeySpec;
76 import java.text.MessageFormat; 75 import java.text.MessageFormat;
  76 +import java.text.ParseException;
77 import java.text.SimpleDateFormat; 77 import java.text.SimpleDateFormat;
78 import java.time.LocalDateTime; 78 import java.time.LocalDateTime;
79 import java.util.*; 79 import java.util.*;
@@ -113,10 +113,6 @@ public class Jt1078OfCarController { @@ -113,10 +113,6 @@ public class Jt1078OfCarController {
113 private StremProxyService1078 stremProxyService1078; 113 private StremProxyService1078 stremProxyService1078;
114 private static final long TIME_COUNT = 300000L; 114 private static final long TIME_COUNT = 300000L;
115 private Date tokenDate; 115 private Date tokenDate;
116 - @Autowired  
117 - private IStreamProxyService streamProxyService;  
118 - @Resource  
119 - private Jt1078OfService jt1078OfService;  
120 @Resource 116 @Resource
121 private HisToryRecordService hisToryRecordService; 117 private HisToryRecordService hisToryRecordService;
122 @Resource 118 @Resource
@@ -168,8 +164,29 @@ public class Jt1078OfCarController { @@ -168,8 +164,29 @@ public class Jt1078OfCarController {
168 return resultMap; 164 return resultMap;
169 } 165 }
170 166
  167 + public static String timeCover(String time) {
  168 + // 定义用于解析输入字符串的格式
  169 + SimpleDateFormat inputFormat = new SimpleDateFormat("yyyyMMddHHmmss");
  170 +
  171 + // 定义输出的目标格式
  172 + SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  173 +
  174 + try {
  175 + // 将字符串解析为Date对象
  176 + Date date = inputFormat.parse(time);
  177 +
  178 + // 使用目标格式格式化Date对象
  179 + return outputFormat.format(date);
  180 +
  181 + } catch (ParseException e) {
  182 + log.error("时间转换错误");
  183 + throw new RuntimeException("时间转换错误");
  184 + }
  185 + }
  186 +
171 /** 187 /**
172 * 上传历史视频到FTP 188 * 上传历史视频到FTP
  189 + *
173 * @param stream 流名称 190 * @param stream 流名称
174 */ 191 */
175 @GetMapping("/history/uploading/{stream}") 192 @GetMapping("/history/uploading/{stream}")
@@ -185,20 +202,21 @@ public class Jt1078OfCarController { @@ -185,20 +202,21 @@ public class Jt1078OfCarController {
185 String startTime = split[2]; 202 String startTime = split[2];
186 String endTime = split[3]; 203 String endTime = split[3];
187 hisToryRecordService.addOrUpdRecode( 204 hisToryRecordService.addOrUpdRecode(
188 - HistoryRecord.builder().ip(UUID.randomUUID().toString()) 205 + HistoryRecord.builder().id(UUID.randomUUID().toString())
189 .name(stream) 206 .name(stream)
190 .createTime(new Date()) 207 .createTime(new Date())
191 .sim(sim) 208 .sim(sim)
192 .channel(channel) 209 .channel(channel)
193 - .startTime(startTime)  
194 - .endTime(endTime) 210 + .startTime(timeCover(startTime))
  211 + .endTime(timeCover(endTime))
195 .status(HistoryEnum.UPLOADING.getCode()) 212 .status(HistoryEnum.UPLOADING.getCode())
196 .ip(ftpConfigBean.getHost()) 213 .ip(ftpConfigBean.getHost())
197 .port(ftpConfigBean.getPort()) 214 .port(ftpConfigBean.getPort())
198 .username(ftpConfigBean.getUsername()) 215 .username(ftpConfigBean.getUsername())
199 .password(MD5Util.encrypt(ftpConfigBean.getPassword())) 216 .password(MD5Util.encrypt(ftpConfigBean.getPassword()))
200 - .path(StringUtils.join(ftpConfigBean.getBasePath(),"/",sim,"/channel_",channel))  
201 - .build()); 217 + .path(StringUtils.join(ftpConfigBean.getBasePath(), "/", sim, "/channel_", channel, "/", stream))
  218 + .build());
  219 + updateHistoryRecord();
202 } catch (Exception e) { 220 } catch (Exception e) {
203 throw new RuntimeException(e); 221 throw new RuntimeException(e);
204 } 222 }
@@ -208,7 +226,7 @@ public class Jt1078OfCarController { @@ -208,7 +226,7 @@ public class Jt1078OfCarController {
208 * 定时更新 226 * 定时更新
209 */ 227 */
210 @Scheduled(cron = "0 */2 * * * *") 228 @Scheduled(cron = "0 */2 * * * *")
211 - private void HistoryRecordScheduled(){ 229 + private void HistoryRecordScheduled() {
212 updateHistoryRecord(); 230 updateHistoryRecord();
213 } 231 }
214 232
@@ -224,37 +242,56 @@ public class Jt1078OfCarController { @@ -224,37 +242,56 @@ public class Jt1078OfCarController {
224 * 更新历史视频上传记录 242 * 更新历史视频上传记录
225 */ 243 */
226 @GetMapping("/history/updateHistoryRecord") 244 @GetMapping("/history/updateHistoryRecord")
227 - public void updateHistoryRecord(){ 245 + public void updateHistoryRecord() {
228 List<HistoryRecord> list = hisToryRecordService.getHistoryRecordList(); 246 List<HistoryRecord> list = hisToryRecordService.getHistoryRecordList();
229 if (CollectionUtils.isNotEmpty(list)) { 247 if (CollectionUtils.isNotEmpty(list)) {
230 - List<HistoryRecord> expiredList = list.stream().filter(HistoryRecord::checkCreateTimeExpiration).collect(Collectors.toList()); 248 + //删除过期的文件
  249 + List<HistoryRecord> expiredList = list.stream().filter(ftpUtils::checkCreateTimeExpiration).collect(Collectors.toList());
231 if (CollectionUtils.isNotEmpty(expiredList)) { 250 if (CollectionUtils.isNotEmpty(expiredList)) {
232 try { 251 try {
233 - expiredList = ftpUtils.batchDelete(expiredList); 252 + expiredList = ftpUtils.batchDelete(expiredList).get("true");
234 hisToryRecordService.beachUpdRecode(expiredList); 253 hisToryRecordService.beachUpdRecode(expiredList);
235 } catch (IOException e) { 254 } catch (IOException e) {
236 log.error("删除FTP文件失败"); 255 log.error("删除FTP文件失败");
237 throw new RuntimeException(e); 256 throw new RuntimeException(e);
238 } 257 }
239 } 258 }
240 - List<HistoryRecord> uploadedList = list.stream().filter(HistoryRecord::checkCreateTimeNotExpiration)  
241 - .filter(ftpUtils::checkHistoryVideo).collect(Collectors.toList());  
242 - if (CollectionUtils.isNotEmpty(expiredList)) { 259 + //修改上传成功
  260 + List<HistoryRecord> uploadedList = list.stream()
  261 + .filter(ftpUtils::checkCreateTimeNotExpiration).filter(ftpUtils::checkHistoryVideo)
  262 + .collect(Collectors.toList());
  263 + if (CollectionUtils.isNotEmpty(uploadedList)) {
243 hisToryRecordService.beachUpdRecode(uploadedList); 264 hisToryRecordService.beachUpdRecode(uploadedList);
244 } 265 }
245 - HISTORY_RECORD_MAP = hisToryRecordService.getHistoryRecordList().stream().collect(Collectors.toMap(  
246 - HistoryRecord::getName, // 使用名字作为键  
247 - Function.identity(), // 用户对象作为值  
248 - (existing, replacement) -> {  
249 - throw new IllegalArgumentException(String.format("Duplicate name found: %s", existing.getName()));  
250 - },  
251 - ConcurrentHashMap::new // 保持插入顺序  
252 - )); 266 +
  267 + //修改超时未上传成功的文件
  268 + List<HistoryRecord> updateTimeExpirationList = list.stream().filter(ftpUtils::checkUpdateTimeExpiration).collect(Collectors.toList());
  269 + if (CollectionUtils.isNotEmpty(updateTimeExpirationList)) {
  270 + try {
  271 + Map<String, List<HistoryRecord>> stringListMap = ftpUtils.batchDelete(updateTimeExpirationList);
  272 + expiredList = stringListMap.get("false");
  273 + expiredList.addAll(stringListMap.get("true"));
  274 + hisToryRecordService.beachUpdRecode(expiredList);
  275 + } catch (IOException e) {
  276 + log.error("删除未上传成功FTP文件失败");
  277 + throw new RuntimeException(e);
  278 + }
  279 + }
253 } 280 }
  281 + //刷新内存
  282 + HISTORY_RECORD_MAP = hisToryRecordService.getHistoryRecordList().stream().collect(Collectors.toMap(
  283 + HistoryRecord::getName, // 使用名字作为键
  284 + Function.identity(), // 用户对象作为值
  285 + (existing, replacement) -> {
  286 + throw new IllegalArgumentException(String.format("Duplicate name found: %s", existing.getName()));
  287 + },
  288 + ConcurrentHashMap::new // 保持插入顺序
  289 + ));
254 } 290 }
255 291
256 /** 292 /**
257 * 下载历史视频 293 * 下载历史视频
  294 + *
258 * @param stream 流名称 295 * @param stream 流名称
259 */ 296 */
260 @GetMapping("/history/download/{stream}") 297 @GetMapping("/history/download/{stream}")
@@ -666,7 +703,13 @@ public class Jt1078OfCarController { @@ -666,7 +703,13 @@ public class Jt1078OfCarController {
666 endTime = this.formatTime(endTime).substring(2); 703 endTime = this.formatTime(endTime).substring(2);
667 String msg = this.jt1078ConfigBean.formatMessageHistoryListRTSP(sim, channel, startTime, endTime); 704 String msg = this.jt1078ConfigBean.formatMessageHistoryListRTSP(sim, channel, startTime, endTime);
668 try { 705 try {
669 - HttpClientPostEntity entity = this.httpClientUtil.doPost(url, msg, (String) null); 706 + String KEY = StringUtils.join("history-list:", sim, "_", channel, "_", startTime, "_", endTime);
  707 + String s = (String) redisTemplate.opsForValue().get(KEY);
  708 + HttpClientPostEntity entity = JSONObject.parseObject(s, HttpClientPostEntity.class);
  709 + if (entity == null) {
  710 + entity = this.httpClientUtil.doPost(url, msg, (String) null);
  711 + redisTemplate.opsForValue().set(KEY, JSONObject.toJSONString(entity), 5, TimeUnit.MINUTES);
  712 + }
670 if (Objects.isNull(entity)) { 713 if (Objects.isNull(entity)) {
671 resultMap.put("code", "-1"); 714 resultMap.put("code", "-1");
672 resultMap.put("msg", "请求历史视频列表错误,请联系管理员"); 715 resultMap.put("msg", "请求历史视频列表错误,请联系管理员");
@@ -679,25 +722,16 @@ public class Jt1078OfCarController { @@ -679,25 +722,16 @@ public class Jt1078OfCarController {
679 HashSet<String> set = new HashSet<>(); 722 HashSet<String> set = new HashSet<>();
680 if (Objects.nonNull(dataJO.get("items"))) { 723 if (Objects.nonNull(dataJO.get("items"))) {
681 JSONArray jsonArray = (JSONArray) dataJO.get("items"); 724 JSONArray jsonArray = (JSONArray) dataJO.get("items");
682 - jsonArray =  
683 - new JSONArray(  
684 - jsonArray.stream()  
685 - .map(json -> dateCon((JSONObject) json, sim, channel))  
686 - .filter(jsonObject -> {  
687 - // 获取channelMapping并转换为List以便于比较  
688 - String channelMapping = jsonObject.getString("channelMapping");  
689 - return set.add(channelMapping);  
690 - })  
691 - .collect(Collectors.toList())  
692 - );  
693 - if (jsonArray.size() > 1) {  
694 - jsonArray = filterContainedRanges(jsonArray); 725 + if (!jsonArray.isEmpty()) {
  726 + List<HistoryRecord> list = filterContainedRanges(sim, channel, startTime, endTime, jsonArray);
  727 + dataJO.put("items", list);
695 } 728 }
696 - dataJO.put("items", jsonArray);  
697 } 729 }
698 } 730 }
699 resultMap.put("code", "1"); 731 resultMap.put("code", "1");
700 resultMap.put("obj", hashMap); 732 resultMap.put("obj", hashMap);
  733 + entity = this.httpClientUtil.doPost(url, msg, (String) null);
  734 + redisTemplate.opsForValue().set(KEY, JSONObject.toJSONString(entity), 5, TimeUnit.MINUTES);
701 return resultMap; 735 return resultMap;
702 } 736 }
703 } catch (Exception e) { 737 } catch (Exception e) {
@@ -707,19 +741,23 @@ public class Jt1078OfCarController { @@ -707,19 +741,23 @@ public class Jt1078OfCarController {
707 } 741 }
708 } 742 }
709 743
710 - public static JSONArray filterContainedRanges(JSONArray jsonArray) {  
711 - List<JSONObject> list = new ArrayList<>();  
712 - for (int i = 0; i < jsonArray.size(); i++) {  
713 - list.add(jsonArray.getJSONObject(i)); 744 + public static List<HistoryRecord> filterContainedRanges(String sim, String channel, String startTime, String endTime, JSONArray jsonArray) {
  745 + List<HistoryRecord> list = new ArrayList<>();
  746 + for (Object object : jsonArray) {
  747 + HistoryRecord historyRecord = JSONObject.parseObject(object.toString(), HistoryRecord.class);
  748 + historyRecord.setSim(sim);
  749 + historyRecord.setName(StringUtils.join(sim, "_", channel, "_",
  750 + historyRecord.getStartTime().replace("-", "").replace(":", "").replace(" ", ""), "_",
  751 + historyRecord.getEndTime().replace("-", "").replace(":", "").replace(" ", "")));
  752 + historyRecord.setData(object);
  753 + historyRecord.setChannel(channel);
  754 + HistoryRecord historyRecord1 = HISTORY_RECORD_MAP.get(historyRecord.getName());
  755 + historyRecord.setStatus(historyRecord1 != null ? historyRecord1.getStatus() : HistoryEnum.NOT_UPLOADED.getCode());
  756 + list.add(historyRecord);
714 } 757 }
715 758
716 - // 过滤逻辑  
717 - List<JSONObject> filteredList = list.stream()  
718 - .filter(timeRange -> !isAnyOtherRangeContainingThis(list, timeRange))  
719 - .collect(Collectors.toList());  
720 -  
721 // 将过滤后的列表转换回 JSONArray 759 // 将过滤后的列表转换回 JSONArray
722 - return new JSONArray(filteredList); 760 + return list;
723 } 761 }
724 762
725 private static boolean isAnyOtherRangeContainingThis(List<JSONObject> jsonArray, JSONObject timeRange) { 763 private static boolean isAnyOtherRangeContainingThis(List<JSONObject> jsonArray, JSONObject timeRange) {
@@ -818,9 +856,9 @@ public class Jt1078OfCarController { @@ -818,9 +856,9 @@ public class Jt1078OfCarController {
818 Map<String, Object> resultMap = new HashMap(); 856 Map<String, Object> resultMap = new HashMap();
819 startTime = this.formatTime(startTime); 857 startTime = this.formatTime(startTime);
820 endTime = this.formatTime(endTime); 858 endTime = this.formatTime(endTime);
821 - channelMapping = StringUtils.join(new String[]{sim, "-", channel,"-",startTime,"-",endTime}); 859 + channelMapping = StringUtils.join(new String[]{sim, "-", channel, "-", startTime, "-", endTime});
822 Integer historyPort = createHistoryPort(channelMapping); 860 Integer historyPort = createHistoryPort(channelMapping);
823 - channelMapping = StringUtils.join(new String[]{channelMapping,"_", String.valueOf(historyPort)}); 861 + channelMapping = StringUtils.join(new String[]{channelMapping, "_", String.valueOf(historyPort)});
824 this.redisTemplate.opsForValue().set(key, channelMapping, 1L, TimeUnit.HOURS); 862 this.redisTemplate.opsForValue().set(key, channelMapping, 1L, TimeUnit.HOURS);
825 StreamContent streamContent = this.getStreamContentPlayURL(StringUtils.join(new String[]{channelMapping})); 863 StreamContent streamContent = this.getStreamContentPlayURL(StringUtils.join(new String[]{channelMapping}));
826 if (Objects.nonNull(streamContent) && StringUtils.isNotEmpty(streamContent.getWs_flv())) { 864 if (Objects.nonNull(streamContent) && StringUtils.isNotEmpty(streamContent.getWs_flv())) {
@@ -935,12 +973,12 @@ public class Jt1078OfCarController { @@ -935,12 +973,12 @@ public class Jt1078OfCarController {
935 } 973 }
936 String[] split = value.split("-"); 974 String[] split = value.split("-");
937 Map<String, Object> stringObjectMap = stopHistory(split[1], split[0]); 975 Map<String, Object> stringObjectMap = stopHistory(split[1], split[0]);
938 - while (true){  
939 - if (stringObjectMap.get("code").equals("1")){  
940 - log.info("{} 历史视频断流成功",value); 976 + while (true) {
  977 + if (stringObjectMap.get("code").equals("1")) {
  978 + log.info("{} 历史视频断流成功", value);
941 break; 979 break;
942 - }else {  
943 - throw new ServiceException(String.format(" %s 历史视频断流失败",value)); 980 + } else {
  981 + throw new ServiceException(String.format(" %s 历史视频断流失败", value));
944 } 982 }
945 } 983 }
946 strings.remove(value); 984 strings.remove(value);
@@ -1021,6 +1059,7 @@ public class Jt1078OfCarController { @@ -1021,6 +1059,7 @@ public class Jt1078OfCarController {
1021 1059
1022 /** 1060 /**
1023 * 获取视频播放地址 1061 * 获取视频播放地址
  1062 + *
1024 * @param stream 流名称 1063 * @param stream 流名称
1025 * @return 流信息 1064 * @return 流信息
1026 */ 1065 */
@@ -1156,15 +1195,17 @@ public class Jt1078OfCarController { @@ -1156,15 +1195,17 @@ public class Jt1078OfCarController {
1156 if (Objects.equals(rsultMap.get("code"), "4000") || Objects.equals(rsultMap.get("code"), 4000)) { 1195 if (Objects.equals(rsultMap.get("code"), "4000") || Objects.equals(rsultMap.get("code"), 4000)) {
1157 throw new ControllerException(ErrorCode.ERROR304); 1196 throw new ControllerException(ErrorCode.ERROR304);
1158 } 1197 }
  1198 + if (Objects.equals(rsultMap.get("code"), "410") || Objects.equals(rsultMap.get("code"), 410)) {
  1199 + throw new ControllerException(ErrorCode.ERROR400);
  1200 + }
1159 1201
1160 if (flag) { 1202 if (flag) {
1161 if (StringUtils.isNoneBlank(new CharSequence[]{rsultMap.get("msg") + ""})) { 1203 if (StringUtils.isNoneBlank(new CharSequence[]{rsultMap.get("msg") + ""})) {
1162 throw new ControllerException(304, String.valueOf(rsultMap.get("msg"))); 1204 throw new ControllerException(304, String.valueOf(rsultMap.get("msg")));
1163 } 1205 }
1164 } 1206 }
1165 - } catch (Exception var6) {  
1166 - Exception e = var6;  
1167 - log.error("entity.getResultStr():{{}}", entity.getResultStr(), e.getMessage()); 1207 + } catch (Exception e) {
  1208 + log.error("entity.getResultStr():{{}}", e.getMessage());
1168 throw new ControllerException(500, e.getMessage()); 1209 throw new ControllerException(500, e.getMessage());
1169 } 1210 }
1170 } 1211 }
src/main/java/com/genersoft/iot/vmp/vmanager/jt1078/platform/ben/HttpClientPostEntity.java
1 package com.genersoft.iot.vmp.vmanager.jt1078.platform.ben; 1 package com.genersoft.iot.vmp.vmanager.jt1078.platform.ben;
2 2
3 3
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Data;
  6 +import lombok.NoArgsConstructor;
  7 +import lombok.experimental.SuperBuilder;
4 import org.apache.http.client.CookieStore; 8 import org.apache.http.client.CookieStore;
5 9
6 import java.util.Map; 10 import java.util.Map;
@@ -9,52 +13,14 @@ import java.util.Map; @@ -9,52 +13,14 @@ import java.util.Map;
9 * @author liujun 13 * @author liujun
10 * @date 2024年10月21日 15:20 14 * @date 2024年10月21日 15:20
11 */ 15 */
12 - 16 +@Data
  17 +@SuperBuilder
  18 +@AllArgsConstructor
  19 +@NoArgsConstructor
13 public class HttpClientPostEntity { 20 public class HttpClientPostEntity {
14 private String resultStr; 21 private String resultStr;
15 private Map<String, String> headers; 22 private Map<String, String> headers;
16 private CookieStore cookieStore; 23 private CookieStore cookieStore;
17 -  
18 private Integer port; 24 private Integer port;
19 private Integer httpPort; 25 private Integer httpPort;
20 -  
21 - public String getResultStr() {  
22 - return resultStr;  
23 - }  
24 -  
25 - public void setResultStr(String resultStr) {  
26 - this.resultStr = resultStr;  
27 - }  
28 -  
29 - public Map<String, String> getHeaders() {  
30 - return headers;  
31 - }  
32 -  
33 - public void setHeaders(Map<String, String> headers) {  
34 - this.headers = headers;  
35 - }  
36 -  
37 - public CookieStore getCookieStore() {  
38 - return cookieStore;  
39 - }  
40 -  
41 - public void setCookieStore(CookieStore cookieStore) {  
42 - this.cookieStore = cookieStore;  
43 - }  
44 -  
45 - public Integer getPort() {  
46 - return port;  
47 - }  
48 -  
49 - public void setPort(Integer port) {  
50 - this.port = port;  
51 - }  
52 -  
53 - public Integer getHttpPort() {  
54 - return httpPort;  
55 - }  
56 -  
57 - public void setHttpPort(Integer httpPort) {  
58 - this.httpPort = httpPort;  
59 - }  
60 } 26 }
src/main/java/com/genersoft/iot/vmp/vmanager/jt1078/platform/config/FtpConfigBean.java
@@ -52,4 +52,8 @@ public class FtpConfigBean { @@ -52,4 +52,8 @@ public class FtpConfigBean {
52 * 过期天数自动删除 默认7天 52 * 过期天数自动删除 默认7天
53 */ 53 */
54 private long expirationTime = 7; 54 private long expirationTime = 7;
  55 + /**
  56 + * 未上传成功超时时间
  57 + */
  58 + private long timeOut = 300;
55 } 59 }
src/main/java/com/genersoft/iot/vmp/vmanager/jt1078/platform/config/Jt1078ConfigBean.java
1 -package com.genersoft.iot.vmp.vmanager.jt1078.platform.config; import com.genersoft.iot.vmp.vmanager.jt1078.platform.Jt1078OfCarController; import lombok.Data; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.*; @Data @Component public class Jt1078ConfigBean { @Value("${tuohua.bsth.jt1078.url}") private String jt1078Url; @Value("${tuohua.bsth.jt1078.sendPort}") private String jt1078SendPort; @Value("${tuohua.bsth.jt1078.stopSendPort}") private String stopSendPort; @Value("${tuohua.bsth.jt1078.historyListPort}") private String historyListPort; @Value("${tuohua.bsth.jt1078.history_upload}") private String historyUpload = "9206"; @Value("${tuohua.bsth.jt1078.playHistoryPort}") private String playHistoryPort; @Value("${tuohua.bsth.jt1078.ports}") private String portsOf1078; @Value("${tuohua.bsth.jt1078.pushURL}") private String pushURL; @Value("${tuohua.bsth.jt1078.stopPushURL}") private String stopPUshURL; private Integer start1078Port; private Integer end1078Port; @Value("${tuohua.bsth.jt1078.get.url}") private String getURL; @Value("${tuohua.bsth.jt1078.addPortVal}") private Integer addPort; @Value("${tuohua.bsth.jt1078.ws}") private String ws; @Value("${tuohua.bsth.jt1078.wss}") private String wss; @Value("${tuohua.bsth.jt1078.downloadFLV}") private String downloadFlv; @Value("${tuohua.bsth.jt1078.port}") private Integer port; @Value("${tuohua.bsth.jt1078.httpPort}") private Integer httpPort; @Value("${spring.profiles.active}") private String profilesActive; @Value("${media.pushKey}") private String pushKey; @Resource private RedisTemplate<String, Integer> redisTemplate; @Resource private FtpConfigBean ftpConfigBean; public Integer getPort() { if (port == null) { return 30000; } return port; } public Integer getHttpPort() { if (httpPort == null) { return 30000; } return httpPort; } private Integer getIntPort() { return profilesActive.equals("wx-local") ? 10000 : 0; } @PostConstruct public void initMap() { Set<String> historyPortKeys = redisTemplate.keys("history:port:*"); Set<String> keys = redisTemplate.keys("tag:*"); Set<String> patrolKeys = redisTemplate.keys("patrol:stream:*"); if (!historyPortKeys.isEmpty()) { keys.addAll(historyPortKeys); } if (!patrolKeys.isEmpty()) { keys.addAll(patrolKeys); } if (keys != null) { redisTemplate.delete(keys); } Map<Integer, Set<String>> hashMap = new HashMap<>(); for (int number = getStart1078Port(); number <= getEnd1078Port(); number++) { hashMap.put(number, new HashSet<>()); } Jt1078OfCarController.map.putAll(hashMap); } private static final String SEND_IO_MESSAGE_RTSP = "{ \"messageId\": 37121, \"properties\": 0, \"clientId\": \"{clientId}\", \"serialNo\": \"1\", \"ip\": \"{ip}\", \"tcpPort\": \"{tcpPort}\", \"udpPort\": \"{udpPort}\", \"channelNo\": \"{channelNo}\", \"mediaType\": \"1\", \"streamType\": \"1\"}"; private static final String SEND_IO_MESSAGE_RTSP_STOP = "{\"messageId\": 37122,\"properties\": 0,\"clientId\": \"{clientId}\",\"serialNo\": \"1\",\"channelNo\": \"{channelNo}\",\"command\": \"0\",\"closeType\": \"0\",\"streamType\": \"1\"}"; private static final String SEND_IO_HISTORY_RTSP = "{\"msgid\":37381,\"clientId\":\"{clientId}\",\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"mediaType\":0,\"streamType\":0,\"storageType\":0,\"channelId\":{channelNo}}"; private static final String SEND_IO_PLAY_RTSP = "{\"ip\":\"{ip}\",\"tcpPort\":{tcpPort},\"udpPort\":{udpPort},\"channelNo\":\"{channelNo}\",\"mediaType\":0,\"streamType\":0,\"storageType\":0,\"playbackType\":0,\"playbackSpeed\":1,\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"clientId\":\"{sim}\",\"messageId\":37377}"; public String formatMessageId(String sim, String channel, RtspConfigBean configBean, Integer port) { String msg = StringUtils.replace("{ \"messageId\": 37121, \"properties\": 0, \"clientId\": \"{clientId}\", \"serialNo\": \"1\", \"ip\": \"{ip}\", \"tcpPort\": \"{tcpPort}\", \"udpPort\": \"{udpPort}\", \"channelNo\": \"{channelNo}\", \"mediaType\": \"1\", \"streamType\": \"1\"}", "{clientId}", sim); msg = StringUtils.replace(msg, "{tcpPort}", (port.intValue() + getIntPort() + getAddPort()) + ""); msg = StringUtils.replace(msg, "{udpPort}", (port.intValue() + getIntPort() + getAddPort()) + ""); msg = StringUtils.replace(msg, "{channelNo}", channel); return StringUtils.replace(msg, "{ip}", configBean.getRtspIp()); } public String formatMessageStop(String sim, String channel) { String msg = StringUtils.replace("{\"messageId\": 37122,\"properties\": 0,\"clientId\": \"{clientId}\",\"serialNo\": \"1\",\"channelNo\": \"{channelNo}\",\"command\": \"0\",\"closeType\": \"0\",\"streamType\": \"1\"}", "{clientId}", sim); return StringUtils.replace(msg, "{channelNo}", channel); } public String formatMessageHistoryListRTSP(String sim, String channel, String startTime, String endTime) { String msg = StringUtils.replace("{\"msgid\":37381,\"clientId\":\"{clientId}\",\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"mediaType\":0,\"streamType\":1,\"storageType\":0,\"channelNo\":{channelNo}}", "{clientId}", sim); msg = StringUtils.replace(msg, "{startTime}", startTime); msg = StringUtils.replace(msg, "{endTime}", endTime); return StringUtils.replace(msg, "{channelNo}", channel); } public String formatMessageHistoryPlayRTSP(String sim, String channel, String startTime, String endTime, RtspConfigBean configBean, Integer port) { String msg = StringUtils.replace("{\"ip\":\"{ip}\",\"tcpPort\":{tcpPort},\"udpPort\":{udpPort},\"channelNo\":\"{channelNo}\",\"mediaType\":0,\"streamType\":0,\"storageType\":0,\"playbackType\":0,\"playbackSpeed\":1,\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"clientId\":\"{sim}\",\"messageId\":37377}", "{clientId}", sim); msg = StringUtils.replace(msg, "{startTime}", startTime); msg = StringUtils.replace(msg, "{endTime}", endTime); msg = StringUtils.replace(msg, "{channelNo}", channel); msg = StringUtils.replace(msg, "{tcpPort}", (port.intValue() + getIntPort() +getAddPort()) + ""); msg = StringUtils.replace(msg, "{udpPort}", (port.intValue() + getIntPort() + getAddPort()) + ""); msg = StringUtils.replace(msg, "{sim}", sim); return StringUtils.replace(msg, "{ip}", configBean.getRtspIp()); } public String formatMessageHistoryUpload(String stream) { if (StringUtils.isBlank(stream)) { throw new RuntimeException("上传参数不能为空"); } String[] split = stream.split("_"); if (split.length < 4){ throw new RuntimeException("上传参数异常, 请联系管理员"); } String sim = split[0]; String channel = split[1]; String startTime = split[2]; String endTime = split[3]; String msg = StringUtils.replace("{\n" + " \"clientId\": \"{clientId}\",\n" + " \"ip\": \"{ip}\",\n" + " \"port\": {port},\n" + " \"username\": \"{username}\",\n" + " \"password\": \"{password}\",\n" + " \"path\": \"{path}\",\n" + " \"channelNo\": {channel},\n" + " \"startTime\": \"{startTime}\",\n" + " \"endTime\": \"{endTime}\",\n" + " \"mediaType\": 0,\n" + " \"streamType\": 1,\n" + " \"storageType\": 1,\n" + " \"condition\": 6\n" + "}","{clientId}",sim); msg = StringUtils.replace(msg, "{ip}", ftpConfigBean.getHost()); msg = StringUtils.replace(msg, "{port}", ftpConfigBean.getPort().toString()); msg = StringUtils.replace(msg, "{username}", channel); msg = StringUtils.replace(msg, "{password}", ftpConfigBean.getPassword()); msg = StringUtils.replace(msg, "{path}", StringUtils.join(ftpConfigBean.getBasePath(),"/",sim,"/channel_",channel)); msg = StringUtils.replace(msg, "{channelNo}", channel); msg = StringUtils.replace(msg, "{startTime}", startTime); return StringUtils.replace(msg, "{endTime}", endTime); } public String formatMessageHistoryStopRTSP(String sim, String channel, RtspConfigBean configBean) { String msg = StringUtils.replace("{\"playbackMode\":2,\"channelNo\":{channelNo},\"playbackSpeed\":0,\"clientId\":\"{sim}\"}", "{sim}", sim); return StringUtils.replace(msg, "{channelNo}", channel); } public String formatPushURL(String pushKey, int port, int httpPort) { String msg = StringUtils.replace(this.pushURL, "{pushKey}", pushKey); msg = StringUtils.replace(msg, "{port}", String.valueOf(port)); return StringUtils.replace(msg, "{httpPort}", String.valueOf(httpPort)); } public String formatStopPushURL(String pushKey, int port, int httpPort) { String msg = StringUtils.replace(this.stopPUshURL, "{pushKey}", pushKey); msg = StringUtils.replace(msg, "{port}", String.valueOf(port)); return StringUtils.replace(msg, "{httpPort}", String.valueOf(httpPort)); } public String formatVideoURL(String stream) { String url = StringUtils.replace(getGetURL(), "{stream}", stream); if (!StringUtils.endsWith(url, ".flv")) { url = url + ".flv"; } return url; } public String getJt1078Url() { return this.jt1078Url; } public String getJt1078SendPort() { return this.jt1078SendPort; } public String getStopSendPort() { return this.stopSendPort; } public String getHistoryListPort() { return this.historyListPort; } public String getPlayHistoryPort() { return this.playHistoryPort; } public String getPushURL() { return this.pushURL; } public Integer getStart1078Port() { if (Objects.isNull(this.start1078Port)) this.start1078Port = Integer.valueOf(Integer.parseInt(StringUtils.substringBefore(this.portsOf1078, ","))); return this.start1078Port; } public Integer getEnd1078Port() { if (Objects.isNull(this.end1078Port)) this.end1078Port = Integer.valueOf(Integer.parseInt(StringUtils.substringAfter(this.portsOf1078, ","))); return this.end1078Port; } public String getPushKey(){ if (Objects.isNull(this.pushKey)){ this.pushKey = "?callId=41db35390ddad33f83944f44b8b75ded"; } return "?callId="+this.pushKey; } public String getStopPUshURL() { return this.stopPUshURL; } public String getGetURL() { return this.getURL; } public Integer getAddPort() { return this.addPort; } public String getWs() { return this.ws; } public String getWss() { return this.wss; } public String getDownloadFlv() { return downloadFlv; } public String getPortsOf1078() { return portsOf1078; } }  
2 \ No newline at end of file 1 \ No newline at end of file
  2 +package com.genersoft.iot.vmp.vmanager.jt1078.platform.config; import com.genersoft.iot.vmp.vmanager.jt1078.platform.Jt1078OfCarController; import lombok.Data; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.*; @Data @Component public class Jt1078ConfigBean { @Value("${tuohua.bsth.jt1078.url}") private String jt1078Url; @Value("${tuohua.bsth.jt1078.sendPort}") private String jt1078SendPort; @Value("${tuohua.bsth.jt1078.stopSendPort}") private String stopSendPort; @Value("${tuohua.bsth.jt1078.historyListPort}") private String historyListPort; @Value("${tuohua.bsth.jt1078.history_upload}") private String historyUpload = "9206"; @Value("${tuohua.bsth.jt1078.playHistoryPort}") private String playHistoryPort; @Value("${tuohua.bsth.jt1078.ports}") private String portsOf1078; @Value("${tuohua.bsth.jt1078.pushURL}") private String pushURL; @Value("${tuohua.bsth.jt1078.stopPushURL}") private String stopPUshURL; private Integer start1078Port; private Integer end1078Port; @Value("${tuohua.bsth.jt1078.get.url}") private String getURL; @Value("${tuohua.bsth.jt1078.addPortVal}") private Integer addPort; @Value("${tuohua.bsth.jt1078.ws}") private String ws; @Value("${tuohua.bsth.jt1078.wss}") private String wss; @Value("${tuohua.bsth.jt1078.downloadFLV}") private String downloadFlv; @Value("${tuohua.bsth.jt1078.port}") private Integer port; @Value("${tuohua.bsth.jt1078.httpPort}") private Integer httpPort; @Value("${spring.profiles.active}") private String profilesActive; @Value("${media.pushKey}") private String pushKey; @Resource private RedisTemplate<String, Integer> redisTemplate; @Resource private FtpConfigBean ftpConfigBean; public Integer getPort() { if (port == null) { return 30000; } return port; } public Integer getHttpPort() { if (httpPort == null) { return 30000; } return httpPort; } private Integer getIntPort() { return profilesActive.equals("wx-local") ? 10000 : 0; } @PostConstruct public void initMap() { Set<String> historyPortKeys = redisTemplate.keys("history:port:*"); Set<String> keys = redisTemplate.keys("tag:*"); Set<String> patrolKeys = redisTemplate.keys("patrol:stream:*"); Set<String> historyListKeys = redisTemplate.keys("history-list:*"); if (!historyPortKeys.isEmpty()) { keys.addAll(historyPortKeys); } if (!patrolKeys.isEmpty()) { keys.addAll(patrolKeys); } if (!historyListKeys.isEmpty()) { keys.addAll(historyListKeys); } if (keys != null) { redisTemplate.delete(keys); } Map<Integer, Set<String>> hashMap = new HashMap<>(); for (int number = getStart1078Port(); number <= getEnd1078Port(); number++) { hashMap.put(number, new HashSet<>()); } Jt1078OfCarController.map.putAll(hashMap); } private static final String SEND_IO_MESSAGE_RTSP = "{ \"messageId\": 37121, \"properties\": 0, \"clientId\": \"{clientId}\", \"serialNo\": \"1\", \"ip\": \"{ip}\", \"tcpPort\": \"{tcpPort}\", \"udpPort\": \"{udpPort}\", \"channelNo\": \"{channelNo}\", \"mediaType\": \"1\", \"streamType\": \"1\"}"; private static final String SEND_IO_MESSAGE_RTSP_STOP = "{\"messageId\": 37122,\"properties\": 0,\"clientId\": \"{clientId}\",\"serialNo\": \"1\",\"channelNo\": \"{channelNo}\",\"command\": \"0\",\"closeType\": \"0\",\"streamType\": \"1\"}"; private static final String SEND_IO_HISTORY_RTSP = "{\"msgid\":37381,\"clientId\":\"{clientId}\",\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"mediaType\":0,\"streamType\":0,\"storageType\":0,\"channelId\":{channelNo}}"; private static final String SEND_IO_PLAY_RTSP = "{\"ip\":\"{ip}\",\"tcpPort\":{tcpPort},\"udpPort\":{udpPort},\"channelNo\":\"{channelNo}\",\"mediaType\":0,\"streamType\":0,\"storageType\":0,\"playbackType\":0,\"playbackSpeed\":1,\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"clientId\":\"{sim}\",\"messageId\":37377}"; public String formatMessageId(String sim, String channel, RtspConfigBean configBean, Integer port) { String msg = StringUtils.replace("{ \"messageId\": 37121, \"properties\": 0, \"clientId\": \"{clientId}\", \"serialNo\": \"1\", \"ip\": \"{ip}\", \"tcpPort\": \"{tcpPort}\", \"udpPort\": \"{udpPort}\", \"channelNo\": \"{channelNo}\", \"mediaType\": \"1\", \"streamType\": \"1\"}", "{clientId}", sim); msg = StringUtils.replace(msg, "{tcpPort}", (port.intValue() + getIntPort() + getAddPort()) + ""); msg = StringUtils.replace(msg, "{udpPort}", (port.intValue() + getIntPort() + getAddPort()) + ""); msg = StringUtils.replace(msg, "{channelNo}", channel); return StringUtils.replace(msg, "{ip}", configBean.getRtspIp()); } public String formatMessageStop(String sim, String channel) { String msg = StringUtils.replace("{\"messageId\": 37122,\"properties\": 0,\"clientId\": \"{clientId}\",\"serialNo\": \"1\",\"channelNo\": \"{channelNo}\",\"command\": \"0\",\"closeType\": \"0\",\"streamType\": \"1\"}", "{clientId}", sim); return StringUtils.replace(msg, "{channelNo}", channel); } public String formatMessageHistoryListRTSP(String sim, String channel, String startTime, String endTime) { String msg = StringUtils.replace("{\"msgid\":37381,\"clientId\":\"{clientId}\",\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"mediaType\":0,\"streamType\":1,\"storageType\":0,\"channelNo\":{channelNo}}", "{clientId}", sim); msg = StringUtils.replace(msg, "{startTime}", startTime); msg = StringUtils.replace(msg, "{endTime}", endTime); return StringUtils.replace(msg, "{channelNo}", channel); } public String formatMessageHistoryPlayRTSP(String sim, String channel, String startTime, String endTime, RtspConfigBean configBean, Integer port) { String msg = StringUtils.replace("{\"ip\":\"{ip}\",\"tcpPort\":{tcpPort},\"udpPort\":{udpPort},\"channelNo\":\"{channelNo}\",\"mediaType\":0,\"streamType\":0,\"storageType\":0,\"playbackType\":0,\"playbackSpeed\":1,\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"clientId\":\"{sim}\",\"messageId\":37377}", "{clientId}", sim); msg = StringUtils.replace(msg, "{startTime}", startTime); msg = StringUtils.replace(msg, "{endTime}", endTime); msg = StringUtils.replace(msg, "{channelNo}", channel); msg = StringUtils.replace(msg, "{tcpPort}", (port.intValue() + getIntPort() +getAddPort()) + ""); msg = StringUtils.replace(msg, "{udpPort}", (port.intValue() + getIntPort() + getAddPort()) + ""); msg = StringUtils.replace(msg, "{sim}", sim); return StringUtils.replace(msg, "{ip}", configBean.getRtspIp()); } public String formatMessageHistoryUpload(String stream) { if (StringUtils.isBlank(stream)) { throw new RuntimeException("上传参数不能为空"); } String[] split = stream.split("_"); if (split.length < 4){ throw new RuntimeException("上传参数异常, 请联系管理员"); } String sim = split[0]; String channel = split[1]; String startTime = split[2]; String endTime = split[3]; String msg = StringUtils.replace("{\n" + " \"clientId\": \"{clientId}\",\n" + " \"ip\": \"{ip}\",\n" + " \"port\": {port},\n" + " \"username\": \"{username}\",\n" + " \"password\": \"{password}\",\n" + " \"path\": \"{path}\",\n" + " \"channelNo\": {channel},\n" + " \"startTime\": \"{startTime}\",\n" + " \"endTime\": \"{endTime}\",\n" + " \"mediaType\": 0,\n" + " \"streamType\": 1,\n" + " \"storageType\": 1,\n" + " \"condition\": 6\n" + "}","{clientId}",sim); msg = StringUtils.replace(msg, "{ip}", ftpConfigBean.getHost()); msg = StringUtils.replace(msg, "{port}", ftpConfigBean.getPort().toString()); msg = StringUtils.replace(msg, "{username}", ftpConfigBean.getUsername()); msg = StringUtils.replace(msg, "{password}", ftpConfigBean.getPassword()); msg = StringUtils.replace(msg, "{path}", StringUtils.join(ftpConfigBean.getBasePath(),"/",sim,"/channel_",channel,"/",stream)); msg = StringUtils.replace(msg, "{channel}", channel); msg = StringUtils.replace(msg, "{startTime}", Jt1078OfCarController.timeCover(startTime)); return StringUtils.replace(msg, "{endTime}", Jt1078OfCarController.timeCover(endTime)); } public String formatMessageHistoryStopRTSP(String sim, String channel, RtspConfigBean configBean) { String msg = StringUtils.replace("{\"playbackMode\":2,\"channelNo\":{channelNo},\"playbackSpeed\":0,\"clientId\":\"{sim}\"}", "{sim}", sim); return StringUtils.replace(msg, "{channelNo}", channel); } public String formatPushURL(String pushKey, int port, int httpPort) { String msg = StringUtils.replace(this.pushURL, "{pushKey}", pushKey); msg = StringUtils.replace(msg, "{port}", String.valueOf(port)); return StringUtils.replace(msg, "{httpPort}", String.valueOf(httpPort)); } public String formatStopPushURL(String pushKey, int port, int httpPort) { String msg = StringUtils.replace(this.stopPUshURL, "{pushKey}", pushKey); msg = StringUtils.replace(msg, "{port}", String.valueOf(port)); return StringUtils.replace(msg, "{httpPort}", String.valueOf(httpPort)); } public String formatVideoURL(String stream) { String url = StringUtils.replace(getGetURL(), "{stream}", stream); if (!StringUtils.endsWith(url, ".flv")) { url = url + ".flv"; } return url; } public String getJt1078Url() { return this.jt1078Url; } public String getJt1078SendPort() { return this.jt1078SendPort; } public String getStopSendPort() { return this.stopSendPort; } public String getHistoryListPort() { return this.historyListPort; } public String getPlayHistoryPort() { return this.playHistoryPort; } public String getPushURL() { return this.pushURL; } public Integer getStart1078Port() { if (Objects.isNull(this.start1078Port)) this.start1078Port = Integer.valueOf(Integer.parseInt(StringUtils.substringBefore(this.portsOf1078, ","))); return this.start1078Port; } public Integer getEnd1078Port() { if (Objects.isNull(this.end1078Port)) this.end1078Port = Integer.valueOf(Integer.parseInt(StringUtils.substringAfter(this.portsOf1078, ","))); return this.end1078Port; } public String getPushKey(){ if (Objects.isNull(this.pushKey)){ this.pushKey = "?callId=41db35390ddad33f83944f44b8b75ded"; } return "?callId="+this.pushKey; } public String getStopPUshURL() { return this.stopPUshURL; } public String getGetURL() { return this.getURL; } public Integer getAddPort() { return this.addPort; } public String getWs() { return this.ws; } public String getWss() { return this.wss; } public String getDownloadFlv() { return downloadFlv; } public String getPortsOf1078() { return portsOf1078; } }
3 \ No newline at end of file 3 \ No newline at end of file
src/main/java/com/genersoft/iot/vmp/vmanager/jt1078/platform/config/TuohuaConfigBean.java
@@ -169,8 +169,8 @@ public class TuohuaConfigBean { @@ -169,8 +169,8 @@ public class TuohuaConfigBean {
169 if (CollectionUtils.isNotEmpty(carData)) { 169 if (CollectionUtils.isNotEmpty(carData)) {
170 if (StringUtils.equals(profileActive, "wx-local")) { 170 if (StringUtils.equals(profileActive, "wx-local")) {
171 CarData value = carData.get(0); 171 CarData value = carData.get(0);
172 - value.setSim("13800009998");  
173 -// value.setSim("123456789011"); 172 +// value.setSim("1030715050");
  173 + value.setSim("123456789011");
174 map.put(value.getSim(), value); 174 map.put(value.getSim(), value);
175 }else { 175 }else {
176 for (CarData carDatum : carData) { 176 for (CarData carDatum : carData) {
@@ -319,8 +319,8 @@ public class TuohuaConfigBean { @@ -319,8 +319,8 @@ public class TuohuaConfigBean {
319 hashMap.put("abnormalStatus",abnormalStatus); 319 hashMap.put("abnormalStatus",abnormalStatus);
320 320
321 if (StringUtils.equals(profileActive, "wx-local")) { 321 if (StringUtils.equals(profileActive, "wx-local")) {
322 - hashMap.put("sim","13800009998");  
323 -// hashMap.put("sim", "123456789011"); 322 +// hashMap.put("sim","1030715050");
  323 + hashMap.put("sim", "123456789011");
324 } 324 }
325 return hashMap; 325 return hashMap;
326 } 326 }
src/main/java/com/genersoft/iot/vmp/vmanager/jt1078/platform/domain/HistoryRecord.java
1 package com.genersoft.iot.vmp.vmanager.jt1078.platform.domain; 1 package com.genersoft.iot.vmp.vmanager.jt1078.platform.domain;
2 2
  3 +import com.baomidou.mybatisplus.annotation.TableField;
3 import com.fasterxml.jackson.annotation.JsonFormat; 4 import com.fasterxml.jackson.annotation.JsonFormat;
4 import com.genersoft.iot.vmp.vmanager.jt1078.platform.config.FtpConfigBean; 5 import com.genersoft.iot.vmp.vmanager.jt1078.platform.config.FtpConfigBean;
5 import com.genersoft.iot.vmp.vmanager.util.FtpUtils; 6 import com.genersoft.iot.vmp.vmanager.util.FtpUtils;
@@ -77,6 +78,11 @@ public class HistoryRecord { @@ -77,6 +78,11 @@ public class HistoryRecord {
77 */ 78 */
78 private String endTime; 79 private String endTime;
79 /** 80 /**
  81 + * 原始数据
  82 + */
  83 + @TableField(exist = false)
  84 + private Object data;
  85 + /**
80 * 修改时间 86 * 修改时间
81 */ 87 */
82 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 88 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -101,21 +107,5 @@ public class HistoryRecord { @@ -101,21 +107,5 @@ public class HistoryRecord {
101 */ 107 */
102 private String remark; 108 private String remark;
103 109
104 - public static boolean checkCreateTimeExpiration(HistoryRecord historyRecord) {  
105 - long l = calculateDaysBetween(historyRecord.createTime);  
106 - return l > getBean(FtpConfigBean.class).getExpirationTime();  
107 - }  
108 -  
109 - public static boolean checkCreateTimeNotExpiration(HistoryRecord historyRecord) {  
110 - long l = calculateDaysBetween(historyRecord.createTime);  
111 - return l < getBean(FtpConfigBean.class).getExpirationTime();  
112 - }  
113 -  
114 110
115 - private static long calculateDaysBetween(Date startDate) {  
116 - // 将Date转换为LocalDate  
117 - LocalDate startLocalDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();  
118 - // 计算两个LocalDate对象之间的天数差异  
119 - return ChronoUnit.DAYS.between(startLocalDate, LocalDate.now());  
120 - }  
121 } 111 }
src/main/java/com/genersoft/iot/vmp/vmanager/jt1078/platform/mapper/HisToryRecordMapper.java
@@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.vmanager.jt1078.platform.mapper; @@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.vmanager.jt1078.platform.mapper;
3 import com.genersoft.iot.vmp.vmanager.jt1078.platform.domain.HistoryRecord; 3 import com.genersoft.iot.vmp.vmanager.jt1078.platform.domain.HistoryRecord;
4 import org.apache.ibatis.annotations.Mapper; 4 import org.apache.ibatis.annotations.Mapper;
5 import org.apache.ibatis.annotations.Param; 5 import org.apache.ibatis.annotations.Param;
  6 +import org.apache.ibatis.annotations.Select;
6 7
7 import java.util.List; 8 import java.util.List;
8 9
src/main/java/com/genersoft/iot/vmp/vmanager/jt1078/platform/service/HisToryRecordService.java
@@ -18,7 +18,7 @@ public interface HisToryRecordService { @@ -18,7 +18,7 @@ public interface HisToryRecordService {
18 /** 18 /**
19 * 修改历史视频记录 19 * 修改历史视频记录
20 */ 20 */
21 - String beachUpdRecode(List<HistoryRecord> record); 21 + void beachUpdRecode(List<HistoryRecord> record);
22 /** 22 /**
23 * 历史视频上传记录列表 23 * 历史视频上传记录列表
24 */ 24 */
src/main/java/com/genersoft/iot/vmp/vmanager/jt1078/platform/service/impl/HisToryRecordServiceImpl.java
@@ -4,12 +4,8 @@ import com.genersoft.iot.vmp.vmanager.jt1078.platform.domain.HistoryRecord; @@ -4,12 +4,8 @@ import com.genersoft.iot.vmp.vmanager.jt1078.platform.domain.HistoryRecord;
4 import com.genersoft.iot.vmp.vmanager.jt1078.platform.mapper.HisToryRecordMapper; 4 import com.genersoft.iot.vmp.vmanager.jt1078.platform.mapper.HisToryRecordMapper;
5 import com.genersoft.iot.vmp.vmanager.jt1078.platform.service.HisToryRecordService; 5 import com.genersoft.iot.vmp.vmanager.jt1078.platform.service.HisToryRecordService;
6 import lombok.AllArgsConstructor; 6 import lombok.AllArgsConstructor;
7 -import org.springframework.data.redis.cache.RedisCache;  
8 import org.springframework.stereotype.Service; 7 import org.springframework.stereotype.Service;
9 8
10 -import javax.annotation.Resource;  
11 -import java.util.Collections;  
12 -import java.util.Date;  
13 import java.util.List; 9 import java.util.List;
14 10
15 /** 11 /**
@@ -22,8 +18,6 @@ import java.util.List; @@ -22,8 +18,6 @@ import java.util.List;
22 public class HisToryRecordServiceImpl implements HisToryRecordService { 18 public class HisToryRecordServiceImpl implements HisToryRecordService {
23 19
24 private final HisToryRecordMapper hisToryRecordMapper; 20 private final HisToryRecordMapper hisToryRecordMapper;
25 - @Resource  
26 - private RedisCache redisCache;  
27 /** 21 /**
28 * 添加历史下载记录 22 * 添加历史下载记录
29 * @param record 历史视频下载记录对象 23 * @param record 历史视频下载记录对象
@@ -36,8 +30,8 @@ public class HisToryRecordServiceImpl implements HisToryRecordService { @@ -36,8 +30,8 @@ public class HisToryRecordServiceImpl implements HisToryRecordService {
36 * 修改历史视频记录 30 * 修改历史视频记录
37 */ 31 */
38 @Override 32 @Override
39 - public String beachUpdRecode(List<HistoryRecord> record) {  
40 - return hisToryRecordMapper.beachUpdRecode(record) > 0 ? "success" : "fail"; 33 + public void beachUpdRecode(List<HistoryRecord> record) {
  34 + hisToryRecordMapper.beachUpdRecode(record);
41 } 35 }
42 /** 36 /**
43 * 历史视频上传记录列表 37 * 历史视频上传记录列表
src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java
@@ -4,7 +4,7 @@ import com.genersoft.iot.vmp.conf.UserSetting; @@ -4,7 +4,7 @@ import com.genersoft.iot.vmp.conf.UserSetting;
4 import com.genersoft.iot.vmp.conf.exception.ControllerException; 4 import com.genersoft.iot.vmp.conf.exception.ControllerException;
5 import com.genersoft.iot.vmp.conf.security.JwtUtils; 5 import com.genersoft.iot.vmp.conf.security.JwtUtils;
6 import com.genersoft.iot.vmp.service.ILogService; 6 import com.genersoft.iot.vmp.service.ILogService;
7 -import com.genersoft.iot.vmp.storager.dao.dto.LogDto; 7 +import com.genersoft.iot.vmp.storager.mapper.dto.LogDto;
8 import com.genersoft.iot.vmp.utils.DateUtil; 8 import com.genersoft.iot.vmp.utils.DateUtil;
9 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; 9 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
10 import com.github.pagehelper.PageInfo; 10 import com.github.pagehelper.PageInfo;
src/main/java/com/genersoft/iot/vmp/vmanager/user/RoleController.java
@@ -4,7 +4,7 @@ import com.genersoft.iot.vmp.conf.exception.ControllerException; @@ -4,7 +4,7 @@ import com.genersoft.iot.vmp.conf.exception.ControllerException;
4 import com.genersoft.iot.vmp.conf.security.JwtUtils; 4 import com.genersoft.iot.vmp.conf.security.JwtUtils;
5 import com.genersoft.iot.vmp.conf.security.SecurityUtils; 5 import com.genersoft.iot.vmp.conf.security.SecurityUtils;
6 import com.genersoft.iot.vmp.service.IRoleService; 6 import com.genersoft.iot.vmp.service.IRoleService;
7 -import com.genersoft.iot.vmp.storager.dao.dto.Role; 7 +import com.genersoft.iot.vmp.storager.mapper.dto.Role;
8 import com.genersoft.iot.vmp.utils.DateUtil; 8 import com.genersoft.iot.vmp.utils.DateUtil;
9 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; 9 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
10 import io.swagger.v3.oas.annotations.Operation; 10 import io.swagger.v3.oas.annotations.Operation;
src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java
@@ -6,8 +6,8 @@ import com.genersoft.iot.vmp.conf.security.SecurityUtils; @@ -6,8 +6,8 @@ import com.genersoft.iot.vmp.conf.security.SecurityUtils;
6 import com.genersoft.iot.vmp.conf.security.dto.LoginUser; 6 import com.genersoft.iot.vmp.conf.security.dto.LoginUser;
7 import com.genersoft.iot.vmp.service.IRoleService; 7 import com.genersoft.iot.vmp.service.IRoleService;
8 import com.genersoft.iot.vmp.service.IUserService; 8 import com.genersoft.iot.vmp.service.IUserService;
9 -import com.genersoft.iot.vmp.storager.dao.dto.Role;  
10 -import com.genersoft.iot.vmp.storager.dao.dto.User; 9 +import com.genersoft.iot.vmp.storager.mapper.dto.Role;
  10 +import com.genersoft.iot.vmp.storager.mapper.dto.User;
11 import com.genersoft.iot.vmp.utils.DateUtil; 11 import com.genersoft.iot.vmp.utils.DateUtil;
12 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; 12 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
13 import com.genersoft.iot.vmp.vmanager.bean.WVPResult; 13 import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
src/main/java/com/genersoft/iot/vmp/vmanager/util/FtpUtils.java
@@ -12,11 +12,14 @@ import org.apache.commons.net.ftp.FTPFile; @@ -12,11 +12,14 @@ import org.apache.commons.net.ftp.FTPFile;
12 import org.apache.commons.net.ftp.FTPReply; 12 import org.apache.commons.net.ftp.FTPReply;
13 import org.springframework.stereotype.Component; 13 import org.springframework.stereotype.Component;
14 14
15 -import java.io.ByteArrayOutputStream;  
16 import java.io.IOException; 15 import java.io.IOException;
17 import java.io.InputStream; 16 import java.io.InputStream;
18 import java.net.SocketException; 17 import java.net.SocketException;
19 import java.text.SimpleDateFormat; 18 import java.text.SimpleDateFormat;
  19 +import java.time.LocalDate;
  20 +import java.time.LocalDateTime;
  21 +import java.time.ZoneId;
  22 +import java.time.temporal.ChronoUnit;
20 import java.util.*; 23 import java.util.*;
21 24
22 /** 25 /**
@@ -29,6 +32,41 @@ public class FtpUtils { @@ -29,6 +32,41 @@ public class FtpUtils {
29 32
30 private final FtpConfigBean ftpConfigBean; 33 private final FtpConfigBean ftpConfigBean;
31 34
  35 + public boolean checkUpdateTimeExpiration(HistoryRecord historyRecord){
  36 + Date updateTime = historyRecord.getUpdateTime();
  37 + if (updateTime != null) {
  38 + long uploadTime = calculateSecondsBetween(updateTime);
  39 + return (uploadTime > ftpConfigBean.getTimeOut() && historyRecord.getStatus().equals(HistoryEnum.UPLOADING.getCode()));
  40 + }
  41 + return false;
  42 + }
  43 +
  44 + public boolean checkCreateTimeExpiration(HistoryRecord historyRecord) {
  45 + long l = calculateDaysBetween(historyRecord.getCreateTime());
  46 + return l > ftpConfigBean.getExpirationTime();
  47 + }
  48 +
  49 + public boolean checkCreateTimeNotExpiration(HistoryRecord historyRecord) {
  50 + long l = calculateDaysBetween(historyRecord.getCreateTime());
  51 + return l <= ftpConfigBean.getExpirationTime();
  52 + }
  53 +
  54 +
  55 + private long calculateDaysBetween(Date startDate) {
  56 + // 将Date转换为LocalDate
  57 + LocalDate startLocalDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
  58 + // 计算两个LocalDate对象之间的天数差异
  59 + return ChronoUnit.DAYS.between(startLocalDate, LocalDate.now());
  60 + }
  61 +
  62 +
  63 + private long calculateSecondsBetween(Date startDate) {
  64 + // 将Date转换为LocalDate
  65 + LocalDateTime startLocalDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
  66 + // 计算两个LocalDate对象之间的天数差异
  67 + return ChronoUnit.SECONDS.between(startLocalDate, LocalDateTime.now());
  68 + }
  69 +
32 /** 70 /**
33 * 获取 FTPClient对象 71 * 获取 FTPClient对象
34 * @return FTPClient对象 72 * @return FTPClient对象
@@ -60,7 +98,7 @@ public class FtpUtils { @@ -60,7 +98,7 @@ public class FtpUtils {
60 ftpClient.disconnect(); 98 ftpClient.disconnect();
61 return null; 99 return null;
62 } else { 100 } else {
63 - log.info("连接到FTP服务成功"); 101 + log.debug("连接到FTP服务成功");
64 // 设置二进制方式传输文件 102 // 设置二进制方式传输文件
65 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); 103 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
66 // 设置被动工作模式,文件传输端口设置,否则文件上传不成功,也不报错 104 // 设置被动工作模式,文件传输端口设置,否则文件上传不成功,也不报错
@@ -88,7 +126,7 @@ public class FtpUtils { @@ -88,7 +126,7 @@ public class FtpUtils {
88 ftpClient.logout(); 126 ftpClient.logout();
89 // 断开ftp的连接 127 // 断开ftp的连接
90 ftpClient.disconnect(); 128 ftpClient.disconnect();
91 - log.info("关闭ftp客户端成功"); 129 + log.debug("关闭ftp客户端成功");
92 } 130 }
93 } catch (Exception e) { 131 } catch (Exception e) {
94 log.error("关闭ftp客户端异常"); 132 log.error("关闭ftp客户端异常");
@@ -211,8 +249,6 @@ public class FtpUtils { @@ -211,8 +249,6 @@ public class FtpUtils {
211 } catch (IOException e) { 249 } catch (IOException e) {
212 log.error("获取文件输入流异常"); 250 log.error("获取文件输入流异常");
213 throw new FtpException("获取文件输入流异常"); 251 throw new FtpException("获取文件输入流异常");
214 - } finally {  
215 - closeConnect(ftpClient);  
216 } 252 }
217 return is; 253 return is;
218 } 254 }
@@ -247,10 +283,17 @@ public class FtpUtils { @@ -247,10 +283,17 @@ public class FtpUtils {
247 * @return 如果目录中存在至少一个文件,则返回文件名;否则返回null 283 * @return 如果目录中存在至少一个文件,则返回文件名;否则返回null
248 */ 284 */
249 public String checkDirectoryContainsFiles(String directoryPath){ 285 public String checkDirectoryContainsFiles(String directoryPath){
  286 + if (directoryPath == null ){
  287 + return null;
  288 + }
250 FTPClient ftpClient = getFTPClient(); 289 FTPClient ftpClient = getFTPClient();
251 try { 290 try {
  291 + String substring = directoryPath;
252 // 改变工作目录 292 // 改变工作目录
253 - if (ftpClient.changeWorkingDirectory(directoryPath)) { 293 + if (directoryPath.endsWith(".mp4")){
  294 + substring = directoryPath.substring(0, directoryPath.lastIndexOf("/") + 1);
  295 + }
  296 + if (ftpClient.changeWorkingDirectory(substring)) {
254 // 列出目录中的所有文件和子目录 297 // 列出目录中的所有文件和子目录
255 FTPFile[] files = ftpClient.listFiles(); 298 FTPFile[] files = ftpClient.listFiles();
256 for (FTPFile file : files) { 299 for (FTPFile file : files) {
@@ -273,25 +316,27 @@ public class FtpUtils { @@ -273,25 +316,27 @@ public class FtpUtils {
273 316
274 public boolean checkHistoryVideo(HistoryRecord record) { 317 public boolean checkHistoryVideo(HistoryRecord record) {
275 String fileName = checkDirectoryContainsFiles(record.getPath()); 318 String fileName = checkDirectoryContainsFiles(record.getPath());
276 - boolean flag = fileName != null; 319 + boolean flag = fileName != null && record.getStatus().equals(HistoryEnum.UPLOADING.getCode());
277 if (flag){ 320 if (flag){
278 - record.setPath( String.join(record.getPath(),"/",fileName)); 321 + record.setPath( StringUtils.join(record.getPath(),"/",fileName));
279 record.setStatus(HistoryEnum.UPLOADED.getCode()); 322 record.setStatus(HistoryEnum.UPLOADED.getCode());
  323 + record.setUpdateTime(new Date());
280 } 324 }
281 return flag; 325 return flag;
282 } 326 }
283 /** 327 /**
284 * 批量删除指定路径下的文件和文件夹。 328 * 批量删除指定路径下的文件和文件夹。
285 */ 329 */
286 - public List<HistoryRecord> batchDelete(List<HistoryRecord> historyRecordList) throws IOException { 330 + public Map<String,List<HistoryRecord>> batchDelete(List<HistoryRecord> historyRecordList) throws IOException {
287 HashMap<String, List<HistoryRecord>> recordMap = new HashMap<>(); 331 HashMap<String, List<HistoryRecord>> recordMap = new HashMap<>();
288 recordMap.put("true",new ArrayList<>(historyRecordList)); 332 recordMap.put("true",new ArrayList<>(historyRecordList));
289 recordMap.put("false",new ArrayList<>(historyRecordList)); 333 recordMap.put("false",new ArrayList<>(historyRecordList));
290 for (HistoryRecord historyRecord : historyRecordList) { 334 for (HistoryRecord historyRecord : historyRecordList) {
291 boolean b = deleteRecursive(historyRecord.getPath()); 335 boolean b = deleteRecursive(historyRecord.getPath());
  336 + historyRecord.setPath(null);
  337 + historyRecord.setStatus(HistoryEnum.NOT_UPLOADED.getCode());
  338 + historyRecord.setUpdateTime(new Date());
292 if (!b) { 339 if (!b) {
293 - historyRecord.setPath(null);  
294 - historyRecord.setStatus(HistoryEnum.NOT_UPLOADED.getCode());  
295 historyRecord.setCreateTime(new Date()); 340 historyRecord.setCreateTime(new Date());
296 recordMap.get("true").add(historyRecord); 341 recordMap.get("true").add(historyRecord);
297 }else { 342 }else {
@@ -303,9 +348,10 @@ public class FtpUtils { @@ -303,9 +348,10 @@ public class FtpUtils {
303 log.debug("==> {} 成功删除文件 {} 个 ", format,recordMap.get("true").size()); 348 log.debug("==> {} 成功删除文件 {} 个 ", format,recordMap.get("true").size());
304 log.debug("==> {} 未删除文件 {} 个", format,recordMap.get("false").size()); 349 log.debug("==> {} 未删除文件 {} 个", format,recordMap.get("false").size());
305 log.debug("==========================================================="); 350 log.debug("===========================================================");
306 - return recordMap.get("false"); 351 + return recordMap;
307 } 352 }
308 353
  354 +
309 /** 355 /**
310 * 递归删除指定路径下的文件和文件夹。 356 * 递归删除指定路径下的文件和文件夹。
311 * 357 *
src/main/java/com/genersoft/iot/vmp/web/gb28181/AuthController.java
1 package com.genersoft.iot.vmp.web.gb28181; 1 package com.genersoft.iot.vmp.web.gb28181;
2 2
3 import com.genersoft.iot.vmp.service.IUserService; 3 import com.genersoft.iot.vmp.service.IUserService;
4 -import com.genersoft.iot.vmp.storager.dao.dto.User; 4 +import com.genersoft.iot.vmp.storager.mapper.dto.User;
5 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.web.bind.annotation.*; 6 import org.springframework.web.bind.annotation.*;
7 7
src/main/resources/application-dev100.yml deleted 100644 → 0
1 -spring:  
2 - # 设置接口超时时间  
3 - mvc:  
4 - async:  
5 - request-timeout: 20000  
6 - thymeleaf:  
7 - cache: false  
8 - # [可选]上传文件大小限制  
9 - servlet:  
10 - multipart:  
11 - max-file-size: 10MB  
12 - max-request-size: 100MB  
13 -  
14 - # REDIS数据库配置  
15 - redis:  
16 - # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1  
17 - host: 192.168.169.100  
18 - # [必须修改] 端口号  
19 - port: 6879  
20 - # [可选] 数据库 DB  
21 - database: 7  
22 - # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接  
23 - password: wvp4@444  
24 - # [可选] 超时时间  
25 - timeout: 10000  
26 - # mysql数据源  
27 - datasource:  
28 - dynamic:  
29 - primary: master  
30 - datasource:  
31 - master:  
32 - type: com.zaxxer.hikari.HikariDataSource  
33 - driver-class-name: com.mysql.cj.jdbc.Driver  
34 - url: jdbc:mysql://192.168.169.100:3306/wvp4?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=TRUE&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&sessionVariables=sql_mode='NO_ENGINE_SUBSTITUTION'&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull  
35 - username: root  
36 - password: guzijian  
37 - hikari:  
38 - connection-timeout: 20000 # 是客户端等待连接池连接的最大毫秒数  
39 - initialSize: 50 # 连接池初始化连接数  
40 - maximum-pool-size: 200 # 连接池最大连接数  
41 - minimum-idle: 10 # 连接池最小空闲连接数  
42 - idle-timeout: 300000 # 允许连接在连接池中空闲的最长时间(以毫秒为单位)  
43 - max-lifetime: 1200000 # 是池中连接关闭后的最长生命周期(以毫秒为单位)  
44 -#[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口  
45 -server:  
46 - port: 18989  
47 - # [可选] HTTPS配置, 默认不开启  
48 - ssl:  
49 - # [可选] 是否开启HTTPS访问  
50 - enabled: false  
51 - # [可选] 证书文件路径,放置在resource/目录下即可,修改xxx为文件名  
52 - key-store: classpath:Aserver.keystore  
53 - # [可选] 证书密码  
54 - key-store-password: guzijian  
55 - # [可选] 证书类型, 默认为jks,根据实际修改  
56 - key-store-type: JKS  
57 -  
58 -# 作为28181服务器的配置  
59 -sip:  
60 - # [必须修改] 本机的IP,对应你的网卡,监听什么ip就是使用什么网卡,  
61 - # 如果要监听多张网卡,可以使用逗号分隔多个IP, 例如: 192.168.1.4,10.0.0.4  
62 - # 如果不明白,就使用0.0.0.0,大部分情况都是可以的  
63 - # 请不要使用127.0.0.1,任何包括localhost在内的域名都是不可以的。  
64 - ip: 192.168.169.100  
65 - # [可选] 28181服务监听的端口  
66 - port: 28083  
67 - # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)  
68 - # 后两位为行业编码,定义参照附录D.3  
69 - # 3701020049标识山东济南历下区 信息行业接入  
70 - # [可选]  
71 - domain: 4403000000  
72 - # [可选]  
73 - id: 44030000003110008001  
74 - # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验  
75 - password: 2024bsth@gb18181  
76 - # 是否存储alarm信息  
77 - alarm: true  
78 -  
79 -#zlm 默认服务器配置  
80 -media:  
81 - id: guzijian1  
82 - # [必须修改] zlm服务器的内网IP  
83 - ip: 192.168.169.100  
84 - # [必须修改] zlm服务器的http.port  
85 - http-port: 1909  
86 - # [可选] 返回流地址时的ip,置空使用 media.ip 1  
87 - stream-ip: 61.169.120.202  
88 - # [可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.ip 1  
89 - sdp-ip: 61.169.120.202  
90 - # [可选] zlm服务器的hook所使用的IP, 默认使用sip.ip  
91 - hook-ip: 192.168.169.100  
92 - # [可选] zlm服务器的http.sslport, 置空使用zlm配置文件配置  
93 - http-ssl-port: 2939  
94 - # [可选] zlm服务器的hook.admin_params=secret  
95 - secret: 8KMYsD5ItKkHN1CIcPI9VeLa6u4S8deU  
96 - pushKey: 41db35390ddad33f83944f44b8b75ded  
97 - # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试  
98 - rtp:  
99 - # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输  
100 - enable: true  
101 - # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功  
102 - port-range: 52000,52500 # 端口范围  
103 - # [可选] 国标级联在此范围内选择端口发送媒体流,  
104 - send-port-range: 52000,52500 # 端口范围  
105 - # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用  
106 - record-assist-port: 18081  
107 -# [根据业务需求配置]  
108 -user-settings:  
109 - # 点播/录像回放 等待超时时间,单位:毫秒  
110 - play-timeout: 180000  
111 - # [可选] 自动点播, 使用固定流地址进行播放时,如果未点播则自动进行点播, 需要rtp.enable=true  
112 - auto-apply-play: true  
113 - # 设备/通道状态变化时发送消息  
114 - device-status-notify: true  
115 -# [可选] 日志配置, 一般不需要改  
116 -jt1078:  
117 - enable: true  
118 - port: 1079  
119 -logging:  
120 - config: classpath:logback-spring.xml  
121 -tuohua:  
122 - bsth:  
123 - login:  
124 - pageURL: http://192.168.168.152:9088/user/login/jCryptionKey  
125 - url: http://192.168.168.152:9088/user/login  
126 - userName: yuanxiaohu  
127 - password: Yxiaohu1.0  
128 - rest:  
129 - baseURL: http://192.168.168.152:9089/webservice/rest  
130 - password: bafb2b44a07a02e5e9912f42cd197423884116a8  
131 - tree:  
132 - url:  
133 - company: http://192.168.168.152:9088/video/tree  
134 - car: http://192.168.168.152:9088/video/tree/carNo/{0}  
135 - sim: http://192.168.168.152:9088/video//tree/caNO/sim/{0}  
136 - wvp28181:  
137 - rtsp:  
138 - tcpPort: 1078  
139 - udpPort: 1078  
140 - historyTcpPort: 9999  
141 - historyUdpPort: 9999  
142 - ip : 61.169.120.202  
143 - jt1078:  
144 - ports: 49101,49101  
145 - port: 9100  
146 - httpPort: 3333  
147 - addPortVal: 0  
148 - pushURL: http://127.0.0.1:3333/new/server/{pushKey}/{port}/{httpPort}  
149 - stopPushURL: http://127.0.0.1:3333/stop/channel/{pushKey}/{port}/{httpPort}  
150 - url: http://192.168.168.152:8100/device/{0}  
151 - new_url: http://192.168.168.152:8100/device  
152 - historyListPort: 9205  
153 - playHistoryPort: 9201  
154 - sendPort: 9101  
155 - stopSendPort: 9102  
156 - ws: ws://61.169.120.202:1909/schedule/{stream}.live.flv  
157 - wss: wss://61.169.120.202:2930/schedule/{stream}.live.flv  
158 - downloadFLV: http://61.169.120.202:1909/schedule/{stream}.live.flv  
159 - get:  
160 - url: http://192.168.169.100:3333/video/{stream}.flv  
161 - playURL: /play/wasm/ws%3A%2F%2F{ip}%3A{port}%2Fschedule%2F{sim}-{channel}.live.flv%3FcallId%{publickey}  
162 -  
163 -ftp:  
164 - basePath: /wvp-local  
165 - host: 192.168.169.100  
166 - httpPath: ftp://192.168.169.100  
167 - filePathPrefix: http://192.168.169.100:10021/wvp-local  
168 - password: ftp@123  
169 - port: 21  
170 - username: ftpadmin  
171 - retryTimes: 5  
172 - retryWaitTimes: 3000  
173 -  
174 -forest:  
175 - backend: okhttp3 # 后端HTTP框架(默认为 okhttp3)  
176 - max-connections: 1000 # 连接池最大连接数(默认为 500)  
177 - max-route-connections: 500 # 每个路由的最大连接数(默认为 500)  
178 - max-request-queue-size: 100 # [自v1.5.22版本起可用] 最大请求等待队列大小  
179 - max-async-thread-size: 300 # [自v1.5.21版本起可用] 最大异步线程数  
180 - max-async-queue-size: 16 # [自v1.5.22版本起可用] 最大异步线程池队列大小  
181 - timeout: 3000 # [已不推荐使用] 请求超时时间,单位为毫秒(默认为 3000)  
182 - connect-timeout: 3000 # 连接超时时间,单位为毫秒(默认为 timeout)  
183 - read-timeout: 3000 # 数据读取超时时间,单位为毫秒(默认为 timeout)  
184 - max-retry-count: 0 # 请求失败后重试次数(默认为 0 次不重试)  
185 - # ssl-protocol: TLS # 单向验证的HTTPS的默认TLS协议(默认为 TLS)  
186 - log-enabled: true # 打开或关闭日志(默认为 true)  
187 - log-request: true # 打开/关闭Forest请求日志(默认为 true)  
188 - log-response-status: true # 打开/关闭Forest响应状态日志(默认为 true)  
189 - log-response-content: true # 打开/关闭Forest响应内容日志(默认为 false)  
190 -# async-mode: platform # [自v1.5.27版本起可用] 异步模式(默认为 platform)  
src/main/resources/mapper/HisToryRecordMapper.xml renamed to src/main/resources/mapper/jt1078/HisToryRecordMapper.xml
@@ -50,9 +50,10 @@ @@ -50,9 +50,10 @@
50 INSERT INTO `wvp_history_record` 50 INSERT INTO `wvp_history_record`
51 <trim prefix="(" suffix=")" suffixOverrides=","> 51 <trim prefix="(" suffix=")" suffixOverrides=",">
52 <if test=" id != null and id != '' ">`id` ,</if> 52 <if test=" id != null and id != '' ">`id` ,</if>
  53 + <if test=" name != null and name != '' ">`name` ,</if>
53 <if test=" sim != null and sim != '' ">`sim` ,</if> 54 <if test=" sim != null and sim != '' ">`sim` ,</if>
54 <if test=" channel != null and channel != '' ">`channel` ,</if> 55 <if test=" channel != null and channel != '' ">`channel` ,</if>
55 - <if test=" startTime != null and startTime != '' ">`strat_time` ,</if> 56 + <if test=" startTime != null and startTime != '' ">`start_time` ,</if>
56 <if test=" endTime != null and endTime != '' ">`end_time` ,</if> 57 <if test=" endTime != null and endTime != '' ">`end_time` ,</if>
57 <if test=" status != null and status != '' ">`status` ,</if> 58 <if test=" status != null and status != '' ">`status` ,</if>
58 <if test=" ip != null and ip != '' ">`ip` ,</if> 59 <if test=" ip != null and ip != '' ">`ip` ,</if>
@@ -92,7 +93,7 @@ @@ -92,7 +93,7 @@
92 <if test=" name != null and name != '' "> `name` = #{name}, </if> 93 <if test=" name != null and name != '' "> `name` = #{name}, </if>
93 <if test=" sim != null and sim != '' "> `sim` = #{sim}, </if> 94 <if test=" sim != null and sim != '' "> `sim` = #{sim}, </if>
94 <if test=" channel != null and channel != '' "> `channel` = #{channel}, </if> 95 <if test=" channel != null and channel != '' "> `channel` = #{channel}, </if>
95 - <if test=" startTime != null and startTime != '' "> `strat_time` = #{startTime}, </if> 96 + <if test=" startTime != null and startTime != '' "> `start_time` = #{startTime}, </if>
96 <if test=" endTime != null and endTime != '' "> `end_time` = #{endTime}, </if> 97 <if test=" endTime != null and endTime != '' "> `end_time` = #{endTime}, </if>
97 <if test=" status != null and status != '' "> `status` = #{status}, </if> 98 <if test=" status != null and status != '' "> `status` = #{status}, </if>
98 <if test=" ip != null and ip != '' "> `ip` = #{ip}, </if> 99 <if test=" ip != null and ip != '' "> `ip` = #{ip}, </if>
@@ -114,7 +115,7 @@ @@ -114,7 +115,7 @@
114 <set> 115 <set>
115 <if test="item.sim != null and item.sim != '' ">`sim` = #{item.sim}, </if> 116 <if test="item.sim != null and item.sim != '' ">`sim` = #{item.sim}, </if>
116 <if test="item.channel != null and item.channel != '' ">`channel` = #{item.channel}, </if> 117 <if test="item.channel != null and item.channel != '' ">`channel` = #{item.channel}, </if>
117 - <if test="item.startTime != null and item.startTime != '' ">`strat_time` = #{item.startTime}, </if> 118 + <if test="item.startTime != null and item.startTime != '' ">`start_time` = #{item.startTime}, </if>
118 <if test="item.endTime != null and item.endTime != '' ">`end_time` = #{item.endTime}, </if> 119 <if test="item.endTime != null and item.endTime != '' ">`end_time` = #{item.endTime}, </if>
119 <if test="item.status != null and item.status != '' ">`status` = #{item.status}, </if> 120 <if test="item.status != null and item.status != '' ">`status` = #{item.status}, </if>
120 <if test="item.ip != null and item.ip != '' ">`ip` = #{item.ip}, </if> 121 <if test="item.ip != null and item.ip != '' ">`ip` = #{item.ip}, </if>
@@ -133,10 +134,12 @@ @@ -133,10 +134,12 @@
133 `name` = #{item.name} 134 `name` = #{item.name}
134 </foreach> 135 </foreach>
135 </update> 136 </update>
  137 +
136 <select id="getHistoryRecordList" 138 <select id="getHistoryRecordList"
137 resultMap="HISTORY_RECORD_LIST_MAP"> 139 resultMap="HISTORY_RECORD_LIST_MAP">
138 <include refid="HISTORY_RECORD_LIST_SQL" /> 140 <include refid="HISTORY_RECORD_LIST_SQL" />
139 </select> 141 </select>
  142 +
140 <select id="getHistoryRecord" 143 <select id="getHistoryRecord"
141 resultMap="HISTORY_RECORD_LIST_MAP"> 144 resultMap="HISTORY_RECORD_LIST_MAP">
142 <include refid="HISTORY_RECORD_LIST_SQL" /> 145 <include refid="HISTORY_RECORD_LIST_SQL" />
web_src/src/components/HistoricalRecord.vue
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
29 </el-time-picker> 29 </el-time-picker>
30 </el-form-item> 30 </el-form-item>
31 <el-form-item> 31 <el-form-item>
32 - <el-button type="primary" @click="searchHistoryList" style="width: 70%;">搜索</el-button> 32 + <el-button type="primary" @click="searchHistoryTimer" style="width: 70%;">搜索</el-button>
33 </el-form-item> 33 </el-form-item>
34 </el-form> 34 </el-form>
35 </el-footer> 35 </el-footer>
@@ -48,7 +48,6 @@ @@ -48,7 +48,6 @@
48 <el-footer style="width: 100%;height: 30%;background-color: white"> 48 <el-footer style="width: 100%;height: 30%;background-color: white">
49 <history-search-table :table-data="historyData" 49 <history-search-table :table-data="historyData"
50 @playHistoryVideo="clickHistoricalPlay" 50 @playHistoryVideo="clickHistoricalPlay"
51 - @downloadHistoryVideo="downloadFunction"  
52 @uploadHistoryVideo="uploadHistoryVideo"/> 51 @uploadHistoryVideo="uploadHistoryVideo"/>
53 </el-footer> 52 </el-footer>
54 </el-container> 53 </el-container>
@@ -74,6 +73,8 @@ export default { @@ -74,6 +73,8 @@ export default {
74 data() { 73 data() {
75 //这里存放数据" 74 //这里存放数据"
76 return { 75 return {
  76 + //列表定时器
  77 + timer: null,
77 //历史视频列表定时器 78 //历史视频列表定时器
78 historyTimer: null, 79 historyTimer: null,
79 historyData: [], 80 historyData: [],
@@ -148,6 +149,12 @@ export default { @@ -148,6 +149,12 @@ export default {
148 this.loading = true; 149 this.loading = true;
149 this.getCarInfo() 150 this.getCarInfo()
150 }, 151 },
  152 + getCarInfoTimer() {
  153 + this.searchHistoryList()
  154 + this.timer = setInterval(() => {
  155 + this.getCarInfo();
  156 + }, 10000); //
  157 + },
151 getCarInfo() { 158 getCarInfo() {
152 this.$axios({ 159 this.$axios({
153 method: 'get', 160 method: 'get',
@@ -162,11 +169,6 @@ export default { @@ -162,11 +169,6 @@ export default {
162 this.statisticsOnline(res.data.data.result) 169 this.statisticsOnline(res.data.data.result)
163 this.sourceValue = res.data.data.result; 170 this.sourceValue = res.data.data.result;
164 this.loading = false 171 this.loading = false
165 - //定时更新数据  
166 - let this_ = this  
167 - this.carInfoTimeout = setTimeout(function () {  
168 - this_.getCarInfo()  
169 - }, 45000);  
170 } else if (res.data.data.message) { 172 } else if (res.data.data.message) {
171 this.$message.error(res.data.data.message); 173 this.$message.error(res.data.data.message);
172 } 174 }
@@ -175,6 +177,8 @@ export default { @@ -175,6 +177,8 @@ export default {
175 } 177 }
176 this.loading = false 178 this.loading = false
177 }).catch(error => { 179 }).catch(error => {
  180 + this.loading = false
  181 + clearInterval(this.timer)
178 this.$message.error(error.message); 182 this.$message.error(error.message);
179 }) 183 })
180 }, 184 },
@@ -267,10 +271,13 @@ export default { @@ -267,10 +271,13 @@ export default {
267 * 上传历史视频 271 * 上传历史视频
268 */ 272 */
269 uploadHistoryVideo(data){ 273 uploadHistoryVideo(data){
  274 + console.log("开始上传视频 ===》 ",data)
  275 + this.loading = true
270 this.$axios({ 276 this.$axios({
271 method: 'get', 277 method: 'get',
272 - url: '/api/jt1078/query/history/list/' + data.sim + '/' + data.channel + "/" + this.startTime + "/" + this.endTime 278 + url: '/api/jt1078/query/history/uploading/' + data.name
273 }).then(res => { 279 }).then(res => {
  280 + console.log("上传视频 ==》 ",res)
274 if (res.data.data.code === -1){ 281 if (res.data.data.code === -1){
275 this.$message.success("视频开始上传,请等待") 282 this.$message.success("视频开始上传,请等待")
276 this.searchHistoryList() 283 this.searchHistoryList()
@@ -278,36 +285,15 @@ export default { @@ -278,36 +285,15 @@ export default {
278 }).cache(err => { 285 }).cache(err => {
279 console.log(err) 286 console.log(err)
280 this.$message.error("视频上传失败,请联系管理员") 287 this.$message.error("视频上传失败,请联系管理员")
  288 + this.loading = false
281 }) 289 })
282 }, 290 },
283 - /**  
284 - * 下载历史视频  
285 - */  
286 - downloadFunction(data) {  
287 - this.$axios({  
288 - url: `/api/jt1078/query/history/download/${data.name}`, // 请求URL  
289 - method: 'GET', // 将FTP文件路径作为参数传递  
290 - responseType: 'blob', // 告知axios以二进制数据流的形式处理响应  
291 - }).then((response) => {  
292 - const blob = new Blob([response.data], { type: 'application/octet-stream' });  
293 - const link = document.createElement('a');  
294 - link.href = window.URL.createObjectURL(blob);  
295 - link.download = ftpFilePath.substring(ftpFilePath.lastIndexOf('/') + 1); // 设置下载文件名  
296 - document.body.appendChild(link);  
297 - link.click();  
298 - document.body.removeChild(link);  
299 - }).catch(error => {  
300 - console.error("下载失败", error);  
301 - }); 291 + searchHistoryTimer() {
  292 + this.searchHistoryList()
  293 + this.historyTimer = setInterval(() => {
  294 + this.searchHistoryList();
  295 + }, 10000); //
302 }, 296 },
303 - // downloadFunction(data) {  
304 - // this.getDateTime();  
305 - // console.log(this.downloadURL);  
306 - // if (this.isEmpty(this.downloadURL)) {  
307 - // return;  
308 - // }  
309 - // window.open(this.downloadURL, "_download");  
310 - // },  
311 /** 297 /**
312 * 搜索历史视频 298 * 搜索历史视频
313 */ 299 */
@@ -336,34 +322,29 @@ export default { @@ -336,34 +322,29 @@ export default {
336 this.$message.error('请选择开始和结束时间'); 322 this.$message.error('请选择开始和结束时间');
337 return; 323 return;
338 } 324 }
339 - this.loading = true  
340 this.$axios({ 325 this.$axios({
341 method: 'get', 326 method: 'get',
342 url: '/api/jt1078/query/history/list/' + sim + '/' + channel + "/" + this.startTime + "/" + this.endTime 327 url: '/api/jt1078/query/history/list/' + sim + '/' + channel + "/" + this.startTime + "/" + this.endTime
343 - }).then(  
344 - res => { 328 + }).then(res => {
345 let items = res.data.data.obj.data.items; 329 let items = res.data.data.obj.data.items;
346 if (res && res.data && res.data.data && res.data.data.obj && res.data.data.code == 1 && res.data.data.obj.data && items) { 330 if (res && res.data && res.data.data && res.data.data.obj && res.data.data.code == 1 && res.data.data.obj.data && items) {
347 for (let i in items) { 331 for (let i in items) {
348 - items[i].sim = sim;  
349 - items[i].channel = channel  
350 - items[i].name = items[i].startTime + '-' + items[i].endTime; 332 + items[i].disabled = false;
  333 + items[i].countdown = 10;
351 } 334 }
352 this.historyData = items; 335 this.historyData = items;
353 - clearInterval(this.historyTimer);  
354 - this.historyTimer = setInterval(() => {  
355 - this.searchHistoryList();  
356 - }, 10000); //  
357 } else if (res && res.data && res.data.data && res.data.data.msg) { 336 } else if (res && res.data && res.data.data && res.data.data.msg) {
358 this.$message.error(res.data.data.msg); 337 this.$message.error(res.data.data.msg);
359 } else if (items === undefined) { 338 } else if (items === undefined) {
360 this.historyData = []; 339 this.historyData = [];
361 this.$message.warning("搜索历史列表为空") 340 this.$message.warning("搜索历史列表为空")
362 } 341 }
363 - this.loading = false  
364 - }).cache(res => {  
365 - this.$message.error(res.msg);  
366 this.loading = false 342 this.loading = false
  343 + }).catch(error => {
  344 + console.log(error)
  345 + this.loading = false
  346 + clearInterval(this.historyTimer)
  347 + this.$message.error("发送历史视频列表指令异常");
367 }) 348 })
368 }, 349 },
369 /** 350 /**
@@ -527,6 +508,8 @@ export default { @@ -527,6 +508,8 @@ export default {
527 beforeDestroy() { 508 beforeDestroy() {
528 }, //生命周期 - 销毁之前", 509 }, //生命周期 - 销毁之前",
529 destroyed() { 510 destroyed() {
  511 + clearInterval(this.timer)
  512 + clearInterval(this.historyTimer)
530 }, //生命周期 - 销毁完成", 513 }, //生命周期 - 销毁完成",
531 activated() { 514 activated() {
532 } //如果页面有keep-alive缓存功能,这个函数会触发", 515 } //如果页面有keep-alive缓存功能,这个函数会触发",
web_src/src/components/JT1078Components/HistorySearchTable.vue
1 <template> 1 <template>
  2 + <div style="width: 100%;height: 100%;">
2 <el-table 3 <el-table
  4 + v-if="tableData.length > 0"
3 ref="singleTable" 5 ref="singleTable"
4 :data="tableData" 6 :data="tableData"
  7 + :header-cell-style="{ textAlign: 'center' ,height:'20px',lineHeight:'20px' }"
  8 + border
5 highlight-current-row 9 highlight-current-row
6 @current-change="handleCurrentChange" 10 @current-change="handleCurrentChange"
7 height="250" 11 height="250"
8 - style="width: 100%"> 12 + style="width: 100%;text-align: center">
9 <el-table-column 13 <el-table-column
10 type="index" 14 type="index"
11 fixed 15 fixed
12 - width="100"> 16 + align="center"
  17 + width="100"
  18 + label="序号">
13 </el-table-column> 19 </el-table-column>
14 <el-table-column 20 <el-table-column
15 property="name" 21 property="name"
  22 + align="center"
16 label="名称"> 23 label="名称">
17 </el-table-column> 24 </el-table-column>
18 <el-table-column 25 <el-table-column
19 - property="date" 26 + align="center"
20 label="日期"> 27 label="日期">
  28 + <template slot-scope="scope">
  29 + {{`${scope.row.startTime}-${scope.row.endTime}`}}
  30 + </template>
21 </el-table-column> 31 </el-table-column>
22 <el-table-column 32 <el-table-column
23 property="status" 33 property="status"
  34 + align="center"
24 label="状态"> 35 label="状态">
  36 + <template slot-scope="scope">
  37 + <span v-if="scope.row.status===null ||scope.row.status === '0'"><el-tag>未上传</el-tag></span>
  38 + <span v-if="scope.row.status==='2'"><el-tag type="info">上传中</el-tag></span>
  39 + <span v-if="scope.row.status==='3'"><el-tag type="success">已上传</el-tag></span>
  40 + </template>
25 </el-table-column> 41 </el-table-column>
26 <el-table-column 42 <el-table-column
27 fixed="right" 43 fixed="right"
  44 + align="center"
28 label="操作"> 45 label="操作">
29 <template slot-scope="scope"> 46 <template slot-scope="scope">
30 <el-button icon="el-icon-video-play" size="small" style="border: none" @click="playHistoryVideo(scope.row)"></el-button> 47 <el-button icon="el-icon-video-play" size="small" style="border: none" @click="playHistoryVideo(scope.row)"></el-button>
31 - <el-button v-if="scope.row.status === '1'" icon="el-icon-upload" size="small" style="border: none" @click="uploadHistoryVideo(scope.row)"></el-button>  
32 - <el-button v-if="scope.row.status === '2'" icon="el-icon-download" size="small" style="border: none" @click="downloadHistoryVideo(scope.row)"></el-button> 48 + <el-button v-if="scope.row.status === '0'" icon="el-icon-upload" size="small" style="border: none" @click="uploadHistoryVideo(scope.row)"></el-button>
  49 + <el-button v-if="scope.row.status === '3'"
  50 + icon="el-icon-download"
  51 + :disabled="scope.row.disabled"
  52 + size="small" style="border: none"
  53 + @click="downloadHistoryVideo(scope.row)">
  54 + {{ scope.row.disabled ? `${scope.row.countdown}s` : '' }}
  55 + </el-button>
33 </template> 56 </template>
34 </el-table-column> 57 </el-table-column>
35 </el-table> 58 </el-table>
  59 + <el-empty v-else style="width: 100%;height: 100%"></el-empty>
  60 + </div>
36 </template> 61 </template>
37 62
38 <script> 63 <script>
@@ -50,7 +75,8 @@ @@ -50,7 +75,8 @@
50 data() { 75 data() {
51 //这里存放数据" 76 //这里存放数据"
52 return { 77 return {
53 - currentRow: null 78 + currentRow: null,
  79 + historyTimer: null
54 }; 80 };
55 }, 81 },
56 //计算属性 类似于data概念", 82 //计算属性 类似于data概念",
@@ -87,8 +113,48 @@ @@ -87,8 +113,48 @@
87 * 下载历史视频 113 * 下载历史视频
88 * @param row 114 * @param row
89 */ 115 */
90 - downloadHistoryVideo(row){  
91 - this.$emit('downloadHistoryVideo', row); 116 + downloadHistoryVideo(data){
  117 + if (data.disabled) return;
  118 + if (data.historyTimer){
  119 + this.$message.warning("点击太频繁,请稍后重试")
  120 + }
  121 + let initialCountdown = data.countdown;
  122 + const timer = setInterval(() => {
  123 + if (data.countdown > 0) {
  124 + data.countdown--;
  125 + } else {
  126 + clearInterval(timer);
  127 + data.countdown = initialCountdown; // 重置倒计时
  128 + data.isCountingDown = false; // 结束倒计时
  129 + }
  130 + }, 1000);
  131 + /**
  132 + * 下载历史视频
  133 + */
  134 + this.$axios({
  135 + url: `/api/jt1078/query/history/download/${data.name}`, // 请求URL
  136 + method: 'GET', // 将FTP文件路径作为参数传递
  137 + responseType: 'blob', // 告知axios以二进制数据流的形式处理响应
  138 + }).then((response) => {
  139 + const blob = new Blob([response.data], { type: 'application/octet-stream' });
  140 + const link = document.createElement('a');
  141 + data.disabled = true;
  142 + link.href = window.URL.createObjectURL(blob);
  143 + link.download = data.name + ".mp4"; // 设置下载文件名
  144 + document.body.appendChild(link);
  145 + link.click();
  146 + document.body.removeChild(link);
  147 + clearInterval(timer);
  148 + data.countdown = initialCountdown; // 重置倒计时
  149 + data.isCountingDown = false;
  150 + this.$message.success(`${link.download} 下载成功`)
  151 + }).catch(error => {
  152 + clearInterval(timer);
  153 + data.countdown = initialCountdown; // 重置倒计时
  154 + data.isCountingDown = false;
  155 + this.$message.error(`${data.name} 下载失败`)
  156 + console.error("下载失败", error);
  157 + });
92 } 158 }
93 }, 159 },
94 //生命周期 - 创建完成(可以访问当前this实例)", 160 //生命周期 - 创建完成(可以访问当前this实例)",
web_src/src/components/JT1078Components/deviceList/Device1078Tree.vue
@@ -33,9 +33,12 @@ @@ -33,9 +33,12 @@
33 <span v-if="data.abnormalStatus !== undefined && data.abnormalStatus === 10"> 33 <span v-if="data.abnormalStatus !== undefined && data.abnormalStatus === 10">
34 <i class="el-icon-location" style="color: #909399"></i>{{ `${data.name}(未接入)` }} 34 <i class="el-icon-location" style="color: #909399"></i>{{ `${data.name}(未接入)` }}
35 </span> 35 </span>
36 - <span v-if="data.abnormalStatus === undefined && data.children "> 36 + <span v-if="data.abnormalStatus === undefined && data.children && data.children.length > 0 ">
37 {{ `${data.name}(${data.onlineData.length}/${data.children.length})` }} 37 {{ `${data.name}(${data.onlineData.length}/${data.children.length})` }}
38 </span> 38 </span>
  39 + <span v-if="data.abnormalStatus === undefined && data.children && data.children.length === 0 ">
  40 + {{ `${data.name}(0/0)` }}
  41 + </span>
39 <span v-if="data.abnormalStatus === undefined && data.children === undefined "> 42 <span v-if="data.abnormalStatus === undefined && data.children === undefined ">
40 <i class="el-icon-video-camera-solid">&nbsp;&nbsp;</i>{{ `${data.name}` }} 43 <i class="el-icon-video-camera-solid">&nbsp;&nbsp;</i>{{ `${data.name}` }}
41 </span> 44 </span>