Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
项目统一框架
amos-boot-biz
Commits
3e0bac6f
Commit
3e0bac6f
authored
Sep 03, 2021
by
李成龙
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增视频工程
parent
d472496a
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
845 additions
and
3 deletions
+845
-3
RestTemplateConfig.java
...ejoin/amos/boot/core/restTemplate/RestTemplateConfig.java
+18
-0
WxMappingJackson2HttpMessageConverter.java
...e/restTemplate/WxMappingJackson2HttpMessageConverter.java
+23
-0
RestTemplateUtil.java
...va/com/yeejoin/amos/boot/core/utils/RestTemplateUtil.java
+128
-0
logback-dev.xml
.../amos-boot-utils-jpush/src/main/resources/logback-dev.xml
+1
-1
logback-qa.xml
...s/amos-boot-utils-jpush/src/main/resources/logback-qa.xml
+1
-1
pom.xml
amos-boot-utils/amos-boot-utils-video/pom.xml
+30
-0
VideoApplication.java
...ideo/src/main/java/com/yeejoin/amos/VideoApplication.java
+50
-0
ElasticSearchClientConfig.java
.../yeejoin/amos/video/config/ElasticSearchClientConfig.java
+65
-0
VideoOriginalController.java
...eejoin/amos/video/controller/VideoOriginalController.java
+55
-0
IVideoOriginalRepository.java
.../com/yeejoin/amos/video/dao/IVideoOriginalRepository.java
+21
-0
VideoOriginalServiceImpl.java
...yeejoin/amos/video/dao/impl/VideoOriginalServiceImpl.java
+188
-0
VideoOriginalDto.java
...ain/java/com/yeejoin/amos/video/dto/VideoOriginalDto.java
+31
-0
VideoOriginal.java
...ain/java/com/yeejoin/amos/video/entity/VideoOriginal.java
+51
-0
VideoOriginalMapper.java
...va/com/yeejoin/amos/video/mapper/VideoOriginalMapper.java
+14
-0
application-dev.properties
...utils-video/src/main/resources/application-dev.properties
+25
-0
application.properties
...oot-utils-video/src/main/resources/application.properties
+36
-0
logback-dev.xml
.../amos-boot-utils-video/src/main/resources/logback-dev.xml
+48
-0
logback-qa.xml
...s/amos-boot-utils-video/src/main/resources/logback-qa.xml
+47
-0
VideoOriginalMapper.xml
...s-video/src/main/resources/mapper/VideoOriginalMapper.xml
+5
-0
pom.xml
amos-boot-utils/pom.xml
+3
-1
pom.xml
pom.xml
+5
-0
No files found.
amos-boot-core/src/main/java/com/yeejoin/amos/boot/core/restTemplate/RestTemplateConfig.java
0 → 100644
View file @
3e0bac6f
package
com
.
yeejoin
.
amos
.
boot
.
core
.
restTemplate
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.http.client.SimpleClientHttpRequestFactory
;
import
org.springframework.web.client.RestTemplate
;
@Configuration
public
class
RestTemplateConfig
{
// @Bean
// public RestTemplate restTemplate(){
// SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
// factory.setConnectTimeout(15000);
// factory.setReadTimeout(5000);
// return new RestTemplate(factory);
// }
}
amos-boot-core/src/main/java/com/yeejoin/amos/boot/core/restTemplate/WxMappingJackson2HttpMessageConverter.java
0 → 100644
View file @
3e0bac6f
package
com
.
yeejoin
.
amos
.
boot
.
core
.
restTemplate
;
import
org.springframework.http.MediaType
;
import
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @program: api
* @description:
* @author: lll
* @create: 2021-09-1 18:00
*/
public
class
WxMappingJackson2HttpMessageConverter
extends
MappingJackson2HttpMessageConverter
{
public
WxMappingJackson2HttpMessageConverter
(){
List
<
MediaType
>
mediaTypes
=
new
ArrayList
<>();
//添加text/html类型的支持
mediaTypes
.
add
(
MediaType
.
TEXT_HTML
);
//添加text/plain类型的支持.微信接口会用到
mediaTypes
.
add
(
MediaType
.
TEXT_PLAIN
);
setSupportedMediaTypes
(
mediaTypes
);
}
}
amos-boot-core/src/main/java/com/yeejoin/amos/boot/core/utils/RestTemplateUtil.java
0 → 100644
View file @
3e0bac6f
package
com
.
yeejoin
.
amos
.
boot
.
core
.
utils
;
import
java.util.List
;
import
java.util.Map
;
import
org.springframework.http.HttpEntity
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.MediaType
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.client.SimpleClientHttpRequestFactory
;
import
org.springframework.http.converter.FormHttpMessageConverter
;
import
org.springframework.util.concurrent.ListenableFutureCallback
;
import
org.springframework.web.client.AsyncRestTemplate
;
import
org.springframework.web.client.RestTemplate
;
import
com.yeejoin.amos.boot.core.restTemplate.WxMappingJackson2HttpMessageConverter
;
/**
* @program: api
* @description:
* @author: lll
* @create: 2021-09-1 18:00
*/
public
class
RestTemplateUtil
{
/**
* 发送表单参数的post请求
*
* @param url 请求url
* @param param 参数
* @param respType 返回类型
* @return T
*/
public
static
<
T
>
T
postForm
(
String
url
,
Map
<
String
,
List
<
Object
>>
param
,
Class
<
T
>
respType
)
{
return
getRestInstance
().
postForEntity
(
url
,
getHttpEntity
(
param
,
false
),
respType
).
getBody
();
}
/**
* 发送表单参数的异步post请求
*
* @param url 请求url
* @param callback 回调接口
* @param respType 返回类型
*/
public
static
<
T
>
void
asyncPostForm
(
String
url
,
Map
<
String
,
List
<
Object
>>
param
,
Class
<
T
>
respType
,
ListenableFutureCallback
<
ResponseEntity
<
T
>>
callback
)
{
getAsyncRestInstance
().
postForEntity
(
url
,
getHttpEntity
(
param
,
false
),
respType
).
addCallback
(
callback
);
}
/**
* 发送表单有参数get请求
*
* @param url 请求url
* @param param 参数对象
* @param respType 返回类型
* @return T
*/
public
static
<
T
>
T
getForm
(
String
url
,
Class
<
T
>
respType
,
Map
<
String
,
String
>
param
)
{
return
getRestInstance
().
getForEntity
(
url
,
respType
,
param
).
getBody
();
}
/**
* @Description: 发送表单无参数的get请求
* @Param: [url, param, respType]
* @return: T
* @Author: tonyzhang
* @Date: 2019-01-18 17:23
*/
public
static
<
T
>
T
getForm
(
String
url
,
Class
<
T
>
respType
)
{
return
getRestInstance
().
getForObject
(
url
,
respType
);
}
/**
* 获取HttpEntity实例对象
*
* @param param 参数对象
* @param isJson true 发送json请求,false发送表单请求
* @return HttpEntity
*/
private
static
<
P
>
HttpEntity
<
P
>
getHttpEntity
(
P
param
,
boolean
isJson
)
{
HttpHeaders
headers
=
new
HttpHeaders
();
if
(
isJson
)
{
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON_UTF8
);
}
else
{
headers
.
setContentType
(
MediaType
.
APPLICATION_FORM_URLENCODED
);
}
return
new
HttpEntity
<>(
param
,
headers
);
}
/*-----------------生产单例对象,方便自定义如何构造对象------------------*/
private
static
RestTemplate
restInit
()
{
//设置连接超时和读取超时时间
SimpleClientHttpRequestFactory
factory
=
new
SimpleClientHttpRequestFactory
();
factory
.
setConnectTimeout
(
5000
);
factory
.
setReadTimeout
(
5000
);
RestTemplate
restTemplate
=
new
RestTemplate
(
factory
);
FormHttpMessageConverter
fastConverter
=
new
FormHttpMessageConverter
();
WxMappingJackson2HttpMessageConverter
wmc
=
new
WxMappingJackson2HttpMessageConverter
();
restTemplate
.
getMessageConverters
().
add
(
fastConverter
);
restTemplate
.
getMessageConverters
().
add
(
wmc
);
return
restTemplate
;
}
private
static
AsyncRestTemplate
asyncRestInit
()
{
return
new
AsyncRestTemplate
();
}
private
static
RestTemplate
getRestInstance
()
{
return
RestSingle
.
INSTANCE
;
}
private
static
AsyncRestTemplate
getAsyncRestInstance
()
{
return
AsyncRestSingle
.
INSTANCE
;
}
private
static
class
RestSingle
{
private
static
final
RestTemplate
INSTANCE
=
restInit
();
}
private
static
class
AsyncRestSingle
{
private
static
final
AsyncRestTemplate
INSTANCE
=
asyncRestInit
();
}
}
\ No newline at end of file
amos-boot-utils/amos-boot-utils-jpush/src/main/resources/logback-dev.xml
View file @
3e0bac6f
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
<appender
name=
"FILE"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<appender
name=
"FILE"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<rollingPolicy
class=
"ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"
>
<rollingPolicy
class=
"ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"
>
<!--日志文件输出的文件名-->
<!--日志文件输出的文件名-->
<FileNamePattern>
${LOG_HOME}/
knowledgebase
.log.%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<FileNamePattern>
${LOG_HOME}/
jpush
.log.%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!--日志文件保留天数-->
<!--日志文件保留天数-->
<MaxHistory>
30
</MaxHistory>
<MaxHistory>
30
</MaxHistory>
<!--日志文件大小-->
<!--日志文件大小-->
...
...
amos-boot-utils/amos-boot-utils-jpush/src/main/resources/logback-qa.xml
View file @
3e0bac6f
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
<appender
name=
"FILE"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<appender
name=
"FILE"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<!--日志文件输出的文件名-->
<!--日志文件输出的文件名-->
<FileNamePattern>
${LOG_HOME}/
knowledgebase
.%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<FileNamePattern>
${LOG_HOME}/
jpush
.%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!--日志文件保留天数-->
<!--日志文件保留天数-->
<MaxHistory>
30
</MaxHistory>
<MaxHistory>
30
</MaxHistory>
<!--按大小分割同一天的-->
<!--按大小分割同一天的-->
...
...
amos-boot-utils/amos-boot-utils-video/pom.xml
0 → 100644
View file @
3e0bac6f
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
amos-boot-utils-video
</artifactId>
<parent>
<artifactId>
amos-boot-utils
</artifactId>
<groupId>
com.amosframework.boot
</groupId>
<version>
1.0.0
</version>
</parent>
<dependencies>
<dependency>
<groupId>
com.amosframework.boot
</groupId>
<artifactId>
amos-boot-biz-common
</artifactId>
<version>
${amos-biz-boot.version}
</version>
</dependency>
<dependency>
<groupId>
net.sf.json-lib
</groupId>
<artifactId>
json-lib
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-elasticsearch
</artifactId>
</dependency>
</dependencies>
</project>
amos-boot-utils/amos-boot-utils-video/src/main/java/com/yeejoin/amos/VideoApplication.java
0 → 100644
View file @
3e0bac6f
package
com
.
yeejoin
.
amos
;
import
java.net.InetAddress
;
import
java.net.UnknownHostException
;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.boot.web.servlet.ServletComponentScan
;
import
org.springframework.cloud.client.discovery.EnableDiscoveryClient
;
import
org.springframework.cloud.netflix.eureka.EnableEurekaClient
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
import
org.springframework.context.ConfigurableApplicationContext
;
import
org.springframework.context.annotation.ComponentScan
;
import
org.springframework.core.env.Environment
;
import
org.springframework.scheduling.annotation.EnableAsync
;
@SpringBootApplication
@EnableConfigurationProperties
@ServletComponentScan
@EnableDiscoveryClient
@EnableFeignClients
@EnableAsync
@EnableEurekaClient
@MapperScan
({
"org.typroject.tyboot.demo.face.orm.dao*"
,
"org.typroject.tyboot.face.*.orm.dao*"
,
"org.typroject.tyboot.core.auth.face.orm.dao*"
,
"org.typroject.tyboot.component.*.face.orm.dao*"
,
"com.yeejoin.amos.video.mapper"
,
"com.yeejoin.amos.boot.biz.common.dao.mapper"
})
@ComponentScan
({
"org.typroject"
,
"com.yeejoin.amos"
})
public
class
VideoApplication
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
VideoApplication
.
class
);
public
static
void
main
(
String
[]
args
)
throws
UnknownHostException
{
ConfigurableApplicationContext
context
=
SpringApplication
.
run
(
VideoApplication
.
class
,
args
);
// GlobalExceptionHandler.setAlwaysOk(true);
Environment
env
=
context
.
getEnvironment
();
String
ip
=
InetAddress
.
getLocalHost
().
getHostAddress
();
String
port
=
env
.
getProperty
(
"server.port"
);
String
path
=
env
.
getProperty
(
"server.servlet.context-path"
);
logger
.
info
(
"\n----------------------------------------------------------\n\t"
+
"Application Amos-Biz-Boot is running! Access URLs:\n\t"
+
"Swagger文档: \thttp://"
+
ip
+
":"
+
port
+
path
+
"/doc.html\n"
+
"----------------------------------------------------------"
);
}
}
amos-boot-utils/amos-boot-utils-video/src/main/java/com/yeejoin/amos/video/config/ElasticSearchClientConfig.java
0 → 100644
View file @
3e0bac6f
package
com
.
yeejoin
.
amos
.
video
.
config
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.http.HttpHost
;
import
org.apache.http.auth.AuthScope
;
import
org.apache.http.auth.Credentials
;
import
org.apache.http.auth.UsernamePasswordCredentials
;
import
org.apache.http.client.CredentialsProvider
;
import
org.apache.http.client.config.RequestConfig
;
import
org.apache.http.impl.client.BasicCredentialsProvider
;
import
org.apache.http.impl.nio.client.HttpAsyncClientBuilder
;
import
org.apache.http.message.BasicHeader
;
import
org.apache.tomcat.util.codec.binary.Base64
;
import
org.elasticsearch.client.RestClient
;
import
org.elasticsearch.client.RestClientBuilder
;
import
org.elasticsearch.client.RestHighLevelClient
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
@Configuration
public
class
ElasticSearchClientConfig
{
@Value
(
"${spring.elasticsearch.rest.uris}"
)
private
String
uris
;
@Bean
@Qualifier
(
"highLevelClient"
)
public
RestHighLevelClient
restHighLevelClient
()
{
String
auth
=
Base64
.
encodeBase64String
((
"elastic:es123456"
).
getBytes
());
try
{
String
url
=
uris
.
replace
(
"http://"
,
""
);
final
String
[]
parts
=
StringUtils
.
split
(
url
,
":"
);
HttpHost
httpHost
=
new
HttpHost
(
parts
[
0
],
Integer
.
parseInt
(
parts
[
1
]),
"http"
);
RestClientBuilder
builder
=
RestClient
.
builder
(
httpHost
);
final
CredentialsProvider
credentialsProvider
=
new
BasicCredentialsProvider
();
credentialsProvider
.
setCredentials
(
AuthScope
.
ANY
,
new
UsernamePasswordCredentials
(
"elastic"
,
"es123456"
));
builder
.
setRequestConfigCallback
(
new
RestClientBuilder
.
RequestConfigCallback
()
{
// 该方法接收一个RequestConfig.Builder对象,对该对象进行修改后然后返回。
@Override
public
RequestConfig
.
Builder
customizeRequestConfig
(
RequestConfig
.
Builder
requestConfigBuilder
)
{
return
requestConfigBuilder
.
setConnectTimeout
(
5000
*
1000
)
// 连接超时(默认为1秒)
.
setSocketTimeout
(
6000
*
1000
);
// 套接字超时(默认为30秒)//更改客户端的超时限制默认30秒现在改为100*1000分钟
}
});
// 调整最大重试超时时间(默认为30秒).setMaxRetryTimeoutMillis(60000);
builder
.
setHttpClientConfigCallback
(
new
RestClientBuilder
.
HttpClientConfigCallback
()
{
@Override
public
HttpAsyncClientBuilder
customizeHttpClient
(
HttpAsyncClientBuilder
httpClientBuilder
)
{
httpClientBuilder
.
disableAuthCaching
();
return
httpClientBuilder
.
setDefaultCredentialsProvider
(
credentialsProvider
);
}
});
// builder.setDefaultHeaders(new BasicHeader[] {
// new BasicHeader("Authorization","Basic"+auth)
// });
return
new
RestHighLevelClient
(
builder
);
}
catch
(
Exception
e
)
{
throw
new
IllegalStateException
(
"Invalid ES nodes "
+
"property '"
+
uris
+
"'"
,
e
);
}
}
}
amos-boot-utils/amos-boot-utils-video/src/main/java/com/yeejoin/amos/video/controller/VideoOriginalController.java
0 → 100644
View file @
3e0bac6f
package
com
.
yeejoin
.
amos
.
video
.
controller
;
import
java.util.List
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.typroject.tyboot.core.foundation.enumeration.UserType
;
import
org.typroject.tyboot.core.restful.doc.TycloudOperation
;
import
org.typroject.tyboot.core.restful.utils.ResponseHelper
;
import
org.typroject.tyboot.core.restful.utils.ResponseModel
;
import
com.yeejoin.amos.boot.biz.common.controller.BaseController
;
import
com.yeejoin.amos.video.dao.impl.VideoOriginalServiceImpl
;
import
com.yeejoin.amos.video.dto.VideoOriginalDto
;
import
com.yeejoin.amos.video.entity.VideoOriginal
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
/**
* 模板表
*
* @author system_generator
* @date 2021-09-01
*/
@RestController
@Api
(
tags
=
"对接视频原始数据Api"
)
@RequestMapping
(
value
=
"/video-original"
)
public
class
VideoOriginalController
extends
BaseController
{
@Autowired
private
VideoOriginalServiceImpl
videoOriginalServiceImpl
;
@GetMapping
(
"/hk/init"
)
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
,
needAuth
=
false
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"构建海康原始视频数据"
,
notes
=
"构建海康原始视频数据"
)
public
ResponseModel
<
Boolean
>
hkInitData
()
{
return
ResponseHelper
.
buildResponse
(
videoOriginalServiceImpl
.
initEs
(
""
,
""
));
}
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
,
needAuth
=
false
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"按视频名称查询视频节点"
,
notes
=
"按视频名称查询视频节点"
)
@GetMapping
(
value
=
"/list/video/{cn}"
)
public
ResponseModel
<
List
<
VideoOriginalDto
>>
videoBySimilar
(
@PathVariable
String
cn
)
throws
Exception
{
return
ResponseHelper
.
buildResponse
(
videoOriginalServiceImpl
.
qeueryByKeys
(
cn
));
}
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
,
needAuth
=
false
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"根据indexCode获取播放URL"
,
notes
=
"根据indexCode获取播放URL"
)
@GetMapping
(
value
=
"/url/video/{indexCode}"
)
public
ResponseModel
<
String
>
videoUrlByIndexCode
(
@PathVariable
String
indexCode
)
throws
Exception
{
return
ResponseHelper
.
buildResponse
(
videoOriginalServiceImpl
.
qeueryByIndexCode
(
indexCode
));
}
}
amos-boot-utils/amos-boot-utils-video/src/main/java/com/yeejoin/amos/video/dao/IVideoOriginalRepository.java
0 → 100644
View file @
3e0bac6f
package
com
.
yeejoin
.
amos
.
video
.
dao
;
import
java.util.List
;
import
org.springframework.data.repository.PagingAndSortingRepository
;
import
org.springframework.stereotype.Repository
;
import
com.yeejoin.amos.video.entity.VideoOriginal
;
/**
* 模板表接口类
*
* @author system_generator
* @date 2021-09-01
*/
@Repository
public
interface
IVideoOriginalRepository
extends
PagingAndSortingRepository
<
VideoOriginal
,
String
>
{
List
<
VideoOriginal
>
findByCnLike
(
String
cn
);
}
amos-boot-utils/amos-boot-utils-video/src/main/java/com/yeejoin/amos/video/dao/impl/VideoOriginalServiceImpl.java
0 → 100644
View file @
3e0bac6f
package
com
.
yeejoin
.
amos
.
video
.
dao
.
impl
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Spliterator
;
import
java.util.stream.StreamSupport
;
import
javax.annotation.PostConstruct
;
import
org.apache.commons.compress.utils.Lists
;
import
org.elasticsearch.index.query.BoolQueryBuilder
;
import
org.elasticsearch.index.query.FuzzyQueryBuilder
;
import
org.elasticsearch.index.query.MatchQueryBuilder
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.elasticsearch.core.ElasticsearchOperations
;
import
org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate
;
import
org.springframework.data.elasticsearch.core.SearchHit
;
import
org.springframework.data.elasticsearch.core.SearchHits
;
import
org.springframework.data.elasticsearch.core.query.NativeSearchQuery
;
import
org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder
;
import
org.springframework.http.HttpEntity
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpMethod
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.client.SimpleClientHttpRequestFactory
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.client.RestTemplate
;
import
com.alibaba.fastjson.JSONObject
;
import
com.yeejoin.amos.boot.biz.common.utils.DateUtils
;
import
com.yeejoin.amos.video.dao.IVideoOriginalRepository
;
import
com.yeejoin.amos.video.dto.VideoOriginalDto
;
import
com.yeejoin.amos.video.entity.VideoOriginal
;
//import net.sf.json.JSONObject;
/**
* 模板表服务实现类
*
* @author system_generator
* @date 2021-09-01
*/
@Service
public
class
VideoOriginalServiceImpl
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
VideoOriginalServiceImpl
.
class
);
@Autowired
private
RestTemplate
restTemplate
;
@Autowired
private
IVideoOriginalRepository
iVideoOriginalRepository
;
@Autowired
private
ElasticsearchRestTemplate
elasticsearchTemplate
;
@Value
(
"${biz.hk.video.url}"
)
private
String
hkVideoUrl
;
@Value
(
"${biz.hk.video.APPkey}"
)
private
String
hkVideoAPPkey
;
@Value
(
"${biz.hk.video.APPsecret}"
)
private
String
hkVideoAPPsecret
;
@Value
(
"${biz.hk.video.csv}"
)
private
String
hkVideoCsv
;
private
final
String
protocol
=
"hls"
;
@PostConstruct
public
void
init
()
{
// 初始化ES,重建索引
// initEs();
}
/**
* 重建索引
*/
public
Boolean
initEs
(
String
userId
,
String
userName
)
{
// iVideoOriginalRepository.deleteAll();
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
add
(
"Content-Type"
,
"application/json"
);
SimpleClientHttpRequestFactory
factory
=
new
SimpleClientHttpRequestFactory
();
factory
.
setConnectTimeout
(
30000
);
factory
.
setReadTimeout
(
30000
);
restTemplate
.
setRequestFactory
(
factory
);
// String objectStr = "{\"httpMethod\":\"GET\",\"path\":\"/api/resource/v1/csv/downloadcsv/{csvFileName}\",\"headers\":{},\"query\":{},\"parameter\":{\"csvFileName\":\"otherDomainCameraFull_1.csv\"},\"mock\":false,\"appKey\":\"25907430\",\"appSecret\":\"RJj3WmSNdQuyX0yCR02b\"}";
String
objectStr
=
new
StringBuilder
().
append
(
"{\"httpMethod\":\"GET\",\"path\":\"/api/resource/v1/csv/downloadcsv/{csvFileName}\",\"headers\":{},\"query\":{},\"parameter\":{\"csvFileName\":\""
)
.
append
(
hkVideoCsv
).
append
(
"\"},\"mock\":false,\"appKey\":\""
).
append
(
hkVideoAPPkey
)
.
append
(
"\",\"appSecret\":\""
).
append
(
hkVideoAPPsecret
).
append
(
"\"}"
).
toString
();
JSONObject
obj
=
JSONObject
.
parseObject
(
objectStr
);
HttpEntity
<
JSONObject
>
request
=
new
HttpEntity
<>(
obj
,
headers
);
// 组装
logger
.
info
(
"开始查询海康视频数据"
+
objectStr
);
ResponseEntity
<
String
>
response
=
restTemplate
.
exchange
(
hkVideoUrl
,
HttpMethod
.
POST
,
request
,
String
.
class
);
String
ss
=
response
.
getBody
();
JSONObject
obj1
=
JSONObject
.
parseObject
(
ss
);
String
sss
=
obj1
.
get
(
"response"
).
toString
();
logger
.
info
(
"完成海康视频数据查询:长度:"
+
sss
.
length
());
String
[]
str
=
sss
.
split
(
"\n"
);
List
<
VideoOriginal
>
resultData
=
new
ArrayList
<
VideoOriginal
>();
for
(
String
originalStr
:
str
)
{
String
[]
strstr
=
originalStr
.
split
(
","
);
String
cn
=
strstr
[
0
];
String
indexCode
=
strstr
[
1
];
if
(!
cn
.
equals
(
"cn"
)
&&
!
indexCode
.
equals
(
"indexCode"
))
{
VideoOriginal
videoOriginal
=
new
VideoOriginal
();
videoOriginal
.
setCn
(
cn
);
videoOriginal
.
setIndexCode
(
indexCode
);
videoOriginal
.
setOriginalData
(
originalStr
);
videoOriginal
.
setRecUserId
(
userId
);
videoOriginal
.
setRecUserName
(
userName
);
videoOriginal
.
setRecDate
(
DateUtils
.
getDateNowString
());
resultData
.
add
(
videoOriginal
);
// iVideoOriginalRepository.save(videoOriginal);
}
}
logger
.
info
(
"开始搜索引擎中存储"
+
resultData
.
size
());
iVideoOriginalRepository
.
saveAll
(
resultData
);
logger
.
info
(
"完成搜索引擎中存储"
);
return
true
;
}
public
List
<
VideoOriginalDto
>
qeueryByKeys
(
String
cn
)
{
// TODO Auto-generated method stub
// List<VideoOriginal> videoOriginalList = new ArrayList<VideoOriginal>();
// MatchQueryBuilder builder = QueryBuilders.matchQuery("cn", cn);
//// FuzzyQueryBuilder builder = QueryBuilders.fuzzyQuery("cn", cn);
// NativeSearchQuery searchQuery = new NativeSearchQuery(builder);
// SearchHits<VideoOriginal> searchHits = elasticsearchTemplate.search(searchQuery, VideoOriginal.class);
// BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
// BoolQueryBuilder qb4 = QueryBuilders.boolQuery()
// .should(QueryBuilders.termQuery("cn", cn));
// boolMust.must(qb4);
// NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder()
// //过滤条件
// .withQuery(boolMust);
// SearchHits<VideoOriginal> searchHits = elasticsearchTemplate.search(queryBuilder.build(), VideoOriginal.class);
// for (SearchHit searchHit : searchHits.getSearchHits())
// {
// System.out.println(searchHit.getContent());
// JSONObject jsonObject = (JSONObject) JSONObject.toJSON(searchHit.getContent());
// VideoOriginal videoOriginals = (VideoOriginal) JSONObject.toJavaObject(jsonObject,VideoOriginal.class);
// videoOriginalList.add(videoOriginals);
// }
List
<
VideoOriginalDto
>
videoOriginalDtoList
=
new
ArrayList
<
VideoOriginalDto
>();
if
(
cn
.
equals
(
"all"
))
{
Iterable
<
VideoOriginal
>
it
=
iVideoOriginalRepository
.
findAll
();
for
(
VideoOriginal
videoOriginal
:
it
)
{
videoOriginalDtoList
.
add
(
transDto
(
videoOriginal
));
}
}
else
{
List
<
VideoOriginal
>
videoOriginalList
=
iVideoOriginalRepository
.
findByCnLike
(
cn
);
for
(
VideoOriginal
videoOriginal
:
videoOriginalList
)
{
videoOriginalDtoList
.
add
(
transDto
(
videoOriginal
));
}
}
return
videoOriginalDtoList
;
}
private
VideoOriginalDto
transDto
(
VideoOriginal
videoOriginal
){
VideoOriginalDto
videoOriginalDto
=
new
VideoOriginalDto
();
videoOriginalDto
.
setCn
(
videoOriginal
.
getCn
());
videoOriginalDto
.
setIndexCode
(
videoOriginal
.
getIndexCode
());
return
videoOriginalDto
;
}
public
String
qeueryByIndexCode
(
String
indexCode
)
{
// TODO Auto-generated method stub
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
add
(
"Content-Type"
,
"application/json"
);
SimpleClientHttpRequestFactory
factory
=
new
SimpleClientHttpRequestFactory
();
factory
.
setConnectTimeout
(
30000
);
factory
.
setReadTimeout
(
30000
);
restTemplate
.
setRequestFactory
(
factory
);
String
objectStr
=
new
StringBuilder
().
append
(
"{\"httpMethod\":\"POST\",\"path\":\"/api/video/v1/cameras/previewURLs\",\"headers\":{},\"query\":{},\"parameter\":{},\"body\":{\"indexCode\":\""
)
.
append
(
indexCode
).
append
(
"\",\"netZoneCode\":\"0\",\"transmode\":1,\"streamType\":0,\"protocol\":\""
).
append
(
protocol
).
append
(
"\"},\"contentType\":\"application/json;charset=UTF-8\",\"mock\":false,\"appKey\":\""
).
append
(
hkVideoAPPkey
)
.
append
(
"\",\"appSecret\":\""
).
append
(
hkVideoAPPsecret
).
append
(
"\"}"
).
toString
();
JSONObject
obj
=
JSONObject
.
parseObject
(
objectStr
);
HttpEntity
<
JSONObject
>
request
=
new
HttpEntity
<>(
obj
,
headers
);
// 组装
logger
.
info
(
"开始查询海康视频数据"
+
objectStr
);
ResponseEntity
<
String
>
response
=
restTemplate
.
exchange
(
hkVideoUrl
,
HttpMethod
.
POST
,
request
,
String
.
class
);
String
ss
=
response
.
getBody
();
JSONObject
obj1
=
JSONObject
.
parseObject
(
ss
);
String
sss
=
obj1
.
get
(
"response"
).
toString
();
String
ssss
=
JSONObject
.
parseObject
(
sss
).
get
(
"data"
).
toString
();
String
sssss
=
JSONObject
.
parseObject
(
ssss
).
get
(
"url"
).
toString
();
logger
.
info
(
"完成海康视频数据查询:长度:"
+
sss
.
length
());
return
sssss
;
}
}
\ No newline at end of file
amos-boot-utils/amos-boot-utils-video/src/main/java/com/yeejoin/amos/video/dto/VideoOriginalDto.java
0 → 100644
View file @
3e0bac6f
package
com
.
yeejoin
.
amos
.
video
.
dto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
com.yeejoin.amos.boot.biz.common.dto.BaseDto
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.util.Date
;
/**
* 模板表
*
* @author system_generator
* @date 2021-09-01
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"VideoOriginalDto"
,
description
=
"模板表"
)
public
class
VideoOriginalDto
extends
BaseDto
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"视频名称"
)
private
String
cn
;
@ApiModelProperty
(
value
=
"视频代码"
)
private
String
indexCode
;
}
amos-boot-utils/amos-boot-utils-video/src/main/java/com/yeejoin/amos/video/entity/VideoOriginal.java
0 → 100644
View file @
3e0bac6f
package
com
.
yeejoin
.
amos
.
video
.
entity
;
import
java.util.Date
;
import
org.springframework.data.annotation.Id
;
import
org.springframework.data.elasticsearch.annotations.Document
;
import
org.springframework.data.elasticsearch.annotations.Field
;
import
org.springframework.data.elasticsearch.annotations.FieldType
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
/**
* 模板表
*
* @author system_generator
* @date 2021-09-01
*/
@Data
@Accessors
(
chain
=
true
)
@Document
(
indexName
=
"video"
,
type
=
"videoOriginal"
,
shards
=
1
,
replicas
=
0
)
public
class
VideoOriginal
{
/** 主键 */
@Id
private
String
sequenceNbr
;
/**
* 视频名称
*/
@Field
(
type
=
FieldType
.
Keyword
)
private
String
cn
;
/**
* 视频代码
*/
@Field
(
type
=
FieldType
.
Text
)
private
String
indexCode
;
/**
* 原始数据
*/
@Field
(
type
=
FieldType
.
Text
,
index
=
false
)
private
String
originalData
;
@Field
(
type
=
FieldType
.
Text
,
index
=
false
)
private
String
recDate
;
@Field
(
type
=
FieldType
.
Text
,
index
=
false
)
private
String
recUserId
;
@Field
(
type
=
FieldType
.
Text
,
index
=
false
)
private
String
recUserName
;
}
amos-boot-utils/amos-boot-utils-video/src/main/java/com/yeejoin/amos/video/mapper/VideoOriginalMapper.java
0 → 100644
View file @
3e0bac6f
package
com
.
yeejoin
.
amos
.
video
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.yeejoin.amos.video.entity.VideoOriginal
;
/**
* 模板表 Mapper 接口
*
* @author system_generator
* @date 2021-09-01
*/
public
interface
VideoOriginalMapper
extends
BaseMapper
<
VideoOriginal
>
{
}
amos-boot-utils/amos-boot-utils-video/src/main/resources/application-dev.properties
0 → 100644
View file @
3e0bac6f
## DB properties:
spring.datasource.url
=
jdbc:mysql://172.16.6.60:3306/amos-jcs-biz?allowMultiQueries=true&serverTimezone=GMT%2B8&characterEncoding=utf8
spring.datasource.username
=
root
spring.datasource.password
=
root_123
## eureka properties:
eureka.client.serviceUrl.defaultZone
=
http://172.16.10.72:10001/eureka/
## redis properties:
spring.redis.database
=
0
spring.redis.host
=
172.16.10.85
spring.redis.port
=
6379
spring.redis.password
=
amos2019Redis
## ES properties:
biz.elasticsearch.address
=
172.16.3.39
spring.data.elasticsearch.cluster-name
=
elasticsearch
spring.data.elasticsearch.cluster-nodes
=
${biz.elasticsearch.address}:9300
spring.elasticsearch.rest.uris
=
http://${biz.elasticsearch.address}:9200
##biz custem properties
biz.hk.video.url
=
http://11.11.16.12:9017/artemis-web/debug
biz.hk.video.APPkey
=
25907430
biz.hk.video.APPsecret
=
RJj3WmSNdQuyX0yCR02b
biz.hk.video.csv
=
otherDomainCameraFull_1.csv
\ No newline at end of file
amos-boot-utils/amos-boot-utils-video/src/main/resources/application.properties
0 → 100644
View file @
3e0bac6f
spring.application.name
=
VIDEO
server.servlet.context-path
=
/video
server.port
=
7900
spring.profiles.active
=
dev
## redis失效时间
redis.cache.failure.time
=
10800
## DB properties:
spring.datasource.driver-class-name
=
com.mysql.cj.jdbc.Driver
spring.datasource.type
=
com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle
=
10
spring.datasource.hikari.maximum-pool-size
=
25
spring.datasource.hikari.auto-commit
=
true
spring.datasource.hikari.idle-timeout
=
30000
spring.datasource.hikari.pool-name
=
DatebookHikariCP
spring.datasource.hikari.max-lifetime
=
120000
spring.datasource.hikari.connection-timeout
=
30000
spring.datasource.hikari.connection-test-query
=
SELECT 1
## eureka properties:
eureka.client.registry-fetch-interval-seconds
=
5
eureka.instance.prefer-ip-address
=
true
management.endpoint.health.show-details
=
always
management.endpoints.web.exposure.include
=
*
eureka.instance.health-check-url-path
=
/actuator/health
eureka.instance.lease-expiration-duration-in-seconds
=
10
eureka.instance.lease-renewal-interval-in-seconds
=
5
eureka.instance.metadata-map.management.context-path
=
${server.servlet.context-path}/actuator
eureka.instance.status-page-url-path
=
/actuator/info
eureka.instance.metadata-map.management.api-docs
=
http://localhost:${server.port}${server.servlet.context-path}/doc.html
## redis properties:
spring.redis.lettuce.pool.max-active
=
200
spring.redis.lettuce.pool.max-wait
=
-1
spring.redis.lettuce.pool.max-idle
=
10
spring.redis.lettuce.pool.min-idle
=
0
spring.redis.expire.time
=
300
amos-boot-utils/amos-boot-utils-video/src/main/resources/logback-dev.xml
0 → 100644
View file @
3e0bac6f
<?xml version="1.0" encoding="UTF-8"?>
<configuration
debug=
"false"
>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property
name=
"LOG_HOME"
value=
"log"
/>
<!-- 按照每天生成日志文件 -->
<appender
name=
"FILE"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<rollingPolicy
class=
"ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"
>
<!--日志文件输出的文件名-->
<FileNamePattern>
${LOG_HOME}/video.log.%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>
30
</MaxHistory>
<!--日志文件大小-->
<MaxFileSize>
30mb
</MaxFileSize>
</rollingPolicy>
<encoder
class=
"ch.qos.logback.classic.encoder.PatternLayoutEncoder"
>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</encoder>
</appender>
<!-- 控制台输出 -->
<appender
name=
"STDOUT"
class=
"ch.qos.logback.core.ConsoleAppender"
>
<encoder
class=
"ch.qos.logback.classic.encoder.PatternLayoutEncoder"
>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</encoder>
</appender>
<!-- show parameters for hibernate sql 专为 Hibernate 定制
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
<logger name="org.hibernate.SQL" level="DEBUG" />
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
-->
<!--myibatis log configure-->
<logger
name=
"com.apache.ibatis"
level=
"DEBUG"
/>
<logger
name=
"org.mybatis"
level=
"DEBUG"
/>
<logger
name=
"java.sql.Connection"
level=
"DEBUG"
/>
<logger
name=
"java.sql.Statement"
level=
"DEBUG"
/>
<logger
name=
"java.sql.PreparedStatement"
level=
"DEBUG"
/>
<logger
name=
"org.springframework"
level=
"DEBUG"
/>
<!-- 日志输出级别 -->
<root
level=
"DEBUG"
>
<appender-ref
ref=
"FILE"
/>
<appender-ref
ref=
"STDOUT"
/>
</root>
</configuration>
\ No newline at end of file
amos-boot-utils/amos-boot-utils-video/src/main/resources/logback-qa.xml
0 → 100644
View file @
3e0bac6f
<?xml version="1.0" encoding="UTF-8"?>
<configuration
debug=
"false"
>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property
name=
"LOG_HOME"
value=
"log"
/>
<!-- 按照每天生成日志文件 -->
<appender
name=
"FILE"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<!--日志文件输出的文件名-->
<FileNamePattern>
${LOG_HOME}/video.%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>
30
</MaxHistory>
<!--按大小分割同一天的-->
<timeBasedFileNamingAndTriggeringPolicy
class=
"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"
>
<maxFileSize>
100MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder
class=
"ch.qos.logback.classic.encoder.PatternLayoutEncoder"
>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</encoder>
</appender>
<!-- show parameters for hibernate sql 专为 Hibernate 定制
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
<logger name="org.hibernate.SQL" level="DEBUG" />
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
-->
<!--myibatis log configure-->
<logger
name=
"com.apache.ibatis"
level=
"INFO"
/>
<logger
name=
"org.mybatis"
level=
"INFO"
/>
<logger
name=
"java.sql.Connection"
level=
"INFO"
/>
<logger
name=
"java.sql.Statement"
level=
"INFO"
/>
<logger
name=
"java.sql.PreparedStatement"
level=
"INFO"
/>
<logger
name=
"com.baomidou.mybatisplus"
level=
"INFO"
/>
<logger
name=
"org.typroject"
level=
"INFO"
/>
<logger
name=
"com.yeejoin.amos"
level=
"INFO"
/>
<logger
name=
"org.springframework"
level=
"INFO"
/>
<!-- 日志输出级别 -->
<root
level=
"INFO"
>
<appender-ref
ref=
"FILE"
/>
</root>
</configuration>
\ No newline at end of file
amos-boot-utils/amos-boot-utils-video/src/main/resources/mapper/VideoOriginalMapper.xml
0 → 100644
View file @
3e0bac6f
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.yeejoin.amos.boot.module.common.api.mapper.VideoOriginalMapper"
>
</mapper>
amos-boot-utils/pom.xml
View file @
3e0bac6f
...
@@ -17,5 +17,6 @@
...
@@ -17,5 +17,6 @@
<modules>
<modules>
<module>
amos-boot-utils-jpush
</module>
<module>
amos-boot-utils-jpush
</module>
<module>
amos-boot-utils-video
</module>
</modules>
</modules>
</project>
</project>
\ No newline at end of file
pom.xml
View file @
3e0bac6f
...
@@ -252,6 +252,11 @@
...
@@ -252,6 +252,11 @@
<artifactId>
liquibase-core
</artifactId>
<artifactId>
liquibase-core
</artifactId>
<version>
4.4.3
</version>
<version>
4.4.3
</version>
</dependency>
</dependency>
<dependency>
<groupId>
net.sf.json-lib
</groupId>
<artifactId>
json-lib
</artifactId>
<version>
2.4
</version>
</dependency>
</dependencies>
</dependencies>
</dependencyManagement>
</dependencyManagement>
<repositories>
<repositories>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment