Commit 2c470f5061de91a1330c3c802d00f2bc48cdeb19

Authored by 648540858
1 parent 2adf2459

升级spring boot版本;全局异常处理;统一返回结果

@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <parent> 5 <parent>
6 <groupId>org.springframework.boot</groupId> 6 <groupId>org.springframework.boot</groupId>
7 <artifactId>spring-boot-starter-parent</artifactId> 7 <artifactId>spring-boot-starter-parent</artifactId>
8 - <version>2.3.5.RELEASE</version> 8 + <version>2.7.2</version>
9 </parent> 9 </parent>
10 <groupId>top.panll.assist</groupId> 10 <groupId>top.panll.assist</groupId>
11 <artifactId>wvp-pro-assist</artifactId> 11 <artifactId>wvp-pro-assist</artifactId>
@@ -56,17 +56,16 @@ @@ -56,17 +56,16 @@
56 <version>1.2.73</version> 56 <version>1.2.73</version>
57 </dependency> 57 </dependency>
58 58
59 - <!--Swagger3 -->  
60 <!--在线文档 --> 59 <!--在线文档 -->
61 <dependency> 60 <dependency>
62 - <groupId>io.springfox</groupId>  
63 - <artifactId>springfox-boot-starter</artifactId>  
64 - <version>3.0.0</version> 61 + <groupId>org.springdoc</groupId>
  62 + <artifactId>springdoc-openapi-ui</artifactId>
  63 + <version>1.6.10</version>
65 </dependency> 64 </dependency>
66 <dependency> 65 <dependency>
67 <groupId>com.github.xiaoymin</groupId> 66 <groupId>com.github.xiaoymin</groupId>
68 - <artifactId>knife4j-spring-boot-starter</artifactId>  
69 - <version>3.0.2</version> 67 + <artifactId>knife4j-springdoc-ui</artifactId>
  68 + <version>3.0.3</version>
70 </dependency> 69 </dependency>
71 70
72 <dependency> 71 <dependency>
src/main/java/top/panll/assist/config/GlobalExceptionHandler.java 0 → 100644
  1 +package top.panll.assist.config;
  2 +
  3 +import org.slf4j.Logger;
  4 +import org.slf4j.LoggerFactory;
  5 +import org.springframework.http.HttpStatus;
  6 +import org.springframework.web.bind.annotation.ExceptionHandler;
  7 +import org.springframework.web.bind.annotation.ResponseStatus;
  8 +import org.springframework.web.bind.annotation.RestControllerAdvice;
  9 +import top.panll.assist.controller.bean.ControllerException;
  10 +import top.panll.assist.controller.bean.ErrorCode;
  11 +import top.panll.assist.controller.bean.WVPResult;
  12 +
  13 +/**
  14 + * 全局异常处理
  15 + */
  16 +@RestControllerAdvice
  17 +public class GlobalExceptionHandler {
  18 +
  19 + private final static Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
  20 +
  21 + /**
  22 + * 默认异常处理
  23 + * @param e 异常
  24 + * @return 统一返回结果
  25 + */
  26 + @ExceptionHandler(Exception.class)
  27 + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
  28 + public WVPResult<String> exceptionHandler(Exception e) {
  29 + logger.error("[全局异常]: ", e);
  30 + return WVPResult.fail(ErrorCode.ERROR500.getCode(), e.getMessage());
  31 + }
  32 +
  33 + /**
  34 + * 自定义异常处理, 处理controller中返回的错误
  35 + * @param e 异常
  36 + * @return 统一返回结果
  37 + */
  38 + @ExceptionHandler(ControllerException.class)
  39 + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
  40 + public WVPResult<String> exceptionHandler(ControllerException e) {
  41 + return WVPResult.fail(e.getCode(), e.getMsg());
  42 + }
  43 +
  44 +}
src/main/java/top/panll/assist/config/GlobalResponseAdvice.java 0 → 100644
  1 +package top.panll.assist.config;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import org.springframework.core.MethodParameter;
  5 +import org.springframework.http.MediaType;
  6 +import org.springframework.http.converter.HttpMessageConverter;
  7 +import org.springframework.http.server.ServerHttpRequest;
  8 +import org.springframework.http.server.ServerHttpResponse;
  9 +import org.springframework.web.bind.annotation.RestControllerAdvice;
  10 +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
  11 +import top.panll.assist.controller.bean.ErrorCode;
  12 +import top.panll.assist.controller.bean.WVPResult;
  13 +
  14 +import javax.validation.constraints.NotNull;
  15 +
  16 +/**
  17 + * 全局统一返回结果
  18 + * @author lin
  19 + */
  20 +@RestControllerAdvice
  21 +public class GlobalResponseAdvice implements ResponseBodyAdvice<Object> {
  22 +
  23 +
  24 + @Override
  25 + public boolean supports(@NotNull MethodParameter returnType, @NotNull Class<? extends HttpMessageConverter<?>> converterType) {
  26 + return true;
  27 + }
  28 +
  29 + @Override
  30 + public Object beforeBodyWrite(Object body, @NotNull MethodParameter returnType, @NotNull MediaType selectedContentType, @NotNull Class<? extends HttpMessageConverter<?>> selectedConverterType, @NotNull ServerHttpRequest request, @NotNull ServerHttpResponse response) {
  31 + // 排除api文档的接口,这个接口不需要统一
  32 + String[] excludePath = {"/v3/api-docs","/api/v1","/index/hook"};
  33 + for (String path : excludePath) {
  34 + if (request.getURI().getPath().startsWith(path)) {
  35 + return body;
  36 + }
  37 + }
  38 +
  39 + if (body instanceof WVPResult) {
  40 + return body;
  41 + }
  42 +
  43 + if (body instanceof ErrorCode) {
  44 + ErrorCode errorCode = (ErrorCode) body;
  45 + return new WVPResult<>(errorCode.getCode(), errorCode.getMsg(), null);
  46 + }
  47 +
  48 + if (body instanceof String) {
  49 + return JSON.toJSONString(WVPResult.success(body));
  50 + }
  51 +
  52 + return WVPResult.success(body);
  53 + }
  54 +}
src/main/java/top/panll/assist/config/SpringDocConfig.java 0 → 100644
  1 +package top.panll.assist.config;
  2 +
  3 +import io.swagger.v3.oas.models.OpenAPI;
  4 +import io.swagger.v3.oas.models.info.Contact;
  5 +import io.swagger.v3.oas.models.info.Info;
  6 +import io.swagger.v3.oas.models.info.License;
  7 +import org.springdoc.core.GroupedOpenApi;
  8 +import org.springframework.beans.factory.annotation.Value;
  9 +import org.springframework.context.annotation.Bean;
  10 +import org.springframework.context.annotation.Configuration;
  11 +
  12 +/**
  13 + * @author lin
  14 + */
  15 +@Configuration
  16 +public class SpringDocConfig {
  17 +
  18 + @Value("${doc.enabled: true}")
  19 + private boolean enable;
  20 +
  21 + @Bean
  22 + public OpenAPI springShopOpenApi() {
  23 + Contact contact = new Contact();
  24 + contact.setName("pan");
  25 + contact.setEmail("648540858@qq.com");
  26 + return new OpenAPI()
  27 + .info(new Info().title("WVP-PRO-ASSIST 接口文档")
  28 + .contact(contact)
  29 + .description("WVP-PRO助手,补充ZLM功能")
  30 + .version("v2.0")
  31 + .license(new License().name("Apache 2.0").url("http://springdoc.org")));
  32 + }
  33 +
  34 + /**
  35 + * 添加分组
  36 + * @return
  37 + */
  38 + @Bean
  39 + public GroupedOpenApi publicApi() {
  40 + return GroupedOpenApi.builder()
  41 + .group("1. 全部")
  42 + .packagesToScan("top.panll.assist")
  43 + .build();
  44 + }
  45 +}
src/main/java/top/panll/assist/config/Swagger3Config.java deleted 100644 → 0
1 -package top.panll.assist.config;  
2 -  
3 -import org.springframework.beans.factory.annotation.Value;  
4 -import org.springframework.context.annotation.Bean;  
5 -import org.springframework.context.annotation.Configuration;  
6 -import springfox.documentation.builders.ApiInfoBuilder;  
7 -import springfox.documentation.builders.PathSelectors;  
8 -import springfox.documentation.builders.RequestHandlerSelectors;  
9 -import springfox.documentation.service.ApiInfo;  
10 -import springfox.documentation.service.Contact;  
11 -import springfox.documentation.spi.DocumentationType;  
12 -import springfox.documentation.spring.web.plugins.Docket;  
13 -  
14 -@Configuration  
15 -public class Swagger3Config {  
16 -  
17 - @Value("${swagger-ui.enabled}")  
18 - private boolean enable;  
19 -  
20 - @Bean  
21 - public Docket createRestApi() {  
22 - return new Docket(DocumentationType.OAS_30)  
23 - .apiInfo(apiInfo())  
24 - .groupName("1. 全部")  
25 - .select()  
26 - .apis(RequestHandlerSelectors.basePackage("top.panll.assist"))  
27 - .paths(PathSelectors.any())  
28 - .build()  
29 - .pathMapping("/")  
30 - .enable(enable);  
31 - }  
32 -  
33 - private ApiInfo apiInfo() {  
34 - return new ApiInfoBuilder()  
35 - .title("WVP-PRO-ASSIST 接口文档")  
36 - .description("更多请咨询服务开发者(https://github.com/648540858/wvp-pro-assist)。")  
37 - .contact(new Contact("648540858", "648540858", "648540858@qq.com"))  
38 - .version("1.0")  
39 - .build();  
40 - }  
41 -}  
src/main/java/top/panll/assist/controller/RecordController.java
@@ -2,16 +2,17 @@ package top.panll.assist.controller; @@ -2,16 +2,17 @@ package top.panll.assist.controller;
2 2
3 import com.alibaba.fastjson.JSON; 3 import com.alibaba.fastjson.JSON;
4 import com.alibaba.fastjson.JSONObject; 4 import com.alibaba.fastjson.JSONObject;
5 -import io.swagger.annotations.Api;  
6 -import io.swagger.annotations.ApiImplicitParam;  
7 -import io.swagger.annotations.ApiImplicitParams;  
8 -import io.swagger.annotations.ApiOperation; 5 +import io.swagger.v3.oas.annotations.Operation;
  6 +import io.swagger.v3.oas.annotations.Parameter;
  7 +import io.swagger.v3.oas.annotations.tags.Tag;
9 import org.slf4j.Logger; 8 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory; 9 import org.slf4j.LoggerFactory;
11 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.http.HttpStatus; 11 import org.springframework.http.HttpStatus;
13 import org.springframework.http.ResponseEntity; 12 import org.springframework.http.ResponseEntity;
14 import org.springframework.web.bind.annotation.*; 13 import org.springframework.web.bind.annotation.*;
  14 +import top.panll.assist.controller.bean.ControllerException;
  15 +import top.panll.assist.controller.bean.ErrorCode;
15 import top.panll.assist.controller.bean.WVPResult; 16 import top.panll.assist.controller.bean.WVPResult;
16 import top.panll.assist.dto.MergeOrCutTaskInfo; 17 import top.panll.assist.dto.MergeOrCutTaskInfo;
17 import top.panll.assist.dto.SignInfo; 18 import top.panll.assist.dto.SignInfo;
@@ -28,7 +29,7 @@ import java.util.ArrayList; @@ -28,7 +29,7 @@ import java.util.ArrayList;
28 import java.util.Date; 29 import java.util.Date;
29 import java.util.List; 30 import java.util.List;
30 import java.util.Map; 31 import java.util.Map;
31 -@Api(tags = "录像管理") 32 +@Tag(name = "录像管理", description = "录像管理")
32 @CrossOrigin 33 @CrossOrigin
33 @RestController 34 @RestController
34 @RequestMapping("/api/record") 35 @RequestMapping("/api/record")
@@ -49,40 +50,31 @@ public class RecordController { @@ -49,40 +50,31 @@ public class RecordController {
49 * 获取app+stream列表 50 * 获取app+stream列表
50 * @return 51 * @return
51 */ 52 */
52 - @ApiOperation("分页获取app+stream的列表")  
53 - @ApiImplicitParams({  
54 - @ApiImplicitParam(name="page", value = "当前页", required = true, dataTypeClass = Integer.class),  
55 - @ApiImplicitParam(name="count", value = "每页查询数量", required = true, dataTypeClass = Integer.class),  
56 - }) 53 + @Operation(summary ="分页获取app+stream的列表")
  54 + @Parameter(name = "page", description = "当前页", required = true)
  55 + @Parameter(name = "count", description = "每页查询数量", required = true)
57 @GetMapping(value = "/list") 56 @GetMapping(value = "/list")
58 @ResponseBody 57 @ResponseBody
59 - public WVPResult<PageInfo<Map<String, String>>> getList(@RequestParam int page, 58 + public PageInfo<Map<String, String>> getList(@RequestParam int page,
60 @RequestParam int count){ 59 @RequestParam int count){
61 - WVPResult<PageInfo<Map<String, String>>> result = new WVPResult<>();  
62 List<Map<String, String>> appList = videoFileService.getList(); 60 List<Map<String, String>> appList = videoFileService.getList();
63 - result.setCode(0);  
64 - result.setMsg("success");  
65 61
66 PageInfo<Map<String, String>> stringPageInfo = new PageInfo<>(appList); 62 PageInfo<Map<String, String>> stringPageInfo = new PageInfo<>(appList);
67 stringPageInfo.startPage(page, count); 63 stringPageInfo.startPage(page, count);
68 - result.setData(stringPageInfo);  
69 - return result; 64 + return stringPageInfo;
70 } 65 }
71 66
72 /** 67 /**
73 * 分页获取app列表 68 * 分页获取app列表
74 * @return 69 * @return
75 */ 70 */
76 - @ApiOperation("分页获取app列表")  
77 - @ApiImplicitParams({  
78 - @ApiImplicitParam(name="page", value = "当前页", required = true, dataTypeClass = Integer.class),  
79 - @ApiImplicitParam(name="count", value = "每页查询数量", required = true, dataTypeClass = Integer.class),  
80 - }) 71 + @Operation(summary ="分页获取app列表")
  72 + @Parameter(name = "page", description = "当前页", required = true)
  73 + @Parameter(name = "count", description = "每页查询数量", required = true)
81 @GetMapping(value = "/app/list") 74 @GetMapping(value = "/app/list")
82 @ResponseBody 75 @ResponseBody
83 - public WVPResult<PageInfo<String>> getAppList(@RequestParam int page, 76 + public PageInfo<String> getAppList(@RequestParam int page,
84 @RequestParam int count){ 77 @RequestParam int count){
85 - WVPResult<PageInfo<String>> result = new WVPResult<>();  
86 List<String> resultData = new ArrayList<>(); 78 List<String> resultData = new ArrayList<>();
87 List<File> appList = videoFileService.getAppList(true); 79 List<File> appList = videoFileService.getAppList(true);
88 if (appList.size() > 0) { 80 if (appList.size() > 0) {
@@ -90,36 +82,28 @@ public class RecordController { @@ -90,36 +82,28 @@ public class RecordController {
90 resultData.add(file.getName()); 82 resultData.add(file.getName());
91 } 83 }
92 } 84 }
93 - result.setCode(0);  
94 - result.setMsg("success");  
95 85
96 PageInfo<String> stringPageInfo = new PageInfo<>(resultData); 86 PageInfo<String> stringPageInfo = new PageInfo<>(resultData);
97 stringPageInfo.startPage(page, count); 87 stringPageInfo.startPage(page, count);
98 - result.setData(stringPageInfo);  
99 - return result; 88 + return stringPageInfo;
100 } 89 }
101 90
102 /** 91 /**
103 * 分页stream列表 92 * 分页stream列表
104 * @return 93 * @return
105 */ 94 */
106 - @ApiOperation("分页stream列表")  
107 - @ApiImplicitParams({  
108 - @ApiImplicitParam(name="page", value = "当前页", required = true, dataTypeClass = Integer.class),  
109 - @ApiImplicitParam(name="count", value = "每页查询数量", required = true, dataTypeClass = Integer.class),  
110 - @ApiImplicitParam(name="app", value = "应用名", required = true, dataTypeClass = String.class),  
111 - }) 95 + @Operation(summary ="分页stream列表")
  96 + @Parameter(name = "page", description = "当前页", required = true)
  97 + @Parameter(name = "count", description = "每页查询数量", required = true)
  98 + @Parameter(name = "app", description = "应用名", required = true)
112 @GetMapping(value = "/stream/list") 99 @GetMapping(value = "/stream/list")
113 @ResponseBody 100 @ResponseBody
114 - public WVPResult<PageInfo<String>> getStreamList(@RequestParam int page, 101 + public PageInfo<String> getStreamList(@RequestParam int page,
115 @RequestParam int count, 102 @RequestParam int count,
116 @RequestParam String app ){ 103 @RequestParam String app ){
117 - WVPResult<PageInfo<String>> result = new WVPResult<>();  
118 List<String> resultData = new ArrayList<>(); 104 List<String> resultData = new ArrayList<>();
119 if (app == null) { 105 if (app == null) {
120 - result.setCode(400);  
121 - result.setMsg("app不能为空");  
122 - return result; 106 + throw new ControllerException(ErrorCode.ERROR400.getCode(), "app不能为空");
123 } 107 }
124 List<File> streamList = videoFileService.getStreamList(app, true); 108 List<File> streamList = videoFileService.getStreamList(app, true);
125 if (streamList != null) { 109 if (streamList != null) {
@@ -127,69 +111,54 @@ public class RecordController { @@ -127,69 +111,54 @@ public class RecordController {
127 resultData.add(file.getName()); 111 resultData.add(file.getName());
128 } 112 }
129 } 113 }
130 - result.setCode(0);  
131 - result.setMsg("success");  
132 PageInfo<String> stringPageInfo = new PageInfo<>(resultData); 114 PageInfo<String> stringPageInfo = new PageInfo<>(resultData);
133 stringPageInfo.startPage(page, count); 115 stringPageInfo.startPage(page, count);
134 - result.setData(stringPageInfo);  
135 - return result; 116 + return stringPageInfo;
136 } 117 }
137 118
138 /** 119 /**
139 * 获取日期文件夹列表 120 * 获取日期文件夹列表
140 * @return 121 * @return
141 */ 122 */
142 - @ApiOperation("获取日期文件夹列表")  
143 - @ApiImplicitParams({  
144 - @ApiImplicitParam(name="year", value = "年", required = true, dataTypeClass = Integer.class),  
145 - @ApiImplicitParam(name="month", value = "月", required = true, dataTypeClass = Integer.class),  
146 - @ApiImplicitParam(name="app", value = "应用名", required = true, dataTypeClass = String.class),  
147 - @ApiImplicitParam(name="stream", value = "流ID", required = true, dataTypeClass = String.class),  
148 - }) 123 + @Operation(summary ="获取日期文件夹列表")
  124 + @Parameter(name = "year", description = "月", required = true)
  125 + @Parameter(name = "month", description = "年", required = true)
  126 + @Parameter(name = "app", description = "应用名", required = true)
  127 + @Parameter(name = "stream", description = "流ID", required = true)
149 @GetMapping(value = "/date/list") 128 @GetMapping(value = "/date/list")
150 @ResponseBody 129 @ResponseBody
151 - public WVPResult<List<String>> getDateList( @RequestParam(required = false) Integer year, 130 + public List<String> getDateList( @RequestParam(required = false) Integer year,
152 @RequestParam(required = false) Integer month, 131 @RequestParam(required = false) Integer month,
153 @RequestParam String app, 132 @RequestParam String app,
154 @RequestParam String stream ){ 133 @RequestParam String stream ){
155 - WVPResult<List<String>> result = new WVPResult<>();  
156 List<String> resultData = new ArrayList<>(); 134 List<String> resultData = new ArrayList<>();
157 if (app == null) { 135 if (app == null) {
158 - result.setCode(400);  
159 - result.setMsg("app不能为空");  
160 - return result; 136 + throw new ControllerException(ErrorCode.ERROR400.getCode(), "app不能为空");
161 }; 137 };
162 if (stream == null) { 138 if (stream == null) {
163 - result.setCode(400);  
164 - result.setMsg("stream不能为空");  
165 - return result; 139 + throw new ControllerException(ErrorCode.ERROR400.getCode(), "stream不能为空");
166 } 140 }
167 List<File> dateList = videoFileService.getDateList(app, stream, year, month, true); 141 List<File> dateList = videoFileService.getDateList(app, stream, year, month, true);
168 for (File file : dateList) { 142 for (File file : dateList) {
169 resultData.add(file.getName()); 143 resultData.add(file.getName());
170 } 144 }
171 - result.setCode(0);  
172 - result.setMsg("success");  
173 - result.setData(resultData);  
174 - return result; 145 + return resultData;
175 } 146 }
176 147
177 /** 148 /**
178 * 获取视频文件列表 149 * 获取视频文件列表
179 * @return 150 * @return
180 */ 151 */
181 - @ApiOperation("获取日期文件夹列表")  
182 - @ApiImplicitParams({  
183 - @ApiImplicitParam(name="page", value = "当前页", required = true, dataTypeClass = Integer.class),  
184 - @ApiImplicitParam(name="count", value = "每页查询数量", required = true, dataTypeClass = Integer.class),  
185 - @ApiImplicitParam(name="app", value = "应用名", required = true, dataTypeClass = String.class),  
186 - @ApiImplicitParam(name="stream", value = "流ID", required = true, dataTypeClass = String.class),  
187 - @ApiImplicitParam(name="startTime", value = "开始时间(yyyy-MM-dd HH:mm:ss)", required = false, dataTypeClass = String.class),  
188 - @ApiImplicitParam(name="endTime", value = "结束时间(yyyy-MM-dd HH:mm:ss)", required = false, dataTypeClass = String.class),  
189 - }) 152 + @Operation(summary ="获取日期文件夹列表")
  153 + @Parameter(name = "page", description = "当前页", required = true)
  154 + @Parameter(name = "count", description = "每页查询数量", required = true)
  155 + @Parameter(name = "app", description = "应用名", required = true)
  156 + @Parameter(name = "stream", description = "流ID", required = true)
  157 + @Parameter(name = "startTime", description = "开始时间(yyyy-MM-dd HH:mm:ss)", required = true)
  158 + @Parameter(name = "endTime", description = "结束时间(yyyy-MM-dd HH:mm:ss)", required = true)
190 @GetMapping(value = "/file/list") 159 @GetMapping(value = "/file/list")
191 @ResponseBody 160 @ResponseBody
192 - public WVPResult<PageInfo<String>> getRecordList(@RequestParam int page, 161 + public PageInfo<String> getRecordList(@RequestParam int page,
193 @RequestParam int count, 162 @RequestParam int count,
194 @RequestParam String app, 163 @RequestParam String app,
195 @RequestParam String stream, 164 @RequestParam String stream,
@@ -197,7 +166,6 @@ public class RecordController { @@ -197,7 +166,6 @@ public class RecordController {
197 @RequestParam(required = false) String endTime 166 @RequestParam(required = false) String endTime
198 ){ 167 ){
199 168
200 - WVPResult<PageInfo<String>> result = new WVPResult<>();  
201 // 开始时间与结束时间可不传或只传其一 169 // 开始时间与结束时间可不传或只传其一
202 List<String> recordList = new ArrayList<>(); 170 List<String> recordList = new ArrayList<>();
203 try { 171 try {
@@ -216,40 +184,33 @@ public class RecordController { @@ -216,40 +184,33 @@ public class RecordController {
216 recordList.add(file.getName()); 184 recordList.add(file.getName());
217 } 185 }
218 } 186 }
219 - result.setCode(0);  
220 - result.setMsg("success");  
221 PageInfo<String> stringPageInfo = new PageInfo<>(recordList); 187 PageInfo<String> stringPageInfo = new PageInfo<>(recordList);
222 stringPageInfo.startPage(page, count); 188 stringPageInfo.startPage(page, count);
223 - result.setData(stringPageInfo); 189 + return stringPageInfo;
224 } catch (ParseException e) { 190 } catch (ParseException e) {
225 logger.error("错误的开始时间[{}]或结束时间[{}]", startTime, endTime); 191 logger.error("错误的开始时间[{}]或结束时间[{}]", startTime, endTime);
226 - result.setCode(400);  
227 - result.setMsg("错误的开始时间或结束时间"); 192 + throw new ControllerException(ErrorCode.ERROR400.getCode(), "错误的开始时间或结束时间, e=" + e.getMessage());
228 } 193 }
229 - return result;  
230 } 194 }
231 195
232 196
233 /** 197 /**
234 * 添加视频裁剪合并任务 198 * 添加视频裁剪合并任务
235 */ 199 */
236 - @ApiOperation("添加视频裁剪合并任务")  
237 - @ApiImplicitParams({  
238 - @ApiImplicitParam(name="app", value = "应用名", required = true, dataTypeClass = String.class),  
239 - @ApiImplicitParam(name="stream", value = "流ID", required = true, dataTypeClass = String.class),  
240 - @ApiImplicitParam(name="startTime", value = "开始时间(yyyy-MM-dd HH:mm:ss)", required = false, dataTypeClass = String.class),  
241 - @ApiImplicitParam(name="endTime", value = "结束时间(yyyy-MM-dd HH:mm:ss)", required = false, dataTypeClass = String.class),  
242 - @ApiImplicitParam(name="remoteHost", value = "服务的IP:端口(用于直接返回完整播放地址以及下载地址)", required = false, dataTypeClass = String.class),  
243 - }) 200 + @Operation(summary ="添加视频裁剪合并任务")
  201 + @Parameter(name = "app", description = "应用名", required = true)
  202 + @Parameter(name = "stream", description = "流ID", required = true)
  203 + @Parameter(name = "startTime", description = "开始时间(yyyy-MM-dd HH:mm:ss)", required = true)
  204 + @Parameter(name = "endTime", description = "结束时间(yyyy-MM-dd HH:mm:ss)", required = true)
  205 + @Parameter(name = "remoteHost", description = "服务的IP:端口(用于直接返回完整播放地址以及下载地址)", required = true)
244 @GetMapping(value = "/file/download/task/add") 206 @GetMapping(value = "/file/download/task/add")
245 @ResponseBody 207 @ResponseBody
246 - public WVPResult<String> addTaskForDownload(@RequestParam String app, 208 + public String addTaskForDownload(@RequestParam String app,
247 @RequestParam String stream, 209 @RequestParam String stream,
248 @RequestParam(required = false) String startTime, 210 @RequestParam(required = false) String startTime,
249 @RequestParam(required = false) String endTime, 211 @RequestParam(required = false) String endTime,
250 @RequestParam(required = false) String remoteHost 212 @RequestParam(required = false) String remoteHost
251 ){ 213 ){
252 - WVPResult<String> result = new WVPResult<>();  
253 Date startTimeDate = null; 214 Date startTimeDate = null;
254 Date endTimeDate = null; 215 Date endTimeDate = null;
255 try { 216 try {
@@ -263,111 +224,96 @@ public class RecordController { @@ -263,111 +224,96 @@ public class RecordController {
263 e.printStackTrace(); 224 e.printStackTrace();
264 } 225 }
265 String id = videoFileService.mergeOrCut(app, stream, startTimeDate, endTimeDate, remoteHost); 226 String id = videoFileService.mergeOrCut(app, stream, startTimeDate, endTimeDate, remoteHost);
266 - result.setCode(0);  
267 - result.setMsg(id!= null?"success":"error: 可能未找到视频文件");  
268 - result.setData(id);  
269 - return result; 227 + if (id== null) {
  228 + throw new ControllerException(ErrorCode.ERROR100.getCode(), "可能未找到视频文件");
  229 + }
  230 + return id;
270 } 231 }
271 232
272 /** 233 /**
273 * 查询视频裁剪合并任务列表 234 * 查询视频裁剪合并任务列表
274 */ 235 */
275 - @ApiOperation("查询视频裁剪合并任务列表")  
276 - @ApiImplicitParams({  
277 - @ApiImplicitParam(name="app", value = "应用名", required = false, dataTypeClass = String.class),  
278 - @ApiImplicitParam(name="stream", value = "流ID", required = false, dataTypeClass = String.class),  
279 - @ApiImplicitParam(name="taskId", value = "任务ID", required = false, dataTypeClass = String.class),  
280 - @ApiImplicitParam(name="isEnd", value = "是否结束", required = false, dataTypeClass = Boolean.class),  
281 - }) 236 + @Operation(summary ="查询视频裁剪合并任务列表")
  237 + @Parameter(name = "app", description = "应用名", required = true)
  238 + @Parameter(name = "stream", description = "流ID", required = true)
  239 + @Parameter(name = "taskId", description = "任务ID", required = true)
  240 + @Parameter(name = "isEnd", description = "是否结束", required = true)
282 @GetMapping(value = "/file/download/task/list") 241 @GetMapping(value = "/file/download/task/list")
283 @ResponseBody 242 @ResponseBody
284 - public WVPResult<List<MergeOrCutTaskInfo>> getTaskListForDownload( 243 + public List<MergeOrCutTaskInfo> getTaskListForDownload(
285 @RequestParam(required = false) String app, 244 @RequestParam(required = false) String app,
286 @RequestParam(required = false) String stream, 245 @RequestParam(required = false) String stream,
287 @RequestParam(required = false) String taskId, 246 @RequestParam(required = false) String taskId,
288 @RequestParam(required = false) Boolean isEnd){ 247 @RequestParam(required = false) Boolean isEnd){
289 List<MergeOrCutTaskInfo> taskList = videoFileService.getTaskListForDownload(isEnd, app, stream, taskId); 248 List<MergeOrCutTaskInfo> taskList = videoFileService.getTaskListForDownload(isEnd, app, stream, taskId);
290 - WVPResult<List<MergeOrCutTaskInfo>> result = new WVPResult<>();  
291 - result.setCode(0);  
292 - result.setMsg(taskList != null?"success":"error");  
293 - result.setData(taskList);  
294 - return result; 249 + if (taskList == null) {
  250 + throw new ControllerException(ErrorCode.ERROR100);
  251 + }
  252 + return taskList;
295 } 253 }
296 254
297 /** 255 /**
298 * 收藏录像(被收藏的录像不会被清理任务清理) 256 * 收藏录像(被收藏的录像不会被清理任务清理)
299 */ 257 */
300 - @ApiOperation("收藏录像(被收藏的录像不会被清理任务清理)")  
301 - @ApiImplicitParams({  
302 - @ApiImplicitParam(name="type", value = "类型", required = true, dataTypeClass = String.class),  
303 - @ApiImplicitParam(name="app", value = "应用名", required = true, dataTypeClass = String.class),  
304 - @ApiImplicitParam(name="stream", value = "流ID", required = true, dataTypeClass = String.class),  
305 - }) 258 + @Operation(summary ="收藏录像(被收藏的录像不会被清理任务清理)")
  259 + @Parameter(name = "type", description = "类型", required = true)
  260 + @Parameter(name = "app", description = "应用名", required = true)
  261 + @Parameter(name = "stream", description = "流ID", required = true)
306 @GetMapping(value = "/file/collection/add") 262 @GetMapping(value = "/file/collection/add")
307 @ResponseBody 263 @ResponseBody
308 - public WVPResult<String> collection( 264 + public void collection(
309 @RequestParam(required = true) String type, 265 @RequestParam(required = true) String type,
310 @RequestParam(required = true) String app, 266 @RequestParam(required = true) String app,
311 @RequestParam(required = true) String stream){ 267 @RequestParam(required = true) String stream){
312 268
313 boolean collectionResult = videoFileService.collection(app, stream, type); 269 boolean collectionResult = videoFileService.collection(app, stream, type);
314 - WVPResult<String> result = new WVPResult<>();  
315 - result.setCode(0);  
316 - result.setMsg(collectionResult ?"success":"error");  
317 - return result; 270 + if (!collectionResult) {
  271 + throw new ControllerException(ErrorCode.ERROR100);
  272 + }
318 } 273 }
319 274
320 /** 275 /**
321 * 移除收藏录像 276 * 移除收藏录像
322 */ 277 */
323 - @ApiOperation("移除收藏录像")  
324 - @ApiImplicitParams({  
325 - @ApiImplicitParam(name="type", value = "类型", required = true, dataTypeClass = String.class),  
326 - @ApiImplicitParam(name="app", value = "应用名", required = true, dataTypeClass = String.class),  
327 - @ApiImplicitParam(name="stream", value = "流ID", required = true, dataTypeClass = String.class),  
328 - }) 278 + @Operation(summary ="移除收藏录像")
  279 + @Parameter(name = "type", description = "类型", required = true)
  280 + @Parameter(name = "app", description = "应用名", required = true)
  281 + @Parameter(name = "stream", description = "流ID", required = true)
329 @GetMapping(value = "/file/collection/remove") 282 @GetMapping(value = "/file/collection/remove")
330 @ResponseBody 283 @ResponseBody
331 - public WVPResult<String> removeCollection( 284 + public void removeCollection(
332 @RequestParam(required = true) String type, 285 @RequestParam(required = true) String type,
333 @RequestParam(required = true) String app, 286 @RequestParam(required = true) String app,
334 @RequestParam(required = true) String stream){ 287 @RequestParam(required = true) String stream){
335 288
336 boolean collectionResult = videoFileService.removeCollection(app, stream, type); 289 boolean collectionResult = videoFileService.removeCollection(app, stream, type);
337 - WVPResult<String> result = new WVPResult<>();  
338 - result.setCode(0);  
339 - result.setMsg(collectionResult ?"success":"error");  
340 - return result; 290 + if (!collectionResult) {
  291 + throw new ControllerException(ErrorCode.ERROR100);
  292 + }
341 } 293 }
342 294
343 /** 295 /**
344 * 收藏录像列表 296 * 收藏录像列表
345 */ 297 */
346 - @ApiOperation("收藏录像列表")  
347 - @ApiImplicitParams({  
348 - @ApiImplicitParam(name="type", value = "类型", required = true, dataTypeClass = String.class),  
349 - @ApiImplicitParam(name="app", value = "应用名", required = false, dataTypeClass = String.class),  
350 - @ApiImplicitParam(name="stream", value = "流ID", required = false, dataTypeClass = String.class),  
351 - }) 298 + @Operation(summary ="收藏录像列表")
  299 + @Parameter(name = "type", description = "类型", required = false)
  300 + @Parameter(name = "app", description = "应用名", required = false)
  301 + @Parameter(name = "stream", description = "流ID", required = false)
352 @GetMapping(value = "/file/collection/list") 302 @GetMapping(value = "/file/collection/list")
353 @ResponseBody 303 @ResponseBody
354 - public WVPResult<List<SignInfo>> collectionList( 304 + public List<SignInfo> collectionList(
355 @RequestParam(required = false) String type, 305 @RequestParam(required = false) String type,
356 @RequestParam(required = false) String app, 306 @RequestParam(required = false) String app,
357 @RequestParam(required = false) String stream){ 307 @RequestParam(required = false) String stream){
358 308
359 List<SignInfo> signInfos = videoFileService.getCollectionList(app, stream, type); 309 List<SignInfo> signInfos = videoFileService.getCollectionList(app, stream, type);
360 - WVPResult<List<SignInfo>> result = new WVPResult<>();  
361 - result.setCode(0);  
362 - result.setMsg(signInfos != null ?"success":"error");  
363 - result.setData(signInfos);  
364 - return result; 310 + return signInfos;
365 } 311 }
366 312
367 /** 313 /**
368 * 中止视频裁剪合并任务列表 314 * 中止视频裁剪合并任务列表
369 */ 315 */
370 - @ApiOperation("中止视频裁剪合并任务列表(暂不支持)") 316 + @Operation(summary ="中止视频裁剪合并任务列表(暂不支持)")
371 @GetMapping(value = "/file/download/task/stop") 317 @GetMapping(value = "/file/download/task/stop")
372 @ResponseBody 318 @ResponseBody
373 public WVPResult<String> stopTaskForDownload(@RequestParam String taskId){ 319 public WVPResult<String> stopTaskForDownload(@RequestParam String taskId){
@@ -397,7 +343,9 @@ public class RecordController { @@ -397,7 +343,9 @@ public class RecordController {
397 String app = json.getString("app"); 343 String app = json.getString("app");
398 String stream = json.getString("stream"); 344 String stream = json.getString("stream");
399 logger.debug("ZLM 录制完成,参数:" + file_path); 345 logger.debug("ZLM 录制完成,参数:" + file_path);
400 - if (file_path == null) return new ResponseEntity<String>(ret.toString(), HttpStatus.OK); 346 + if (file_path == null) {
  347 + return new ResponseEntity<String>(ret.toString(), HttpStatus.OK);
  348 + }
401 videoFileService.handFile(new File(file_path), app, stream); 349 videoFileService.handFile(new File(file_path), app, stream);
402 350
403 return new ResponseEntity<String>(ret.toString(), HttpStatus.OK); 351 return new ResponseEntity<String>(ret.toString(), HttpStatus.OK);
@@ -406,54 +354,39 @@ public class RecordController { @@ -406,54 +354,39 @@ public class RecordController {
406 /** 354 /**
407 * 磁盘空间查询 355 * 磁盘空间查询
408 */ 356 */
409 - @ApiOperation("磁盘空间查询") 357 + @Operation(summary ="磁盘空间查询")
410 @ResponseBody 358 @ResponseBody
411 @GetMapping(value = "/space", produces = "application/json;charset=UTF-8") 359 @GetMapping(value = "/space", produces = "application/json;charset=UTF-8")
412 - public ResponseEntity<String> getSpace() {  
413 - JSONObject ret = new JSONObject();  
414 - ret.put("code", 0);  
415 - ret.put("msg", "success");  
416 - SpaceInfo spaceInfo = videoFileService.getSpaceInfo();  
417 - ret.put("data", JSON.toJSON(spaceInfo));  
418 - return new ResponseEntity<>(ret.toString(), HttpStatus.OK);  
419 - }  
420 -  
421 - /**  
422 - * 录像文件的时长  
423 - */  
424 - @ApiOperation("录像文件的时长")  
425 - @ApiImplicitParams({  
426 - @ApiImplicitParam(name="app", value = "应用名", required = true, dataTypeClass = String.class),  
427 - @ApiImplicitParam(name="stream", value = "流ID", required = true, dataTypeClass = String.class),  
428 - @ApiImplicitParam(name="recordIng", value = "是否录制中", required = false, dataTypeClass = String.class),  
429 - })  
430 - @ResponseBody  
431 - @GetMapping(value = "/file/duration", produces = "application/json;charset=UTF-8")  
432 - @PostMapping(value = "/file/duration", produces = "application/json;charset=UTF-8")  
433 - public ResponseEntity<String> fileDuration( @RequestParam String app, @RequestParam String stream) {  
434 - JSONObject ret = new JSONObject();  
435 - ret.put("code", 0);  
436 - ret.put("msg", "success");  
437 - long duration = videoFileService.fileDuration(app, stream);  
438 - ret.put("data", duration);  
439 - return new ResponseEntity<>(ret.toString(), HttpStatus.OK); 360 + public SpaceInfo getSpace() {
  361 + return videoFileService.getSpaceInfo();
440 } 362 }
441 363
442 /** 364 /**
443 * 增加推流的鉴权信息,用于录像存储使用 365 * 增加推流的鉴权信息,用于录像存储使用
444 */ 366 */
445 - @ApiOperation("增加推流的鉴权信息")  
446 - @ApiImplicitParams({  
447 - @ApiImplicitParam(name="app", value = "应用名", required = true, dataTypeClass = String.class),  
448 - @ApiImplicitParam(name="stream", value = "流ID", required = true, dataTypeClass = String.class),  
449 - @ApiImplicitParam(name="callId", value = "录像自鉴权ID", required = true, dataTypeClass = String.class),  
450 - }) 367 + @Operation(summary ="增加推流的鉴权信息")
  368 + @Parameter(name = "app", description = "应用名", required = true)
  369 + @Parameter(name = "stream", description = "流ID", required = true)
  370 + @Parameter(name = "callId", description = "录像自鉴权ID", required = true)
451 @ResponseBody 371 @ResponseBody
452 @GetMapping(value = "/addStreamCallInfo", produces = "application/json;charset=UTF-8") 372 @GetMapping(value = "/addStreamCallInfo", produces = "application/json;charset=UTF-8")
453 @PostMapping(value = "/addStreamCallInfo", produces = "application/json;charset=UTF-8") 373 @PostMapping(value = "/addStreamCallInfo", produces = "application/json;charset=UTF-8")
454 - public ResponseEntity<String> addStreamCallInfo(String app, String stream, String callId) { 374 + public void addStreamCallInfo(String app, String stream, String callId) {
455 String key = "Stream_Call_Info" + app + "_" + stream; 375 String key = "Stream_Call_Info" + app + "_" + stream;
456 redisUtil.set(key, callId, -1); 376 redisUtil.set(key, callId, -1);
457 - return new ResponseEntity<>(null, HttpStatus.OK); 377 + }
  378 +
  379 + /**
  380 + * 录像文件的时长
  381 + */
  382 + @Operation(summary ="录像文件的时长")
  383 + @Parameter(name = "app", description = "应用名", required = true)
  384 + @Parameter(name = "stream", description = "流ID", required = true)
  385 + @Parameter(name = "recordIng", description = "是否录制中", required = true)
  386 + @ResponseBody
  387 + @GetMapping(value = "/file/duration", produces = "application/json;charset=UTF-8")
  388 + @PostMapping(value = "/file/duration", produces = "application/json;charset=UTF-8")
  389 + public long fileDuration( @RequestParam String app, @RequestParam String stream) {
  390 + return videoFileService.fileDuration(app, stream);
458 } 391 }
459 } 392 }
src/main/java/top/panll/assist/controller/bean/ControllerException.java 0 → 100644
  1 +package top.panll.assist.controller.bean;
  2 +
  3 +/**
  4 + * 自定义异常,controller出现错误时直接抛出异常由全局异常捕获并返回结果
  5 + */
  6 +public class ControllerException extends RuntimeException{
  7 +
  8 + private int code;
  9 + private String msg;
  10 +
  11 + public ControllerException(int code, String msg) {
  12 + this.code = code;
  13 + this.msg = msg;
  14 + }
  15 + public ControllerException(ErrorCode errorCode) {
  16 + this.code = errorCode.getCode();
  17 + this.msg = errorCode.getMsg();
  18 + }
  19 +
  20 + public int getCode() {
  21 + return code;
  22 + }
  23 +
  24 + public void setCode(int code) {
  25 + this.code = code;
  26 + }
  27 +
  28 + public String getMsg() {
  29 + return msg;
  30 + }
  31 +
  32 + public void setMsg(String msg) {
  33 + this.msg = msg;
  34 + }
  35 +}
src/main/java/top/panll/assist/controller/bean/ErrorCode.java 0 → 100644
  1 +package top.panll.assist.controller.bean;
  2 +
  3 +/**
  4 + * 全局错误码
  5 + */
  6 +public enum ErrorCode {
  7 + SUCCESS(0, "成功"),
  8 + ERROR100(100, "失败"),
  9 + ERROR400(400, "参数不全或者错误"),
  10 + ERROR403(403, "无权限操作"),
  11 + ERROR401(401, "请登录后重新请求"),
  12 + ERROR500(500, "系统异常");
  13 +
  14 + private final int code;
  15 + private final String msg;
  16 +
  17 + ErrorCode(int code, String msg) {
  18 + this.code = code;
  19 + this.msg = msg;
  20 + }
  21 +
  22 + public int getCode() {
  23 + return code;
  24 + }
  25 +
  26 + public String getMsg() {
  27 + return msg;
  28 + }
  29 +}
src/main/java/top/panll/assist/controller/bean/WVPResult.java
1 package top.panll.assist.controller.bean; 1 package top.panll.assist.controller.bean;
2 2
  3 +
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +
  6 +@Schema(description = "统一返回结果")
3 public class WVPResult<T> { 7 public class WVPResult<T> {
4 8
  9 + public WVPResult() {
  10 + }
  11 +
  12 + public WVPResult(int code, String msg, T data) {
  13 + this.code = code;
  14 + this.msg = msg;
  15 + this.data = data;
  16 + }
  17 +
  18 +
  19 + @Schema(description = "错误码,0为成功")
5 private int code; 20 private int code;
  21 + @Schema(description = "描述,错误时描述错误原因")
6 private String msg; 22 private String msg;
  23 + @Schema(description = "数据")
7 private T data; 24 private T data;
8 25
  26 +
  27 + public static <T> WVPResult<T> success(T t, String msg) {
  28 + return new WVPResult<>(ErrorCode.SUCCESS.getCode(), msg, t);
  29 + }
  30 +
  31 + public static <T> WVPResult<T> success(T t) {
  32 + return success(t, ErrorCode.SUCCESS.getMsg());
  33 + }
  34 +
  35 + public static <T> WVPResult<T> fail(int code, String msg) {
  36 + return new WVPResult<>(code, msg, null);
  37 + }
  38 +
  39 + public static <T> WVPResult<T> fail(ErrorCode errorCode) {
  40 + return fail(errorCode.getCode(), errorCode.getMsg());
  41 + }
  42 +
9 public int getCode() { 43 public int getCode() {
10 return code; 44 return code;
11 } 45 }
src/main/java/top/panll/assist/service/VideoFileService.java
@@ -518,7 +518,6 @@ public class VideoFileService { @@ -518,7 +518,6 @@ public class VideoFileService {
518 }else { 518 }else {
519 result.add((MergeOrCutTaskInfo)redisUtil.get(keyItem)); 519 result.add((MergeOrCutTaskInfo)redisUtil.get(keyItem));
520 } 520 }
521 -  
522 } 521 }
523 } 522 }
524 result.sort((MergeOrCutTaskInfo m1, MergeOrCutTaskInfo m2)->{ 523 result.sort((MergeOrCutTaskInfo m1, MergeOrCutTaskInfo m2)->{
src/main/java/top/panll/assist/utils/RedisUtil.java
@@ -707,28 +707,18 @@ public class RedisUtil { @@ -707,28 +707,18 @@ public class RedisUtil {
707 * @return 707 * @return
708 */ 708 */
709 public List<Object> scan(String query) { 709 public List<Object> scan(String query) {
710 - Set<String> keys = (Set<String>) redisTemplate.execute((RedisCallback<Set<String>>) connection -> {  
711 - Set<String> keysTmp = new HashSet<>();  
712 - Cursor<byte[]> cursor = connection.scan(new ScanOptions.ScanOptionsBuilder().match(query).count(1000).build());  
713 - while (cursor.hasNext()) {  
714 - keysTmp.add(new String(cursor.next())); 710 + Set<String> resultKeys = redisTemplate.execute((RedisCallback<Set<String>>) connection -> {
  711 + ScanOptions scanOptions = ScanOptions.scanOptions().match("*" + query + "*").count(1000).build();
  712 + Cursor<byte[]> scan = connection.scan(scanOptions);
  713 + Set<String> keys = new HashSet<>();
  714 + while (scan.hasNext()) {
  715 + byte[] next = scan.next();
  716 + keys.add(new String(next));
715 } 717 }
716 - return keysTmp; 718 + return keys;
717 }); 719 });
718 -// Set<String> keys = (Set<String>) redisTemplate.execute(new RedisCallback<Set<String>>(){  
719 -//  
720 -// @Override  
721 -// public Set<String> doInRedis(RedisConnection connection) throws DataAccessException {  
722 -// Set<String> keysTmp = new HashSet<>();  
723 -// Cursor<byte[]> cursor = connection.scan(new ScanOptions.ScanOptionsBuilder().match(query).count(1000).build());  
724 -// while (cursor.hasNext()) {  
725 -// keysTmp.add(new String(cursor.next()));  
726 -// }  
727 -// return keysTmp;  
728 -// }  
729 -// });  
730 720
731 - return new ArrayList<>(keys); 721 + return new ArrayList<>(resultKeys);
732 } 722 }
733 723
734 public void convertAndSend(String channel, Object msg) { 724 public void convertAndSend(String channel, Object msg) {
src/main/resources/application-dev.yml
@@ -42,7 +42,7 @@ userSettings: @@ -42,7 +42,7 @@ userSettings:
42 threads: 2 42 threads: 2
43 43
44 swagger-ui: 44 swagger-ui:
45 - enabled: true 45 +
46 # [可选] 日志配置, 一般不需要改 46 # [可选] 日志配置, 一般不需要改
47 logging: 47 logging:
48 file: 48 file:
src/main/resources/application-local.yml 0 → 100644
  1 +spring:
  2 + # REDIS数据库配置
  3 + redis:
  4 + # [可选] 超时时间
  5 + timeout: 10000
  6 + # 以下为单机配置
  7 + # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
  8 + host: 127.0.0.1
  9 + # [必须修改] 端口号
  10 + port: 6379
  11 + # [可选] 数据库 DB
  12 + database: 1
  13 + # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
  14 + password: adminadmin123.
  15 + # 以下为集群配置
  16 +# cluster:
  17 +# nodes: 192.168.1.242:7001
  18 +# password: 4767cb971b40a1300fa09b7f87b09d1c
  19 +
  20 +# [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
  21 +server:
  22 + port: 18089
  23 + # [可选] HTTPS配置, 默认不开启
  24 + ssl:
  25 + # [可选] 是否开启HTTPS访问
  26 + enabled: false
  27 + # [可选] 证书文件路径,放置在resource/目录下即可,修改xxx为文件名
  28 + key-store: classpath:xxx.jks
  29 + # [可选] 证书密码
  30 + key-password: password
  31 + # [可选] 证书类型, 默认为jks,根据实际修改
  32 + key-store-type: JKS
  33 +
  34 +# [根据业务需求配置]
  35 +userSettings:
  36 + # [必选 ] zlm配置的录像路径
  37 + record: /home/lin/server/test001/default/www/record/
  38 + # [可选 ] 录像保存时长(单位: 天)每天晚12点自动对过期文件执行清理
  39 + recordDay: 7
  40 + # [可选 ] 录像下载合成临时文件保存时长, 不配置默认取值recordDay(单位: 天)每天晚12点自动对过期文件执行清理
  41 + # recordTempDay: 7
  42 + # [必选 ] ffmpeg路径
  43 + ffmpeg: /home/lin/IdeaProjects/wvp-pro-assist/lib/ffmpeg
  44 + # [必选 ] ffprobe路径, 一般安装ffmpeg就会自带, 一般跟ffmpeg在同一目录,用于查询文件的信息
  45 + ffprobe: /home/lin/IdeaProjects/wvp-pro-assist/lib/ffprobe
  46 + # [可选 ] 限制 ffmpeg 合并文件使用的线程数,间接限制cpu使用率, 默认2 限制到50%
  47 + threads: 2
  48 +
  49 +swagger-ui:
  50 +
  51 +# [可选] 日志配置, 一般不需要改
  52 +logging:
  53 + file:
  54 + name: logs/wvp.log
  55 + max-history: 30
  56 + max-size: 10MB
  57 + total-size-cap: 300MB
  58 + level:
  59 + root: WARN
  60 + top:
  61 + panll:
  62 + assist: info
0 \ No newline at end of file 63 \ No newline at end of file
src/main/resources/application.yml
1 spring: 1 spring:
2 profiles: 2 profiles:
3 - active: dev 3 + active: local