@@ -0,0 +1,40 @@ | |||
HELP.md | |||
target/ | |||
!.mvn/wrapper/maven-wrapper.jar | |||
!**/src/main/**/target/ | |||
!**/src/test/**/target/ | |||
### STS ### | |||
.apt_generated | |||
.classpath | |||
.factorypath | |||
.project | |||
.settings | |||
.springBeans | |||
.sts4-cache | |||
### IntelliJ IDEA ### | |||
.idea | |||
*.iws | |||
*.iml | |||
*.ipr | |||
### NetBeans ### | |||
/nbproject/private/ | |||
/nbbuild/ | |||
/dist/ | |||
/nbdist/ | |||
/.nb-gradle/ | |||
build/ | |||
!**/src/main/**/build/ | |||
!**/src/test/**/build/ | |||
### VS Code ### | |||
.vscode/ | |||
/.idea | |||
/.vscode | |||
/.svn | |||
tuoheng-ui | |||
target/ | |||
HELP.md |
@@ -0,0 +1,3 @@ | |||
# tuoheng_lc | |||
拓恒林场SaaS平台后端JAVA服务 |
@@ -0,0 +1,52 @@ | |||
@startuml | |||
autoactivate on | |||
title 林场项目 | |||
skinparam responseMessageBelowArrow true | |||
机场 -> 机场 : 预置飞行航线、预置无人机等操作 | |||
林场项目-> 林场项目: 登录 | |||
林场项目 -> 机场 : 机场列表 | |||
机场 --> 林场项目 :机场列表(1、每个机场里面有一个无人机,2、每个机场有一个机场内视频和机场位置,3、机场的天气信息) | |||
林场项目 -> 机场 : 任务列表 | |||
机场 --> 林场项目 : 任务列表(1、飞行里程,2、航线,3、无人机直播流地址(需要在后面获取),4、无人机执行时间) | |||
DSP -> 林场项目: 调用林场回调地址 | |||
林场项目 --> DSP: 1、视频分析结束\n2、分析已经关闭 | |||
林场项目-> 机场 : 发送飞行命令 | |||
机场-> 通道服务 : 请求获取空闲通道 | |||
通道服务 --> 机场 : 返回空闲的通道 | |||
机场 --> 林场项目 : 返回推流的地址 | |||
机场 -> 机场 : 执行飞行任务,机场给刚才申请的通道推流 | |||
林场项目-> DSP: 携带通道给DSP,需要DSP基于已携带的通道进行拉流操作 | |||
DSP --> 林场项目: 返回分析后的AI推流地址,并返回任务状态以及问题图片 | |||
机场 -> 林场项目 : 更新任务状态(任务状态更新为:任务飞行中) | |||
林场项目 --> 机场 : 任务状态更新成功\n1、判断当前状态是否出错\n2、判断任务是否已经完成 | |||
机场-> 林场项目 : 坐标信息实时发送 | |||
林场项目 -> 机场 : 接受坐标信息并存库 | |||
林场项目 -> 林场项目 : 点击查看直播页面,返回当前任务的拉流地址以及AI分析后的视频地址 | |||
林场项目 -> 林场项目 : 点击查看轨迹功能,查询当前无人的轨迹页面(可以做成定时的请求,比如一秒一次) | |||
机场-> 林场项目 : 飞行任务已经完成飞机已经回仓(机场发送任务状态给林场系统:飞行任务完成) | |||
林场项目 -> 林场项目 : 场景1:实时版本直接发送请求到DSP \n场景2:离线版本先判断AI分析视屏的状态是否已经结束\n(任务状态更新为:任务已结束) | |||
林场项目 -> 林场项目 : 生成报告接口可点击 | |||
林场项目 -> DSP : 关闭AI分析视频,确定任务已经结束 | |||
DSP-> 通道服务: 给AI发送消息,提醒需要关闭分析 | |||
AI --> DSP : 分析已经关闭 | |||
DSP -> 通道服务 : 关闭AI分析的通道服务,状态重置为已释放 | |||
通道服务 --> DSP : 状态释放成功 | |||
DSP--> 通道服务 : 分析已经关闭 | |||
@enduml |
@@ -0,0 +1,84 @@ | |||
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | |||
<modelVersion>4.0.0</modelVersion> | |||
<parent> | |||
<groupId>org.springframework.boot</groupId> | |||
<artifactId>spring-boot-starter-parent</artifactId> | |||
<version>2.3.5.RELEASE</version> | |||
<relativePath/> <!-- lookup parent from repository --> | |||
</parent> | |||
<groupId>com.tuoheng</groupId> | |||
<artifactId>tuoheng</artifactId> | |||
<version>0.0.1-SNAPSHOT</version> | |||
<!--父模块打包类型必须为pom--> | |||
<packaging>pom</packaging> | |||
<name>tuoheng</name> | |||
<description>Demo project for Spring Boot</description> | |||
<!-- 子模块依赖 --> | |||
<modules> | |||
<module>tuoheng-common</module> | |||
<module>tuoheng-generator</module> | |||
<module>tuoheng-system</module> | |||
<module>tuoheng-admin</module> | |||
<!-- <module>tuoheng-generator</module>--> | |||
</modules> | |||
<properties> | |||
<java.version>1.8</java.version> | |||
<!-- 表示打包时跳过mvn test --> | |||
<maven.test.skip>true</maven.test.skip> | |||
<!--全局配置项目版本号--> | |||
<version>0.0.1-SNAPSHOT</version> | |||
<spring-kafka.version>2.8.3</spring-kafka.version> | |||
</properties> | |||
<!-- 依赖声明 --> | |||
<dependencyManagement> | |||
<dependencies> | |||
<!-- 子模块依赖 --> | |||
<dependency> | |||
<groupId>com.tuoheng</groupId> | |||
<artifactId>tuoheng-common</artifactId> | |||
<version>${version}</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.tuoheng</groupId> | |||
<artifactId>tuoheng-generator</artifactId> | |||
<version>${version}</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.tuoheng</groupId> | |||
<artifactId>tuoheng-system</artifactId> | |||
<version>${version}</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.tuoheng</groupId> | |||
<artifactId>tuoheng-admin</artifactId> | |||
<version>${version}</version> | |||
</dependency> | |||
<!-- swagger依赖 --> | |||
<dependency> | |||
<groupId>io.springfox</groupId> | |||
<artifactId>springfox-boot-starter</artifactId> | |||
<version>3.0.0</version> | |||
</dependency> | |||
<!-- 第三方依赖 --> | |||
<dependency> | |||
<groupId>org.projectlombok</groupId> | |||
<artifactId>lombok</artifactId> | |||
<version>1.18.10</version> | |||
<optional>true</optional> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.alibaba</groupId> | |||
<artifactId>fastjson</artifactId> | |||
<version>1.2.62</version> | |||
</dependency> | |||
</dependencies> | |||
</dependencyManagement> | |||
</project> |
@@ -0,0 +1,294 @@ | |||
<?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"> | |||
<!-- 子模块的parent要使用顶层的父模块--> | |||
<parent> | |||
<artifactId>tuoheng</artifactId> | |||
<groupId>com.tuoheng</groupId> | |||
<version>0.0.1-SNAPSHOT</version> | |||
</parent> | |||
<modelVersion>4.0.0</modelVersion> | |||
<artifactId>tuoheng-admin</artifactId> | |||
<packaging>jar</packaging> | |||
<name>tuoheng-admin</name> | |||
<description>Demo project for Spring Boot</description> | |||
<!-- 依赖声明 --> | |||
<dependencies> | |||
<dependency> | |||
<groupId>io.springfox</groupId> | |||
<artifactId>springfox-boot-starter</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.aliyun</groupId> | |||
<artifactId>vod20170321</artifactId> | |||
<version>2.16.8</version> | |||
</dependency> | |||
<!-- 核心模块 --> | |||
<dependency> | |||
<groupId>com.tuoheng</groupId> | |||
<artifactId>tuoheng-system</artifactId> | |||
</dependency> | |||
<!-- 代码生成 --> | |||
<dependency> | |||
<groupId>com.tuoheng</groupId> | |||
<artifactId>tuoheng-generator</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.projectlombok</groupId> | |||
<artifactId>lombok</artifactId> | |||
<optional>true</optional> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.springframework.amqp</groupId> | |||
<artifactId>spring-rabbit-test</artifactId> | |||
<scope>test</scope> | |||
</dependency> | |||
<!-- 引入阿里数据库连接池 --> | |||
<dependency> | |||
<groupId>com.alibaba</groupId> | |||
<artifactId>druid-spring-boot-starter</artifactId> | |||
<version>1.1.10</version> | |||
</dependency> | |||
<!-- https://mvnrepository.com/artifact/log4j/log4j --> | |||
<dependency> | |||
<groupId>log4j</groupId> | |||
<artifactId>log4j</artifactId> | |||
<version>1.2.17</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.hibernate</groupId> | |||
<artifactId>hibernate-validator</artifactId> | |||
<version>6.0.15.Final</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.google.protobuf</groupId> | |||
<artifactId>protobuf-java</artifactId> | |||
<version>3.9.2</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.springframework.boot</groupId> | |||
<artifactId>spring-boot-starter-websocket</artifactId> | |||
<version>2.0.4.RELEASE</version> | |||
</dependency> | |||
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp --> | |||
<dependency> | |||
<groupId>org.springframework.boot</groupId> | |||
<artifactId>spring-boot-starter-amqp</artifactId> | |||
<version>2.5.2</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.springframework.amqp</groupId> | |||
<artifactId>spring-rabbit</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>net.coobird</groupId> | |||
<artifactId>thumbnailator</artifactId> | |||
<version>[0.4, 0.5)</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.poi</groupId> | |||
<artifactId>poi</artifactId> | |||
<version>4.0.1</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.poi</groupId> | |||
<artifactId>poi-scratchpad</artifactId> | |||
<version>4.0.1</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.poi</groupId> | |||
<artifactId>poi-ooxml</artifactId> | |||
<version>4.0.1</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.poi</groupId> | |||
<artifactId>poi-ooxml-schemas</artifactId> | |||
<version>4.0.1</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.lowagie</groupId> | |||
<artifactId>itext</artifactId> | |||
<version>2.1.7</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.lowagie</groupId> | |||
<artifactId>itext-rtf</artifactId> | |||
<version>2.1.7</version> | |||
</dependency> | |||
<!--阿里云视频点播--> | |||
<dependency> | |||
<groupId>com.aliyun</groupId> | |||
<artifactId>aliyun-java-sdk-core</artifactId> | |||
<version>4.5.1</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.aliyun.oss</groupId> | |||
<artifactId>aliyun-sdk-oss</artifactId> | |||
<version>3.10.2</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.aliyun</groupId> | |||
<artifactId>aliyun-java-sdk-vod</artifactId> | |||
<version>2.15.11</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.alibaba</groupId> | |||
<artifactId>fastjson</artifactId> | |||
<version>1.2.28</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.json</groupId> | |||
<artifactId>json</artifactId> | |||
<version>20170516</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.google.code.gson</groupId> | |||
<artifactId>gson</artifactId> | |||
<version>2.8.2</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.aliyun</groupId> | |||
<artifactId>aliyun-java-sdk-vod</artifactId> | |||
<version>2.15.11</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.alibaba</groupId> | |||
<artifactId>fastjson</artifactId> | |||
<version>1.2.62</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.aliyun</groupId> | |||
<artifactId>aliyun-java-sdk-kms</artifactId> | |||
<version>2.10.1</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.aliyun.vod</groupId> | |||
<artifactId>upload</artifactId> | |||
<version>1.4.14</version> | |||
<scope>system</scope> | |||
<systemPath>${project.basedir}/src/main/resources/lib/aliyun-java-vod-upload-1.4.14.jar</systemPath> | |||
</dependency> | |||
</dependencies> | |||
<profiles> | |||
<!-- 本地开发环境 --> | |||
<profile> | |||
<id>local</id> | |||
<properties> | |||
<package.environment>local</package.environment> | |||
</properties> | |||
<activation> | |||
<activeByDefault>true</activeByDefault> | |||
</activation> | |||
</profile> | |||
<!-- 开发环境 --> | |||
<profile> | |||
<id>dev</id> | |||
<properties> | |||
<package.environment>dev</package.environment> | |||
</properties> | |||
</profile> | |||
<!-- 测试环境 --> | |||
<profile> | |||
<id>test</id> | |||
<properties> | |||
<package.environment>test</package.environment> | |||
</properties> | |||
</profile> | |||
<!-- 生产环境 --> | |||
<profile> | |||
<id>prod</id> | |||
<properties> | |||
<package.environment>prod</package.environment> | |||
</properties> | |||
</profile> | |||
</profiles> | |||
<build> | |||
<finalName>tuoheng_lc_admin</finalName> | |||
<resources> | |||
<resource> | |||
<directory>src/main/resources</directory> | |||
<filtering>true</filtering> | |||
<includes> | |||
<include>**/*.xml</include> | |||
<include>**/*.properties</include> | |||
<include>**/*.yml</include> | |||
</includes> | |||
</resource> | |||
<resource> | |||
<directory>src/main/resources</directory> | |||
<filtering>false</filtering> | |||
<includes> | |||
<include>**/*.docx</include> | |||
</includes> | |||
</resource> | |||
<resource> | |||
<directory>src/main/java</directory> | |||
<includes> | |||
<include>**/*.*</include> | |||
</includes> | |||
<excludes> | |||
<exclude>**/*.java</exclude> | |||
</excludes> | |||
</resource> | |||
<resource> | |||
<directory>src/main/resources</directory> | |||
<filtering>true</filtering> | |||
<targetPath>WEB-INF/classes</targetPath> | |||
<includes> | |||
<include>application-${package.environment}.yml</include> | |||
</includes> | |||
</resource> | |||
</resources> | |||
<pluginManagement> | |||
<plugins> | |||
<plugin> | |||
<groupId>org.springframework.boot</groupId> | |||
<artifactId>spring-boot-maven-plugin</artifactId> | |||
<version>2.1.11.RELEASE</version> | |||
<configuration> | |||
<finalName>${project.build.finalName}</finalName> | |||
</configuration> | |||
<executions> | |||
<execution> | |||
<goals> | |||
<goal>repackage</goal> | |||
</goals> | |||
</execution> | |||
</executions> | |||
</plugin> | |||
</plugins> | |||
</pluginManagement> | |||
<plugins> | |||
<plugin> | |||
<groupId>org.springframework.boot</groupId> | |||
<artifactId>spring-boot-maven-plugin</artifactId> | |||
</plugin> | |||
<plugin> | |||
<groupId>org.apache.maven.plugins</groupId> | |||
<artifactId>maven-surefire-plugin</artifactId> | |||
<version>2.7</version> | |||
<configuration> | |||
<skipTests>true</skipTests> | |||
</configuration> | |||
</plugin> | |||
</plugins> | |||
</build> | |||
</project> |
@@ -0,0 +1,23 @@ | |||
package com.tuoheng.admin; | |||
import org.mybatis.spring.annotation.MapperScan; | |||
import org.springframework.boot.SpringApplication; | |||
import org.springframework.boot.autoconfigure.SpringBootApplication; | |||
import org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration; | |||
import org.springframework.scheduling.annotation.EnableAsync; | |||
import org.springframework.transaction.annotation.EnableTransactionManagement; | |||
import springfox.documentation.oas.annotations.EnableOpenApi; | |||
@EnableAsync | |||
//排除原有的Multipart配置 | |||
@SpringBootApplication(scanBasePackages = {"com.tuoheng.*"}, exclude = {MultipartAutoConfiguration.class}) | |||
@MapperScan("com.tuoheng.**.mapper") | |||
@EnableTransactionManagement | |||
@EnableOpenApi | |||
public class AdminApplication { | |||
public static void main(String[] args) { | |||
SpringApplication.run(AdminApplication.class, args); | |||
} | |||
} |
@@ -0,0 +1,100 @@ | |||
package com.tuoheng.admin.advice; | |||
import com.tuoheng.common.common.SysExceptionEnum; | |||
import com.tuoheng.common.exception.ServiceException; | |||
import com.tuoheng.common.utils.JsonResult; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.apache.commons.collections.CollectionUtils; | |||
import org.apache.shiro.dao.DataAccessException; | |||
import org.springframework.validation.BindException; | |||
import org.springframework.validation.BindingResult; | |||
import org.springframework.validation.FieldError; | |||
import org.springframework.validation.ObjectError; | |||
import org.springframework.web.bind.MethodArgumentNotValidException; | |||
import org.springframework.web.bind.annotation.ExceptionHandler; | |||
import org.springframework.web.bind.annotation.ResponseBody; | |||
import org.springframework.web.bind.annotation.RestControllerAdvice; | |||
import java.util.List; | |||
import java.util.stream.Collectors; | |||
/** | |||
* 自定义异常处理器 | |||
* | |||
* @author zhu_zishuang | |||
* @date 2021-03-12 | |||
*/ | |||
@Slf4j | |||
@RestControllerAdvice | |||
public class CustomExceptionHandler { | |||
/** | |||
* 密码校验异常 | |||
*/ | |||
@ExceptionHandler(BindException.class) | |||
@ResponseBody | |||
public JsonResult<Object> handleAuthenticationException(BindException e) { | |||
BindingResult bindingResult = e.getBindingResult(); | |||
String errorMessage = ""; | |||
for (FieldError fieldError : bindingResult.getFieldErrors()) { | |||
errorMessage += fieldError.getDefaultMessage() + "!"; | |||
} | |||
return JsonResult.error(SysExceptionEnum.PARAMETER_EMPTY_EXCEPTION.getCode(), errorMessage); | |||
} | |||
/** | |||
* 校验异常处理 | |||
*/ | |||
@ExceptionHandler(MethodArgumentNotValidException.class) | |||
@ResponseBody | |||
public JsonResult<Object> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { | |||
log.warn("系统参数校验异常,异常信息:{}", e.getMessage()); | |||
JsonResult<Object> error = JsonResult.error(SysExceptionEnum.PARAMETER_EMPTY_EXCEPTION.getCode(), | |||
SysExceptionEnum.PARAMETER_EMPTY_EXCEPTION.getMessage()); | |||
BindingResult result = e.getBindingResult(); | |||
List<FieldError> fieldErrors = result.getFieldErrors(); | |||
if (!CollectionUtils.isEmpty(fieldErrors)) { | |||
error.setMsg(fieldErrors.stream().map(FieldError::getDefaultMessage).collect(Collectors.joining(","))); | |||
} else { | |||
if (!CollectionUtils.isEmpty(result.getAllErrors())) { | |||
ObjectError currError = result.getAllErrors().get(0); | |||
error.setMsg(currError.getObjectName() + currError.getDefaultMessage()); | |||
} | |||
} | |||
return error; | |||
} | |||
/** | |||
* 系统业务异常处理 | |||
*/ | |||
@ExceptionHandler(ServiceException.class) | |||
@ResponseBody | |||
public JsonResult<Object> handleServiceException(ServiceException e) { | |||
// 打印业务异常日志 | |||
log.warn("系统业务逻辑异常,异常状态码 {},异常信息:{}", e.code, e.getMessage()); | |||
return JsonResult.error(e.code, e.getMessage()); | |||
} | |||
/** | |||
* 系统数据访问异常处理 | |||
*/ | |||
@ExceptionHandler(DataAccessException.class) | |||
@ResponseBody | |||
public JsonResult<Object> handleDataAccessException(DataAccessException e) { | |||
log.error("系统数据访问异常,异常信息:{}", e.getMessage()); | |||
return JsonResult.error(SysExceptionEnum.DATAACCESS_EXCEPTION.getCode(), SysExceptionEnum.DATAACCESS_EXCEPTION.getMessage()); | |||
} | |||
/** | |||
* 系统异常处理 | |||
*/ | |||
@ExceptionHandler(Exception.class) | |||
@ResponseBody | |||
public JsonResult<Object> handleException(Exception e) { | |||
e.printStackTrace(); | |||
log.error("系统异常,异常信息:{}", e.getMessage()); | |||
return JsonResult.error(SysExceptionEnum.SYS_EXCEPTION.getCode(), SysExceptionEnum.SYS_EXCEPTION.getMessage()); | |||
} | |||
} |
@@ -0,0 +1,54 @@ | |||
/* | |||
package com.tuoheng.admin.advice; | |||
import com.tuoheng.common.common.OperationEnum; | |||
import com.tuoheng.common.utils.JsonResult; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.springframework.core.MethodParameter; | |||
import org.springframework.http.MediaType; | |||
import org.springframework.http.converter.HttpMessageConverter; | |||
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; | |||
import org.springframework.http.server.ServerHttpRequest; | |||
import org.springframework.http.server.ServerHttpResponse; | |||
import org.springframework.web.bind.annotation.ControllerAdvice; | |||
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; | |||
*/ | |||
/** | |||
* 自定义包装处理类 | |||
* | |||
* @author zhu_zishuang | |||
* @date 2021-03-12 | |||
*//* | |||
@Slf4j | |||
@ControllerAdvice(basePackages = "com.tuoheng.admin.controller") | |||
public class CustomWrapHandler<T> implements ResponseBodyAdvice<T> { | |||
@Override | |||
public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> converterType) { | |||
return MappingJackson2HttpMessageConverter.class.isAssignableFrom(converterType); | |||
} | |||
@Override | |||
public T beforeBodyWrite(T body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { | |||
*/ | |||
/** | |||
* 增、删、改操作返回的状态 | |||
*//* | |||
if (body.getClass().equals(OperationEnum.class)) { | |||
log.info("接口: {} , 增删改方法!" + request.getURI()); | |||
return (T) JsonResult.success(); | |||
} | |||
*/ | |||
/** | |||
* 读操作 | |||
*//* | |||
return body; | |||
//return (T) JsonResult.success(body); | |||
} | |||
} | |||
*/ |
@@ -0,0 +1,29 @@ | |||
package com.tuoheng.admin.common; | |||
/** | |||
* 常量类 | |||
* | |||
* @author: zhu_zishuang | |||
* @date: 2020-04-22 14:22 | |||
*/ | |||
public final class ServiceConstant { | |||
/** | |||
* 构造器私有化 | |||
*/ | |||
private ServiceConstant() { | |||
// 可抛出异常,防止通过反射实例化对象 | |||
} | |||
/** | |||
* 常用数值 | |||
*/ | |||
public static final Integer ZERO = 0; | |||
public static final Integer ONE = 1; | |||
public static final Integer TWO = 2; | |||
public static final Integer DELETE = 0; | |||
public static final Integer NOT_DELETE = 1; | |||
public static final Integer STATUS_25 = 25; | |||
public static final Integer STATUS_15 = 15; | |||
} |
@@ -0,0 +1,96 @@ | |||
package com.tuoheng.admin.common; | |||
import com.tuoheng.common.common.ExceptionInterface; | |||
import lombok.AllArgsConstructor; | |||
import lombok.Getter; | |||
/** | |||
* 业务异常 枚举 | |||
* | |||
* @author zhu_zishuang | |||
* @date 2021-03-12 | |||
*/ | |||
@AllArgsConstructor | |||
public enum ServiceExceptionEnum implements ExceptionInterface { | |||
/** | |||
* 未查询到数据 | |||
*/ | |||
GET_NO_DATA(10001, "未查到该记录!"), | |||
/** | |||
* 参数为空 | |||
*/ | |||
PARAMETER_IS_NULL(10002, "参数为空!"), | |||
/** | |||
* 获取用户ID失败 | |||
*/ | |||
GET_NO_USER_ID(10003, "获取用户ID失败!"), | |||
/** | |||
* websocket连接异常! | |||
*/ | |||
WEB_SOCKET_CONNECTION_ERROR(10004, "websocket连接异常!"), | |||
/** | |||
* 文件不能为空! | |||
*/ | |||
FILE_IS_EMPTY(10005, "上传文件不能为空!"), | |||
/** | |||
* 上传文件格式错误! | |||
*/ | |||
FILE_FORMAT_IS_ERROR(10006, "上传文件格式错误!"), | |||
/** | |||
* 上传文件数据错误,请检查文件! | |||
*/ | |||
FILE_DATA_IS_ERROR(10101, "上传文件数据错误,请检查文件!"), | |||
/** | |||
* 上传文件数据错误,请检查文件! | |||
*/ | |||
FILE_DATA_TIME_IS_ERROR(10102, "上传文件数据错误,请检查文件!"), | |||
/** | |||
* 上传文件数据错误,请检查文件! | |||
*/ | |||
FILE_DATA_LNG_IS_ERROR(10103, "上传文件数据错误,请检查文件!"), | |||
/** | |||
* 上传文件数据错误,请检查文件! | |||
*/ | |||
FILE_DATA_LAT_IS_ERROR(10104, "上传文件数据错误,请检查文件!"), | |||
/** | |||
* 读取图片经纬度失败,请手动填写! | |||
*/ | |||
IMAGE_LOCATION_IS_ERROR(11001, "读取图片经纬度失败,请手动填写!"), | |||
/** | |||
* 任务不存在! | |||
*/ | |||
TASK_DOES_NOT_EXIST(11111, "巡检任务不存在,请先创建巡检任务!"), | |||
/** | |||
* 视频分析中,请稍后再试 | |||
*/ | |||
VIDEO_ANALYSIS_IN_PROGRESS(11112, "视频分析中,请稍后再试!"), | |||
/** | |||
* 只有飞行完成状态可以操作 | |||
*/ | |||
TASK_NOT_OPERATION(11113, "只有飞行完成状态可以操作!"), | |||
/** | |||
* 没有这个飞行状态 | |||
*/ | |||
TASK_NOT_STATUS(11113, "飞行状态出错!"), | |||
; | |||
@Getter | |||
private final int code; | |||
@Getter | |||
private final String message; | |||
} |
@@ -0,0 +1,80 @@ | |||
package com.tuoheng.admin.config; | |||
import com.aliyun.teaopenapi.models.Config; | |||
import com.aliyun.vod20170321.Client; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.springframework.beans.factory.annotation.Value; | |||
import org.springframework.context.annotation.Bean; | |||
import org.springframework.context.annotation.Configuration; | |||
import org.springframework.context.annotation.Lazy; | |||
/** | |||
* 阿里云点播服务配置类 | |||
* | |||
* @author WangHaoran | |||
* @since 2022-03-11 | |||
*/ | |||
@Configuration | |||
@Slf4j | |||
public class AliyuncsVodConfig { | |||
/** | |||
* 阿里云endpoint | |||
*/ | |||
public final static String ENDPOINT = "vod.cn-shanghai.aliyuncs.com"; | |||
/** | |||
* 账号 | |||
*/ | |||
public static String accessKeyId; | |||
/** | |||
* 密码 | |||
*/ | |||
public static String accessKeySecret; | |||
/** | |||
* 角色ARN | |||
*/ | |||
public static String roleArn; | |||
/** | |||
* Bucket名称 | |||
*/ | |||
public static String bucketName; | |||
@Value("${aliyuncsVod.accessKeyId}") | |||
public void setAccessKeyId(String accessKeyId) { | |||
AliyuncsVodConfig.accessKeyId = accessKeyId; | |||
} | |||
@Value("${aliyuncsVod.accessKeySecret}") | |||
public void setAccessKeySecret(String accessKeySecret) { | |||
AliyuncsVodConfig.accessKeySecret = accessKeySecret; | |||
} | |||
@Value("${aliyuncsVod.roleArn}") | |||
public void setRoleArn(String roleArn) { | |||
AliyuncsVodConfig.roleArn = roleArn; | |||
} | |||
@Value("${aliyuncsVod.bucketName}") | |||
public void setBucketName(String bucketName) { | |||
AliyuncsVodConfig.bucketName = bucketName; | |||
} | |||
@Bean | |||
@Lazy | |||
public Client vodClient() { | |||
try { | |||
Config config = new Config() | |||
.setAccessKeyId(accessKeyId) | |||
.setAccessKeySecret(accessKeySecret) | |||
.setEndpoint(ENDPOINT); | |||
return new Client(config); | |||
} catch (Exception e) { | |||
log.error("获取vodClient客户端失败", e); | |||
} | |||
return null; | |||
} | |||
} |
@@ -0,0 +1,21 @@ | |||
package com.tuoheng.admin.config; | |||
import org.springframework.beans.factory.annotation.Value; | |||
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; | |||
import org.springframework.boot.web.server.WebServerFactoryCustomizer; | |||
import org.springframework.stereotype.Component; | |||
import java.io.File; | |||
@Component | |||
public class EmbeddedServletContainerConfig implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> { | |||
@Value("${server.tomcat.basedir}") | |||
private String basedir; | |||
@Override | |||
public void customize(TomcatServletWebServerFactory factory) { | |||
factory.setDocumentRoot(new File(basedir)); | |||
} | |||
} |
@@ -0,0 +1,36 @@ | |||
package com.tuoheng.admin.config; | |||
import org.springframework.context.annotation.Bean; | |||
import org.springframework.context.annotation.Configuration; | |||
import org.springframework.scheduling.annotation.EnableAsync; | |||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; | |||
import java.util.concurrent.Executor; | |||
import java.util.concurrent.ThreadPoolExecutor; | |||
/** | |||
* 线程池配置 | |||
*/ | |||
@Configuration | |||
@EnableAsync | |||
public class ExecutorConfig { | |||
@Bean | |||
public Executor asyncServiceExecutor() { | |||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); | |||
//配置核心线程数 | |||
executor.setCorePoolSize(5); | |||
//配置最大线程数 | |||
executor.setMaxPoolSize(10); | |||
//配置队列大小 | |||
executor.setQueueCapacity(400); | |||
//配置线程池中的线程的名称前缀 | |||
executor.setThreadNamePrefix("thread-"); | |||
// rejection-policy:当pool已经达到max size的时候,如何处理新任务 | |||
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行 | |||
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); | |||
//执行初始化 | |||
executor.initialize(); | |||
return executor; | |||
} | |||
} |
@@ -0,0 +1,72 @@ | |||
package com.tuoheng.admin.config; | |||
import org.springframework.amqp.core.Queue; | |||
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; | |||
import org.springframework.amqp.rabbit.connection.ConnectionFactory; | |||
import org.springframework.amqp.rabbit.core.RabbitTemplate; | |||
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; | |||
import org.springframework.amqp.support.converter.MessageConverter; | |||
import org.springframework.context.annotation.Bean; | |||
import org.springframework.context.annotation.Configuration; | |||
@Configuration | |||
public class MQConfig { | |||
@Bean(name = "getQueue") | |||
public Queue getQueue() { | |||
/** | |||
* name: 队列名称 | |||
* durable:是否持久化 | |||
*/ | |||
return new Queue("5gaiDirectQueue", true, false, false); | |||
} | |||
@Bean | |||
public RabbitTemplate rabbitTemplate(ConnectionFactory factory){ | |||
RabbitTemplate rabbitTemplate = new RabbitTemplate(); | |||
rabbitTemplate.setConnectionFactory(factory); | |||
//解决: Caused by: org.springframework.amqp.AmqpException: No method found for class [B 异常 | |||
//消息转换器,消息转化为json, setMessageConverter(MessageConverter ),这个方法就是这次异常的解决方案,创建一个Jackson2JsonMessageConverter对象放进去 | |||
rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter()); | |||
return rabbitTemplate; | |||
} | |||
@Bean | |||
public SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory(ConnectionFactory factory){ | |||
SimpleRabbitListenerContainerFactory srlcf = new SimpleRabbitListenerContainerFactory(); | |||
srlcf.setConnectionFactory(factory); | |||
//当消息有异常内容时(例如类型不匹配),将不再重新放入队列,直接丢弃 | |||
srlcf.setDefaultRequeueRejected(false); | |||
//设置消息转为json | |||
Jackson2JsonMessageConverter j2jmc = new Jackson2JsonMessageConverter(); | |||
srlcf.setMessageConverter(j2jmc); | |||
return srlcf; | |||
} | |||
//发送消息时如不配置序列化方法则按照java默认序列化机制,则会造成发送编码不符合 | |||
@Bean | |||
public MessageConverter messageConverter(){ | |||
Jackson2JsonMessageConverter j2jmc = new Jackson2JsonMessageConverter(); | |||
return j2jmc; | |||
} | |||
// @Bean(name = "getDirectExchange") | |||
// public DirectExchange getDirectExchange() { | |||
// return new DirectExchange("shuiwuDirectExchange", true, false); | |||
// } | |||
// | |||
// @Bean(name = "getQueue") | |||
// public Queue getQueue() { | |||
// return new Queue("5gaiDirectQueue", true, false, false); | |||
// } | |||
// @Bean | |||
// public Binding getDirectExchangeQueueTx( | |||
// @Qualifier(value = "getDirectExchange") DirectExchange getDirectExchangeTx, | |||
// @Qualifier(value = "getQueue") Queue getQueueTx) { | |||
// return BindingBuilder.bind(getQueueTx).to(getDirectExchangeTx).with("shuiwu"); | |||
// } | |||
} |
@@ -0,0 +1,86 @@ | |||
package com.tuoheng.admin.config; | |||
import com.google.common.base.Predicates; | |||
import org.springframework.context.annotation.Bean; | |||
import org.springframework.context.annotation.Configuration; | |||
import springfox.documentation.builders.RequestHandlerSelectors; | |||
import springfox.documentation.service.ApiInfo; | |||
import springfox.documentation.service.Contact; | |||
import springfox.documentation.spi.DocumentationType; | |||
import springfox.documentation.spring.web.plugins.Docket; | |||
import java.util.ArrayList; | |||
/** | |||
* @author qiujinyang | |||
* @company 拓恒技术 | |||
* @create 2022-07-19 21:00 | |||
*/ | |||
@Configuration | |||
public class Swagger3Config { | |||
/** | |||
* 配置swagger的Docket bean | |||
* @return | |||
*/ | |||
@Bean | |||
public Docket createRestApiSystem() { | |||
return new Docket(DocumentationType.OAS_30) // 指定swagger3.0版本 | |||
.groupName("system") | |||
.select() | |||
.apis(RequestHandlerSelectors.basePackage("com.tuoheng.system.controller")) // 指定扫描的包 常用方式 | |||
.build() | |||
.apiInfo(createApiInfoSystem()); | |||
} | |||
/** | |||
* 配置swagger的ApiInfo bean | |||
* @return | |||
*/ | |||
@Bean | |||
public ApiInfo createApiInfoSystem(){ | |||
return new ApiInfo("system Swagger" | |||
,"system Api Documentation" | |||
,"3.0" | |||
,"" | |||
,new Contact("拓恒", "", "") | |||
,"Apache 2.0" | |||
,"http://www.apache.org/licenses/LICENSE-2.0" | |||
,new ArrayList()); | |||
} | |||
/** | |||
* 配置swagger的Docket bean | |||
* @return | |||
*/ | |||
@Bean | |||
public Docket createRestApiLc() { | |||
return new Docket(DocumentationType.OAS_30) // 指定swagger3.0版本 | |||
.groupName("lc") | |||
.select() | |||
.apis(RequestHandlerSelectors.basePackage("com.tuoheng.admin.controller")) | |||
.build() | |||
.apiInfo(createApiInfoLc()); | |||
} | |||
/** | |||
* 配置swagger的ApiInfo bean | |||
* @return | |||
*/ | |||
@Bean | |||
public ApiInfo createApiInfoLc(){ | |||
return new ApiInfo("lc Swagger" | |||
,"lc Api Documentation" | |||
,"3.0" | |||
,"" | |||
,new Contact("拓恒", "", "") | |||
,"Apache 2.0" | |||
,"http://www.apache.org/licenses/LICENSE-2.0" | |||
,new ArrayList()); | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
package com.tuoheng.admin.config; | |||
import org.springframework.context.annotation.Bean; | |||
import org.springframework.context.annotation.Configuration; | |||
import org.springframework.web.multipart.MultipartResolver; | |||
import org.springframework.web.multipart.commons.CommonsMultipartResolver; | |||
@Configuration | |||
public class UploadConfig { | |||
//显示声明CommonsMultipartResolver为mutipartResolver | |||
@Bean(name = "multipartResolver") | |||
public MultipartResolver multipartResolver() { | |||
CommonsMultipartResolver resolver = new CommonsMultipartResolver(); | |||
resolver.setDefaultEncoding("UTF-8"); | |||
//resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常 | |||
resolver.setResolveLazily(true); | |||
resolver.setMaxInMemorySize(40960); | |||
//上传文件大小 30M 30*1024*1024 | |||
resolver.setMaxUploadSize(30 * 1024 * 1024); | |||
return resolver; | |||
} | |||
} |
@@ -0,0 +1,14 @@ | |||
package com.tuoheng.admin.config; | |||
import org.springframework.context.annotation.Bean; | |||
import org.springframework.context.annotation.Configuration; | |||
import org.springframework.web.socket.server.standard.ServerEndpointExporter; | |||
@Configuration | |||
public class WebSocketConfig { | |||
@Bean | |||
public ServerEndpointExporter serverEndpointExporter() { | |||
return new ServerEndpointExporter(); | |||
} | |||
} |
@@ -0,0 +1,96 @@ | |||
package com.tuoheng.admin.controller; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
import com.tuoheng.admin.entity.domain.ThInspection; | |||
import com.tuoheng.admin.entity.domain.ThMission; | |||
import com.tuoheng.admin.entity.request.InspectionRequest; | |||
import com.tuoheng.admin.entity.request.MissionStatusRequest; | |||
import com.tuoheng.admin.service.IMissionService; | |||
import com.tuoheng.admin.service.IThInspectionService; | |||
import com.tuoheng.common.utils.JsonResult; | |||
import com.tuoheng.system.utils.ShiroUtils; | |||
import io.swagger.annotations.ApiOperation; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.web.bind.annotation.*; | |||
import javax.validation.Valid; | |||
/** | |||
* @User qiujinyang | |||
* @Description | |||
* @Date Created by 2022/7/28 9:28 | |||
*/ | |||
@RestController | |||
@RequestMapping("/inspection") | |||
@ApiOperation(value = "巡检坐标") | |||
public class InspectionController { | |||
@Autowired | |||
private IThInspectionService inspectionService; | |||
@Autowired | |||
private IMissionService missionService; | |||
/** | |||
* 获取巡检机场 | |||
*/ | |||
@GetMapping("/airport") | |||
public JsonResult airport() { | |||
return JsonResult.success(inspectionService.airport()); | |||
} | |||
/** | |||
* 获取巡检线路 | |||
*/ | |||
@GetMapping("/airport/line/{droneId}") | |||
public JsonResult airLine(@PathVariable("droneId") Integer droneId) { | |||
return JsonResult.success(inspectionService.airLine(droneId)); | |||
} | |||
/** | |||
* 获取飞行轨迹 | |||
*/ | |||
@GetMapping("/track/{id}") | |||
public JsonResult track(@PathVariable("id") Integer id) { | |||
return JsonResult.success(inspectionService.track(id)); | |||
} | |||
/** | |||
* 立即执行 | |||
*/ | |||
@PutMapping("/mission/{id}") | |||
public JsonResult executeTask(@PathVariable("id") Integer id) { | |||
return inspectionService.executeTask(id); | |||
} | |||
/** | |||
* 获取天气信息 | |||
*/ | |||
@GetMapping("/airport/weather/{airportId}") | |||
public JsonResult getWeather(@PathVariable("airportId")Integer airportId) { | |||
return JsonResult.success(inspectionService.getWeather(airportId)); | |||
} | |||
/** | |||
* 被硬件调用,存任务状态 | |||
*/ | |||
@PutMapping("/status") | |||
public JsonResult track(@RequestBody @Valid MissionStatusRequest missionStatusRequest) { | |||
return JsonResult.success(missionService.updateStatus(missionStatusRequest)); | |||
} | |||
/** | |||
* 被硬件调用,存飞行轨迹 | |||
*/ | |||
@PostMapping("/track") | |||
public JsonResult track(@RequestBody @Valid InspectionRequest inspectionRequest) { | |||
return JsonResult.success(inspectionService.track(inspectionRequest)); | |||
} | |||
} |
@@ -0,0 +1,56 @@ | |||
package com.tuoheng.admin.controller; | |||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||
import com.tuoheng.admin.entity.request.QuestionFileRequest; | |||
import com.tuoheng.admin.entity.vo.QuestionDetailVo; | |||
import com.tuoheng.admin.entity.vo.QuestionFileVo; | |||
import org.springframework.web.bind.annotation.*; | |||
import java.util.List; | |||
/** | |||
* 巡检附件 前端控制器 | |||
* | |||
* @author: WangHaoran | |||
* @date: 2021/9/28 | |||
*/ | |||
@RestController | |||
@RequestMapping("/inspectionFile") | |||
public class InspectionFileController { | |||
// @Autowired | |||
// private IThInspectionFileService thInspectionFileService; | |||
/** | |||
* 查询问题清单列表 | |||
* | |||
* @author: WangHaoran | |||
* @date: 2021/9/28 | |||
*/ | |||
@GetMapping("/queryQuestionFileList") | |||
public IPage<QuestionFileVo> queryQuestionFileList(QuestionFileRequest request) { | |||
return null;//thInspectionFileService.queryQuestionFileList(request); | |||
} | |||
/** | |||
* 查询问题清单 详情 | |||
* | |||
* @author: WangHaoran | |||
* @date: 2021/9/28 | |||
*/ | |||
@GetMapping("/queryQuestionDetail") | |||
public QuestionDetailVo queryQuestionDetail(Integer fileId) { | |||
return null;//thInspectionFileService.queryQuestionDetail(fileId); | |||
} | |||
/** | |||
* 查询问题清单 GIS展示 | |||
* | |||
* @author: WangHaoran | |||
* @date: 2021/9/28 | |||
*/ | |||
@GetMapping("/queryQuestionLocationList") | |||
public List<QuestionDetailVo> queryQuestionLocationList(Integer inspectionId) { | |||
return null;//thInspectionFileService.queryQuestionLocationList(inspectionId); | |||
} | |||
} |
@@ -0,0 +1,127 @@ | |||
package com.tuoheng.admin.controller; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||
import com.tuoheng.admin.entity.domain.ThMission; | |||
import com.tuoheng.admin.entity.request.MissionQuery; | |||
import com.tuoheng.admin.entity.request.MissionRequest; | |||
import com.tuoheng.admin.entity.vo.MissionVO; | |||
import com.tuoheng.admin.service.IMissionService; | |||
import com.tuoheng.common.utils.JsonResult; | |||
import com.tuoheng.system.utils.ShiroUtils; | |||
import io.swagger.annotations.ApiOperation; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.util.ObjectUtils; | |||
import org.springframework.web.bind.annotation.*; | |||
import javax.validation.Valid; | |||
import java.util.List; | |||
/** | |||
* 林场巡检任务 | |||
* | |||
* @author: qiujinyang | |||
* @date: 2021/9/1 | |||
*/ | |||
@RestController | |||
@RequestMapping("/mission") | |||
@ApiOperation(value = "任务管理") | |||
public class MissionController { | |||
@Autowired | |||
private IMissionService missionService; | |||
/** | |||
* 新建巡检任务 | |||
* @param addThMissionRequest | |||
* @return | |||
*/ | |||
@PostMapping("") | |||
@ApiOperation(value = "新增任务", notes = "传入巡检任务对象") | |||
public JsonResult addThInspection(@RequestBody @Valid MissionRequest addThMissionRequest) { | |||
//新增巡检任务校验 | |||
checkAddInfo(addThMissionRequest); | |||
return JsonResult.success(missionService.addMission(addThMissionRequest)); | |||
} | |||
private void checkAddInfo(MissionRequest request) { | |||
//判断任务名称不能重复 | |||
LambdaQueryWrapper<ThMission> lambdaQueryWrapper= new LambdaQueryWrapper<>(); | |||
lambdaQueryWrapper.eq(ThMission::getName, request.getName()); | |||
//lambdaQueryWrapper.eq(ThMission::getTenantId, ShiroUtils.getTenantId()); | |||
ThMission one = missionService.getOne(lambdaQueryWrapper); | |||
if(!ObjectUtils.isEmpty(one)){ | |||
JsonResult.error("任务名称不能重复"); | |||
} | |||
if(request.getName().length()>100){ | |||
JsonResult.error("任务名称长度不能超过100"); | |||
} | |||
} | |||
/** | |||
* 删除巡检任务 | |||
*/ | |||
@DeleteMapping("") | |||
@ApiOperation(value = "删除巡检任务", notes = "传入巡检任务id") | |||
public JsonResult deleteBatch(@RequestParam("idList") List<Integer> idList) { | |||
return JsonResult.success(missionService.deleteBatch(idList)); | |||
} | |||
/** | |||
* 查询巡检任务列表 | |||
* | |||
*/ | |||
@GetMapping("/page") | |||
@ApiOperation(value = "查询巡检任务列表", notes = "查询巡检任务分页") | |||
public JsonResult findList(MissionQuery queryMissionRequest) { | |||
return JsonResult.success(missionService.findList(queryMissionRequest)); | |||
} | |||
/** | |||
* 获取巡检任务详情 | |||
*/ | |||
@GetMapping("/{id}") | |||
public JsonResult findById(@PathVariable("id")Integer id) { | |||
return JsonResult.success(missionService.findById(id)); | |||
} | |||
/** | |||
* 查询问题以及问题类型列表 | |||
*/ | |||
/** | |||
* 修改问题 | |||
*/ | |||
/** | |||
* 查询问题详情 | |||
*/ | |||
/** | |||
* 问题确认(支持批量) | |||
*/ | |||
/** | |||
* 问题忽略(支持批量) | |||
*/ | |||
/** | |||
* 提交并生成报告 | |||
*/ | |||
} |
@@ -0,0 +1,74 @@ | |||
package com.tuoheng.admin.controller; | |||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||
import com.tuoheng.admin.entity.domain.Question; | |||
import com.tuoheng.admin.entity.request.QuestionQuery; | |||
import com.tuoheng.admin.service.IQuestionService; | |||
import com.tuoheng.common.common.OperationEnum; | |||
import com.tuoheng.system.utils.ShiroUtils; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.web.bind.annotation.*; | |||
/** | |||
* 巡检问题表 前端控制器 | |||
* | |||
* @author WangHaoran | |||
* @since 2021-09-02 | |||
*/ | |||
@RestController | |||
@RequestMapping("/question") | |||
public class QuestionController { | |||
@Autowired | |||
IQuestionService questionService; | |||
/** | |||
* 获取巡检问题列表(分页) | |||
* | |||
* @param questionQuery 查询条件 | |||
* @return | |||
*/ | |||
@GetMapping("/index") | |||
public IPage<Question> index(QuestionQuery questionQuery) { | |||
return questionService.queryPage(questionQuery); | |||
} | |||
/** | |||
* 添加巡检问题 | |||
* | |||
* @param entity 实体对象 | |||
* @return | |||
*/ | |||
@PostMapping("/add") | |||
public OperationEnum add(@RequestBody Question entity) { | |||
entity.setCreateUserName(ShiroUtils.getUserInfo().getUsername()); | |||
questionService.edit(entity); | |||
return OperationEnum.OPERATION_SUCCESS; | |||
} | |||
/** | |||
* 编辑巡检问题 | |||
* | |||
* @param entity 实体对象 | |||
* @return | |||
*/ | |||
@PutMapping("/edit") | |||
public OperationEnum edit(@RequestBody Question entity) { | |||
entity.setUpdateUserName(ShiroUtils.getUserInfo().getUsername()); | |||
questionService.edit(entity); | |||
return OperationEnum.OPERATION_SUCCESS; | |||
} | |||
/** | |||
* 删除巡检问题 | |||
* | |||
* @param ids 巡检问题ID | |||
* @return | |||
*/ | |||
@DeleteMapping("/{ids}") | |||
public OperationEnum delete(@PathVariable("ids") Integer[] ids) { | |||
questionService.deleteByIds(ids); | |||
return OperationEnum.OPERATION_SUCCESS; | |||
} | |||
} |
@@ -0,0 +1,75 @@ | |||
package com.tuoheng.admin.controller; | |||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||
import com.tuoheng.admin.entity.domain.Tenant; | |||
import com.tuoheng.admin.entity.dto.TenantDto; | |||
import com.tuoheng.admin.entity.request.TenantQuery; | |||
import com.tuoheng.admin.service.ITenantService; | |||
import com.tuoheng.common.common.OperationEnum; | |||
import com.tuoheng.common.utils.JsonResult; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.web.bind.annotation.*; | |||
import com.tuoheng.common.common.BaseController; | |||
/** | |||
* <p> | |||
* 企业管理表 前端控制器 | |||
* </p> | |||
* | |||
* @author 拓恒 | |||
* @since 2022-07-15 | |||
*/ | |||
@RestController | |||
@RequestMapping("/tenant") | |||
public class TenantController extends BaseController { | |||
@Autowired | |||
private ITenantService tenantService; | |||
/** | |||
* 获取职级列表 | |||
* | |||
* @param levelQuery 查询条件 | |||
* @return | |||
*/ | |||
@GetMapping("/index") | |||
public IPage<Tenant> index(TenantQuery levelQuery) { | |||
return tenantService.getTenantList(levelQuery); | |||
} | |||
/** | |||
* 添加职级 | |||
* | |||
* @param tenantDto 实体对象 | |||
* @return | |||
*/ | |||
@PostMapping("/add") | |||
public OperationEnum add(@RequestBody TenantDto tenantDto) { | |||
tenantService.addTenant(tenantDto); | |||
return OperationEnum.OPERATION_SUCCESS; | |||
} | |||
/** | |||
* 编辑职级 | |||
* | |||
* @param tenantDto 实体对象 | |||
* @return | |||
*/ | |||
@PutMapping("/edit") | |||
public OperationEnum edit(@RequestBody TenantDto tenantDto) { | |||
tenantService.editTenant(tenantDto); | |||
return OperationEnum.OPERATION_SUCCESS; | |||
} | |||
/** | |||
* 删除职级 | |||
* | |||
* @param tenantIds 职级ID | |||
* @return | |||
*/ | |||
@DeleteMapping("/delete/{tenantIds}") | |||
public JsonResult delete(@PathVariable("tenantIds") Integer[] tenantIds) { | |||
return tenantService.deleteByIds(tenantIds); | |||
} | |||
} |
@@ -0,0 +1,127 @@ | |||
package com.tuoheng.admin.controller; | |||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
import com.tuoheng.admin.entity.domain.ThInspectionFile; | |||
import com.tuoheng.admin.entity.request.QueryQuestionPictureRequest; | |||
import com.tuoheng.admin.entity.request.QueryQuestionRequest; | |||
import com.tuoheng.admin.entity.request.QuestionInventoryRequest; | |||
import com.tuoheng.admin.entity.vo.QuestionInventoryVo; | |||
import com.tuoheng.admin.entity.vo.ThInspectionQuestionPictureVo; | |||
import com.tuoheng.admin.entity.vo.ThInspectionQuestionVo; | |||
import com.tuoheng.common.common.OperationEnum; | |||
import org.springframework.validation.annotation.Validated; | |||
import org.springframework.web.bind.annotation.*; | |||
/** | |||
* 巡检问题 前端控制器 | |||
* | |||
* @author zhu_zishuang | |||
* @date 2021/9/26 | |||
*/ | |||
@RestController | |||
@RequestMapping("/inspection/question") | |||
public class ThInspectionQuestionController { | |||
/** | |||
* 巡检问题接口 | |||
*/ | |||
// @Autowired | |||
// private IThInspectionFileService iThInspectionFileService; | |||
/** | |||
* 查询 巡检任务问题 列表 | |||
* | |||
* @author zhu_zishuang | |||
* @date 2021/9/1 | |||
*/ | |||
@GetMapping("/findList") | |||
public IPage<ThInspectionQuestionVo> findList(QueryQuestionRequest request) { | |||
return null;//iThInspectionFileService.findList(request); | |||
} | |||
/** | |||
* 查询 巡检任务问题图片 列表 | |||
* | |||
* @author zhu_zishuang | |||
* @date 2021/9/28 | |||
*/ | |||
@GetMapping("/findPictureList") | |||
public Page<ThInspectionQuestionPictureVo> findPictureList(@Validated QueryQuestionPictureRequest request) { | |||
return null;//iThInspectionFileService.findPictureList(request); | |||
} | |||
/** | |||
* 查询 巡检任务问题图片 详情 | |||
* | |||
* @author zhu_zishuang | |||
* @date 2021/9/28 | |||
*/ | |||
@GetMapping("/findPicture") | |||
public ThInspectionQuestionPictureVo findPicture(Integer id) { | |||
return null;//iThInspectionFileService.findPicture(id); | |||
} | |||
/** | |||
* 删除 巡检任务问题图片 | |||
* | |||
* @author zhu_zishuang | |||
* @date 2021/9/28 | |||
*/ | |||
@GetMapping("/delete") | |||
public OperationEnum delete(Integer id) { | |||
return null;//iThInspectionFileService.deleteById(id); | |||
} | |||
/** | |||
* 审核/修改 巡检任务问题图片 | |||
* | |||
* @author zhu_zishuang | |||
* @date 2021/9/28 | |||
*/ | |||
@PutMapping("/updateById") | |||
public OperationEnum updateById(@RequestBody ThInspectionFile thInspectionFile) { | |||
return null;//iThInspectionFileService.updateById(thInspectionFile); | |||
} | |||
/** | |||
* 生成工单 | |||
* | |||
* @author WangHaoran | |||
* @date 2021/11/23 | |||
*/ | |||
@GetMapping("/generateWorkOrder") | |||
public OperationEnum generateWorkOrder(Integer inspectionId) { | |||
return null;//iThInspectionFileService.generateWorkOrder(inspectionId); | |||
} | |||
/** | |||
* 新增 巡检任务问题图片 | |||
* | |||
* @author zhu_zishuang | |||
* @date 2021/9/28 | |||
*/ | |||
@PostMapping("/addInspectionFile") | |||
public OperationEnum addInspectionFile(@RequestParam("originalImage") String originalImage, | |||
@RequestParam("aiImage") String aiImage, | |||
@RequestParam("questionId") Integer questionId, | |||
@RequestParam("inspectionId") Integer inspectionId, | |||
@RequestParam("location") String location, | |||
@RequestParam("questionDesc") String questionDesc, | |||
@RequestParam("status") Integer status, | |||
@RequestParam("sourceFileId") Integer sourceFileId, | |||
@RequestParam(value = "longitude",required = false) String longitude, | |||
@RequestParam(value = "latitude",required = false) String latitude) { | |||
return null;//iThInspectionFileService.addInspectionFile(originalImage, aiImage, questionId, inspectionId, location, questionDesc, status, sourceFileId, longitude, latitude); | |||
} | |||
/** | |||
* 查询问题清单 | |||
* | |||
* @author: WangHaoran | |||
* @date: 2021/9/28 | |||
*/ | |||
@GetMapping("/queryQuestionInventory") | |||
public IPage<QuestionInventoryVo> queryQuestionInventory(QuestionInventoryRequest request) { | |||
return null;//iThInspectionFileService.queryQuestionInventory(request); | |||
} | |||
} |
@@ -0,0 +1,125 @@ | |||
package com.tuoheng.admin.entity.domain; | |||
import com.baomidou.mybatisplus.annotation.TableName; | |||
import com.tuoheng.common.common.BaseEntity; | |||
import lombok.Data; | |||
import lombok.EqualsAndHashCode; | |||
import lombok.experimental.Accessors; | |||
/** | |||
* 巡检附件表 | |||
* | |||
* @author WangHaoran | |||
* @since 2021-06-03 | |||
*/ | |||
@Data | |||
@EqualsAndHashCode(callSuper = true) | |||
@Accessors(chain = true) | |||
@TableName("th_inspection_file") | |||
public class InspectionFile extends BaseEntity { | |||
/** | |||
* 图片编码 | |||
*/ | |||
private String fileCode; | |||
/** | |||
* 巡检任务ID | |||
*/ | |||
private Integer inspectionId; | |||
/** | |||
* 附件类型:1图片 2视频 | |||
*/ | |||
private Integer fileType; | |||
/** | |||
* 文件名称 | |||
*/ | |||
private String fileName; | |||
/** | |||
* 缩略图 | |||
*/ | |||
private String fileThumbnail; | |||
/** | |||
* 原图 | |||
*/ | |||
private String fileOriginal; | |||
/** | |||
* 标记图 | |||
*/ | |||
private String fileImage; | |||
/** | |||
* 文件大小 | |||
*/ | |||
private Double fileSize; | |||
/** | |||
* 纬度(原始图片纬度) | |||
*/ | |||
private String latitude; | |||
/** | |||
* 经度(原始图片经度) | |||
*/ | |||
private String longitude; | |||
/** | |||
* 位置信息 | |||
*/ | |||
private String location; | |||
/** | |||
* 高德地图经度 | |||
*/ | |||
private String gaodeLongitude; | |||
/** | |||
* 高德地图纬度 | |||
*/ | |||
private String gaodeLatitude; | |||
/** | |||
* 高德地图地址 | |||
*/ | |||
private String gaodeAddress; | |||
/** | |||
* 问题类型ID | |||
*/ | |||
private Integer questionId; | |||
/** | |||
* 图片来源:1AI 2后台 3视频 | |||
*/ | |||
private Integer source; | |||
/** | |||
* 详细描述 | |||
*/ | |||
private String questionDesc; | |||
/** | |||
* 审核状态:0待审核 1已审核 | |||
*/ | |||
private Integer status; | |||
/** | |||
* 审核人 | |||
*/ | |||
private String checkUser; | |||
/** | |||
* 审核时间 | |||
*/ | |||
private String checkTime; | |||
/** | |||
* 租户id | |||
*/ | |||
private Integer tenantId; | |||
} |
@@ -0,0 +1,73 @@ | |||
package com.tuoheng.admin.entity.domain; | |||
import com.baomidou.mybatisplus.annotation.TableName; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import com.tuoheng.common.common.BaseEntity; | |||
import lombok.Data; | |||
import lombok.EqualsAndHashCode; | |||
import lombok.experimental.Accessors; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import java.io.Serializable; | |||
import java.util.Date; | |||
/** | |||
* 巡检问题工单子表 | |||
* | |||
* @author WangHaoran | |||
* @since 2021-09-29 | |||
*/ | |||
@Data | |||
@EqualsAndHashCode(callSuper = true) | |||
@Accessors(chain = true) | |||
@TableName("th_inspection_question_item") | |||
public class InspectionQuestionItem extends BaseEntity implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
/** | |||
* 巡检任务ID | |||
*/ | |||
private Integer inspectionId; | |||
/** | |||
* 巡检问题工单ID | |||
*/ | |||
private Integer inspectionQuestionId; | |||
/** | |||
* 巡检问题文件ID | |||
*/ | |||
private Integer inspectionFileId; | |||
/** | |||
* 处理状态:0待处理 1已处理 | |||
*/ | |||
private Integer status; | |||
/** | |||
* 巡检问题文件ID | |||
*/ | |||
private Integer handlerUser; | |||
/** | |||
* 处理后图片(多个图片逗号“,”分隔) | |||
*/ | |||
private String handlerImage; | |||
/** | |||
* 处理结果 | |||
*/ | |||
private String handlerResult; | |||
/** | |||
* 处理完成时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
private Date handlerTime; | |||
/** | |||
* 租户id | |||
*/ | |||
private Integer tenantId; | |||
} |
@@ -0,0 +1,52 @@ | |||
package com.tuoheng.admin.entity.domain; | |||
import com.baomidou.mybatisplus.annotation.TableName; | |||
import com.tuoheng.common.common.BaseEntity; | |||
import lombok.Data; | |||
import lombok.EqualsAndHashCode; | |||
import lombok.experimental.Accessors; | |||
/** | |||
* 巡检问题表 | |||
* | |||
* @author WangHaoran | |||
* @since 2021-09-02 | |||
*/ | |||
@Data | |||
@EqualsAndHashCode(callSuper = true) | |||
@Accessors(chain = true) | |||
@TableName("th_question") | |||
public class Question extends BaseEntity { | |||
/** | |||
* 项目名称:1水面 2岸线 3水质 4排口 | |||
*/ | |||
private Integer name; | |||
/** | |||
* 项目类型:1日常监测 2重点核查 | |||
*/ | |||
private Integer type; | |||
/** | |||
* 巡检内容 | |||
*/ | |||
private String content; | |||
/** | |||
* 排序 | |||
*/ | |||
private Integer sort; | |||
/** | |||
* 添加人名称 | |||
*/ | |||
private String createUserName; | |||
/** | |||
* 更新人名称 | |||
*/ | |||
private String updateUserName; | |||
} |
@@ -0,0 +1,103 @@ | |||
package com.tuoheng.admin.entity.domain; | |||
import com.baomidou.mybatisplus.annotation.TableName; | |||
import java.time.LocalDateTime; | |||
import com.tuoheng.common.common.BaseEntity; | |||
import lombok.Data; | |||
import lombok.EqualsAndHashCode; | |||
import lombok.experimental.Accessors; | |||
/** | |||
* <p> | |||
* 企业管理表 | |||
* </p> | |||
* | |||
* @author 拓恒 | |||
* @since 2022-07-15 | |||
*/ | |||
@Data | |||
@EqualsAndHashCode(callSuper = true) | |||
@Accessors(chain = true) | |||
@TableName("th_tenant") | |||
public class Tenant extends BaseEntity { | |||
private static final long serialVersionUID = 1L; | |||
/** | |||
* 租户名称 | |||
*/ | |||
private String name; | |||
/** | |||
* 租户编号 | |||
*/ | |||
private String code; | |||
/** | |||
* 租户LOGO | |||
*/ | |||
private String logo; | |||
/** | |||
* 上级ID | |||
*/ | |||
private Integer pid; | |||
/** | |||
* 租户类型:1政府 2企业 3组织 | |||
*/ | |||
private Integer type; | |||
/** | |||
* 租户电话 | |||
*/ | |||
private String phone; | |||
/** | |||
* 租户邮箱 | |||
*/ | |||
private String email; | |||
/** | |||
* 省份编号 | |||
*/ | |||
private String provinceCode; | |||
/** | |||
* 市区编号 | |||
*/ | |||
private String cityCode; | |||
/** | |||
* 区县编号 | |||
*/ | |||
private String districtCode; | |||
/** | |||
* 详细地址 | |||
*/ | |||
private String address; | |||
/** | |||
* 租户简介 | |||
*/ | |||
private String intro; | |||
/** | |||
* 状态:1正常 2禁用 | |||
*/ | |||
private Integer status; | |||
/** | |||
* 备注 | |||
*/ | |||
private String note; | |||
/** | |||
* 排序号 | |||
*/ | |||
private Integer sort; | |||
} |
@@ -0,0 +1,81 @@ | |||
package com.tuoheng.admin.entity.domain; | |||
import com.baomidou.mybatisplus.annotation.TableName; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import com.tuoheng.admin.enums.MarkTypeEnum; | |||
import com.tuoheng.common.common.BaseEntity; | |||
import com.tuoheng.system.utils.ShiroUtils; | |||
import lombok.Data; | |||
import lombok.EqualsAndHashCode; | |||
import lombok.experimental.Accessors; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import java.io.Serializable; | |||
import java.util.Date; | |||
/** | |||
* th_flight_data | |||
* @author qiujinyang | |||
*/ | |||
@Data | |||
@EqualsAndHashCode(callSuper = true) | |||
@Accessors(chain = true) | |||
@TableName("th_inspection") | |||
public class ThInspection extends BaseEntity implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
public ThInspection(){ | |||
// setCreateUser(ShiroUtils.getUserId()); | |||
// setUpdateUser(ShiroUtils.getUserId()); | |||
setCreateTime(new Date()); | |||
setUpdateTime(new Date()); | |||
setMark(MarkTypeEnum.VALID.getCode()); | |||
} | |||
/** | |||
* 租户id | |||
*/ | |||
private Integer tenantId; | |||
/** | |||
* 任务ID | |||
*/ | |||
private Integer missionId; | |||
/** | |||
* 巡检的ID,跟硬件对接的时候,硬件的巡检ID | |||
*/ | |||
private Integer inspectionId; | |||
/** | |||
* 地面站标识 | |||
*/ | |||
private Integer hostIp; | |||
/** | |||
* 飞行高度 | |||
*/ | |||
private String altitude; | |||
/** | |||
* 经度 | |||
*/ | |||
private String lng; | |||
/** | |||
* 纬度 | |||
*/ | |||
private String lat; | |||
/** | |||
* 飞行时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
private String timestamp; | |||
} |
@@ -0,0 +1,88 @@ | |||
package com.tuoheng.admin.entity.domain; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import lombok.Data; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import java.io.Serializable; | |||
import java.util.Date; | |||
/** | |||
* th_inspection_check | |||
* @author | |||
*/ | |||
@Data | |||
public class ThInspectionCheck implements Serializable { | |||
/** | |||
* ID | |||
*/ | |||
private Integer id; | |||
/** | |||
* 巡检任务ID | |||
*/ | |||
private Integer inspectionId; | |||
/** | |||
* 审核人 | |||
*/ | |||
private Integer checkUser; | |||
/** | |||
* 审核人姓名 | |||
*/ | |||
private String checkUserName; | |||
/** | |||
* 审核时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
private Date checkTime; | |||
/** | |||
* 审核状态:1审核通过 2审核未通过 | |||
*/ | |||
private Integer status; | |||
/** | |||
* 审核备注 | |||
*/ | |||
private String note; | |||
/** | |||
* 创建人 | |||
*/ | |||
private Integer createUser; | |||
/** | |||
* 创建时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
private Date createTime; | |||
/** | |||
* 更新人 | |||
*/ | |||
private Integer updateUser; | |||
/** | |||
* 更新时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
private Date updateTime; | |||
/** | |||
* 有效标记 | |||
*/ | |||
private Integer mark; | |||
private static final long serialVersionUID = 1L; | |||
/** | |||
* 租户id | |||
*/ | |||
private Integer tenantId; | |||
} |
@@ -0,0 +1,23 @@ | |||
package com.tuoheng.admin.entity.domain; | |||
import com.baomidou.mybatisplus.annotation.TableName; | |||
import com.tuoheng.common.common.BaseEntity; | |||
import lombok.Data; | |||
import lombok.EqualsAndHashCode; | |||
import lombok.experimental.Accessors; | |||
import java.io.Serializable; | |||
/** | |||
* @User qiujinyang | |||
* @Description | |||
* @Date Created by 2022/7/27 11:31 | |||
*/ | |||
@Data | |||
@EqualsAndHashCode(callSuper = true) | |||
@Accessors(chain = true) | |||
@TableName("th_inspection_detail") | |||
public class ThInspectionDetail extends BaseEntity implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
} |
@@ -0,0 +1,163 @@ | |||
package com.tuoheng.admin.entity.domain; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import lombok.Data; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import java.io.Serializable; | |||
import java.util.Date; | |||
/** | |||
* th_inspection_file | |||
* @author | |||
*/ | |||
@Data | |||
public class ThInspectionFile implements Serializable { | |||
/** | |||
* ID | |||
*/ | |||
private Integer id; | |||
/** | |||
* 图片编码 | |||
*/ | |||
private String fileCode; | |||
/** | |||
* 巡检任务ID | |||
*/ | |||
private Integer inspectionId; | |||
/** | |||
* 附件类型:1图片 2视频 | |||
*/ | |||
private Integer fileType; | |||
/** | |||
* 文件名称 | |||
*/ | |||
private String fileName; | |||
/** | |||
* 缩略图 | |||
*/ | |||
private String fileThumbnail; | |||
/** | |||
* 原图 | |||
*/ | |||
private String fileOriginal; | |||
/** | |||
* 标记图 | |||
*/ | |||
private String fileImage; | |||
/** | |||
* 文件大小 | |||
*/ | |||
private Double fileSize; | |||
/** | |||
* 纬度(原始图片纬度) | |||
*/ | |||
private String latitude; | |||
/** | |||
* 经度(原始图片经度) | |||
*/ | |||
private String longitude; | |||
/** | |||
* 后台上传图片的拍摄时间 | |||
*/ | |||
private Long shootTime; | |||
/** | |||
* 位置信息 | |||
*/ | |||
private String location; | |||
/** | |||
* 高德地图经度 | |||
*/ | |||
private String gaodeLongitude; | |||
/** | |||
* 高德地图纬度 | |||
*/ | |||
private String gaodeLatitude; | |||
/** | |||
* 高德地图地址 | |||
*/ | |||
private String gaodeAddress; | |||
/** | |||
* 问题类型ID | |||
*/ | |||
private Integer questionId; | |||
/** | |||
* 图片来源:1AI 2后台 3视频 | |||
*/ | |||
private Integer source; | |||
/** | |||
* 详细描述 | |||
*/ | |||
private String questionDesc; | |||
/** | |||
* 审核状态:0待审核 1已审核 | |||
*/ | |||
private Integer status; | |||
/** | |||
* 审核人 | |||
*/ | |||
private Integer checkUser; | |||
/** | |||
* 审核时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
private Date checkTime; | |||
/** | |||
* 创建人 | |||
*/ | |||
private Integer createUser; | |||
/** | |||
* 创建时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
private Date createTime; | |||
/** | |||
* 更新人 | |||
*/ | |||
private Integer updateUser; | |||
/** | |||
* 更新时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
private Date updateTime; | |||
/** | |||
* 有效标记 | |||
*/ | |||
private Integer mark; | |||
private static final long serialVersionUID = 1L; | |||
/** | |||
* 租户id | |||
*/ | |||
private Integer tenantId; | |||
} |
@@ -0,0 +1,90 @@ | |||
package com.tuoheng.admin.entity.domain; | |||
import com.baomidou.mybatisplus.annotation.IdType; | |||
import com.baomidou.mybatisplus.annotation.TableId; | |||
import lombok.Data; | |||
import java.io.Serializable; | |||
import java.util.Date; | |||
/** | |||
* 问题工单映射实体 | |||
* | |||
* @author zhuzishuang | |||
* @date 2021/10/8 | |||
*/ | |||
@Data | |||
public class ThInspectionQuestion implements Serializable { | |||
/** | |||
* ID | |||
*/ | |||
@TableId(type = IdType.AUTO) | |||
private Integer id; | |||
/** | |||
* 问题工单号 | |||
*/ | |||
private String code; | |||
/** | |||
* 巡检ID | |||
*/ | |||
private Integer inspectionId; | |||
/** | |||
* 处理状态:1问题待指派 2问题待处理 3问题处理中 4问题已处理 | |||
*/ | |||
private Boolean status; | |||
/** | |||
* 指派负责人 | |||
*/ | |||
private Integer assignUser; | |||
/** | |||
* 指派负责人联系方式 | |||
*/ | |||
private String assignContact; | |||
/** | |||
* 指派备注 | |||
*/ | |||
private String assignNote; | |||
/** | |||
* 指派时间 | |||
*/ | |||
private Date assignTime; | |||
/** | |||
* 创建人 | |||
*/ | |||
private Integer createUser; | |||
/** | |||
* 创建时间 | |||
*/ | |||
private Date createTime; | |||
/** | |||
* 更新人 | |||
*/ | |||
private Integer updateUser; | |||
/** | |||
* 更新时间 | |||
*/ | |||
private Date updateTime; | |||
/** | |||
* 有效标记 | |||
*/ | |||
private Boolean mark; | |||
private static final long serialVersionUID = 1L; | |||
/** | |||
* 租户id | |||
*/ | |||
private Integer tenantId; | |||
} |
@@ -0,0 +1,154 @@ | |||
package com.tuoheng.admin.entity.domain; | |||
import com.baomidou.mybatisplus.annotation.TableName; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import com.tuoheng.admin.enums.MarkTypeEnum; | |||
import com.tuoheng.common.common.BaseEntity; | |||
import com.tuoheng.system.utils.ShiroUtils; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import lombok.EqualsAndHashCode; | |||
import lombok.experimental.Accessors; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import javax.validation.constraints.NotNull; | |||
import java.io.Serializable; | |||
import java.util.Date; | |||
import java.util.List; | |||
/** | |||
* ThMission | |||
* | |||
* @author qiujinyang | |||
*/ | |||
@Data | |||
@EqualsAndHashCode(callSuper = true) | |||
@Accessors(chain = true) | |||
@TableName("th_mission") | |||
public class ThMission extends BaseEntity implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
public ThMission(){ | |||
// setCreateUser(ShiroUtils.getUserId()); | |||
// setUpdateUser(ShiroUtils.getUserId()); | |||
setCreateTime(new Date()); | |||
setUpdateTime(new Date()); | |||
setMark(MarkTypeEnum.VALID.getCode()); | |||
} | |||
/** | |||
* 巡检任务编号 | |||
*/ | |||
private String code; | |||
/** | |||
* 巡检任务名称 | |||
*/ | |||
private String name; | |||
/** | |||
* 巡检任务类型 1 常规;2 日常 | |||
*/ | |||
private Integer type; | |||
/** | |||
* 巡检方式 1 机场服务,2 人工巡检 | |||
*/ | |||
private Integer inspectionType; | |||
/** | |||
* 巡检机场 | |||
*/ | |||
private String airportId; | |||
/** | |||
* 巡检线路 | |||
*/ | |||
private String inspectionLine; | |||
/** | |||
* 巡检机场名称 | |||
*/ | |||
private String airportName; | |||
/** | |||
* 巡检线路名称 | |||
*/ | |||
private String inspectionLineName; | |||
/** | |||
* 任务状态:1任务待飞行 2任务飞行中 3任务执行失败 4任务飞行完成 | |||
*/ | |||
private Integer status; | |||
/** | |||
* 视频推流地址 | |||
*/ | |||
private String pushUrl; | |||
/** | |||
* 视频拉流地址 | |||
*/ | |||
private String pullUrl; | |||
/** | |||
* AI拉流地址 | |||
*/ | |||
private String aipullUrl; | |||
/** | |||
* AI推流地址 | |||
*/ | |||
private String aipushUrl; | |||
/** | |||
* 执行开始时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
private Date executionStartTime; | |||
/** | |||
* 执行结束时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
private Date executionEndTime; | |||
/** | |||
* 原视频地址 | |||
*/ | |||
private String videoUrl; | |||
/** | |||
* AI识别后视频地址 | |||
*/ | |||
private String aiVideoUrl; | |||
/** | |||
* AI处理状态 | |||
*/ | |||
private Integer analyseStatus; | |||
/** | |||
* 算法分析进度 | |||
*/ | |||
private Double progressbar; | |||
/** | |||
* 备注 | |||
*/ | |||
private String note; | |||
/** | |||
* 巡检报告是否生成 是否生成 0 未生成 1 已生成 | |||
*/ | |||
private Integer reportStatus; | |||
/** | |||
* 租户id | |||
*/ | |||
private Integer tenantId; | |||
} |
@@ -0,0 +1,46 @@ | |||
package com.tuoheng.admin.entity.dto; | |||
import com.fasterxml.jackson.annotation.JsonProperty; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
import java.io.Serializable; | |||
/** | |||
* Ai分析结果 | |||
* @author chenyukun | |||
*/ | |||
@Getter | |||
@Setter | |||
@Accessors(chain = true) | |||
public class AiAnalysisResult implements Serializable { | |||
/** | |||
* 原图地址或原视频地址 | |||
*/ | |||
@JsonProperty("original_url") | |||
private String originalUrl; | |||
/** | |||
* Ai分析图片地址或视频地址 | |||
*/ | |||
@JsonProperty("sign_url") | |||
private String signUrl; | |||
/** | |||
* 分类标识 | |||
*/ | |||
@JsonProperty("category_id") | |||
private String categoryId; | |||
/** | |||
* 问题描述 | |||
*/ | |||
private String description; | |||
/** | |||
* 时间戳 | |||
*/ | |||
private String time; | |||
} |
@@ -0,0 +1,41 @@ | |||
package com.tuoheng.admin.entity.dto; | |||
import lombok.Data; | |||
/** | |||
* 离线分析任务下发 | |||
*/ | |||
@Data | |||
public class AiOfflineTask { | |||
/** | |||
* 唯一性标识 | |||
*/ | |||
private String msg_id; | |||
/** | |||
* 业务标识 | |||
*/ | |||
private String biz_id; | |||
/** | |||
* 模型标识 | |||
*/ | |||
private String mod_id; | |||
/** | |||
* 素材标识 | |||
*/ | |||
private String offering_id; | |||
/** | |||
* 素材类型 | |||
*/ | |||
private String offering_type; | |||
/** | |||
* 图片存储地址 | |||
*/ | |||
private String results_base_dir; | |||
} |
@@ -0,0 +1,60 @@ | |||
package com.tuoheng.admin.entity.dto; | |||
import com.fasterxml.jackson.annotation.JsonProperty; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
import java.io.Serializable; | |||
import java.util.List; | |||
/** | |||
* @author chenyukun | |||
*/ | |||
@Setter | |||
@Getter | |||
@Accessors(chain = true) | |||
public class AiTaskResult implements Serializable { | |||
/** | |||
* 唯一性标识 | |||
*/ | |||
@JsonProperty("msg_id") | |||
private String msgId; | |||
/** | |||
* 业务标识 | |||
*/ | |||
@JsonProperty("biz_id") | |||
private String bizId; | |||
/** | |||
* 模型标识 | |||
*/ | |||
@JsonProperty("mod_id") | |||
private String modId; | |||
/** | |||
* AI任务分析状态 | |||
*/ | |||
private String status; | |||
/** | |||
* 数据类型 | |||
*/ | |||
private String type; | |||
/** | |||
* AI任务错误信息 | |||
*/ | |||
private String error; | |||
/** | |||
* AI任务分析进度 | |||
*/ | |||
private String progressbar; | |||
/** | |||
* 结果 | |||
*/ | |||
private List<AiAnalysisResult> results; | |||
} |
@@ -0,0 +1,101 @@ | |||
package com.tuoheng.admin.entity.dto; | |||
import lombok.Data; | |||
/** | |||
* 租户Dto | |||
*/ | |||
@Data | |||
public class TenantDto { | |||
/** | |||
* 租户ID | |||
*/ | |||
private Integer id; | |||
/** | |||
* 租户名称 | |||
*/ | |||
private String name; | |||
/** | |||
* 租户编号 | |||
*/ | |||
private String code; | |||
/** | |||
* 租户LOGO | |||
*/ | |||
private String logo; | |||
/** | |||
* 上级ID | |||
*/ | |||
private Integer pid; | |||
/** | |||
* 租户类型:1政府 2企业 3组织 | |||
*/ | |||
private Integer type; | |||
/** | |||
* 租户电话 | |||
*/ | |||
private String phone; | |||
/** | |||
* 租户邮箱 | |||
*/ | |||
private String email; | |||
/** | |||
* 省份编号 | |||
*/ | |||
private String provinceCode; | |||
/** | |||
* 市区编号 | |||
*/ | |||
private String cityCode; | |||
/** | |||
* 区县编号 | |||
*/ | |||
private String districtCode; | |||
/** | |||
* 详细地址 | |||
*/ | |||
private String address; | |||
/** | |||
* 租户简介 | |||
*/ | |||
private String intro; | |||
/** | |||
* 状态:1正常 2禁用 | |||
*/ | |||
private Integer status; | |||
/** | |||
* 备注 | |||
*/ | |||
private String note; | |||
/** | |||
* 排序号 | |||
*/ | |||
private Integer sort; | |||
/** | |||
* 登录账号 | |||
*/ | |||
private String username; | |||
/** | |||
* 登录密码 | |||
*/ | |||
private String password; | |||
} |
@@ -0,0 +1,42 @@ | |||
package com.tuoheng.admin.entity.request; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import java.io.Serializable; | |||
import javax.validation.constraints.NotNull; | |||
/** | |||
* @User qiujinyang | |||
* @Description | |||
* @Date Created by 2022/7/28 9:51 | |||
*/ | |||
@Data | |||
public class InspectionRequest implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
@ApiModelProperty(value = "巡检的ID,跟硬件对接的时候,硬件的巡检ID") | |||
@NotNull(message = "巡检的ID不能为空!") | |||
private Integer inspectionId; | |||
@ApiModelProperty(value = "飞行高度") | |||
@NotNull(message = "飞行高度不能为空!") | |||
private String altitude; | |||
@ApiModelProperty(value = "经度") | |||
@NotNull(message = "经度不能为空!") | |||
private String lng; | |||
@ApiModelProperty(value = "纬度") | |||
@NotNull(message = "纬度不能为空!") | |||
private String lat; | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
@ApiModelProperty(value = "飞行时间") | |||
@NotNull(message = "飞行时间不能为空!") | |||
private String timestamp; | |||
} |
@@ -0,0 +1,45 @@ | |||
package com.tuoheng.admin.entity.request; | |||
import com.tuoheng.common.common.BaseQuery; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import lombok.Value; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import javax.validation.Valid; | |||
import javax.validation.constraints.NotNull; | |||
import java.util.Date; | |||
/** | |||
* 查询巡检任务请求实体 | |||
* @author: qiujinyang | |||
*/ | |||
@Data | |||
public class MissionQuery extends BaseQuery { | |||
private Integer id; | |||
@ApiModelProperty(value = "任务名称") | |||
private String name; | |||
@ApiModelProperty(value = "任务编号") | |||
private String code; | |||
@ApiModelProperty(value = "巡检方式 1 机场服务,2 人工巡检") | |||
private Integer inspectionType; | |||
@ApiModelProperty(value = "任务飞行状态:1任务待飞行 2任务飞行中 3任务执行失败 4任务飞行完成") | |||
private Integer status; | |||
@ApiModelProperty(value = "巡检机场") | |||
private String airportId; | |||
@ApiModelProperty(value = "巡检线路") | |||
private String inspectionLine; | |||
@ApiModelProperty(value = "任务类型") | |||
private Integer type; | |||
@ApiModelProperty(value = "租户Id",hidden = true) | |||
private Integer tenantId; | |||
} |
@@ -0,0 +1,109 @@ | |||
package com.tuoheng.admin.entity.request; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import com.tuoheng.common.common.BaseQuery; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import javax.validation.constraints.NotBlank; | |||
import javax.validation.constraints.NotNull; | |||
import java.util.Date; | |||
/** | |||
* 巡检任务 新增或修改请求参数 | |||
* @author: qiujinyang | |||
* @date: 2021/9/7 | |||
*/ | |||
@Data | |||
public class MissionRequest { | |||
private static final long serialVersionUID = 1L; | |||
private Integer id; | |||
/** | |||
* 巡检任务名称 | |||
*/ | |||
@NotNull(message = "任务名称不能为空!") | |||
@ApiModelProperty(value = "任务名称") | |||
private String name; | |||
/** | |||
* 巡检方式 1 机场服务,2 人工巡检 | |||
*/ | |||
@NotNull(message = "巡检方式不能为空!") | |||
@ApiModelProperty(value = "巡检方式 1 机场服务,2 人工巡检") | |||
private Integer inspectionType; | |||
/** | |||
* 巡检机场 | |||
*/ | |||
@NotNull(message = "巡检机场不能为空!") | |||
@ApiModelProperty(value = "巡检机场") | |||
private String airportId; | |||
/** | |||
* 巡检机场名称 | |||
*/ | |||
@NotNull(message = "巡检机场名称不能为空!") | |||
@ApiModelProperty(value = "巡检机场名称") | |||
private String airportName; | |||
/** | |||
* 巡检线路 | |||
*/ | |||
@NotNull(message = "巡检线路不能为空!") | |||
@ApiModelProperty(value = "巡检线路") | |||
private String inspectionLine; | |||
/** | |||
* 巡检线路名称 | |||
*/ | |||
@NotNull(message = "巡检线路名称不能为空!") | |||
@ApiModelProperty(value = "巡检线路名称") | |||
private String inspectionLineName; | |||
/** | |||
* 巡检任务类型 1 日常,2 应急巡检 | |||
*/ | |||
@NotNull(message = "任务类型不能为空!") | |||
@ApiModelProperty(value = "任务类型,1 日常,2 应急巡检") | |||
private Integer type; | |||
/** | |||
* 执行开始时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
@ApiModelProperty(value = "巡检时间") | |||
@NotNull(message = "巡检时间不能为空!") | |||
private Date executionStartTime; | |||
/** | |||
* 执行结束时间,飞行结束的时候才会填充的时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
@ApiModelProperty(value = "巡检结束时间") | |||
private Date executionEndTime; | |||
/** | |||
* 视频地址 | |||
*/ | |||
@ApiModelProperty(value = "视频地址") | |||
private String videoUrl; | |||
@ApiModelProperty(value = "任务飞行状态:1任务待飞行 2任务飞行中 3任务执行失败 4任务飞行完成") | |||
private Integer status; | |||
@ApiModelProperty(value = "备注") | |||
private String note; | |||
@ApiModelProperty(value = "租户id",hidden = true) | |||
private Integer tenantId; | |||
} |
@@ -0,0 +1,34 @@ | |||
package com.tuoheng.admin.entity.request; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import javax.validation.constraints.NotNull; | |||
import java.util.Date; | |||
/** | |||
* 巡检任务 新增或修改请求参数 | |||
* @author: qiujinyang | |||
* @date: 2021/9/7 | |||
*/ | |||
@Data | |||
public class MissionStatusRequest { | |||
private static final long serialVersionUID = 1L; | |||
@NotNull(message = "任务名称不能为空!") | |||
@ApiModelProperty(value = "任务ID不能为空") | |||
private Integer id; | |||
@NotNull(message = "视频推流地址不能为空!") | |||
@ApiModelProperty(value = "视频推流地址不能为空") | |||
private String pushUrl; | |||
@NotNull(message = "视频拉流地址不能为空!") | |||
@ApiModelProperty(value = "视频拉流地址不能为空") | |||
private String pullUrl; | |||
@ApiModelProperty(value = "任务飞行状态:1任务待飞行 2任务飞行中 3任务执行失败 4任务飞行完成") | |||
private Integer status; | |||
} |
@@ -0,0 +1,42 @@ | |||
package com.tuoheng.admin.entity.request; | |||
import com.tuoheng.common.common.BaseQuery; | |||
import lombok.Data; | |||
import javax.validation.constraints.NotNull; | |||
/** | |||
* 查询巡检问题图片请求参数 | |||
* | |||
* @author: zhu_zishuang | |||
* @date: 2021/9/26 | |||
*/ | |||
@Data | |||
public class QueryQuestionPictureRequest extends BaseQuery { | |||
/** | |||
* 巡检ID | |||
*/ | |||
@NotNull(message = "巡检ID不能为空!") | |||
private Integer inspectionId; | |||
/** | |||
* 问题类型一级分类ID | |||
*/ | |||
private Integer questionName; | |||
/** | |||
* 图片来源:1AI 2后台 3视频 | |||
*/ | |||
private Integer source; | |||
/** | |||
* 图片审核状态:0待审核 1已审核 | |||
*/ | |||
private Integer status; | |||
/** | |||
* 巡检内容 | |||
*/ | |||
private String content; | |||
} |
@@ -0,0 +1,44 @@ | |||
package com.tuoheng.admin.entity.request; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import com.tuoheng.common.common.BaseQuery; | |||
import lombok.Data; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import java.util.Date; | |||
/** | |||
* 查询巡检问题请求参数 | |||
* | |||
* @author: zhu_zishuang | |||
* @date: 2021/9/26 | |||
*/ | |||
@Data | |||
public class QueryQuestionRequest extends BaseQuery { | |||
/** | |||
* 河道名称 | |||
*/ | |||
private String streamName; | |||
/** | |||
* 巡检任务编号 | |||
*/ | |||
private String inspectionCode; | |||
/** | |||
* 巡检时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd") | |||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") | |||
private Date inspectionTime; | |||
/** | |||
* 任务名称 | |||
*/ | |||
private String inspectionName; | |||
/** | |||
* 任务状态 | |||
*/ | |||
private Integer status; | |||
} |
@@ -0,0 +1,34 @@ | |||
package com.tuoheng.admin.entity.request; | |||
import com.tuoheng.common.common.BaseQuery; | |||
import lombok.Data; | |||
/** | |||
* 查询问题清单列表 请求参数 | |||
* | |||
* @author: WangHaoran | |||
* @date: 2021/9/26 | |||
*/ | |||
@Data | |||
public class QuestionFileRequest extends BaseQuery { | |||
/** | |||
* 项目名称:1河湖水面 2河湖岸线 3河湖感观水质4入河、湖异常排口 | |||
*/ | |||
private Integer name; | |||
/** | |||
* 巡检ID | |||
*/ | |||
private Integer inspectionId; | |||
/** | |||
* 图片ID | |||
*/ | |||
private Integer fileId; | |||
/** | |||
* 图片图片 | |||
*/ | |||
private String fileCode; | |||
} |
@@ -0,0 +1,45 @@ | |||
package com.tuoheng.admin.entity.request; | |||
import com.tuoheng.common.common.BaseQuery; | |||
import lombok.Data; | |||
/** | |||
* 查询问题清单 请求参数 | |||
* | |||
* @author: WangHaoran | |||
* @date: 2021/9/26 | |||
*/ | |||
@Data | |||
public class QuestionInventoryRequest extends BaseQuery { | |||
/** | |||
* 河流名称 | |||
*/ | |||
private String streamName; | |||
/** | |||
* 巡检时间 | |||
*/ | |||
private String inspectionTime; | |||
/** | |||
* 工单编码 | |||
*/ | |||
private String code; | |||
/** | |||
* 巡检编码 | |||
*/ | |||
private String inspectionCode; | |||
/** | |||
* 处理状态:1问题待指派 2问题待处理 3问题处理中 4问题已处理 | |||
*/ | |||
private String status; | |||
/** | |||
* 巡检名称 | |||
*/ | |||
private String inspectionName; | |||
} |
@@ -0,0 +1,28 @@ | |||
package com.tuoheng.admin.entity.request; | |||
import com.tuoheng.common.common.BaseQuery; | |||
import lombok.Data; | |||
/** | |||
* 巡检问题查询 | |||
* | |||
* @author WangHaoran | |||
* @since 2021-09-02 | |||
*/ | |||
@Data | |||
public class QuestionQuery extends BaseQuery { | |||
/** | |||
* 项目名称:1水面 2岸线 3水质 4排口 | |||
*/ | |||
private Integer name; | |||
/** | |||
* 项目类型:1日常监测 2重点核查 | |||
*/ | |||
private Integer type; | |||
/** | |||
* 巡检内容 | |||
*/ | |||
private String content; | |||
} |
@@ -0,0 +1,53 @@ | |||
package com.tuoheng.admin.entity.request; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import com.tuoheng.common.common.BaseQuery; | |||
import lombok.Data; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
/** | |||
* 报告查询 | |||
* | |||
* @author WangHaoran | |||
* @since 2021-10-8 | |||
*/ | |||
@Data | |||
public class ReportRequest extends BaseQuery { | |||
/** | |||
* 河流名称 | |||
*/ | |||
private String streamName; | |||
/** | |||
* 巡检时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd") | |||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") | |||
private String inspectionTime; | |||
/** | |||
* 报告编号 | |||
*/ | |||
private String reportNo; | |||
/** | |||
* 报告ID | |||
*/ | |||
private Integer reportId; | |||
/** | |||
* 巡检ID | |||
*/ | |||
private Integer inspectionId; | |||
/** | |||
* 巡检编码 | |||
*/ | |||
private String inspectionCode; | |||
/** | |||
* 巡检名称 | |||
*/ | |||
private String inspectionName; | |||
} |
@@ -0,0 +1,17 @@ | |||
package com.tuoheng.admin.entity.request; | |||
import com.tuoheng.common.common.BaseQuery; | |||
import lombok.Data; | |||
/** | |||
* 租户查询条件 | |||
*/ | |||
@Data | |||
public class TenantQuery extends BaseQuery { | |||
/** | |||
* 租户名称 | |||
*/ | |||
private String name; | |||
} |
@@ -0,0 +1,71 @@ | |||
package com.tuoheng.admin.entity.request; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import lombok.Data; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import java.io.Serializable; | |||
import java.util.Date; | |||
/** | |||
* 常规巡河问题 | |||
* | |||
* @author WangHaoran | |||
* @since 2021-07-16 | |||
*/ | |||
@Data | |||
public class UAVKHQuestionRequest implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
/** | |||
* 帧号 | |||
*/ | |||
private String fid; | |||
/** | |||
* 问题类型 | |||
*/ | |||
private String type; | |||
/** | |||
* 问题类型ID | |||
*/ | |||
private Integer typeId; | |||
/** | |||
* 图片Base64 | |||
*/ | |||
private String imgData; | |||
/** | |||
* 图片名称,包含.jpg后缀 | |||
*/ | |||
private String imgName; | |||
/** | |||
* 原始图片Base64 | |||
*/ | |||
private String imgDataOriginal; | |||
/** | |||
* 原始图片名称,包含.jpg后缀 | |||
*/ | |||
private String imgNameOriginal; | |||
/** | |||
* 巡检编码 | |||
*/ | |||
private String code; | |||
/** | |||
* 备注 | |||
*/ | |||
private String note; | |||
/** | |||
* 时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
private Date time; | |||
} |
@@ -0,0 +1,15 @@ | |||
package com.tuoheng.admin.entity.request; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
@Getter | |||
@Setter | |||
@Accessors(chain = true) | |||
public class UpdateLiveChannel { | |||
private Integer id; | |||
private Integer status; | |||
} |
@@ -0,0 +1,28 @@ | |||
package com.tuoheng.admin.entity.request; | |||
import lombok.Data; | |||
import javax.validation.constraints.NotBlank; | |||
import javax.validation.constraints.NotNull; | |||
import javax.validation.constraints.Pattern; | |||
@Data | |||
public class UploadVideoUrlRequest { | |||
/** | |||
* 巡检ID | |||
*/ | |||
@NotNull | |||
private Integer inspectionId; | |||
/** | |||
* 视频地址 | |||
*/ | |||
@NotBlank | |||
private String videoUrl; | |||
/** | |||
* 备注 | |||
*/ | |||
private String note; | |||
} |
@@ -0,0 +1,21 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import lombok.Data; | |||
/** | |||
* AI分析返回视图Vo | |||
*/ | |||
@Data | |||
public class AIInspectionVo { | |||
/** | |||
* 巡检任务编号 | |||
*/ | |||
private String code; | |||
/** | |||
* 视频URL | |||
*/ | |||
private String videoUrl; | |||
} |
@@ -0,0 +1,28 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import lombok.NoArgsConstructor; | |||
import java.io.Serializable; | |||
/** | |||
* @User qiujinyang | |||
* @Description | |||
* @Date Created by 2022/7/28 13:31 | |||
*/ | |||
@NoArgsConstructor | |||
@Data | |||
public class AirExecuteTaskVO implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
@ApiModelProperty(value = "校验是否通过") | |||
private Boolean result; | |||
@ApiModelProperty(value = "错误信息") | |||
private String check; | |||
@ApiModelProperty(value = "建议值") | |||
private String value; | |||
} |
@@ -0,0 +1,75 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import com.fasterxml.jackson.annotation.JsonProperty; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import lombok.NoArgsConstructor; | |||
import java.io.Serializable; | |||
/** | |||
* @User qiujinyang | |||
* @Description | |||
* @Date Created by 2022/7/28 13:31 | |||
*/ | |||
@NoArgsConstructor | |||
@Data | |||
public class AirLineVO implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
@ApiModelProperty(value = "任务id") | |||
private Integer id; | |||
@ApiModelProperty(value = "任务编号") | |||
private String code; | |||
@ApiModelProperty(value = "任务名称") | |||
private String name; | |||
@ApiModelProperty(value = "无人机id") | |||
private Integer droneId; | |||
@ApiModelProperty(value = "无人机名称") | |||
private String droneName; | |||
@ApiModelProperty(value = "无人机直播播流地址") | |||
private String liveUrl; | |||
@ApiModelProperty(value = "航线id") | |||
private Integer airlineFileId; | |||
@ApiModelProperty(value = "航线名称") | |||
private String airlineFileName; | |||
@ApiModelProperty(value = "航线文件地址路径") | |||
private String airlineFileUrl; | |||
@ApiModelProperty(value = "执行类型,1单次2每天") | |||
private Integer type; | |||
@ApiModelProperty(value = "单次执行时间") | |||
private String singleTime; | |||
@ApiModelProperty(value = "每天执行时间") | |||
private Object everydayTime; | |||
@ApiModelProperty(value = "任务备注") | |||
private Object note; | |||
@ApiModelProperty(value = "任务状态1待执行 2执行中") | |||
private Integer status; | |||
@ApiModelProperty(value = "创建人",hidden = true) | |||
private Integer createUser; | |||
@ApiModelProperty(value = "创建时间",hidden = true) | |||
private String createTime; | |||
@ApiModelProperty(value = "修改用户",hidden = true) | |||
private Integer updateUser; | |||
@ApiModelProperty(value = "修改时间",hidden = true) | |||
private String updateTime; | |||
} |
@@ -0,0 +1,72 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import com.fasterxml.jackson.annotation.JsonProperty; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import lombok.NoArgsConstructor; | |||
import java.io.Serializable; | |||
/** | |||
* @User qiujinyang | |||
* @Description | |||
* @Date Created by 2022/7/28 13:31 | |||
*/ | |||
@NoArgsConstructor | |||
@Data | |||
public class AirPortVO implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
@ApiModelProperty(value = "机场id") | |||
private Integer id; | |||
@ApiModelProperty(value = "机场代码") | |||
private String code; | |||
@ApiModelProperty(value = "机场名称") | |||
private String name; | |||
@ApiModelProperty(value = "机场图片") | |||
private String image; | |||
@ApiModelProperty(value = "机场外部监控地址") | |||
private String externalMonitorUrl; | |||
@ApiModelProperty(value = "机场内部监控地址") | |||
private String internalMonitorUrl; | |||
@ApiModelProperty(value = "覆盖范围(km)") | |||
private String coverage; | |||
@ApiModelProperty(value = "排序") | |||
private Integer sort; | |||
@ApiModelProperty(value = "经度") | |||
private String longitude; | |||
@ApiModelProperty(value = "纬度") | |||
private String latitude; | |||
@ApiModelProperty(value = "无人机id") | |||
private Integer droneId; | |||
@ApiModelProperty(value = "无人机名称") | |||
private String droneName; | |||
@ApiModelProperty(value = "设备id") | |||
private String edgeId; | |||
@ApiModelProperty(value = "创建人",hidden = true) | |||
private Integer createUser; | |||
@ApiModelProperty(value = "创建时间",hidden = true) | |||
private String createTime; | |||
@ApiModelProperty(value = "修改人",hidden = true) | |||
private Integer updateUser; | |||
@ApiModelProperty(value = "修改时间",hidden = true) | |||
private String updateTime; | |||
} |
@@ -0,0 +1,114 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import com.fasterxml.jackson.annotation.JsonProperty; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import lombok.NoArgsConstructor; | |||
import java.io.Serializable; | |||
/** | |||
* @User qiujinyang | |||
* @Description | |||
* @Date Created by 2022/7/28 13:31 | |||
*/ | |||
@NoArgsConstructor | |||
@Data | |||
public class AirWeatherVO implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
@ApiModelProperty(value = "ACD") | |||
private ACDDTO acd; | |||
@ApiModelProperty(value = "WTH") | |||
private WTHDTO wth; | |||
@ApiModelProperty(value = "TAH") | |||
private TAHDTO tah; | |||
@NoArgsConstructor | |||
@Data | |||
public static class ACDDTO { | |||
@ApiModelProperty(value = "parm") | |||
private ParmDTO parm; | |||
@ApiModelProperty(value = "mid") | |||
private Integer mid; | |||
@ApiModelProperty(value = "deviceid") | |||
private String deviceid; | |||
@ApiModelProperty(value = "timestamp") | |||
private Integer timestamp; | |||
@NoArgsConstructor | |||
@Data | |||
public static class ParmDTO { | |||
@ApiModelProperty(value = "Tmp") | |||
private Integer tmp; | |||
} | |||
} | |||
@NoArgsConstructor | |||
@Data | |||
public static class WTHDTO { | |||
@ApiModelProperty(value = "parm") | |||
private ParmDTO parm; | |||
@ApiModelProperty(value = "mid") | |||
private Integer mid; | |||
@ApiModelProperty(value = "deviceid") | |||
private String deviceid; | |||
@ApiModelProperty(value = "timestamp") | |||
private Integer timestamp; | |||
@NoArgsConstructor | |||
@Data | |||
public static class ParmDTO { | |||
@ApiModelProperty(value = "Hum") | |||
private Integer hum; | |||
@ApiModelProperty(value = "Rainfull") | |||
private Integer rainfull; | |||
@ApiModelProperty(value = "Noise") | |||
private Integer noise; | |||
@ApiModelProperty(value = "co2") | |||
private Integer co2; | |||
@ApiModelProperty(value = "Lux") | |||
private Integer lux; | |||
@ApiModelProperty(value = "RainType") | |||
private Integer rainType; | |||
@ApiModelProperty(value = "Tmp") | |||
private Integer tmp; | |||
@ApiModelProperty(value = "PM2.5") | |||
private Integer _$Pm25111;// FIXME check this code | |||
@ApiModelProperty(value = "Dew") | |||
private Integer dew; | |||
@ApiModelProperty(value = "Hpa") | |||
private Integer hpa; | |||
@ApiModelProperty(value = "WSPD") | |||
private Integer wspd; | |||
@ApiModelProperty(value = "PM10") | |||
private Integer pm10; | |||
@ApiModelProperty(value = "WDIR") | |||
private Integer wdir; | |||
} | |||
} | |||
@NoArgsConstructor | |||
@Data | |||
public static class TAHDTO { | |||
@ApiModelProperty(value = "parm") | |||
private ParmDTO parm; | |||
@ApiModelProperty(value = "mid") | |||
private Integer mid; | |||
@ApiModelProperty(value = "deviceid") | |||
private String deviceid; | |||
@ApiModelProperty(value = "timestamp") | |||
private Integer timestamp; | |||
@NoArgsConstructor | |||
@Data | |||
public static class ParmDTO { | |||
@ApiModelProperty(value = "湿度") | |||
private Integer hum; | |||
@ApiModelProperty(value = "温度") | |||
private Integer tmp; | |||
} | |||
} | |||
} |
@@ -0,0 +1,40 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import lombok.Data; | |||
@Data | |||
public class InspectionFileInfoVo { | |||
/** | |||
* 主键 | |||
*/ | |||
private Integer id; | |||
/** | |||
* 标记图地址 | |||
*/ | |||
private String fileImage; | |||
/** | |||
* 纬度 | |||
*/ | |||
private String latitude; | |||
/** | |||
* 经度 | |||
*/ | |||
private String longitude; | |||
/** | |||
* 详细描述 | |||
*/ | |||
private String content; | |||
private String handerName; | |||
private String handTime; | |||
private String handContent; | |||
private String handImg; | |||
} |
@@ -0,0 +1,37 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import com.tuoheng.common.common.BaseEntity; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import java.io.Serializable; | |||
/** | |||
* @User qiujinyang | |||
* @Description | |||
* @Date Created by 2022/7/28 9:51 | |||
*/ | |||
@Data | |||
public class InspectionVO implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
@ApiModelProperty(value = "任务id") | |||
private Integer missionId; | |||
@ApiModelProperty(value = "飞行高度") | |||
private String altitude; | |||
@ApiModelProperty(value = "经度") | |||
private String lng; | |||
@ApiModelProperty(value = "纬度") | |||
private String lat; | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
@ApiModelProperty(value = "飞行时间") | |||
private String timestamp; | |||
} |
@@ -0,0 +1,77 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import com.tuoheng.common.common.BaseQuery; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import javax.validation.constraints.NotBlank; | |||
import javax.validation.constraints.NotNull; | |||
import java.util.Date; | |||
/** | |||
* 巡检任务 新增或修改请求参数 2022/7/27 | |||
* @author : qiujinyang | |||
*/ | |||
@Data | |||
public class MissionVO { | |||
private static final long serialVersionUID = 1L; | |||
@ApiModelProperty(value = "任务id") | |||
private Integer id; | |||
@ApiModelProperty(value = "任务名称") | |||
private String name; | |||
@ApiModelProperty(value = "巡检方式 1 机场服务,2 人工巡检") | |||
private Integer inspectionType; | |||
@ApiModelProperty(value = "巡检机场") | |||
private String airportId; | |||
@ApiModelProperty(value = "巡检机场名称") | |||
private String airportName; | |||
@ApiModelProperty(value = "巡检线路") | |||
private String inspectionLine; | |||
@ApiModelProperty(value = "巡检线路名称") | |||
private String inspectionLineName; | |||
@ApiModelProperty(value = "任务类型 1 日常,2 应急巡检") | |||
private Integer type; | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
@ApiModelProperty(value = "巡检时间") | |||
private Date executionStartTime; | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
@ApiModelProperty(value = "巡检结束时间") | |||
private Date executionEndTime; | |||
//直播的两个通道 | |||
@ApiModelProperty(value = "视频拉流地址") | |||
private String pullUrl; | |||
@ApiModelProperty(value = "AI拉流地址") | |||
private String aipullUrl; | |||
//回放的两个通道 | |||
@ApiModelProperty(value = "视频地址") | |||
private String videoUrl; | |||
@ApiModelProperty(value = "AI识别后视频地址") | |||
private String aiVideoUrl; | |||
@ApiModelProperty(value = "任务飞行状态:1任务待飞行 2任务飞行中 3任务执行失败 4任务飞行完成") | |||
private Integer status; | |||
@ApiModelProperty(value = "备注") | |||
private String note; | |||
@ApiModelProperty(value = "租户id",hidden = true) | |||
private Integer tenantId; | |||
} |
@@ -0,0 +1,29 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import lombok.Data; | |||
@Data | |||
public class QuestionCountVo { | |||
private Integer id; | |||
/** | |||
* 项目名称:1水面 2岸线 3水质 4排口 | |||
*/ | |||
private Integer name; | |||
/** | |||
* 项目类型:1日常监测 2重点核查 | |||
*/ | |||
private Integer type; | |||
/** | |||
* 巡检内容 | |||
*/ | |||
private String content; | |||
/** | |||
* 数量 | |||
*/ | |||
private Integer totalCount; | |||
} |
@@ -0,0 +1,69 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import lombok.Data; | |||
@Data | |||
public class QuestionDetailVo { | |||
/** | |||
* 经度 | |||
*/ | |||
private String longitude; | |||
/** | |||
* 纬度 | |||
*/ | |||
private String latitude; | |||
/** | |||
* 位置信息 | |||
*/ | |||
private String location; | |||
/** | |||
* 标记图 | |||
*/ | |||
private String fileImage; | |||
/** | |||
* 项目名称:1水面 2岸线 3水质 4排口 | |||
*/ | |||
private Integer name; | |||
/** | |||
* 项目类型:1日常监测 2重点核查 | |||
*/ | |||
private Integer type; | |||
/** | |||
* 巡检内容 | |||
*/ | |||
private String content; | |||
/** | |||
* 处理后图片(多个图片逗号“,”分隔) | |||
*/ | |||
private String handlerImage; | |||
/** | |||
* 处理结果 | |||
*/ | |||
private String handlerResult; | |||
/** | |||
* 处理完成时间 | |||
*/ | |||
private String handlerTime; | |||
/** | |||
* 处理人名称 | |||
*/ | |||
private String userName; | |||
/** | |||
* 处理状态:0待处理 1已处理 | |||
*/ | |||
private Integer status; | |||
} |
@@ -0,0 +1,53 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import lombok.Data; | |||
@Data | |||
public class QuestionFileVo { | |||
/** | |||
* th_inspection_file表ID | |||
*/ | |||
private Integer id; | |||
/** | |||
* 图片编码 | |||
*/ | |||
private String fileCode; | |||
/** | |||
* 标记图地址 | |||
*/ | |||
private String fileImage; | |||
/** | |||
* 缩略图地址 | |||
*/ | |||
private String fileThumbnail; | |||
/** | |||
* 纬度 | |||
*/ | |||
private String latitude; | |||
/** | |||
* 经度 | |||
*/ | |||
private String longitude; | |||
/** | |||
* 项目名称:1水面 2岸线 3水质 4排口 | |||
*/ | |||
private Integer name; | |||
/** | |||
* 问题描述 | |||
*/ | |||
private String content; | |||
/** | |||
* 处理状态:0待处理 1已处理 | |||
*/ | |||
private Integer status; | |||
} |
@@ -0,0 +1,65 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import lombok.Data; | |||
import java.util.List; | |||
@Data | |||
public class QuestionInventoryVo { | |||
/** | |||
* th_inspection_question表ID | |||
*/ | |||
private Integer id; | |||
/** | |||
* 巡检ID | |||
*/ | |||
private Integer inspectionId; | |||
/** | |||
* 清单编码(工单编码) | |||
*/ | |||
private String code; | |||
/** | |||
* 巡检河道 | |||
*/ | |||
private String streamName; | |||
/** | |||
* 任务名称 | |||
*/ | |||
private String inspectionName; | |||
/** | |||
* 巡检编码 | |||
*/ | |||
private String inspectionCode; | |||
/** | |||
* 巡检时间 | |||
*/ | |||
private String inspectionTime; | |||
/** | |||
* 发现问题数量 | |||
*/ | |||
private Integer totalCount; | |||
/** | |||
* 未处理问题数量 | |||
*/ | |||
private Integer todoCount; | |||
/** | |||
* 处理状态:1问题待指派 2问题待处理 3问题处理中 4问题已处理 | |||
*/ | |||
private Integer status; | |||
/** | |||
* 问题类型统计 | |||
*/ | |||
private List<QuestionTypeCountVo> typeCount; | |||
} |
@@ -0,0 +1,17 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import lombok.Data; | |||
@Data | |||
public class QuestionTypeCountVo { | |||
/** | |||
* 项目名称:1水面 2岸线 3水质 4排口 | |||
*/ | |||
private Integer name; | |||
/** | |||
* 数量 | |||
*/ | |||
private Integer totalCount; | |||
} |
@@ -0,0 +1,63 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import lombok.Data; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import java.io.Serializable; | |||
import java.util.Date; | |||
/** | |||
* 巡检问题工单 映射实体 | |||
* | |||
* @author zhuzishuang | |||
* @date 2021/9/27 | |||
*/ | |||
@Data | |||
public class ThInspectionFileVo implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
/** | |||
* 巡检ID | |||
*/ | |||
private Integer inspectionId; | |||
/** | |||
* 巡检编码 | |||
*/ | |||
private String inspectionCode; | |||
/** | |||
* 巡检名称 | |||
*/ | |||
private String inspectionName; | |||
/** | |||
* 河流名称 | |||
*/ | |||
private String streamName; | |||
/** | |||
* 计划巡检日期 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd") | |||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") | |||
private Date inspectionTime; | |||
/** | |||
* 执行开始时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
private Date executionStartTime; | |||
/** | |||
* 图片数量 | |||
*/ | |||
private Integer number; | |||
/** | |||
* 任务状态: 15 任务飞行完成(图片待审核);25 图片已审核(问题待分派) | |||
*/ | |||
private Integer status; | |||
} |
@@ -0,0 +1,121 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import lombok.Data; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import java.io.Serializable; | |||
import java.util.Date; | |||
/** | |||
* 巡检问题图片 响应实体 | |||
* | |||
* @author zhuzishuang | |||
* @date 2021/9/27 | |||
*/ | |||
@Data | |||
public class ThInspectionQuestionPictureVo implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
/** | |||
* 问题ID | |||
*/ | |||
private Integer id; | |||
/** | |||
* 图片编码 | |||
*/ | |||
private String fileCode; | |||
/** | |||
* 巡检任务ID | |||
*/ | |||
private Integer inspectionId; | |||
/** | |||
* 问题 二级分类ID | |||
*/ | |||
private Integer questionId; | |||
/** | |||
* 问题类型:1水面 2岸线 3水质 4排口 | |||
*/ | |||
private Integer questionName; | |||
/** | |||
* 巡检内容(问题二级分类名称) | |||
*/ | |||
private String content; | |||
/** | |||
* 图片缩略图 | |||
*/ | |||
private String fileThumbnail; | |||
/** | |||
* 原图 | |||
*/ | |||
private String fileOriginal; | |||
/** | |||
* 标记图 | |||
*/ | |||
private String fileImage; | |||
/** | |||
* 位置信息 | |||
*/ | |||
private String location; | |||
/** | |||
* 纬度(原始图片纬度) | |||
*/ | |||
private String latitude; | |||
/** | |||
* 纬度(原始图片纬度) | |||
*/ | |||
private String longitude; | |||
/** | |||
* 高德地图经度 | |||
*/ | |||
private String gaodeLongitude; | |||
/** | |||
* 高德地图纬度 | |||
*/ | |||
private String gaodeLatitude; | |||
/** | |||
* 图片来源:1AI 2后台 3视频 | |||
*/ | |||
private Integer source; | |||
/** | |||
* 图片审核状态:0待审核 1已审核 | |||
*/ | |||
private Integer status; | |||
/** | |||
* 审核人ID | |||
*/ | |||
private Integer checkUser; | |||
/** | |||
* 审核人 | |||
*/ | |||
private String checkUserName; | |||
/** | |||
* 详细描述 | |||
*/ | |||
private String questionDesc; | |||
/** | |||
* 审核时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
private Date checkTime; | |||
} |
@@ -0,0 +1,76 @@ | |||
package com.tuoheng.admin.entity.vo; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import lombok.Data; | |||
import lombok.EqualsAndHashCode; | |||
import org.springframework.format.annotation.DateTimeFormat; | |||
import java.io.Serializable; | |||
import java.util.Date; | |||
/** | |||
* 巡检问题工单 映射实体 | |||
* 巡检问题 响应实体 | |||
* | |||
* @author zhuzishuang | |||
* @date 2021/9/27 | |||
*/ | |||
@Data | |||
@EqualsAndHashCode | |||
public class ThInspectionQuestionVo implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
/** | |||
* 巡检ID | |||
*/ | |||
private Integer inspectionId; | |||
/** | |||
* 巡检编码 | |||
*/ | |||
private String inspectionCode; | |||
/** | |||
* 巡检名称 | |||
*/ | |||
private String inspectionName; | |||
/** | |||
* 河流名称 | |||
*/ | |||
private String streamName; | |||
/** | |||
* 计划巡检日期 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd") | |||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") | |||
private Date inspectionTime; | |||
/** | |||
* 执行开始时间 | |||
*/ | |||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
private Date executionStartTime; | |||
/** | |||
* 已审核图片数量 | |||
*/ | |||
private Integer reviewedPictureNum; | |||
/** | |||
* 未审核图片数量 | |||
*/ | |||
private Integer unreviewedPictureNum; | |||
/** | |||
* 图片总数量 | |||
*/ | |||
private Integer totalPictureNum; | |||
/** | |||
* 任务状态: 15 任务飞行完成(图片待审核);25 图片已审核(问题待分派) | |||
*/ | |||
private Integer status; | |||
} |
@@ -0,0 +1,23 @@ | |||
package com.tuoheng.admin.enums; | |||
import lombok.Getter; | |||
/** | |||
* 任务状态枚举 | |||
*/ | |||
public enum AirPortTaskStatusEnum { | |||
//任务状态1待执行 2执行中 | |||
WAIT(1,"待执行"), | |||
FLIGHT(2,"执行中"); | |||
AirPortTaskStatusEnum(int code, String description){ | |||
this.code = code; | |||
this.description = description; | |||
} | |||
@Getter | |||
private int code; | |||
@Getter | |||
private String description; | |||
} |
@@ -0,0 +1,24 @@ | |||
package com.tuoheng.admin.enums; | |||
import lombok.Getter; | |||
/** | |||
* 逻辑删除标记类型 | |||
* @author chenyukun | |||
*/ | |||
public enum MarkTypeEnum { | |||
VALID(1,"有效"), | |||
NOTVALID(0,"失效"); | |||
MarkTypeEnum(int code, String description){ | |||
this.code = code; | |||
this.description = description; | |||
} | |||
@Getter | |||
private int code; | |||
@Getter | |||
private String description; | |||
} |
@@ -0,0 +1,24 @@ | |||
package com.tuoheng.admin.enums; | |||
import lombok.Getter; | |||
/** | |||
* 问题处理状态 | |||
*/ | |||
public enum QuestionEnum { | |||
REVIEWED(1,"已审核"), | |||
NOTREVIEWED(0,"待审核"); | |||
QuestionEnum(int code, String description){ | |||
this.code = code; | |||
this.description = description; | |||
} | |||
@Getter | |||
private int code; | |||
@Getter | |||
private String description; | |||
} |
@@ -0,0 +1,25 @@ | |||
package com.tuoheng.admin.enums; | |||
import lombok.Getter; | |||
/** | |||
* 任务状态枚举 | |||
*/ | |||
public enum TaskStatusEnum { | |||
//1任务待飞行 2任务飞行中 3任务执行失败 4任务飞行完成 | |||
WAIT(1,"任务待飞行"), | |||
FLIGHT(2,"任务飞行中"), | |||
FAIL(3,"任务执行失败"), | |||
COMPLETE(4,"任务飞行完成"); | |||
TaskStatusEnum(int code, String description){ | |||
this.code = code; | |||
this.description = description; | |||
} | |||
@Getter | |||
private int code; | |||
@Getter | |||
private String description; | |||
} |
@@ -0,0 +1,24 @@ | |||
package com.tuoheng.admin.mapper; | |||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
import com.tuoheng.admin.entity.domain.Question; | |||
import com.tuoheng.admin.entity.vo.QuestionCountVo; | |||
import java.util.List; | |||
/** | |||
* 巡检问题表 Mapper 接口 | |||
* | |||
* @author WangHaoran | |||
* @since 2021-09-02 | |||
*/ | |||
public interface QuestionMapper extends BaseMapper<Question> { | |||
/** | |||
* 查询巡检结果 | |||
* @param inspectionId 巡检ID | |||
* @param tenantId 租户id | |||
* @return | |||
*/ | |||
List<QuestionCountVo> queryCountByInspectionId(Integer inspectionId, Integer tenantId); | |||
} |
@@ -0,0 +1,16 @@ | |||
package com.tuoheng.admin.mapper; | |||
import com.tuoheng.admin.entity.domain.Tenant; | |||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
/** | |||
* <p> | |||
* 企业管理表 Mapper 接口 | |||
* </p> | |||
* | |||
* @author 拓恒 | |||
* @since 2022-07-15 | |||
*/ | |||
public interface TenantMapper extends BaseMapper<Tenant> { | |||
} |
@@ -0,0 +1,130 @@ | |||
package com.tuoheng.admin.mapper; | |||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
import com.tuoheng.admin.entity.domain.InspectionFile; | |||
import com.tuoheng.admin.entity.domain.ThInspectionFile; | |||
import com.tuoheng.admin.entity.domain.ThMission; | |||
import com.tuoheng.admin.entity.request.QueryQuestionPictureRequest; | |||
import com.tuoheng.admin.entity.request.QueryQuestionRequest; | |||
import com.tuoheng.admin.entity.request.QuestionInventoryRequest; | |||
import com.tuoheng.admin.entity.vo.QuestionInventoryVo; | |||
import com.tuoheng.admin.entity.vo.QuestionTypeCountVo; | |||
import com.tuoheng.admin.entity.vo.ThInspectionQuestionPictureVo; | |||
import com.tuoheng.admin.entity.vo.ThInspectionQuestionVo; | |||
import org.apache.ibatis.annotations.Param; | |||
import java.util.List; | |||
public interface ThInspectionFileMapper extends BaseMapper<ThInspectionFile> { | |||
/** | |||
* 查询 巡检任务问题 列表 | |||
* | |||
* @param queryQuestionRequest 查询请求参数 | |||
* @return 任务问题列表 | |||
*/ | |||
IPage<ThInspectionQuestionVo> selectQuestionList(@Param("page") IPage page, @Param("request") QueryQuestionRequest queryQuestionRequest,@Param("tenantId") Integer tenantId); | |||
/** | |||
* 查询 巡检任务问题图片 列表 | |||
* | |||
* @param request 查询请求参数 | |||
* @return 问题图片列表 | |||
*/ | |||
List<ThInspectionQuestionPictureVo> selectPictureList(@Param("page") Page<ThInspectionQuestionPictureVo> page, @Param("request") QueryQuestionPictureRequest request,@Param("tenantId") Integer tenantId); | |||
/** | |||
* 查询 巡检任务问题图片数量 | |||
* | |||
* @param parm parm | |||
* @return | |||
*/ | |||
Integer selectCount(@Param("parm") ThInspectionFile parm); | |||
/** | |||
* 查询 巡检任务问题图片 详情 | |||
* | |||
* @param id 问题图片ID | |||
* @return 问题图片详情 | |||
*/ | |||
ThInspectionQuestionPictureVo selectPicture(Integer id,@Param("tenantId") Integer tenantId); | |||
/** | |||
* 查询问题清单 | |||
* | |||
* @param param 查询问题清单请求参数 | |||
* @return 问题清单 | |||
*/ | |||
IPage<QuestionInventoryVo> queryQuestionInventory(@Param("page") IPage page, QuestionInventoryRequest param,@Param("tenantId") Integer tenantId); | |||
/** | |||
* 根据工单ID 查询 问题类型数量统计 | |||
* | |||
* @param id 工单ID | |||
* @return 问题清单 | |||
*/ | |||
List<QuestionTypeCountVo> selectQuestionTypeCount(@Param("id") Integer id,@Param("tenantId") Integer tenantId); | |||
/** | |||
* 新增 巡检任务问题图片 | |||
* | |||
* @param record 问题图片实体 | |||
* @return 受影响的条数 | |||
*/ | |||
int insert(ThInspectionFile record); | |||
/** | |||
* 批量新增 巡检任务问题图片 | |||
* | |||
* @param records 问题图片实体 | |||
* @return 受影响的条数 | |||
*/ | |||
int batchadd(@Param("list") List<InspectionFile> records); | |||
/** | |||
* 审核/修改 巡检任务问题图片 | |||
* | |||
* @param record 问题图片实体 | |||
* @return 受影响的条数 | |||
*/ | |||
int updateByPrimaryKey(ThInspectionFile record); | |||
int updateByPrimaryKeySelective(ThInspectionFile record); | |||
/** | |||
* 查询 未审核问题图片数量 | |||
* | |||
* @param inspectionId 巡检ID | |||
* @return 未审核问题图片数量 | |||
*/ | |||
Integer getUnReviewCount(Integer inspectionId,@Param("tenantId") Integer tenantId); | |||
/** | |||
* 查询 已审核问题图片列表 | |||
* | |||
* @param inspectionId 巡检ID | |||
* @param tenantId 租户id | |||
* @return 已审核问题图片列表 | |||
*/ | |||
List<ThInspectionFile> selectReviewPictureList(Integer inspectionId,@Param("tenantId") Integer tenantId); | |||
/** | |||
* 查询 问题图片列表 | |||
* | |||
* @param inspectionId 巡检ID | |||
* @return | |||
*/ | |||
List<ThInspectionFile> selectByInspectionId(@Param("inspectionId") Integer inspectionId, @Param("fileName") String fileName,@Param("tenantId") Integer tenantId); | |||
/** | |||
* 删除任务相关的ai分析图 | |||
* | |||
* @param inspectionId 巡检任务id | |||
* @param tenantId 租户id | |||
* @return | |||
*/ | |||
Integer deleteByInspectionId(Integer inspectionId,@Param("tenantId") Integer tenantId); | |||
} |
@@ -0,0 +1,9 @@ | |||
package com.tuoheng.admin.mapper; | |||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
import com.tuoheng.admin.entity.domain.ThInspection; | |||
import java.util.List; | |||
public interface ThInspectionMapper extends BaseMapper<ThInspection> { | |||
} |
@@ -0,0 +1,14 @@ | |||
package com.tuoheng.admin.mapper; | |||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
import com.tuoheng.admin.entity.domain.InspectionQuestionItem; | |||
/** | |||
* 工单子项表 | |||
* | |||
* @author zhuzishuang | |||
* @date 2021/10/13 | |||
*/ | |||
public interface ThInspectionQuestionItemMapper extends BaseMapper<InspectionQuestionItem> { | |||
} |
@@ -0,0 +1,26 @@ | |||
package com.tuoheng.admin.mapper; | |||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
import com.tuoheng.admin.entity.domain.ThInspectionQuestion; | |||
/** | |||
* 巡检任务问题工单 mapper | |||
* | |||
* @author zhuzishuang | |||
* @date 2021/9/28 | |||
*/ | |||
public interface ThInspectionQuestionMapper extends BaseMapper<ThInspectionQuestion> { | |||
int insertSelective(ThInspectionQuestion record); | |||
int deleteByPrimaryKey(Integer id); | |||
int insert(ThInspectionQuestion record); | |||
ThInspectionQuestion selectByPrimaryKey(Integer id); | |||
int updateByPrimaryKeySelective(ThInspectionQuestion record); | |||
int updateByPrimaryKey(ThInspectionQuestion record); | |||
} |
@@ -0,0 +1,18 @@ | |||
package com.tuoheng.admin.mapper; | |||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
import com.tuoheng.admin.entity.domain.ThMission; | |||
import com.tuoheng.admin.entity.request.MissionQuery; | |||
import com.tuoheng.admin.entity.vo.AIInspectionVo; | |||
import org.apache.ibatis.annotations.Param; | |||
import java.util.List; | |||
public interface ThMissionMapper extends BaseMapper<ThMission> { | |||
/** | |||
* 批量删除巡检任务 | |||
* | |||
*/ | |||
int deleteBatch(@Param("idList") List<Integer> idList, @Param("updateUser") Integer updateUser, @Param("tenantId") Integer tenantId); | |||
} |
@@ -0,0 +1,121 @@ | |||
package com.tuoheng.admin.oss; | |||
import com.aliyun.oss.event.ProgressEvent; | |||
import com.aliyun.oss.event.ProgressEventType; | |||
import com.aliyun.vod.upload.impl.VoDProgressListener; | |||
/** | |||
* 上传进度回调方法类 | |||
* 当您开启上传进度回调时该事件回调才会生效。 | |||
* OSS分片上传成功或失败均触发相应的回调事件,您可根据业务逻辑处理相应的事件回调。 | |||
* 当创建音视频信息成功后,此上传进度回调中的videoId为本次上传生成的视频ID,您可以根据视频ID进行音视频管理。 | |||
* 当创建图片信息成功后,此上传进度回调中的ImageId为本次上传生成的图片ID,您可以根据视频ID进行图片管理。 | |||
*/ | |||
public class PutObjectProgressListener implements VoDProgressListener { | |||
/** | |||
* 已成功上传至OSS的字节数 | |||
*/ | |||
private long bytesWritten = 0; | |||
/** | |||
* 原始文件的总字节数 | |||
*/ | |||
private long totalBytes = -1; | |||
/** | |||
* 本次上传成功标记 | |||
*/ | |||
private boolean succeed = false; | |||
/** | |||
* 视频ID | |||
*/ | |||
private String videoId; | |||
/** | |||
* 图片ID | |||
*/ | |||
private String imageId; | |||
public void progressChanged(ProgressEvent progressEvent) { | |||
long bytes = progressEvent.getBytes(); | |||
ProgressEventType eventType = progressEvent.getEventType(); | |||
switch (eventType) { | |||
// 开始上传事件 | |||
case TRANSFER_STARTED_EVENT: | |||
if (videoId != null) { | |||
System.out.println("qqqqStart to upload videoId " + videoId + "......"); | |||
} | |||
if (imageId != null) { | |||
System.out.println("aaaStart to upload imageId " + imageId + "......"); | |||
} | |||
break; | |||
// 计算待上传文件总大小事件通知,只有调用本地文件方式上传时支持该事件 | |||
case REQUEST_CONTENT_LENGTH_EVENT: | |||
this.totalBytes = bytes; | |||
System.out.println(this.totalBytes + "bytes in total will be uploaded to OSS."); | |||
break; | |||
// 已经上传成功文件大小事件通知 | |||
case REQUEST_BYTE_TRANSFER_EVENT: | |||
this.bytesWritten += bytes; | |||
if (this.totalBytes != -1) { | |||
int percent = (int) (this.bytesWritten * 100.0 / this.totalBytes); | |||
System.out.println(bytes + " bytes have been written at this time, upload progress: " + | |||
percent + "%(" + this.bytesWritten + "/" + this.totalBytes + ")"); | |||
} else { | |||
//进度条 | |||
System.out.println(bytes + " bytes have been written at this time, upload sub total : " + | |||
"(" + this.bytesWritten + ")"); | |||
} | |||
break; | |||
// 文件全部上传成功事件通知 | |||
case TRANSFER_COMPLETED_EVENT: | |||
this.succeed = true; | |||
if (videoId != null) { | |||
System.out.println("Succeed to upload videoId " + videoId + " , " + this.bytesWritten + " bytes have been transferred in total."); | |||
} | |||
if (imageId != null) { | |||
System.out.println("Succeed to upload imageId " + imageId + " , " + this.bytesWritten + " bytes have been transferred in total."); | |||
} | |||
break; | |||
// 文件上传失败事件通知 | |||
case TRANSFER_FAILED_EVENT: | |||
if (videoId != null) { | |||
System.out.println("Failed to upload videoId " + videoId + " , " + this.bytesWritten + " bytes have been transferred."); | |||
} | |||
if (imageId != null) { | |||
System.out.println("Failed to upload imageId " + imageId + " , " + this.bytesWritten + " bytes have been transferred."); | |||
} | |||
break; | |||
default: | |||
break; | |||
} | |||
} | |||
public boolean isSucceed() { | |||
return succeed; | |||
} | |||
public void onVidReady(String videoId) { | |||
setVideoId(videoId); | |||
} | |||
public void onImageIdReady(String imageId) { | |||
setImageId(imageId); | |||
} | |||
public String getVideoId() { | |||
return videoId; | |||
} | |||
public void setVideoId(String videoId) { | |||
this.videoId = videoId; | |||
} | |||
public String getImageId() { | |||
return imageId; | |||
} | |||
public void setImageId(String imageId) { | |||
this.imageId = imageId; | |||
} | |||
} | |||
@@ -0,0 +1,21 @@ | |||
package com.tuoheng.admin.oss; | |||
import com.aliyun.vod.upload.dto.STSTokenDTO; | |||
import com.aliyun.vod.upload.impl.VoDRefreshSTSTokenListener; | |||
/** | |||
* @author vod | |||
* 生成STS信息实现类 | |||
* @date 2019/6/5 | |||
*/ | |||
public class RefreshSTSTokenImpl implements VoDRefreshSTSTokenListener { | |||
public STSTokenDTO onRefreshSTSToken() { | |||
STSTokenDTO stsTokenDTO = new STSTokenDTO(); | |||
stsTokenDTO.setAccessKeyId("<your sts AccessKeyId>"); | |||
stsTokenDTO.setAccessKeySecret("<your sts AccessKeySecret>"); | |||
stsTokenDTO.setSecurityToken("<your sts SecurityToken>"); | |||
return stsTokenDTO; | |||
} | |||
} |
@@ -0,0 +1,13 @@ | |||
package com.tuoheng.admin.service; | |||
import com.tuoheng.admin.entity.domain.InspectionQuestionItem; | |||
import com.tuoheng.common.common.IBaseService; | |||
/** | |||
* 巡检问题工单子表 服务类 | |||
* | |||
* @author WangHaoran | |||
* @since 2021-09-30 | |||
*/ | |||
public interface IInspectionQuestionItemService extends IBaseService<InspectionQuestionItem> { | |||
} |
@@ -0,0 +1,55 @@ | |||
package com.tuoheng.admin.service; | |||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||
import com.tuoheng.admin.entity.domain.ThMission; | |||
import com.tuoheng.admin.entity.request.MissionQuery; | |||
import com.tuoheng.admin.entity.request.MissionRequest; | |||
import com.tuoheng.admin.entity.request.MissionStatusRequest; | |||
import com.tuoheng.admin.entity.vo.MissionVO; | |||
import com.tuoheng.common.common.IBaseService; | |||
import com.tuoheng.common.common.OperationEnum; | |||
import java.util.List; | |||
/** | |||
* @author qiujinyang | |||
* @date 2022/7/26 4:08 下午 | |||
*/ | |||
public interface IMissionService extends IBaseService<ThMission> { | |||
/** | |||
* 更新巡检任务 | |||
* | |||
* @author: zhu_zishuang | |||
* @date: 2021/9/1 | |||
*/ | |||
boolean updateStatus(MissionStatusRequest missionStatusRequest); | |||
/** | |||
* 查询巡检任务列表 | |||
*/ | |||
IPage<MissionVO> findList(MissionQuery queryInspectionRequest); | |||
/** | |||
* 查询巡检任务 | |||
*/ | |||
MissionVO findById(Integer id); | |||
/** | |||
* 新增巡检任务 | |||
* | |||
* @author: zhu_zishuang | |||
* @date: 2021/9/1 | |||
*/ | |||
Integer addMission(MissionRequest request); | |||
/** | |||
* 删除巡检任务 | |||
* | |||
* @author: zhu_zishuang | |||
* @date: 2021/9/2 | |||
*/ | |||
OperationEnum deleteBatch(List<Integer> idList); | |||
} |
@@ -0,0 +1,23 @@ | |||
package com.tuoheng.admin.service; | |||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||
import com.tuoheng.admin.entity.domain.Question; | |||
import com.tuoheng.admin.entity.request.QuestionQuery; | |||
import com.tuoheng.common.common.IBaseService; | |||
/** | |||
* 巡检问题表 服务类 | |||
* | |||
* @author WangHaoran | |||
* @since 2021-09-02 | |||
*/ | |||
public interface IQuestionService extends IBaseService<Question> { | |||
/** | |||
* 分页查询 | |||
* | |||
* @param query | |||
* @return | |||
*/ | |||
IPage<Question> queryPage(QuestionQuery query); | |||
} |
@@ -0,0 +1,45 @@ | |||
package com.tuoheng.admin.service; | |||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||
import com.tuoheng.admin.entity.domain.Tenant; | |||
import com.baomidou.mybatisplus.extension.service.IService; | |||
import com.tuoheng.admin.entity.dto.TenantDto; | |||
import com.tuoheng.admin.entity.request.TenantQuery; | |||
import com.tuoheng.common.common.IBaseService; | |||
/** | |||
* <p> | |||
* 企业管理表 服务类 | |||
* </p> | |||
* | |||
* @author 拓恒 | |||
* @since 2022-07-15 | |||
*/ | |||
public interface ITenantService extends IBaseService<Tenant> { | |||
/** | |||
* 获取租户分页列表 | |||
* | |||
* @param tenantQuery 查询条件 | |||
* @return | |||
*/ | |||
IPage<Tenant> getTenantList(TenantQuery tenantQuery); | |||
/** | |||
* 添加租户 | |||
* | |||
* @param tenantDto 实体对象 | |||
* @return | |||
*/ | |||
boolean addTenant(TenantDto tenantDto); | |||
/** | |||
* 更新租户 | |||
* | |||
* @param tenantDto 实体对象 | |||
* @return | |||
*/ | |||
boolean editTenant(TenantDto tenantDto); | |||
} |
@@ -0,0 +1,31 @@ | |||
package com.tuoheng.admin.service; | |||
import com.tuoheng.admin.entity.domain.ThInspection; | |||
import com.tuoheng.admin.entity.domain.ThMission; | |||
import com.tuoheng.admin.entity.request.InspectionRequest; | |||
import com.tuoheng.admin.entity.vo.*; | |||
import com.tuoheng.common.common.IBaseService; | |||
import com.tuoheng.common.utils.JsonResult; | |||
import java.util.List; | |||
/** | |||
* @User qiujinyang | |||
* @Description | |||
* @Date Created by 2022/7/28 9:37 | |||
*/ | |||
public interface IThInspectionService extends IBaseService<ThInspection> { | |||
List<InspectionVO> track(Integer id); | |||
Integer track(InspectionRequest inspectionRequest); | |||
List<AirPortVO> airport(); | |||
List<AirLineVO> airLine(Integer droneId); | |||
JsonResult executeTask(Integer taskId); | |||
AirWeatherVO getWeather(Integer airportId); | |||
} |
@@ -0,0 +1,19 @@ | |||
package com.tuoheng.admin.service.impl; | |||
import com.tuoheng.admin.entity.domain.InspectionQuestionItem; | |||
import com.tuoheng.admin.mapper.ThInspectionQuestionItemMapper; | |||
import com.tuoheng.admin.service.IInspectionQuestionItemService; | |||
import com.tuoheng.common.common.BaseServiceImpl; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.springframework.stereotype.Service; | |||
/** | |||
* 巡检问题工单子表 服务实现类 | |||
* | |||
* @author WangHaoran | |||
* @since 2021-09-30 | |||
*/ | |||
@Service | |||
@Slf4j | |||
public class InspectionQuestionItemServiceImpl extends BaseServiceImpl<ThInspectionQuestionItemMapper, InspectionQuestionItem> implements IInspectionQuestionItemService { | |||
} |
@@ -0,0 +1,189 @@ | |||
package com.tuoheng.admin.service.impl; | |||
import cn.hutool.core.collection.CollectionUtil; | |||
import cn.hutool.core.util.ObjectUtil; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
import com.tuoheng.admin.common.ServiceExceptionEnum; | |||
import com.tuoheng.admin.entity.domain.*; | |||
import com.tuoheng.admin.entity.request.MissionRequest; | |||
import com.tuoheng.admin.entity.request.MissionQuery; | |||
import com.tuoheng.admin.entity.request.MissionStatusRequest; | |||
import com.tuoheng.admin.entity.vo.MissionVO; | |||
import com.tuoheng.admin.enums.*; | |||
import com.tuoheng.admin.mapper.*; | |||
import com.tuoheng.admin.service.IMissionService; | |||
import com.tuoheng.admin.utils.CodeUtil; | |||
import com.tuoheng.common.common.BaseServiceImpl; | |||
import com.tuoheng.common.common.OperationEnum; | |||
import com.tuoheng.common.config.CommonConfig; | |||
import com.tuoheng.common.exception.ServiceException; | |||
import com.tuoheng.common.utils.*; | |||
import com.tuoheng.system.entity.User; | |||
import com.tuoheng.system.utils.ShiroUtils; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.springframework.beans.BeanUtils; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import org.springframework.transaction.annotation.Transactional; | |||
import javax.annotation.Resource; | |||
import java.util.*; | |||
/** | |||
* 巡检任务接口实现 | |||
* | |||
* @author: zhu_zishuang | |||
* @date: 2021/9/1 | |||
*/ | |||
@Service | |||
@Slf4j | |||
public class MissionServiceImpl extends BaseServiceImpl<ThMissionMapper, ThMission> implements IMissionService { | |||
@Resource | |||
private ThMissionMapper thMissionMapper; | |||
@Autowired | |||
private RedisUtils redisUtils; | |||
@Override | |||
public Integer addMission(MissionRequest addThMissionRequest) { | |||
ThMission tm=new ThMission(); | |||
BeanUtils.copyProperties(addThMissionRequest,tm); | |||
// 根据当前时间,生成任务编码 | |||
String code = "XJRW" +CodeUtil.createCodeNo(); | |||
tm.setCode(code); | |||
thMissionMapper.insert(tm); | |||
return tm.getId(); | |||
} | |||
@Override | |||
public boolean updateStatus(MissionStatusRequest missionStatusRequest) { | |||
//如果发送过来的状态是执行中,那么就说明之前是待执行,查询等待执行的数据,开始飞行 | |||
if(AirPortTaskStatusEnum.FLIGHT.getCode()==missionStatusRequest.getStatus()){ | |||
ThMission thMission = getRecentlyRecord(missionStatusRequest,TaskStatusEnum.WAIT.getCode()); | |||
ThMission thMissionUpdate = setStatus(missionStatusRequest, thMission); | |||
if(thMissionMapper.updateById(thMissionUpdate) > 0){ | |||
//任务调用完成之后,调用发送通道,请求DSP需要分析 | |||
} | |||
return true; | |||
}else if(AirPortTaskStatusEnum.WAIT.getCode()==missionStatusRequest.getStatus()){ | |||
ThMission thMission = getRecentlyRecord(missionStatusRequest,TaskStatusEnum.FLIGHT.getCode()); | |||
ThMission thMissionUpdate = setStatus(missionStatusRequest, thMission); | |||
if(thMissionMapper.updateById(thMissionUpdate) > 0){ | |||
//任务调用完成之后,调用发送通道,请求DSP关闭请求 | |||
} | |||
return true; | |||
}else{ | |||
throw new ServiceException(ServiceExceptionEnum.TASK_NOT_STATUS); | |||
} | |||
} | |||
private ThMission setStatus(MissionStatusRequest missionStatusRequest, ThMission thMission) { | |||
ThMission thMissionUpdate = new ThMission(); | |||
thMissionUpdate.setId(thMission.getId()); | |||
thMissionUpdate.setPushUrl(missionStatusRequest.getPushUrl()); | |||
thMissionUpdate.setPullUrl(missionStatusRequest.getPullUrl()); | |||
if(missionStatusRequest.getStatus()==AirPortTaskStatusEnum.FLIGHT.getCode()){ | |||
thMissionUpdate.setStatus(TaskStatusEnum.FLIGHT.getCode()); | |||
}else{ | |||
thMissionUpdate.setStatus(TaskStatusEnum.COMPLETE.getCode()); | |||
} | |||
return thMissionUpdate; | |||
} | |||
private ThMission getRecentlyRecord(MissionStatusRequest missionStatusRequest,Integer status) { | |||
//获取当前任务里面这个巡检的最近的那一条,修改对应的任务的状态 | |||
LambdaQueryWrapper<ThMission> lambdaQueryWrapper=new LambdaQueryWrapper<>(); | |||
lambdaQueryWrapper.orderByAsc(ThMission::getExecutionStartTime); | |||
lambdaQueryWrapper.eq(ThMission::getInspectionLine, missionStatusRequest.getId()); | |||
lambdaQueryWrapper.eq(ThMission::getStatus,status); | |||
//lambdaQueryWrapper.eq(ThMission::getTenantId,ShiroUtils.getTenantId()); | |||
ThMission thMission = thMissionMapper.selectOne(lambdaQueryWrapper); | |||
return thMission; | |||
} | |||
@Override | |||
public IPage<MissionVO> findList(MissionQuery queryInspectionRequest) { | |||
Page<ThMission> page = new Page<>(); | |||
page.setSize(queryInspectionRequest.getLimit()); | |||
page.setCurrent(queryInspectionRequest.getPage()); | |||
//queryInspectionRequest.setTenantId(ShiroUtils.getTenantId()); | |||
LambdaQueryWrapper<ThMission> queryInspection=new LambdaQueryWrapper<>(); | |||
queryParam(queryInspectionRequest, queryInspection); | |||
IPage<ThMission> thMissionIPage = thMissionMapper.selectPage(page, queryInspection); | |||
List<MissionVO> result=new ArrayList<>(); | |||
thMissionIPage.getRecords().forEach(mission->{ | |||
MissionVO missionVO=new MissionVO(); | |||
BeanUtils.copyProperties(mission,missionVO); | |||
result.add(missionVO); | |||
}); | |||
IPage<MissionVO> resultPage=new Page<>(); | |||
resultPage.setCurrent(thMissionIPage.getCurrent()); | |||
resultPage.setPages(thMissionIPage.getPages()); | |||
resultPage.setSize(thMissionIPage.getSize()); | |||
resultPage.setTotal(thMissionIPage.getTotal()); | |||
resultPage.setRecords(result); | |||
return resultPage; | |||
} | |||
private void queryParam(MissionQuery queryInspectionRequest, LambdaQueryWrapper<ThMission> queryInspection) { | |||
//编号 | |||
if(!StringUtils.isEmpty(queryInspectionRequest.getCode())){ | |||
queryInspection.like(ThMission::getCode, queryInspectionRequest.getCode()); | |||
} | |||
//任务名称 | |||
if(!StringUtils.isEmpty(queryInspectionRequest.getName())){ | |||
queryInspection.like(ThMission::getName, queryInspectionRequest.getName()); | |||
} | |||
//任务状态 | |||
if(!ObjectUtil.isEmpty(queryInspectionRequest.getStatus())){ | |||
queryInspection.eq(ThMission::getStatus, queryInspectionRequest.getStatus()); | |||
} | |||
//巡检机场 | |||
if(!StringUtils.isEmpty(queryInspectionRequest.getAirportId())){ | |||
queryInspection.eq(ThMission::getAirportId, queryInspectionRequest.getAirportId()); | |||
} | |||
//巡检线路 | |||
if(!StringUtils.isEmpty(queryInspectionRequest.getInspectionLine())){ | |||
queryInspection.eq(ThMission::getInspectionLine, queryInspectionRequest.getInspectionLine()); | |||
} | |||
//任务类型 | |||
if(!ObjectUtil.isEmpty(queryInspectionRequest.getInspectionType())){ | |||
queryInspection.eq(ThMission::getInspectionType, queryInspectionRequest.getInspectionType()); | |||
} | |||
} | |||
@Override | |||
public MissionVO findById(Integer id) { | |||
MissionVO missionVO=new MissionVO(); | |||
BeanUtils.copyProperties(thMissionMapper.selectById(id),missionVO); | |||
return missionVO; | |||
} | |||
@Override | |||
public OperationEnum deleteBatch(List<Integer> idList) { | |||
Integer updateUser = ShiroUtils.getUserId(); | |||
thMissionMapper.deleteBatch(idList, updateUser, ShiroUtils.getTenantId()); | |||
return OperationEnum.DELETE_SUCCESS; | |||
} | |||
} |
@@ -0,0 +1,45 @@ | |||
package com.tuoheng.admin.service.impl; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
import com.tuoheng.admin.common.ServiceExceptionEnum; | |||
import com.tuoheng.admin.entity.domain.Question; | |||
import com.tuoheng.admin.entity.request.QuestionQuery; | |||
import com.tuoheng.admin.mapper.QuestionMapper; | |||
import com.tuoheng.admin.service.IQuestionService; | |||
import com.tuoheng.common.common.BaseServiceImpl; | |||
import com.tuoheng.common.exception.ServiceException; | |||
import com.tuoheng.common.utils.StringUtils; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
/** | |||
* 巡检问题表 服务实现类 | |||
* | |||
* @author WangHaoran | |||
* @since 2021-09-02 | |||
*/ | |||
@Service | |||
public class QuestionServiceImpl extends BaseServiceImpl<QuestionMapper, Question> implements IQuestionService { | |||
@Autowired | |||
private QuestionMapper questionMapper; | |||
@Override | |||
public IPage<Question> queryPage(QuestionQuery query) { | |||
if(null == query.getPage() || null == query.getLimit()){ | |||
throw new ServiceException(ServiceExceptionEnum.PARAMETER_IS_NULL); | |||
} | |||
// 获取分页数据 | |||
IPage<Question> page = new Page<>(query.getPage(), query.getLimit()); | |||
IPage<Question> pageData = questionMapper.selectPage(page, new LambdaQueryWrapper<Question>() | |||
.like(StringUtils.isNotEmpty(query.getContent()), Question::getContent, query.getContent()) | |||
.eq(null != query.getName(), Question::getName, query.getName()) | |||
.eq(null != query.getType(), Question::getType, query.getType()) | |||
.eq(Question::getMark, 1) | |||
.orderByAsc(Question::getSort).orderByDesc(Question::getCreateTime)); | |||
return page; | |||
} | |||
} |
@@ -0,0 +1,167 @@ | |||
package com.tuoheng.admin.service.impl; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
import com.tuoheng.admin.entity.domain.Tenant; | |||
import com.tuoheng.admin.entity.dto.TenantDto; | |||
import com.tuoheng.admin.entity.request.TenantQuery; | |||
import com.tuoheng.admin.mapper.TenantMapper; | |||
import com.tuoheng.admin.service.ITenantService; | |||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
import com.tuoheng.common.common.BaseQuery; | |||
import com.tuoheng.common.common.BaseServiceImpl; | |||
import com.tuoheng.common.config.CommonConfig; | |||
import com.tuoheng.common.exception.ServiceException; | |||
import com.tuoheng.common.utils.CommonUtils; | |||
import com.tuoheng.common.utils.DateUtils; | |||
import com.tuoheng.common.utils.JsonResult; | |||
import com.tuoheng.common.utils.StringUtils; | |||
import com.tuoheng.system.entity.Level; | |||
import com.tuoheng.system.entity.User; | |||
import com.tuoheng.system.mapper.LevelMapper; | |||
import com.tuoheng.system.mapper.UserMapper; | |||
import com.tuoheng.system.query.LevelQuery; | |||
import com.tuoheng.system.utils.ShiroUtils; | |||
import org.springframework.beans.BeanUtils; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import java.util.List; | |||
/** | |||
* <p> | |||
* 企业管理表 服务实现类 | |||
* </p> | |||
* | |||
* @author 拓恒 | |||
* @since 2022-07-15 | |||
*/ | |||
@Service | |||
public class TenantServiceImpl extends BaseServiceImpl<TenantMapper, Tenant> implements ITenantService { | |||
@Autowired | |||
private TenantMapper tenantMapper; | |||
@Autowired | |||
private UserMapper userMapper; | |||
@Override | |||
public IPage<Tenant> getTenantList(TenantQuery tenantQuery) { | |||
// 查询条件 | |||
QueryWrapper<Tenant> queryWrapper = new QueryWrapper<>(); | |||
// 租户名称 | |||
if (!StringUtils.isEmpty(tenantQuery.getName())) { | |||
queryWrapper.like("name", tenantQuery.getName()); | |||
} | |||
queryWrapper.eq("mark", 1); | |||
queryWrapper.orderByAsc("sort"); | |||
// 查询分页数据 | |||
IPage<Tenant> page = new Page<>(tenantQuery.getPage(), tenantQuery.getLimit()); | |||
IPage<Tenant> pageData = tenantMapper.selectPage(page, queryWrapper); | |||
pageData.convert(x -> { | |||
// 租户Logo | |||
if (!StringUtils.isEmpty(x.getLogo())) { | |||
x.setLogo(CommonUtils.getImageURL(x.getLogo())); | |||
} | |||
return x; | |||
}); | |||
return pageData; | |||
} | |||
/** | |||
* 添加租户 | |||
* | |||
* @param tenantDto 实体对象 | |||
* @return | |||
*/ | |||
@Override | |||
public boolean addTenant(TenantDto tenantDto) { | |||
// 验证是否账号已存在 | |||
Integer count2 = userMapper.selectCount(new LambdaQueryWrapper<User>() | |||
.eq(User::getUsername, tenantDto.getUsername()) | |||
.eq(User::getMark, 1)); | |||
if (count2 > 0) { | |||
throw new ServiceException(0, "系统中已经存在相同的账号信息"); | |||
} | |||
// 参数转换 | |||
Tenant tenant = new Tenant(); | |||
BeanUtils.copyProperties(tenantDto, tenant); | |||
// 租户头像 | |||
if (StringUtils.isNotNull(tenantDto.getLogo()) && tenantDto.getLogo().contains(CommonConfig.imageURL)) { | |||
tenant.setLogo(tenantDto.getLogo().replaceAll(CommonConfig.imageURL, "")); | |||
} | |||
// 新建租户数据 | |||
int count = tenantMapper.insert(tenant); | |||
if (count == 0) { | |||
throw new ServiceException(0, "租户创建失败"); | |||
} | |||
// 创建租户账号 | |||
User user = new User(); | |||
user.setTenantId(tenant.getId()); | |||
user.setRealname(tenantDto.getName()); | |||
user.setNickname(tenantDto.getName()); | |||
user.setUsername(tenantDto.getUsername()); | |||
user.setPassword(CommonUtils.password(tenantDto.getPassword())); | |||
user.setType(1); | |||
user.setIsAdmin(1); | |||
user.setCreateTime(DateUtils.now()); | |||
int count3 = userMapper.insert(user); | |||
if (count3 == 0) { | |||
throw new ServiceException(0, "租户登录账号创建失败"); | |||
} | |||
return true; | |||
} | |||
/** | |||
* 更新 | |||
* | |||
* @param tenantDto 实体对象 | |||
* @return | |||
*/ | |||
@Override | |||
public boolean editTenant(TenantDto tenantDto) { | |||
// 查询租户信息 | |||
Tenant tenant = tenantMapper.selectById(tenantDto.getId()); | |||
if (StringUtils.isNull(tenant)) { | |||
throw new ServiceException(0, "租户信息不存在"); | |||
} | |||
BeanUtils.copyProperties(tenantDto, tenant); | |||
// 租户头像 | |||
if (StringUtils.isNotNull(tenantDto.getLogo()) && tenantDto.getLogo().contains(CommonConfig.imageURL)) { | |||
tenant.setLogo(tenantDto.getLogo().replaceAll(CommonConfig.imageURL, "")); | |||
} | |||
// 更新租户信息 | |||
int count = tenantMapper.updateById(tenant); | |||
if (count == 0) { | |||
throw new ServiceException(0, "更新租户信息失败"); | |||
} | |||
// 验证账号 | |||
Integer count2 = userMapper.selectCount(new LambdaQueryWrapper<User>() | |||
.ne(User::getTenantId, tenant.getId()) | |||
.eq(User::getUsername, tenantDto.getUsername()) | |||
.eq(User::getMark, 1)); | |||
if (count2 > 0) { | |||
throw new ServiceException(0, "系统中已经存在相同的账号信息"); | |||
} | |||
// 查询租户账号信息 | |||
User user = userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getTenantId, tenant.getId()).eq(User::getMark, 1)); | |||
if (StringUtils.isNull(user)) { | |||
throw new ServiceException(0, "租户账号信息不存在"); | |||
} | |||
user.setRealname(tenantDto.getName()); | |||
user.setNickname(tenantDto.getName()); | |||
user.setUsername(tenantDto.getUsername()); | |||
user.setPassword(CommonUtils.password(tenantDto.getPassword())); | |||
user.setUpdateTime(DateUtils.now()); | |||
int count3 = userMapper.updateById(user); | |||
if (count3 == 0) { | |||
throw new ServiceException(0, "租户账号信息更新失败"); | |||
} | |||
return true; | |||
} | |||
} |
@@ -0,0 +1,152 @@ | |||
package com.tuoheng.admin.service.impl; | |||
import cn.hutool.core.util.ObjectUtil; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
import com.tuoheng.admin.entity.domain.ThInspection; | |||
import com.tuoheng.admin.entity.request.InspectionRequest; | |||
import com.tuoheng.admin.entity.vo.*; | |||
import com.tuoheng.admin.mapper.ThInspectionMapper; | |||
import com.tuoheng.admin.service.IThInspectionService; | |||
import com.tuoheng.common.common.BaseServiceImpl; | |||
import com.tuoheng.common.config.CommonConfig; | |||
import com.tuoheng.common.exception.ServiceException; | |||
import com.tuoheng.common.utils.HttpUtils; | |||
import com.tuoheng.common.utils.JacksonUtil; | |||
import com.tuoheng.common.utils.JsonResult; | |||
import com.tuoheng.system.utils.ShiroUtils; | |||
import groovy.util.logging.Slf4j; | |||
import org.apache.poi.ss.formula.functions.T; | |||
import org.springframework.beans.BeanUtils; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.http.HttpStatus; | |||
import org.springframework.stereotype.Service; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
/** | |||
* @User qiujinyang | |||
* @Description | |||
* @Date Created by 2022/7/28 9:39 | |||
*/ | |||
@Service | |||
@Slf4j | |||
public class ThInspectionServiceImpl extends BaseServiceImpl<ThInspectionMapper, ThInspection> implements IThInspectionService { | |||
@Autowired | |||
private ThInspectionMapper inspectionMapper; | |||
@Override | |||
public List<InspectionVO> track(Integer id) { | |||
LambdaQueryWrapper<ThInspection> lambdaQueryWrapper=new LambdaQueryWrapper(); | |||
lambdaQueryWrapper.eq(ThInspection::getMissionId,id); | |||
//lambdaQueryWrapper.eq(ThInspection::getTenantId, ShiroUtils.getTenantId()); | |||
List<InspectionVO> result=new ArrayList<>(); | |||
List<ThInspection> thInspections = inspectionMapper.selectList(lambdaQueryWrapper); | |||
for (ThInspection thInspection : thInspections) { | |||
InspectionVO inspectionVO=new InspectionVO(); | |||
BeanUtils.copyProperties(thInspection,inspectionVO); | |||
result.add(inspectionVO); | |||
} | |||
return result; | |||
} | |||
@Override | |||
public Integer track(InspectionRequest inspectionRequest) { | |||
ThInspection inspection=new ThInspection(); | |||
BeanUtils.copyProperties(inspectionRequest,inspection); | |||
inspectionMapper.insert(inspection); | |||
return inspection.getId(); | |||
} | |||
@Override | |||
public List<AirPortVO> airport() { | |||
//这边需要配置到yml文件里面 | |||
String url = CommonConfig.airportUrl +"/api/airportInterface/airportList"; | |||
String param="page=1&limit=10"; | |||
JsonResult jsonResult=new JsonResult(); | |||
try { | |||
String airPortStr = HttpUtils.sendGet(url, param); | |||
jsonResult = JacksonUtil.json2pojo(airPortStr, JsonResult.class); | |||
if(!ObjectUtil.isEmpty(jsonResult.getData()) &&jsonResult.getCode() != 0) { | |||
throw new ServiceException(HttpStatus.BAD_REQUEST.value(), "获取机场信息失败,请重试"); | |||
} | |||
} catch (Exception e) { | |||
log.error("获取机场信息失败", e); | |||
} | |||
return JSONObject.parseArray(JSONObject.parseObject(JSONObject.toJSONString(jsonResult.getData())).get("records").toString(), AirPortVO.class); | |||
} | |||
@Override | |||
public List<AirLineVO> airLine(Integer droneId) { | |||
//这边需要配置到yml文件里面 | |||
String url = CommonConfig.airportUrl +"/api/airportInterface/airportList"; | |||
String param="page=1&limit=10&droneId="+droneId; | |||
JsonResult<AirLineVO> jsonResult=new JsonResult<>(); | |||
try { | |||
String airPortStr = HttpUtils.sendGet(url, param); | |||
jsonResult = JacksonUtil.json2pojo(airPortStr, JsonResult.class); | |||
if(!ObjectUtil.isEmpty(jsonResult.getData()) && jsonResult.getCode() != 0) { | |||
throw new ServiceException(HttpStatus.BAD_REQUEST.value(), "获取航线信息失败,请重试"); | |||
} | |||
} catch (Exception e) { | |||
log.error("更新通道状态失败", e); | |||
} | |||
return JSONObject.parseArray(JSONObject.parseObject(JSONObject.toJSONString(jsonResult.getData())).get("records").toString(), AirLineVO.class); | |||
} | |||
@Override | |||
public JsonResult executeTask(Integer taskId) { | |||
//这边需要配置到yml文件里面 | |||
String url = CommonConfig.airportUrl + "/api/airportInterface/executeTask"; | |||
String param="taskId="+taskId; | |||
JsonResult jsonResult; | |||
try { | |||
String airPortStr = HttpUtils.sendPost(url, param); | |||
jsonResult = JacksonUtil.json2pojo(airPortStr, JsonResult.class); | |||
if(!ObjectUtil.isEmpty(jsonResult.getData()) && jsonResult.getCode() != 0) { | |||
return JsonResult.error(JSONObject.parseArray(JSONObject.parseObject(JSONObject.toJSONString(jsonResult.getData())).get("data").toString(), AirExecuteTaskVO.class),"执行任务失败!"); | |||
}else{ | |||
return JsonResult.error(jsonResult.getMsg()); | |||
} | |||
} catch (Exception e) { | |||
log.error("执行任务失败", e); | |||
} | |||
return JsonResult.success(); | |||
} | |||
@Override | |||
public AirWeatherVO getWeather(Integer airportId) { | |||
//这边需要配置到yml文件里面 | |||
String url = CommonConfig.airportUrl + "/api/airportInterface/getWeather"; | |||
String param="airportId="+airportId; | |||
JsonResult jsonResult=new JsonResult(); | |||
try { | |||
String weatherStr = HttpUtils.sendGet(url, param); | |||
jsonResult = JacksonUtil.json2pojo(weatherStr, JsonResult.class); | |||
if(jsonResult.getCode() != 0) { | |||
throw new ServiceException(HttpStatus.BAD_REQUEST.value(), "获取天气信息失败,请重试"); | |||
} | |||
} catch (Exception e) { | |||
log.error("获取天气信息失败", e); | |||
} | |||
return JSONObject.parseObject(JSONObject.toJSONString(jsonResult.getData()),AirWeatherVO.class); | |||
} | |||
} |
@@ -0,0 +1,33 @@ | |||
package com.tuoheng.admin.task; | |||
import com.tuoheng.admin.service.IMissionService; | |||
import com.tuoheng.admin.service.impl.MissionServiceImpl; | |||
import com.xxl.job.core.handler.annotation.XxlJob; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Component; | |||
/** | |||
* 定时扫描,然后飞行 | |||
*/ | |||
@Component | |||
public class ExecuteTaskTask { | |||
private final static Logger LOGGER = LoggerFactory.getLogger(ExecuteTaskTask.class); | |||
@Autowired | |||
private IMissionService inspectionService; | |||
@Autowired | |||
private MissionServiceImpl inspectionServiceImpl; | |||
/** | |||
* 定时飞行巡检任务,如果有问题,重置为飞行失败 | |||
*/ | |||
@XxlJob("checkAIAnalysisStatus") | |||
public void checkAIAnalysisStatus() { | |||
//定时飞行 | |||
} | |||
} |
@@ -0,0 +1,25 @@ | |||
package com.tuoheng.admin.utils; | |||
import com.tuoheng.common.utils.DateUtils; | |||
import java.util.Random; | |||
/** | |||
* @User qiujinyang | |||
* @Description | |||
* @Date Created by 2022/7/27 13:44 | |||
*/ | |||
public class CodeUtil { | |||
/** | |||
* 生成报告编号,R+年月日+随机四位数 | |||
* @return | |||
*/ | |||
public static String createCodeNo(){ | |||
String Date = DateUtils.dateTimeNow(DateUtils.YYYYMMDD); | |||
int randomNum = new Random().nextInt(9999) % (9999 - 1000 + 1) + 1000; | |||
String reportNo = Date + randomNum; | |||
return reportNo; | |||
} | |||
} |
@@ -0,0 +1,159 @@ | |||
package com.tuoheng.admin.utils; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.tuoheng.common.config.CommonConfig; | |||
import lombok.extern.slf4j.Slf4j; | |||
import java.io.BufferedReader; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import java.io.InputStreamReader; | |||
import java.net.HttpURLConnection; | |||
import java.net.MalformedURLException; | |||
import java.net.URL; | |||
import java.text.DecimalFormat; | |||
import java.util.Map; | |||
@Slf4j | |||
public class GaodeUtil { | |||
/** | |||
* 逆地理编码 | |||
* | |||
* @param longitude 经度 | |||
* @param latitude 纬度 | |||
* @return | |||
*/ | |||
public static String getGaodeAddress(String longitude, String latitude) { | |||
String address = null; | |||
JSONObject json = new JSONObject(); | |||
try { | |||
json.put("key", CommonConfig.gaodeKey); | |||
json.put("location", longitude + "," + latitude); | |||
log.info("调用高德逆地理编码API请求参数:" + json); | |||
String result = doGet("https://restapi.amap.com/v3/geocode/regeo", json, null); | |||
log.info("调用高德逆地理编码API成功:" + result); | |||
JSONObject resultJson = JSONObject.parseObject(result.trim()); | |||
if("1".equals(resultJson.getString("status"))){ | |||
address = resultJson.getJSONObject("regeocode").getString("formatted_address"); | |||
} | |||
} catch (Exception e) { | |||
log.error("逆地理编码方法异常:", e); | |||
} | |||
return address; | |||
} | |||
/** | |||
* 高德坐标转换 | |||
* | |||
* @param longitude 经度 | |||
* @param latitude 纬度 | |||
* @return | |||
*/ | |||
public static JSONObject getGaodeCoordinate(String longitude, String latitude) { | |||
JSONObject json = new JSONObject(); | |||
JSONObject param = new JSONObject(); | |||
try { | |||
//取六位小数 | |||
DecimalFormat df = new DecimalFormat("0.000000"); | |||
param.put("key", CommonConfig.gaodeKey); | |||
param.put("locations", df.format(Double.valueOf(longitude)) + "," + df.format(Double.valueOf(latitude))); | |||
param.put("coordsys", "gps"); | |||
log.info("调用高德坐标转换API请求参数:" + param); | |||
String result = doGet("https://restapi.amap.com/v3/assistant/coordinate/convert", param, null); | |||
log.info("调用高德坐标转换API成功:" + result); | |||
JSONObject resultJson = JSONObject.parseObject(result.trim()); | |||
if("1".equals(resultJson.getString("status"))){ | |||
String locations = JSONObject.parseObject(result).getString("locations"); | |||
String lonStr = locations.substring(0, locations.indexOf(",")); | |||
String latStr = locations.substring(lonStr.length()+1); | |||
json.put("longitude", lonStr); | |||
json.put("latitude", latStr); | |||
} | |||
} catch (Exception e) { | |||
log.error("高德坐标转换方法异常:", e); | |||
} | |||
return json; | |||
} | |||
public static String doGet(String url, JSONObject data, Map<String, String> properties) { | |||
HttpURLConnection connection = null; | |||
InputStream is = null; | |||
BufferedReader br = null; | |||
String result = null;// 返回结果字符串 | |||
StringBuffer urlNameString = new StringBuffer().append(url).append("?"); | |||
if (data != null) { | |||
for (String key : data.keySet()) { | |||
urlNameString.append(key).append("=").append(data.get(key)).append("&"); | |||
} | |||
url = urlNameString.substring(0, urlNameString.lastIndexOf("&")); | |||
} | |||
try { | |||
// 创建远程url连接对象 | |||
URL httpUrl = new URL(url); | |||
// 通过远程url连接对象打开一个连接,强转成httpURLConnection类 | |||
connection = (HttpURLConnection) httpUrl.openConnection(); | |||
// 设置连接方式:get | |||
connection.setRequestMethod("GET"); | |||
// 设置连接主机服务器的超时时间:15000毫秒 | |||
connection.setConnectTimeout(15000); | |||
// 设置读取远程返回的数据时间:60000毫秒 | |||
connection.setReadTimeout(60000); | |||
if(null != properties && !properties.isEmpty()){ | |||
for (String key:properties.keySet()){ | |||
connection.setRequestProperty(key, properties.get(key)); | |||
} | |||
} | |||
// 发送请求 | |||
connection.connect(); | |||
// 通过connection连接,获取输入流 | |||
if (connection.getResponseCode() == 200) { | |||
is = connection.getInputStream(); | |||
// 封装输入流is,并指定字符集 | |||
br = new BufferedReader(new InputStreamReader(is, "UTF-8")); | |||
// 存放数据 | |||
StringBuffer sbf = new StringBuffer(); | |||
String temp = null; | |||
while ((temp = br.readLine()) != null) { | |||
sbf.append(temp); | |||
sbf.append("\r\n"); | |||
} | |||
result = sbf.toString(); | |||
} | |||
} catch (MalformedURLException e) { | |||
e.printStackTrace(); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
} finally { | |||
// 关闭资源 | |||
if (null != br) { | |||
try { | |||
br.close(); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
if (null != is) { | |||
try { | |||
is.close(); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
connection.disconnect();// 关闭远程连接 | |||
} | |||
return result; | |||
} | |||
} |
@@ -0,0 +1,362 @@ | |||
package com.tuoheng.admin.utils; | |||
import com.lowagie.text.*; | |||
import com.lowagie.text.Font; | |||
import com.lowagie.text.Image; | |||
import com.lowagie.text.pdf.BaseFont; | |||
import com.lowagie.text.rtf.RtfWriter2; | |||
import com.lowagie.text.rtf.style.RtfParagraphStyle; | |||
import java.awt.*; | |||
import java.io.FileOutputStream; | |||
import java.io.IOException; | |||
import java.net.MalformedURLException; | |||
import java.util.HashMap; | |||
import java.util.Map; | |||
/** | |||
* word帮助文件 | |||
*/ | |||
public class WordUtilsOld { | |||
private Document document; | |||
private String test; | |||
private Map<Integer,String> fontFamily = new HashMap<Integer,String>(); | |||
public Document getDocument() { | |||
return document; | |||
} | |||
public void setDocument(Document document) { | |||
this.document = document; | |||
} | |||
public WordUtilsOld(){ | |||
this.document = new Document(PageSize.A4);//����ֽ�Ŵ�С | |||
document.newPage(); | |||
//init font | |||
if(getSystem()){ | |||
fontFamily.put(1, "C:\\Windows\\Fonts\\simhei.ttf"); | |||
fontFamily.put(2, "C:\\Windows\\Fonts\\STXINWEI.TTF"); | |||
fontFamily.put(3, "C:\\Windows\\Fonts\\simsun.ttc,0"); | |||
fontFamily.put(4, "C:\\Windows\\Fonts\\fangsong_GB2312.ttf"); | |||
fontFamily.put(5, "C:\\Windows\\Fonts\\times.ttf"); | |||
fontFamily.put(6, "C:\\Windows\\Fonts\\simfang.ttf"); | |||
}else{ | |||
fontFamily.put(1, "/usr/share/fonts/simhei.ttf"); | |||
fontFamily.put(2, "/usr/share/fonts/STXINWEI.TTF"); | |||
fontFamily.put(3, "/usr/share/fonts/windows/simsun.ttc,0"); | |||
fontFamily.put(4, "/usr/share/fonts/fangsong_GB2312.ttf"); | |||
fontFamily.put(5, "/usr/share/fonts/times.ttf"); | |||
} | |||
} | |||
/** 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中 | |||
* @param filePath 要操作的文档路径,若文档不存在会自动创建 | |||
* @throws com.lowagie.text.DocumentException | |||
* @throws IOException | |||
*/ | |||
public void openDocument(String filePath) throws DocumentException, | |||
IOException { | |||
// 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中 | |||
RtfWriter2.getInstance(this.document, new FileOutputStream(filePath)); | |||
this.document.open(); | |||
// 设置中文字体 | |||
/*this.bfChinese = BaseFont.createFont("STSongStd-Light", | |||
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);*/ | |||
} | |||
/** | |||
* @param titleStr 标题 | |||
* @param fontsize 字体大小 | |||
* @param fontStyle 字体样式 | |||
* @param elementAlign 对齐方式 | |||
* @throws com.lowagie.text.DocumentException | |||
*/ | |||
public void insertTitle(String titleStr,float fontsize,int fontStyle,int elementAlign,float before,float after,int fontFamliyType) throws Exception{ | |||
BaseFont fontFamliy = BaseFont.createFont(fontFamily.get(3), "GBK", BaseFont.NOT_EMBEDDED); | |||
Font titleFont = new Font(fontFamliy,fontsize, fontStyle); | |||
Paragraph title = new Paragraph(titleStr); | |||
// 设置标题格式对齐方式 | |||
title.setAlignment(elementAlign); | |||
title.setFont(titleFont); | |||
title.setSpacingBefore(before); | |||
title.setSpacingAfter(after); | |||
this.document.add(title); | |||
} | |||
/** | |||
* 设置带有目录格式的标题(标题1格式) | |||
* | |||
* @param rtfParagraphStyle 标题1样式 | |||
* @param titleStr 标题 | |||
* @throws com.lowagie.text.DocumentException | |||
* @throws IOException | |||
*/ | |||
public void insertTitlePattern(String titleStr, RtfParagraphStyle rtfParagraphStyle) throws DocumentException, IOException{ | |||
Paragraph title = new Paragraph(titleStr); | |||
title.setFont(rtfParagraphStyle); | |||
this.document.add(title); | |||
} | |||
/** | |||
* 设置带有目录格式的标题(标题2格式) | |||
* @param titleStr 标题 | |||
* @param rtfParagraphStyle 标题2样式 | |||
* @throws com.lowagie.text.DocumentException | |||
*/ | |||
public void insertTitlePatternSecond(String titleStr,RtfParagraphStyle rtfParagraphStyle) throws DocumentException{ | |||
Paragraph title = new Paragraph(titleStr); | |||
// 设置标题格式对齐方式 | |||
title.setFont(rtfParagraphStyle); | |||
this.document.add(title); | |||
} | |||
/** | |||
* 设置带有目录格式的标题(标题3格式) | |||
* @param titleStr 标题 | |||
* @param rtfParagraphStyle 标题3样式 | |||
* @throws com.lowagie.text.DocumentException | |||
*/ | |||
public void insertTitlePatternThird(String titleStr,RtfParagraphStyle rtfParagraphStyle) throws DocumentException{ | |||
Paragraph title = new Paragraph(titleStr); | |||
// 设置标题格式对齐方式 | |||
title.setFont(rtfParagraphStyle); | |||
this.document.add(title); | |||
} | |||
/** | |||
* @param tableName 标题 | |||
* @param fontsize 字体大小 | |||
* @param fontStyle 字体样式 | |||
* @param elementAlign 对齐方式 | |||
* @throws com.lowagie.text.DocumentException | |||
*/ | |||
public void insertTableName(String tableName,int fontsize,int fontStyle,int elementAlign) throws DocumentException{ | |||
Font titleFont = new Font(); | |||
titleFont.setColor(102, 102, 153); | |||
Paragraph title = new Paragraph(tableName); | |||
// 设置标题格式对齐方式 | |||
title.setAlignment(elementAlign); | |||
title.setFont(titleFont); | |||
this.document.add(title); | |||
} | |||
/** | |||
* @param contextStr 内容 | |||
* @param fontsize 字体大小 | |||
* @param fontStyle 字体样式 | |||
* @param elementAlign 对齐方式 | |||
* @throws com.lowagie.text.DocumentException | |||
* @throws IOException | |||
*/ | |||
public void insertContext(String contextStr,int fontsize,int fontStyle,int elementAlign,float firstLineIndent,float before,float after) throws DocumentException, IOException{ | |||
// 正文字体风格 | |||
BaseFont fontFamliy = BaseFont.createFont(fontFamily.get(3), "GBK", BaseFont.EMBEDDED); | |||
Font contextFont = new Font(fontFamliy, fontsize, fontStyle); | |||
Paragraph context = new Paragraph(contextStr); | |||
//设置行距 | |||
context.setLeading(3f); | |||
// 正文格式左对齐 | |||
context.setAlignment(elementAlign); | |||
context.setFont(contextFont); | |||
// 离上一段落(标题)空的行数 | |||
//context.setSpacingBefore(1); | |||
// 设置第一行空的列数 | |||
//context.setFirstLineIndent(20); | |||
context.setFirstLineIndent(firstLineIndent); | |||
context.setSpacingBefore(before); | |||
context.setSpacingAfter(after); | |||
document.add(context); | |||
} | |||
/** | |||
* 插入正文里的注释 | |||
* @param contextStr 内容 | |||
* @param fontsize 字体大小 5号 10.5 | |||
* @param fontStyle 字体样式 | |||
* @param elementAlign 对齐方式 | |||
* @throws com.lowagie.text.DocumentException | |||
*/ | |||
public void insertContextNote(String contextStr,int fontsize,int fontStyle,int elementAlign,float firstLineIndent,float before,float after) throws Exception{ | |||
BaseFont fontFamliy = BaseFont.createFont(fontFamily.get(3), "GBK", BaseFont.EMBEDDED); | |||
Font contextFont = new Font(fontFamliy, 10.5f, fontStyle); | |||
Paragraph context = new Paragraph(contextStr); | |||
context.setLeading(3f); | |||
context.setAlignment(elementAlign); | |||
context.setFont(contextFont); | |||
context.setFirstLineIndent(firstLineIndent); | |||
context.setSpacingBefore(before); | |||
context.setSpacingAfter(after); | |||
document.add(context); | |||
} | |||
public void insertContext(Paragraph context) throws Exception{ | |||
BaseFont fontFamliy = BaseFont.createFont(fontFamily.get(3), "GBK", BaseFont.EMBEDDED); | |||
Font contextFont = new Font(fontFamliy,12); | |||
context.setFont(contextFont); | |||
document.add(context); | |||
} | |||
/** | |||
* @param imgUrl 图片路径 | |||
* @param imageAlign 显示位置 | |||
* @param height 显示高度 | |||
* @param weight 显示宽度 | |||
* @param percent 显示比例 | |||
* @param heightPercent 显示高度比例 | |||
* @param weightPercent 显示宽度比例 | |||
* @param rotation 显示图片旋转角度 | |||
* @throws MalformedURLException | |||
* @throws IOException | |||
* @throws com.lowagie.text.DocumentException | |||
*/ | |||
public void insertImg(String imgUrl,int imageAlign,int height,int weight,int percent,int heightPercent,int weightPercent,int rotation) throws MalformedURLException, IOException, DocumentException{ | |||
// 添加图片 | |||
Image img = Image.getInstance(imgUrl); | |||
if(img==null) | |||
return; | |||
img.setAbsolutePosition(0, 0); | |||
img.setAlignment(imageAlign); | |||
img.scaleAbsolute(height, weight); | |||
img.scaleAbsolute(1000, 1000); | |||
img.scalePercent(percent); | |||
img.scalePercent(heightPercent, weightPercent); | |||
img.setRotation(rotation); | |||
document.add(img); | |||
} | |||
/** | |||
* 添加简单表格 | |||
* @param column 表格列数(必须) | |||
* @param row 表格行数 | |||
* @throws com.lowagie.text.DocumentException | |||
*/ | |||
public void insertSimpleTable(int column,int row) throws DocumentException { | |||
Table table=new Table(column);//列数必须设置,而行数则可以按照个人要求来决定是否需要设置 | |||
table.setAlignment(Element.ALIGN_CENTER);// 居中显示 | |||
table.setAlignment(Element.ALIGN_MIDDLE);// 纵向居中显示 | |||
table.setAutoFillEmptyCells(true);// 自动填满 | |||
table.setBorderColor(new Color(0, 125, 255));// 边框颜色 | |||
table.setBorderWidth(1);// 边框宽度 | |||
table.setSpacing(2);// 衬距, | |||
table.setPadding(2);// 即单元格之间的间距 | |||
table.setBorder(20);// 边框 | |||
for (int i = 0; i < column*3; i++) { | |||
table.addCell(new Cell(""+i)); | |||
} | |||
document.add(table); | |||
} | |||
public void insertContext2(String contextStr,int fontsize,int fontStyle,int elementAlign,float firstLineIndent,float hangju,float before,float after,int fontFamliyType) throws DocumentException, IOException{ | |||
BaseFont fontFamliy = BaseFont.createFont(fontFamily.get(fontFamliyType), "GBK", BaseFont.EMBEDDED); | |||
Font contextFont = new Font(fontFamliy, fontsize, fontStyle); | |||
Paragraph context = new Paragraph(contextStr); | |||
//设置行距 | |||
context.setLeading(hangju); | |||
// 正文格式左对齐 | |||
context.setAlignment(elementAlign); | |||
context.setFont(contextFont); | |||
context.setFirstLineIndent(firstLineIndent); | |||
context.setSpacingBefore(before); | |||
context.setSpacingAfter(after); | |||
document.add(context); | |||
} | |||
/** | |||
* 新增 | |||
* hxl 2019-3-29 | |||
* 设置字体 | |||
* @param fontFamliyType | |||
* @return | |||
* @throws Exception | |||
*/ | |||
public BaseFont setFont(int fontFamliyType) throws Exception{ | |||
BaseFont fontFamliy = BaseFont.createFont(fontFamily.get(3), "GBK", BaseFont.NOT_EMBEDDED); | |||
return fontFamliy; | |||
} | |||
/** | |||
* 在操作完成后必须关闭document,否则即使生成了word文档,打开也会发生错误 | |||
* @throws com.lowagie.text.DocumentException | |||
*/ | |||
public void closeDocument() throws DocumentException{ | |||
this.document.close(); | |||
} | |||
//判断操作系统类型 | |||
public boolean getSystem(){ | |||
if(System.getProperties().getProperty("os.name").toUpperCase().indexOf("WINDOWS")!=-1){ | |||
return true; | |||
} | |||
return false; | |||
} | |||
public Map<Integer, String> getFontFamily() { | |||
return fontFamily; | |||
} | |||
public void setFontFamily(Map<Integer, String> fontFamily) { | |||
this.fontFamily = fontFamily; | |||
} | |||
//第一级标题样式 | |||
public static RtfParagraphStyle rtfGsBt1 = RtfParagraphStyle.STYLE_HEADING_1; | |||
//第二级标题样式 | |||
public static RtfParagraphStyle rtfGsBt2 = RtfParagraphStyle.STYLE_HEADING_2; | |||
//第三级标题样式 | |||
public static RtfParagraphStyle rtfGsBt3 = RtfParagraphStyle.STYLE_HEADING_3; | |||
//第四级标题样式 | |||
public static RtfParagraphStyle rtfGsBt4 = RtfParagraphStyle.STYLE_HEADING_3; | |||
static { | |||
rtfGsBt2.setAlignment(Element.ALIGN_CENTER); | |||
rtfGsBt2.setStyle(Font.BOLD); | |||
rtfGsBt2.setSize(14); | |||
rtfGsBt2.setSpacingBefore(10); | |||
rtfGsBt2.setSpacingAfter(10); | |||
rtfGsBt2.setKeepTogether(true); | |||
rtfGsBt2.setKeepTogetherWithNext(true); | |||
rtfGsBt2.setFontName("黑体"); | |||
rtfGsBt1.setAlignment(Element.ALIGN_CENTER); | |||
rtfGsBt1.setStyle(Font.BOLD); | |||
rtfGsBt1.setSize(22); | |||
rtfGsBt1.setSpacingBefore(10); | |||
rtfGsBt1.setSpacingAfter(10); | |||
rtfGsBt1.setFontName("黑体"); | |||
rtfGsBt3.setAlignment(Element.ALIGN_LEFT); | |||
rtfGsBt3.setStyle(Font.BOLD); | |||
rtfGsBt3.setSize(14); | |||
rtfGsBt3.setSpacingBefore(10); | |||
rtfGsBt3.setSpacingAfter(0); | |||
rtfGsBt3.setKeepTogether(true); | |||
//rtfGsBt3.setKeepTogetherWithNext(true); | |||
rtfGsBt3.setFontName("FangSong_GB2312"); | |||
rtfGsBt4.setAlignment(Element.ALIGN_LEFT); | |||
rtfGsBt4.setStyle(Font.BOLD); | |||
rtfGsBt4.setSize(14); | |||
rtfGsBt4.setSpacingBefore(10); | |||
rtfGsBt4.setSpacingAfter(0); | |||
rtfGsBt4.setKeepTogether(true); | |||
rtfGsBt4.setKeepTogetherWithNext(true); | |||
rtfGsBt4.setFontName("FangSong_GB2312"); | |||
} | |||
} |
@@ -0,0 +1,150 @@ | |||
package com.tuoheng.admin.utils; | |||
import org.apache.poi.xwpf.usermodel.*; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import java.io.OutputStream; | |||
import java.util.Iterator; | |||
import java.util.List; | |||
import java.util.Map; | |||
import java.util.regex.Matcher; | |||
import java.util.regex.Pattern; | |||
public class XwpfTUtil { | |||
/** | |||
* 替换段落里面的变量 | |||
* | |||
* @param doc 要替换的文档 | |||
* @param params 参数 | |||
*/ | |||
public void replaceInPara(XWPFDocument doc, Map<String, Object> params) { | |||
Iterator<XWPFParagraph> iterator = doc.getParagraphsIterator(); | |||
XWPFParagraph para; | |||
while (iterator.hasNext()) { | |||
para = iterator.next(); | |||
this.replaceInPara(para, params); | |||
} | |||
} | |||
/** | |||
* 替换段落里面的变量 | |||
* | |||
* @param para 要替换的段落 | |||
* @param params 参数 | |||
*/ | |||
public void replaceInPara(XWPFParagraph para, Map<String, Object> params) { | |||
List<XWPFRun> runs; | |||
Matcher matcher; | |||
if (this.matcher(para.getParagraphText()).find()) { | |||
runs = para.getRuns(); | |||
int start = -1; | |||
int end = -1; | |||
String str = ""; | |||
for (int i = 0; i < runs.size(); i++) { | |||
XWPFRun run = runs.get(i); | |||
String runText = run.toString(); | |||
if ('$' == runText.charAt(0)&&'{' == runText.charAt(1)) { | |||
start = i; | |||
} | |||
if ((start != -1)) { | |||
str += runText; | |||
} | |||
if ('}' == runText.charAt(runText.length() - 1)) { | |||
if (start != -1) { | |||
end = i; | |||
break; | |||
} | |||
} | |||
} | |||
for (int i = start; i <= end; i++) { | |||
para.removeRun(i); | |||
i--; | |||
end--; | |||
} | |||
for (String key : params.keySet()) { | |||
if (str.equals(key)) { | |||
para.createRun().setText((String) params.get(key)); | |||
break; | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* 替换表格里面的变量 | |||
* | |||
* @param doc 要替换的文档 | |||
* @param params 参数 | |||
*/ | |||
public void replaceInTable(XWPFDocument doc, Map<String, Object> params) { | |||
Iterator<XWPFTable> iterator = doc.getTablesIterator(); | |||
XWPFTable table; | |||
List<XWPFTableRow> rows; | |||
List<XWPFTableCell> cells; | |||
List<XWPFParagraph> paras; | |||
while (iterator.hasNext()) { | |||
table = iterator.next(); | |||
rows = table.getRows(); | |||
for (XWPFTableRow row : rows) { | |||
cells = row.getTableCells(); | |||
for (XWPFTableCell cell : cells) { | |||
paras = cell.getParagraphs(); | |||
for (XWPFParagraph para : paras) { | |||
this.replaceInPara(para, params); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* 正则匹配字符串 | |||
* | |||
* @param str | |||
* @return | |||
*/ | |||
private Matcher matcher(String str) { | |||
Pattern pattern = Pattern.compile("\\$\\{(.+?)\\}", Pattern.CASE_INSENSITIVE); | |||
Matcher matcher = pattern.matcher(str); | |||
return matcher; | |||
} | |||
/** | |||
* 关闭输入流 | |||
* | |||
* @param is | |||
*/ | |||
public void close(InputStream is) { | |||
if (is != null) { | |||
try { | |||
is.close(); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
} | |||
/** | |||
* 关闭输出流 | |||
* | |||
* @param os | |||
*/ | |||
public void close(OutputStream os) { | |||
if (os != null) { | |||
try { | |||
os.close(); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
} | |||
} |
@@ -0,0 +1,220 @@ | |||
# 端口配置 | |||
server: | |||
port: 9099 | |||
servlet: | |||
# 项目的前缀名 | |||
context-path: /api | |||
tomcat: | |||
basedir: /data/java/tuoheng_lc/uploads/temp | |||
# 自定义配置 | |||
tuoheng: | |||
# 图片域名 | |||
image-url: https://image.t-aaron.com/ | |||
# OSS域名 | |||
oss-url: https://ta-tech-image.oss-cn-shanghai.aliyuncs.com | |||
# 机场域名 | |||
airport-url: http://124.223.218.130:9060/ | |||
# 视频域名 | |||
video-url: https://vod.play.t-aaron.com/ | |||
# 高德Key | |||
gaodeKey: 8eb26a06684d34501e5a56dcc2f5af15 | |||
# 通道地址 | |||
live-channel-domain-url: https://streaming.t-aaron.com/ | |||
#阿里云 | |||
aliyuncsVod: | |||
accessKeyId: LTAI5tE7KWN9fsuGU7DyfYF4 | |||
accessKeySecret: yPPCyfsqWgrTuoz5H4sisY0COclx8E | |||
roleArn: acs:ram::1399733914954856:role/ramosstest | |||
bucketName: ta-tech-image | |||
spring: | |||
# 配置数据源 | |||
datasource: | |||
# 使用阿里的Druid连接池 | |||
type: com.alibaba.druid.pool.DruidDataSource | |||
driver-class-name: com.mysql.cj.jdbc.Driver | |||
# 填写你数据库的url、登录名、密码和数据库名 | |||
url: jdbc:mysql://192.168.11.13:3306/tuoheng_lc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8&useSSL=true&tinyInt1isBit=false | |||
username: root | |||
password: idontcare | |||
druid: | |||
# 连接池的配置信息 | |||
# 初始连接数 | |||
initialSize: 5 | |||
# 最小连接池数量 | |||
minIdle: 5 | |||
# 最大连接池数量 | |||
maxActive: 20 | |||
# 配置获取连接等待超时的时间 | |||
maxWait: 60000 | |||
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 | |||
timeBetweenEvictionRunsMillis: 60000 | |||
# 配置一个连接在池中最小生存的时间,单位是毫秒 | |||
minEvictableIdleTimeMillis: 300000 | |||
# 配置一个连接在池中最大生存的时间,单位是毫秒 | |||
maxEvictableIdleTimeMillis: 900000 | |||
# 配置检测连接是否有效 | |||
validationQuery: SELECT 1 FROM DUAL | |||
testWhileIdle: true | |||
testOnBorrow: false | |||
testOnReturn: false | |||
# 打开PSCache,并且指定每个连接上PSCache的大小 | |||
poolPreparedStatements: true | |||
maxPoolPreparedStatementPerConnectionSize: 20 | |||
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 | |||
filters: stat,wall,log4j | |||
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录 | |||
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 | |||
# 配置DruidStatFilter | |||
webStatFilter: | |||
enabled: true | |||
url-pattern: "/*" | |||
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" | |||
# 配置DruidStatViewServlet | |||
statViewServlet: | |||
url-pattern: "/druid/*" | |||
# IP白名单(没有配置或者为空,则允许所有访问) | |||
allow: 127.0.0.1,192.168.163.1 | |||
# IP黑名单 (存在共同时,deny优先于allow) | |||
deny: 192.168.1.73 | |||
# 禁用HTML页面上的“Reset All”功能 | |||
reset-enable: false | |||
# 登录名 | |||
login-username: admin | |||
# 登录密码 | |||
login-password: 123456 | |||
# Redis数据源 | |||
redis: | |||
# 缓存库默认索引0 | |||
database: 0 | |||
# Redis服务器地址 | |||
host: 192.168.11.13 | |||
# Redis服务器连接端口 | |||
port: 6379 | |||
# Redis服务器连接密码(默认为空) | |||
password: | |||
# 连接超时时间(毫秒) | |||
timeout: 6000 | |||
# 默认的数据过期时间,主要用于shiro权限管理 | |||
expire: 2592000 | |||
jedis: | |||
pool: | |||
max-active: 1000 # 连接池最大连接数(使用负值表示没有限制) | |||
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) | |||
max-idle: 10 # 连接池中的最大空闲连接 | |||
min-idle: 1 # 连接池中的最小空闲连接 | |||
servlet: | |||
multipart: | |||
# 过滤springmvc的文件上传 | |||
enabled: false | |||
# 单个文件最大值 | |||
max-file-size: 50MB | |||
# 上传文件总的最大值 | |||
max-request-size: 100MB | |||
#邮件配置 | |||
mail: | |||
# 设置邮箱主机 | |||
host: smtp.qq.com | |||
# 开启邮箱POP3/SMTP服务,获取客户端授权码(注意并不是邮箱密码,而是授权码) | |||
password: | |||
# 邮箱的用户名 | |||
username: | |||
properties: | |||
mail: | |||
smtp: | |||
# 设置是否需要认证,如果为true,那么用户名和密码就必须的。如果设置false,可以不设置用户名和密码,当然也得看你的对接的平台是否支持无密码进行访问的。 | |||
auth: true | |||
starttls: | |||
# STARTTLS[1] 是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。 | |||
enable: true | |||
require: true | |||
alisms: | |||
accessKeyId: | |||
accessKeySecret: | |||
regionId: cn-hangzhou | |||
signName: 拓恒 | |||
templateCode: | |||
kafka: | |||
common: | |||
enable: false | |||
bootstrap-servers: 192.168.11.13:9092 | |||
alg-online-results-topic: alg-task-results | |||
alg-online-results-group-id: alg-task-group-dev | |||
alg-offline-tasks-topic: alg-offline-tasks | |||
alg-online-tasks-topic: alg-online-tasks | |||
file: | |||
#上传的服务器上的映射文件夹 | |||
accessPath: /uploads/ | |||
#静态资源对外暴露的访问路径 | |||
staticAccessPath: /** | |||
#静态资源实际存储路径 | |||
uploadFolder: /data/java/tuoheng_lc/uploads/ | |||
# Shiro | |||
shiro: | |||
cipher-key: f/SX5TIve5WWzT4aQlABJA== | |||
cookie-name: shiro-cookie2 | |||
user: | |||
# 登录地址 | |||
loginUrl: /login | |||
# 权限认证失败地址 | |||
unauthorizedUrl: /unauth | |||
# 首页地址 | |||
indexUrl: /index | |||
# 验证码开关 | |||
captchaEnabled: true | |||
# 验证码类型 math 数组计算 char 字符 | |||
captchaType: math | |||
cookie: | |||
# 设置Cookie的域名 默认空,即当前访问的域名 | |||
domain: | |||
# 设置cookie的有效访问路径 | |||
path: / | |||
# 设置HttpOnly属性 | |||
httpOnly: true | |||
# 设置Cookie的过期时间,天为单位 | |||
maxAge: 30 | |||
session: | |||
# Session超时时间(默认30分钟) | |||
expireTime: 300 | |||
# 同步session到数据库的周期(默认1分钟) | |||
dbSyncPeriod: 1 | |||
# 相隔多久检查一次session的有效性,默认就是10分钟 | |||
validationInterval: 10 | |||
# 代码生成 | |||
generate: | |||
# 作者 | |||
author: 拓恒 | |||
# 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool | |||
packageName: com.tuoheng.system | |||
# 模块名 | |||
moduleName: tuoheng-system | |||
# 自动去除表前缀,默认是true | |||
autoRemovePre: true | |||
# 表前缀(生成类名不会包含表前缀,多个用逗号分隔) | |||
tablePrefix: sys_ | |||
# 日志记录 | |||
logging: | |||
config: classpath:logback.xml | |||
xxl: | |||
enable: true | |||
job: | |||
admin: | |||
addresses: http://192.168.11.11:8110/xxl-job-admin | |||
accessToken: tuoheng | |||
executor: | |||
appname: xxl-job-executor-lc | |||
address: | |||
ip: | |||
# 多个后台,端口号不能相同 | |||
port: 9999 | |||
logpath: /data/java/logs/xxl-job/jobhandler | |||
logretentiondays: 15 |
@@ -0,0 +1,214 @@ | |||
# 端口配置 | |||
server: | |||
port: 9099 | |||
servlet: | |||
# 项目的前缀名 | |||
context-path: /api | |||
tomcat: | |||
basedir: /data/java/tuoheng_lc/uploads/temp | |||
# 自定义配置 | |||
tuoheng: | |||
# 图片域名 | |||
image-url: http://localhost:9065/api | |||
# OSS域名 | |||
oss-url: https://ta-tech-image.oss-cn-shanghai.aliyuncs.com | |||
# 机场域名 | |||
airport-url: http://124.223.218.130:9060/ | |||
# 视频域名 | |||
video-url: http://vod.play.t-aaron.com/ | |||
# 高德Key | |||
gaodeKey: 8eb26a06684d34501e5a56dcc2f5af15 | |||
# 通道地址 | |||
live-channel-domain-url: http://192.168.11.11:9024/ | |||
#阿里云 | |||
aliyuncsVod: | |||
accessKeyId: LTAI5tE7KWN9fsuGU7DyfYF4 | |||
accessKeySecret: yPPCyfsqWgrTuoz5H4sisY0COclx8E | |||
roleArn: acs:ram::1399733914954856:role/ramosstest | |||
bucketName: ta-tech-image | |||
spring: | |||
# 配置数据源 | |||
datasource: | |||
# 使用阿里的Druid连接池 | |||
type: com.alibaba.druid.pool.DruidDataSource | |||
driver-class-name: com.mysql.cj.jdbc.Driver | |||
# 填写你数据库的url、登录名、密码和数据库名 | |||
url: jdbc:mysql://192.168.11.13:3306/tuoheng_lc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8&useSSL=true&tinyInt1isBit=false | |||
username: root | |||
password: idontcare | |||
druid: | |||
# 连接池的配置信息 | |||
# 初始连接数 | |||
initialSize: 5 | |||
# 最小连接池数量 | |||
minIdle: 5 | |||
# 最大连接池数量 | |||
maxActive: 20 | |||
# 配置获取连接等待超时的时间 | |||
maxWait: 60000 | |||
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 | |||
timeBetweenEvictionRunsMillis: 60000 | |||
# 配置一个连接在池中最小生存的时间,单位是毫秒 | |||
minEvictableIdleTimeMillis: 300000 | |||
# 配置一个连接在池中最大生存的时间,单位是毫秒 | |||
maxEvictableIdleTimeMillis: 900000 | |||
# 配置检测连接是否有效 | |||
validationQuery: SELECT 1 FROM DUAL | |||
testWhileIdle: true | |||
testOnBorrow: false | |||
testOnReturn: false | |||
# 打开PSCache,并且指定每个连接上PSCache的大小 | |||
poolPreparedStatements: true | |||
maxPoolPreparedStatementPerConnectionSize: 20 | |||
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 | |||
filters: stat,wall,log4j | |||
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录 | |||
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 | |||
# 配置DruidStatFilter | |||
webStatFilter: | |||
enabled: true | |||
url-pattern: "/*" | |||
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" | |||
# 配置DruidStatViewServlet | |||
statViewServlet: | |||
url-pattern: "/druid/*" | |||
# IP白名单(没有配置或者为空,则允许所有访问) | |||
allow: 127.0.0.1,192.168.163.1 | |||
# IP黑名单 (存在共同时,deny优先于allow) | |||
deny: 192.168.1.73 | |||
# 禁用HTML页面上的“Reset All”功能 | |||
reset-enable: false | |||
# 登录名 | |||
login-username: admin | |||
# 登录密码 | |||
login-password: 123456 | |||
# Redis数据源 | |||
redis: | |||
# 缓存库默认索引0 | |||
database: 0 | |||
# Redis服务器地址 | |||
host: 127.0.0.1 | |||
# Redis服务器连接端口 | |||
port: 6379 | |||
# Redis服务器连接密码(默认为空) | |||
password: | |||
# 连接超时时间(毫秒) | |||
timeout: 6000 | |||
# 默认的数据过期时间,主要用于shiro权限管理 | |||
expire: 2592000 | |||
jedis: | |||
pool: | |||
max-active: 1000 # 连接池最大连接数(使用负值表示没有限制) | |||
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) | |||
max-idle: 10 # 连接池中的最大空闲连接 | |||
min-idle: 1 # 连接池中的最小空闲连接 | |||
servlet: | |||
multipart: | |||
# 过滤springmvc的文件上传 | |||
enabled: false | |||
# 单个文件最大值 | |||
max-file-size: 50MB | |||
# 上传文件总的最大值 | |||
max-request-size: 100MB | |||
#邮件配置 | |||
mail: | |||
# 设置邮箱主机 | |||
host: smtp.qq.com | |||
# 开启邮箱POP3/SMTP服务,获取客户端授权码(注意并不是邮箱密码,而是授权码) | |||
password: | |||
# 邮箱的用户名 | |||
username: | |||
properties: | |||
mail: | |||
smtp: | |||
# 设置是否需要认证,如果为true,那么用户名和密码就必须的。如果设置false,可以不设置用户名和密码,当然也得看你的对接的平台是否支持无密码进行访问的。 | |||
auth: true | |||
starttls: | |||
# STARTTLS[1] 是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。 | |||
enable: true | |||
require: true | |||
alisms: | |||
accessKeyId: | |||
accessKeySecret: | |||
regionId: cn-hangzhou | |||
signName: 拓恒 | |||
templateCode: | |||
kafka: | |||
common: | |||
enable: false | |||
bootstrap-servers: 192.168.11.13:9092 | |||
alg-online-results-topic: alg-task-results | |||
alg-online-results-group-id: alg-task-group-local | |||
alg-offline-tasks-topic: alg-offline-tasks | |||
alg-online-tasks-topic: alg-online-tasks | |||
file: | |||
#上传的服务器上的映射文件夹 | |||
accessPath: /uploads/ | |||
#静态资源对外暴露的访问路径 | |||
staticAccessPath: /** | |||
#静态资源实际存储路径 | |||
uploadFolder: E:\Gitea仓库源码\tuoheng_5gai_new\uploads\ | |||
# Shiro | |||
shiro: | |||
cipher-key: f/SX5TIve5WWzT4aQlABJA== | |||
cookie-name: shiro-cookie2 | |||
user: | |||
# 登录地址 | |||
loginUrl: /login | |||
# 权限认证失败地址 | |||
unauthorizedUrl: /unauth | |||
# 首页地址 | |||
indexUrl: /index | |||
# 验证码开关 | |||
captchaEnabled: true | |||
# 验证码类型 math 数组计算 char 字符 | |||
captchaType: math | |||
cookie: | |||
# 设置Cookie的域名 默认空,即当前访问的域名 | |||
domain: | |||
# 设置cookie的有效访问路径 | |||
path: / | |||
# 设置HttpOnly属性 | |||
httpOnly: true | |||
# 设置Cookie的过期时间,天为单位 | |||
maxAge: 30 | |||
session: | |||
# Session超时时间(默认30分钟) | |||
expireTime: 300 | |||
# 同步session到数据库的周期(默认1分钟) | |||
dbSyncPeriod: 1 | |||
# 相隔多久检查一次session的有效性,默认就是10分钟 | |||
validationInterval: 10 | |||
# 代码生成 | |||
generate: | |||
# 作者 | |||
author: 拓恒 | |||
# 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool | |||
packageName: com.tuoheng.system | |||
# 模块名 | |||
moduleName: tuoheng-system | |||
# 自动去除表前缀,默认是true | |||
autoRemovePre: true | |||
# 表前缀(生成类名不会包含表前缀,多个用逗号分隔) | |||
tablePrefix: sys_ | |||
xxl: | |||
enable: true | |||
job: | |||
admin: | |||
addresses: http://192.168.11.11:8110/xxl-job-admin | |||
accessToken: tuoheng | |||
executor: | |||
appname: xxl-job-executor-lc | |||
address: | |||
ip: | |||
# 多个后台,端口号不能相同 | |||
port: 9999 | |||
logpath: /data/java/logs/xxl-job/jobhandler | |||
logretentiondays: 15 |
@@ -0,0 +1,214 @@ | |||
# 端口配置 | |||
server: | |||
port: 9099 | |||
servlet: | |||
# 项目的前缀名 | |||
context-path: /api | |||
tomcat: | |||
basedir: /data/java/tuoheng_lc/uploads/temp | |||
# 自定义配置 | |||
tuoheng: | |||
# 图片域名 | |||
image-url: https://image.t-aaron.com/ | |||
# OSS域名 | |||
oss-url: https://ta-tech-image.oss-cn-shanghai.aliyuncs.com | |||
# 机场域名 | |||
airport-url: http://124.223.218.130:9060/ | |||
# 视频域名 | |||
video-url: https://vod.play.t-aaron.com/ | |||
# 高德Key | |||
gaodeKey: 8eb26a06684d34501e5a56dcc2f5af15 | |||
# 通道地址 | |||
live-channel-domain-url: https://streaming.t-aaron.com/ | |||
#阿里云 | |||
aliyuncsVod: | |||
accessKeyId: LTAI5tE7KWN9fsuGU7DyfYF4 | |||
accessKeySecret: yPPCyfsqWgrTuoz5H4sisY0COclx8E | |||
roleArn: acs:ram::1399733914954856:role/ramosstest | |||
bucketName: ta-tech-image | |||
spring: | |||
# 配置数据源 | |||
datasource: | |||
# 使用阿里的Druid连接池 | |||
type: com.alibaba.druid.pool.DruidDataSource | |||
driver-class-name: com.mysql.cj.jdbc.Driver | |||
# 填写你数据库的url、登录名、密码和数据库名 | |||
url: jdbc:mysql://172.16.1.22:3306/tuoheng_lc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8&useSSL=true&tinyInt1isBit=false | |||
username: root | |||
password: TH22#2022 | |||
druid: | |||
# 连接池的配置信息 | |||
# 初始连接数 | |||
initialSize: 5 | |||
# 最小连接池数量 | |||
minIdle: 5 | |||
# 最大连接池数量 | |||
maxActive: 20 | |||
# 配置获取连接等待超时的时间 | |||
maxWait: 60000 | |||
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 | |||
timeBetweenEvictionRunsMillis: 60000 | |||
# 配置一个连接在池中最小生存的时间,单位是毫秒 | |||
minEvictableIdleTimeMillis: 300000 | |||
# 配置一个连接在池中最大生存的时间,单位是毫秒 | |||
maxEvictableIdleTimeMillis: 900000 | |||
# 配置检测连接是否有效 | |||
validationQuery: SELECT 1 FROM DUAL | |||
testWhileIdle: true | |||
testOnBorrow: false | |||
testOnReturn: false | |||
# 打开PSCache,并且指定每个连接上PSCache的大小 | |||
poolPreparedStatements: true | |||
maxPoolPreparedStatementPerConnectionSize: 20 | |||
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 | |||
filters: stat,wall,log4j | |||
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录 | |||
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 | |||
# 配置DruidStatFilter | |||
webStatFilter: | |||
enabled: true | |||
url-pattern: "/*" | |||
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" | |||
# 配置DruidStatViewServlet | |||
statViewServlet: | |||
url-pattern: "/druid/*" | |||
# IP白名单(没有配置或者为空,则允许所有访问) | |||
allow: 127.0.0.1,192.168.163.1 | |||
# IP黑名单 (存在共同时,deny优先于allow) | |||
deny: 192.168.1.73 | |||
# 禁用HTML页面上的“Reset All”功能 | |||
reset-enable: false | |||
# 登录名 | |||
login-username: admin | |||
# 登录密码 | |||
login-password: 123456 | |||
# Redis数据源 | |||
redis: | |||
# 缓存库默认索引0 | |||
database: 0 | |||
# Redis服务器地址 | |||
host: 127.0.0.1 | |||
# Redis服务器连接端口 | |||
port: 6379 | |||
# Redis服务器连接密码(默认为空) | |||
password: | |||
# 连接超时时间(毫秒) | |||
timeout: 6000 | |||
# 默认的数据过期时间,主要用于shiro权限管理 | |||
expire: 2592000 | |||
jedis: | |||
pool: | |||
max-active: 1000 # 连接池最大连接数(使用负值表示没有限制) | |||
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) | |||
max-idle: 10 # 连接池中的最大空闲连接 | |||
min-idle: 1 # 连接池中的最小空闲连接 | |||
servlet: | |||
multipart: | |||
# 过滤springmvc的文件上传 | |||
enabled: false | |||
# 单个文件最大值 | |||
max-file-size: 50MB | |||
# 上传文件总的最大值 | |||
max-request-size: 100MB | |||
#邮件配置 | |||
mail: | |||
# 设置邮箱主机 | |||
host: smtp.qq.com | |||
# 开启邮箱POP3/SMTP服务,获取客户端授权码(注意并不是邮箱密码,而是授权码) | |||
password: | |||
# 邮箱的用户名 | |||
username: | |||
properties: | |||
mail: | |||
smtp: | |||
# 设置是否需要认证,如果为true,那么用户名和密码就必须的。如果设置false,可以不设置用户名和密码,当然也得看你的对接的平台是否支持无密码进行访问的。 | |||
auth: true | |||
starttls: | |||
# STARTTLS[1] 是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。 | |||
enable: true | |||
require: true | |||
alisms: | |||
accessKeyId: | |||
accessKeySecret: | |||
regionId: cn-hangzhou | |||
signName: 拓恒 | |||
templateCode: | |||
kafka: | |||
common: | |||
enable: false | |||
bootstrap-servers: 101.132.127.1:19092 | |||
alg-online-results-topic: alg-task-results | |||
alg-online-results-group-id: alg-task-group-prod | |||
alg-offline-tasks-topic: alg-offline-tasks | |||
alg-online-tasks-topic: alg-online-tasks | |||
file: | |||
#上传的服务器上的映射文件夹 | |||
accessPath: /uploads/ | |||
#静态资源对外暴露的访问路径 | |||
staticAccessPath: /** | |||
#静态资源实际存储路径 | |||
uploadFolder: /data/java/tuoheng_lc/uploads/ | |||
# Shiro | |||
shiro: | |||
cipher-key: f/SX5TIve5WWzT4aQlABJA== | |||
cookie-name: shiro-cookie2 | |||
user: | |||
# 登录地址 | |||
loginUrl: /login | |||
# 权限认证失败地址 | |||
unauthorizedUrl: /unauth | |||
# 首页地址 | |||
indexUrl: /index | |||
# 验证码开关 | |||
captchaEnabled: true | |||
# 验证码类型 math 数组计算 char 字符 | |||
captchaType: math | |||
cookie: | |||
# 设置Cookie的域名 默认空,即当前访问的域名 | |||
domain: | |||
# 设置cookie的有效访问路径 | |||
path: / | |||
# 设置HttpOnly属性 | |||
httpOnly: true | |||
# 设置Cookie的过期时间,天为单位 | |||
maxAge: 30 | |||
session: | |||
# Session超时时间(默认30分钟) | |||
expireTime: 300 | |||
# 同步session到数据库的周期(默认1分钟) | |||
dbSyncPeriod: 1 | |||
# 相隔多久检查一次session的有效性,默认就是10分钟 | |||
validationInterval: 10 | |||
# 代码生成 | |||
generate: | |||
# 作者 | |||
author: 拓恒 | |||
# 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool | |||
packageName: com.tuoheng.system | |||
# 模块名 | |||
moduleName: tuoheng-system | |||
# 自动去除表前缀,默认是true | |||
autoRemovePre: true | |||
# 表前缀(生成类名不会包含表前缀,多个用逗号分隔) | |||
tablePrefix: sys_ | |||
xxl: | |||
enable: true | |||
job: | |||
admin: | |||
addresses: http://172.16.1.31:8110/xxl-job-admin | |||
accessToken: tuoheng | |||
executor: | |||
appname: xxl-job-executor-lc | |||
address: | |||
ip: | |||
# 多个后台,端口号不能相同 | |||
port: 9999 | |||
logpath: /data/java/logs/xxl-job/jobhandler | |||
logretentiondays: 15 |
@@ -0,0 +1,214 @@ | |||
# 端口配置 | |||
server: | |||
port: 9099 | |||
servlet: | |||
# 项目的前缀名 | |||
context-path: /api | |||
tomcat: | |||
basedir: /data/java/tuoheng_lc/uploads/temp | |||
# 自定义配置 | |||
tuoheng: | |||
# 图片域名 | |||
image-url: https://image.t-aaron.com/ | |||
# OSS域名 | |||
oss-url: https://ta-tech-image.oss-cn-shanghai.aliyuncs.com | |||
# 机场域名 | |||
airport-url: http://124.223.218.130:9060/ | |||
# 视频域名 | |||
video-url: https://vod.play.t-aaron.com/ | |||
# 高德Key | |||
gaodeKey: 8eb26a06684d34501e5a56dcc2f5af15 | |||
# 通道地址 | |||
live-channel-domain-url: https://streaming.t-aaron.com/ | |||
#阿里云 | |||
aliyuncsVod: | |||
accessKeyId: LTAI5tE7KWN9fsuGU7DyfYF4 | |||
accessKeySecret: yPPCyfsqWgrTuoz5H4sisY0COclx8E | |||
roleArn: acs:ram::1399733914954856:role/ramosstest | |||
bucketName: ta-tech-image | |||
spring: | |||
# 配置数据源 | |||
datasource: | |||
# 使用阿里的Druid连接池 | |||
type: com.alibaba.druid.pool.DruidDataSource | |||
driver-class-name: com.mysql.cj.jdbc.Driver | |||
# 填写你数据库的url、登录名、密码和数据库名 | |||
url: jdbc:mysql://192.168.11.242:3306/tuoheng_lc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8&useSSL=true&tinyInt1isBit=false | |||
username: root | |||
password: idontcare | |||
druid: | |||
# 连接池的配置信息 | |||
# 初始连接数 | |||
initialSize: 5 | |||
# 最小连接池数量 | |||
minIdle: 5 | |||
# 最大连接池数量 | |||
maxActive: 20 | |||
# 配置获取连接等待超时的时间 | |||
maxWait: 60000 | |||
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 | |||
timeBetweenEvictionRunsMillis: 60000 | |||
# 配置一个连接在池中最小生存的时间,单位是毫秒 | |||
minEvictableIdleTimeMillis: 300000 | |||
# 配置一个连接在池中最大生存的时间,单位是毫秒 | |||
maxEvictableIdleTimeMillis: 900000 | |||
# 配置检测连接是否有效 | |||
validationQuery: SELECT 1 FROM DUAL | |||
testWhileIdle: true | |||
testOnBorrow: false | |||
testOnReturn: false | |||
# 打开PSCache,并且指定每个连接上PSCache的大小 | |||
poolPreparedStatements: true | |||
maxPoolPreparedStatementPerConnectionSize: 20 | |||
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 | |||
filters: stat,wall,log4j | |||
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录 | |||
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 | |||
# 配置DruidStatFilter | |||
webStatFilter: | |||
enabled: true | |||
url-pattern: "/*" | |||
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" | |||
# 配置DruidStatViewServlet | |||
statViewServlet: | |||
url-pattern: "/druid/*" | |||
# IP白名单(没有配置或者为空,则允许所有访问) | |||
allow: 127.0.0.1,192.168.163.1 | |||
# IP黑名单 (存在共同时,deny优先于allow) | |||
deny: 192.168.1.73 | |||
# 禁用HTML页面上的“Reset All”功能 | |||
reset-enable: false | |||
# 登录名 | |||
login-username: admin | |||
# 登录密码 | |||
login-password: 123456 | |||
# Redis数据源 | |||
redis: | |||
# 缓存库默认索引0 | |||
database: 0 | |||
# Redis服务器地址 | |||
host: 192.168.11.242 | |||
# Redis服务器连接端口 | |||
port: 6379 | |||
# Redis服务器连接密码(默认为空) | |||
password: | |||
# 连接超时时间(毫秒) | |||
timeout: 6000 | |||
# 默认的数据过期时间,主要用于shiro权限管理 | |||
expire: 2592000 | |||
jedis: | |||
pool: | |||
max-active: 1000 # 连接池最大连接数(使用负值表示没有限制) | |||
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) | |||
max-idle: 10 # 连接池中的最大空闲连接 | |||
min-idle: 1 # 连接池中的最小空闲连接 | |||
servlet: | |||
multipart: | |||
# 过滤springmvc的文件上传 | |||
enabled: false | |||
# 单个文件最大值 | |||
max-file-size: 50MB | |||
# 上传文件总的最大值 | |||
max-request-size: 100MB | |||
#邮件配置 | |||
mail: | |||
# 设置邮箱主机 | |||
host: smtp.qq.com | |||
# 开启邮箱POP3/SMTP服务,获取客户端授权码(注意并不是邮箱密码,而是授权码) | |||
password: | |||
# 邮箱的用户名 | |||
username: | |||
properties: | |||
mail: | |||
smtp: | |||
# 设置是否需要认证,如果为true,那么用户名和密码就必须的。如果设置false,可以不设置用户名和密码,当然也得看你的对接的平台是否支持无密码进行访问的。 | |||
auth: true | |||
starttls: | |||
# STARTTLS[1] 是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。 | |||
enable: true | |||
require: true | |||
alisms: | |||
accessKeyId: | |||
accessKeySecret: | |||
regionId: cn-hangzhou | |||
signName: 拓恒 | |||
templateCode: | |||
kafka: | |||
common: | |||
enable: false | |||
bootstrap-servers: 192.168.11.242:9092 | |||
alg-online-results-topic: alg-task-results | |||
alg-online-results-group-id: hhz-test | |||
alg-offline-tasks-topic: alg-offline-tasks | |||
alg-online-tasks-topic: alg-online-tasks | |||
file: | |||
#上传的服务器上的映射文件夹 | |||
accessPath: /uploads/ | |||
#静态资源对外暴露的访问路径 | |||
staticAccessPath: /** | |||
#静态资源实际存储路径 | |||
uploadFolder: /data/java/tuoheng_lc/uploads/ | |||
# Shiro | |||
shiro: | |||
cipher-key: f/SX5TIve5WWzT4aQlABJA== | |||
cookie-name: shiro-cookie2 | |||
user: | |||
# 登录地址 | |||
loginUrl: /login | |||
# 权限认证失败地址 | |||
unauthorizedUrl: /unauth | |||
# 首页地址 | |||
indexUrl: /index | |||
# 验证码开关 | |||
captchaEnabled: true | |||
# 验证码类型 math 数组计算 char 字符 | |||
captchaType: math | |||
cookie: | |||
# 设置Cookie的域名 默认空,即当前访问的域名 | |||
domain: | |||
# 设置cookie的有效访问路径 | |||
path: / | |||
# 设置HttpOnly属性 | |||
httpOnly: true | |||
# 设置Cookie的过期时间,天为单位 | |||
maxAge: 30 | |||
session: | |||
# Session超时时间(默认30分钟) | |||
expireTime: 300 | |||
# 同步session到数据库的周期(默认1分钟) | |||
dbSyncPeriod: 1 | |||
# 相隔多久检查一次session的有效性,默认就是10分钟 | |||
validationInterval: 10 | |||
# 代码生成 | |||
generate: | |||
# 作者 | |||
author: 拓恒 | |||
# 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool | |||
packageName: com.tuoheng.system | |||
# 模块名 | |||
moduleName: tuoheng-system | |||
# 自动去除表前缀,默认是true | |||
autoRemovePre: true | |||
# 表前缀(生成类名不会包含表前缀,多个用逗号分隔) | |||
tablePrefix: sys_ | |||
xxl: | |||
enable: true | |||
job: | |||
admin: | |||
addresses: http://192.168.11.241:8110/xxl-job-admin | |||
accessToken: tuoheng | |||
executor: | |||
appname: xxl-job-executor-lc | |||
address: | |||
ip: | |||
# 多个后台,端口号不能相同 | |||
port: 9999 | |||
logpath: /data/java/logs/xxl-job/jobhandler | |||
logretentiondays: 15 |