代码提交

master
徐杰盟 2023-09-13 17:15:39 +08:00
parent bb7740cc7b
commit d916e045ad
142 changed files with 3819 additions and 6414 deletions

View File

@ -1,4 +1,4 @@
# 漳河大坝安全api
# 清洗规则api
## 目录
```

92
pom.xml
View File

@ -11,9 +11,9 @@
</parent>
<groupId>com.whdc</groupId>
<artifactId>zhdbaqapi</artifactId>
<artifactId>rule-service</artifactId>
<version>1.0</version>
<description>漳河大坝安全api</description>
<description>清洗规则api</description>
<properties>
<maven.compiler.source>8</maven.compiler.source>
@ -53,6 +53,20 @@
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.github.jeffreyning</groupId>
<artifactId>mybatisplus-plus</artifactId>
<version>1.7.2-RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
@ -72,17 +86,6 @@
</dependency>
<!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.30.0</version>
</dependency><!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId>
<version>1.30.0</version>
</dependency>
<!-- 提供Redis连接池 -->
<dependency>
<groupId>org.apache.commons</groupId>
@ -119,7 +122,7 @@
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.80</version>
<version>1.2.83</version>
</dependency>
<!-- fastjson end-->
@ -134,7 +137,7 @@
<!--
将 jar 安装到本地库仓库,方便下面的打包插件统一处理
mvn install:install-file -Dfile=C:/lisai/workspase/zhsk/zhdbaq-service/lib/DmJdbcDriver18.jar -DgroupId="com.dameng" -DartifactId=DmJdbcDriver18 -Dversion="8.1.2.114" -Dpackaging=jar
mvn install:install-file -Dfile=D:\Work\GS\Java\rule-service\lib\DmJdbcDriver18.jar -DgroupId="com.dameng" -DartifactId=DmJdbcDriver18 -Dversion="8.1.2.114" -Dpackaging=jar
-->
<dependency>
<groupId>com.dameng</groupId>
@ -174,68 +177,19 @@
</dependency>
<!-- joda-time end -->
</dependencies>
<build>
<plugins>
<!-- 1.生成的jar中不要包含pom.xml和pom.properties这两个文件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<!-- 是否要把第三方jar加入到类构建路径 -->
<addClasspath>true</addClasspath>
<!-- 外部依赖jar包的最终位置 -->
<classpathPrefix>lib/</classpathPrefix>
<!-- 项目启动类 -->
<mainClass>com.whdc.zhdbaqapi.ZhDbaqApiApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!--2.拷贝依赖到jar外面的lib目录-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.5</version>
<executions>
<execution>
<id>copy-lib</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${copy.jar.directory}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<!-- 3.把jar包拷贝到指定目录位置 -->
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<configuration>
<target>
<copy todir="${copy.jar.directory}">
<fileset dir="${project.build.directory}">
<include name="${project.artifactId}.${project.version}.jar"/>
</fileset>
</copy>
</target>
</configuration>
<goals>
<goal>run</goal>
<goal>repackage</goal>
</goals>
</execution>
</executions>

46
sql/dm_start.sql Normal file
View File

@ -0,0 +1,46 @@
CREATE TABLE "SHZH_IOT"."E_RULE"
(
"ID" INT IDENTITY(1, 1) NOT NULL,
"NAME" VARCHAR(50),
"ITEM" VARCHAR(50),
"MIN" VARCHAR(50),
"MAX" VARCHAR(50),
"DIFF_MAX" VARCHAR(50),
"DURATION" INTEGER,
"CREATETIME" DATETIME(0),
"DEL" VARCHAR(2) DEFAULT 1,
"LEADING_TIME" INTEGER,
"LAG_TIME" INTEGER);
COMMENT ON TABLE "SHZH_IOT"."E_RULE" IS '规则表';
COMMENT ON COLUMN "SHZH_IOT"."E_RULE"."ID" IS '主键id';
COMMENT ON COLUMN "SHZH_IOT"."E_RULE"."NAME" IS '规则名称';
COMMENT ON COLUMN "SHZH_IOT"."E_RULE"."ITEM" IS '测站类型';
COMMENT ON COLUMN "SHZH_IOT"."E_RULE"."MIN" IS '最小值';
COMMENT ON COLUMN "SHZH_IOT"."E_RULE"."MAX" IS '最小值';
COMMENT ON COLUMN "SHZH_IOT"."E_RULE"."DIFF_MAX" IS '两条数据之间的最大差值';
COMMENT ON COLUMN "SHZH_IOT"."E_RULE"."DURATION" IS '时间段, 单位 s';
COMMENT ON COLUMN "SHZH_IOT"."E_RULE"."CREATETIME" IS '创建时间';
COMMENT ON COLUMN "SHZH_IOT"."E_RULE"."DEL" IS '1: 未删除 0: 删除';
COMMENT ON COLUMN "SHZH_IOT"."E_RULE"."LEADING_TIME" IS '接收超出时间,单位: s ,指接收时间超前范围';
COMMENT ON COLUMN "SHZH_IOT"."E_RULE"."LAG_TIME" IS '接收滞后时间,单位: s ,指接收时间滞后范围';
CREATE TABLE "SHZH_IOT"."E_STATION_RULES"
(
"ID" INT IDENTITY(1, 1) NOT NULL,
"STCD" VARCHAR(50),
"RULE_ID" INTEGER,
"SORT" INTEGER,
"CREATETIME" DATETIME(0),
"DEL" INT DEFAULT 0) ;
COMMENT ON TABLE "SHZH_IOT"."E_STATION_RULES" IS '测站关联规则表';
COMMENT ON COLUMN "SHZH_IOT"."E_STATION_RULES"."ID" IS '主键id';
COMMENT ON COLUMN "SHZH_IOT"."E_STATION_RULES"."STCD" IS '测站编码';
COMMENT ON COLUMN "SHZH_IOT"."E_STATION_RULES"."RULE_ID" IS '规则id';
COMMENT ON COLUMN "SHZH_IOT"."E_STATION_RULES"."SORT" IS '顺序';
COMMENT ON COLUMN "SHZH_IOT"."E_STATION_RULES"."CREATETIME" IS '创建时间';
COMMENT ON COLUMN "SHZH_IOT"."E_STATION_RULES"."DEL" IS '1: 未删除 0: 删除';

View File

@ -1,39 +1,36 @@
package com.whdc.zhdbaqapi;
import cn.dev33.satoken.SaManager;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.BeansException;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
/**
* @author
* @date 2022-06-26 0:17
*/
@Slf4j
@EnableWebMvc
@EnableKnife4j
@EnableCaching
@EnableScheduling
@SpringBootApplication
@MapperScan("com.whdc.zhdbaqapi.mapper")
public class ZhDbaqApiApplication {
public static void main(String[] args) {
try {
SpringApplication.run(ZhDbaqApiApplication.class, args);
System.out.println("启动成功Sa-Token 配置如下:" + SaManager.getConfig());
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>> 启动完成 <<<<<<<<<<<<<<<<<<<<<<<<<<<");
} catch (BeansException e) {
e.printStackTrace();
log.error(e.getMessage(), e);
}
}
}
package com.whdc;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.BeansException;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
/**
* @author
* @date 2022-06-26 0:17
*/
@Slf4j
@EnableWebMvc
@EnableKnife4j
@EnableCaching
@EnableScheduling
@SpringBootApplication
@MapperScan("com.whdc.mapper")
public class RuleApiApplication {
public static void main(String[] args) {
try {
SpringApplication.run(RuleApiApplication.class, args);
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>> 启动完成 <<<<<<<<<<<<<<<<<<<<<<<<<<<");
} catch (BeansException e) {
e.printStackTrace();
log.error(e.getMessage(), e);
}
}
}

View File

@ -1,53 +1,53 @@
package com.whdc.zhdbaqapi.annotation;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;
/**
* @author
* @date 2022-04-27 12:08
*/
@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = DateTimeRangeValidator.class)
@Documented
public @interface DateTimeRange {
String message() default "{message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String datafmt() default "yyyy-MM-dd HH:mm:ss";
/**
*
*
* @return
*/
String startField();
/**
*
*
* @return
*/
String endField();
/**
*
*
* @return
*/
long interval();
/**
*
*
* @return
*/
TimeUnit timeUnit() default TimeUnit.HOURS;
}
package com.whdc.annotation;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;
/**
* @author
* @date 2022-04-27 12:08
*/
@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = DateTimeRangeValidator.class)
@Documented
public @interface DateTimeRange {
String message() default "{message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String datafmt() default "yyyy-MM-dd HH:mm:ss";
/**
*
*
* @return
*/
String startField();
/**
*
*
* @return
*/
String endField();
/**
*
*
* @return
*/
long interval();
/**
*
*
* @return
*/
TimeUnit timeUnit() default TimeUnit.HOURS;
}

View File

@ -1,63 +1,63 @@
package com.whdc.zhdbaqapi.annotation;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
* @author
* @date 2022-04-27 11:55
*/
public class DateTimeRangeValidator implements ConstraintValidator<DateTimeRange, Object> {
private String datefmt;
private String startField;
private String endField;
private long interval;
private TimeUnit timeUnit;
@Override
public void initialize(DateTimeRange dateTimeRange) {
this.datefmt = dateTimeRange.datafmt();
this.startField = dateTimeRange.startField();
this.endField = dateTimeRange.endField();
this.interval = dateTimeRange.interval();
this.timeUnit = dateTimeRange.timeUnit();
}
@Override
public boolean isValid(Object obj, ConstraintValidatorContext context) {
try {
if (obj == null) {
return false;
}
if (StringUtils.isBlank(this.startField) || StringUtils.isBlank(this.endField)) {
return false;
}
String stmval = BeanUtils.getProperty(obj, this.startField);
String etmval = BeanUtils.getProperty(obj, this.endField);
if (StringUtils.isBlank(stmval) || StringUtils.isBlank(etmval)) {
return false;
}
DateFormat df = new SimpleDateFormat(this.datefmt);
Date stm = df.parse(stmval);
Date etm = df.parse(etmval);
long dateDiff = stm.getTime() - etm.getTime();
return Math.abs(dateDiff) < this.timeUnit.toMillis(this.interval);
} catch (Exception e) {
return false;
}
}
package com.whdc.annotation;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
* @author
* @date 2022-04-27 11:55
*/
public class DateTimeRangeValidator implements ConstraintValidator<DateTimeRange, Object> {
private String datefmt;
private String startField;
private String endField;
private long interval;
private TimeUnit timeUnit;
@Override
public void initialize(DateTimeRange dateTimeRange) {
this.datefmt = dateTimeRange.datafmt();
this.startField = dateTimeRange.startField();
this.endField = dateTimeRange.endField();
this.interval = dateTimeRange.interval();
this.timeUnit = dateTimeRange.timeUnit();
}
@Override
public boolean isValid(Object obj, ConstraintValidatorContext context) {
try {
if (obj == null) {
return false;
}
if (StringUtils.isBlank(this.startField) || StringUtils.isBlank(this.endField)) {
return false;
}
String stmval = BeanUtils.getProperty(obj, this.startField);
String etmval = BeanUtils.getProperty(obj, this.endField);
if (StringUtils.isBlank(stmval) || StringUtils.isBlank(etmval)) {
return false;
}
DateFormat df = new SimpleDateFormat(this.datefmt);
Date stm = df.parse(stmval);
Date etm = df.parse(etmval);
long dateDiff = stm.getTime() - etm.getTime();
return Math.abs(dateDiff) < this.timeUnit.toMillis(this.interval);
} catch (Exception e) {
return false;
}
}
}

View File

@ -1,86 +1,86 @@
package com.whdc.zhdbaqapi.aspect;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.support.spring.PropertyPreFilters;
import com.whdc.zhdbaqapi.utils.ReqUtils;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
/**
* @author
* @date 2022-06-26 0:34
*/
@Aspect
@Component
@Slf4j
public class WebLogAspect {
private void print(String fmt, Object... str) {
log.info(fmt, str);
}
@Pointcut("execution(public * com.whdc.zhdbaqapi.controller.*Controller.*(..))")
public void controllerPointcut() {
}
@Before("controllerPointcut()")
public void doBefore(JoinPoint joinPoint) throws Throwable {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
Signature signature = joinPoint.getSignature();
String name = signature.getName();
print("------------- 开始 -------------");
print("请求: {} {}", name, request.getRequestURI(), request.getMethod());
print("方法: {} {}.{}", name, signature.getDeclaringTypeName(), name);
print("地址: {} {}", name, ReqUtils.getIpAddress(request));
Object[] args = joinPoint.getArgs();
Object[] arguments = new Object[args.length];
for (int i = 0; i < args.length; i++) {
if (args[i] instanceof ServletRequest
|| args[i] instanceof ServletResponse
|| args[i] instanceof MultipartFile) {
continue;
}
arguments[i] = args[i];
}
String[] excludeProperties = {"password", "file"};
PropertyPreFilters filters = new PropertyPreFilters();
PropertyPreFilters.MySimplePropertyPreFilter excludeFilter = filters.addFilter();
excludeFilter.addExcludes(excludeProperties);
print("参数: {} {}", name, JSONObject.toJSONString(arguments, excludeFilter));
}
@Around("controllerPointcut()")
public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
long startTime = System.currentTimeMillis();
Signature signature = proceedingJoinPoint.getSignature();
String name = signature.getName();
Object result = proceedingJoinPoint.proceed();
String[] excludeProperties = {"password", "file"};
PropertyPreFilters filters = new PropertyPreFilters();
PropertyPreFilters.MySimplePropertyPreFilter excludeFilter = filters.addFilter();
excludeFilter.addExcludes(excludeProperties);
// print("返回结果: {}", JSONObject.toJSONString(result, excludeFilter));
print("------------- 耗时:{} {} ms -------------", name, System.currentTimeMillis() - startTime);
return result;
}
package com.whdc.aspect;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.support.spring.PropertyPreFilters;
import com.whdc.utils.ReqUtils;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
/**
* @author
* @date 2022-06-26 0:34
*/
@Aspect
@Component
@Slf4j
public class WebLogAspect {
private void print(String fmt, Object... str) {
log.info(fmt, str);
}
@Pointcut("execution(public * com.whdc.controller.*Controller.*(..))")
public void controllerPointcut() {
}
@Before("controllerPointcut()")
public void doBefore(JoinPoint joinPoint) throws Throwable {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
Signature signature = joinPoint.getSignature();
String name = signature.getName();
print("------------- 开始 -------------");
print("请求: {} {}", name, request.getRequestURI(), request.getMethod());
print("方法: {} {}.{}", name, signature.getDeclaringTypeName(), name);
print("地址: {} {}", name, ReqUtils.getIpAddress(request));
Object[] args = joinPoint.getArgs();
Object[] arguments = new Object[args.length];
for (int i = 0; i < args.length; i++) {
if (args[i] instanceof ServletRequest
|| args[i] instanceof ServletResponse
|| args[i] instanceof MultipartFile) {
continue;
}
arguments[i] = args[i];
}
String[] excludeProperties = {"password", "file"};
PropertyPreFilters filters = new PropertyPreFilters();
PropertyPreFilters.MySimplePropertyPreFilter excludeFilter = filters.addFilter();
excludeFilter.addExcludes(excludeProperties);
print("参数: {} {}", name, JSONObject.toJSONString(arguments, excludeFilter));
}
@Around("controllerPointcut()")
public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
long startTime = System.currentTimeMillis();
Signature signature = proceedingJoinPoint.getSignature();
String name = signature.getName();
Object result = proceedingJoinPoint.proceed();
String[] excludeProperties = {"password", "file"};
PropertyPreFilters filters = new PropertyPreFilters();
PropertyPreFilters.MySimplePropertyPreFilter excludeFilter = filters.addFilter();
excludeFilter.addExcludes(excludeProperties);
// print("返回结果: {}", JSONObject.toJSONString(result, excludeFilter));
print("------------- 耗时:{} {} ms -------------", name, System.currentTimeMillis() - startTime);
return result;
}
}

View File

@ -1,21 +1,20 @@
package com.whdc.zhdbaqapi.component;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
* @author
* @date 2022-07-17 15:33
*/
@Component
@Slf4j
public class MyPostConstruct {
@PostConstruct
public void initCache() {
log.debug("加载缓存");
}
}
package com.whdc.component;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
* @author
* @date 2022-07-17 15:33
*/
@Component
@Slf4j
public class MyPostConstruct {
@PostConstruct
public void initCache() {
log.debug("加载缓存");
}
}

View File

@ -1,40 +1,40 @@
package com.whdc.zhdbaqapi.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author
* @date 2022-06-26 1:09
*/
@EnableWebMvc
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
/**
*
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
// 设置允许跨域的路由
registry.addMapping("/**")
// 设置允许跨域请求的域名------------修改此行
.allowedOriginPatterns("*")
// 是否允许证书cookies
.allowCredentials(true)
// 设置允许的方法
.allowedMethods("*")
// 跨域允许时间
.maxAge(3600);
}
}
package com.whdc.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author
* @date 2022-06-26 1:09
*/
@EnableWebMvc
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
/**
*
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
// 设置允许跨域的路由
registry.addMapping("/**")
// 设置允许跨域请求的域名------------修改此行
.allowedOriginPatterns("*")
// 是否允许证书cookies
.allowCredentials(true)
// 设置允许的方法
.allowedMethods("*")
// 跨域允许时间
.maxAge(3600);
}
}

View File

@ -1,66 +1,66 @@
package com.whdc.zhdbaqapi.config;
import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
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 springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @author
* @date 2022-04-06 9:49
*/
@EnableSwagger2
@Configuration
public class Knife4jConfiguration {
private final OpenApiExtensionResolver openApiExtensionResolver;
@Autowired
public Knife4jConfiguration(OpenApiExtensionResolver openApiExtensionResolver) {
this.openApiExtensionResolver = openApiExtensionResolver;
}
private ApiInfo getApiInfoBuilder() {
return new ApiInfoBuilder()
.title("漳河大坝安全api")
.description("# 漳河大坝安全api RESTful APIs")
.termsOfServiceUrl("http://219.138.108.99:19000/dbaq")
.contact(new Contact("湖北纬皓端成", null, null))
.version("1.0")
.build();
}
@Bean(value = "base")
public Docket base() {
return new Docket(DocumentationType.OAS_30)
.apiInfo(getApiInfoBuilder())
//分组名称
.groupName("v1.0")
.select()
//这里指定Controller扫描包路径
.apis(RequestHandlerSelectors.basePackage("com.whdc.zhdbaqapi.controller"))
.paths(PathSelectors.any())
.build()
.extensions(openApiExtensionResolver.buildExtensions("v1.0"));
}
@Bean(value = "md")
public Docket md() {
return new Docket(DocumentationType.OAS_30)
.apiInfo(getApiInfoBuilder())
.select()
// ...
.build()
// 构建扩展插件-自定义文档 group
.extensions(openApiExtensionResolver.buildExtensions("doc-knife4j-1.0.0"))
.groupName("接口说明文档");
}
package com.whdc.config;
import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
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 springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @author
* @date 2022-04-06 9:49
*/
@EnableSwagger2
@Configuration
public class Knife4jConfiguration {
private final OpenApiExtensionResolver openApiExtensionResolver;
@Autowired
public Knife4jConfiguration(OpenApiExtensionResolver openApiExtensionResolver) {
this.openApiExtensionResolver = openApiExtensionResolver;
}
private ApiInfo getApiInfoBuilder() {
return new ApiInfoBuilder()
.title("山洪接收中心数据清洗api")
.description("# 山洪接收中心数据清洗api RESTful APIs")
.termsOfServiceUrl("http://219.138.108.99:19000/jszx")
.contact(new Contact("湖北纬皓端成", null, null))
.version("1.0")
.build();
}
@Bean(value = "base")
public Docket base() {
return new Docket(DocumentationType.OAS_30)
.apiInfo(getApiInfoBuilder())
//分组名称
.groupName("v1.0")
.select()
//这里指定Controller扫描包路径
.apis(RequestHandlerSelectors.basePackage("com.whdc.controller"))
.paths(PathSelectors.any())
.build()
.extensions(openApiExtensionResolver.buildExtensions("v1.0"));
}
@Bean(value = "md")
public Docket md() {
return new Docket(DocumentationType.OAS_30)
.apiInfo(getApiInfoBuilder())
.select()
// ...
.build()
// 构建扩展插件-自定义文档 group
.extensions(openApiExtensionResolver.buildExtensions("doc-knife4j-1.0.0"))
.groupName("接口说明文档");
}
}

View File

@ -1,34 +1,34 @@
package com.whdc.zhdbaqapi.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author
* @date 2022-04-08 0:33
*/
@Configuration
@MapperScan("com.whdc.zhdbaqapi.mapper")
public class MyBatisPlusConfig {
/*
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}*/
/**
* ,mybatis, MybatisConfiguration#useDeprecatedExecutor = false
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 分页插件
return interceptor;
}
}
package com.whdc.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author
* @date 2022-04-08 0:33
*/
@Configuration
@MapperScan("com.whdc.mapper")
public class MyBatisPlusConfig {
/*
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}*/
/**
* ,mybatis, MybatisConfiguration#useDeprecatedExecutor = false
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 分页插件
return interceptor;
}
}

View File

@ -0,0 +1,79 @@
package com.whdc.config;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Signature;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.util.Date;
import static com.whdc.model.MyConstant.REC;
@Slf4j
@Component
@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
public class MybatisInterceptor implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
String sqlId = mappedStatement.getId();
log.debug("------sqlId------" + sqlId);
SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
Object parameter = invocation.getArgs()[1];
log.debug("------sqlCommandType------" + sqlCommandType);
if (parameter == null) {
return invocation.proceed();
}
if (SqlCommandType.INSERT == sqlCommandType || SqlCommandType.UPDATE == sqlCommandType) {
Field[] fields = parameter.getClass().getDeclaredFields();
// Field[] fields = oConvertUtils.getAllFields(parameter);
for (Field field : fields) {
if (field.getType().equals(String.class)) {
field.setAccessible(true);
Object o = field.get(parameter);
field.setAccessible(false);
String newVal = o == null ? "" : String.valueOf(o).trim();
field.setAccessible(true);
field.set(parameter, newVal);
field.setAccessible(false);
}
// 注入创建时间
if ("createtime".equals(field.getName())) {
field.setAccessible(true);
Object local_createDate = field.get(parameter);
field.setAccessible(false);
if (local_createDate == null || "".equals(local_createDate)) {
field.setAccessible(true);
field.set(parameter, new Date());
field.setAccessible(false);
}
}
// 删除标识
if ("del".equals(field.getName())) {
field.setAccessible(true);
Object local_createDate = field.get(parameter);
field.setAccessible(false);
if (local_createDate == null || "".equals(local_createDate)) {
field.setAccessible(true);
field.set(parameter, REC);
field.setAccessible(false);
}
}
}
}
return invocation.proceed();
}
}

View File

@ -1,41 +1,60 @@
package com.whdc.zhdbaqapi.config;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.util.Arrays;
/**
* @author
* @date 2022-04-22 14:13
*/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(@Qualifier("simpleClientHttpRequestFactory") ClientHttpRequestFactory factory){
RestTemplate restTemplate = new RestTemplate(factory);
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Arrays.asList(
MediaType.APPLICATION_JSON,
MediaType.APPLICATION_OCTET_STREAM,
MediaType.TEXT_HTML));
restTemplate.getMessageConverters().add(mappingJackson2HttpMessageConverter);
return restTemplate;
}
@Bean
public RestTemplate restTemplate() {
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(10000); // 单位毫秒
requestFactory.setReadTimeout(30000); // 单位毫秒
return new RestTemplate(requestFactory);
}
}
package com.whdc.config;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.util.Arrays;
/**
* @author
* @date 2022-04-22 14:13
*/
@Configuration
public class RestTemplateConfig {
@Order(1)
@Bean
public RestTemplate restTemplate(@Qualifier("simpleClientHttpRequestFactory") ClientHttpRequestFactory factory){
RestTemplate restTemplate = new RestTemplate(factory);
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Arrays.asList(
MediaType.APPLICATION_JSON,
MediaType.APPLICATION_OCTET_STREAM,
MediaType.TEXT_HTML));
restTemplate.getMessageConverters().add(mappingJackson2HttpMessageConverter);
return restTemplate;
}
@Order(2)
@Bean
public RestTemplate restTemplate() {
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(10000); // 单位毫秒
requestFactory.setReadTimeout(30000); // 单位毫秒
return new RestTemplate(requestFactory);
}
@Order(4)
@Bean("redisTemplate")
public RedisTemplate<String, String> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
RedisTemplate<String, String> template = new RedisTemplate<>();
template.setConnectionFactory(lettuceConnectionFactory);
// 设置键和值的序列化方式默认使用JDK的序列化方式
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new StringRedisSerializer());
return template;
}
}

View File

@ -0,0 +1,32 @@
package com.whdc.config;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @author XuSan
* @date 2021/1/11 16:39
* @explain 线
*/
@Configuration
//@Slf4j
public class ThreadPools implements AsyncConfigurer {
// 全核心线程池
@Bean(value = "intensivePool", destroyMethod = "shutdown")
public ExecutorService intensive() {
return Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors(), new ThreadFactoryBuilder()
.setNameFormat("fixed -- %d").build());
}
// public static Void handleException(Throwable ex) {
// log.error("请求出现异常:" + ex.getMessage(), ex);
// return null;
// }
}

View File

@ -0,0 +1,120 @@
package com.whdc.controller;
import com.whdc.model.bean.ItemType;
import com.whdc.model.dto.FindRuleDto;
import com.whdc.model.entity.ERule;
import com.whdc.model.group.Insert;
import com.whdc.model.group.Update;
import com.whdc.service.IERuleService;
import com.whdc.utils.ResultJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Objects;
/**
* @author xusan
* @since 2023-03-19
*/
@Api(tags = "规则管理 - Controller")
@RestController
@RequestMapping("/v2/eRule")
public class ERuleController {
@Autowired
private IERuleService ieRuleService;
@ApiOperation(value = "查询所有")
@PostMapping(value = "list")
public ResultJson list() {
return ResultJson.ok(ieRuleService.list());
}
@ApiOperation(value = "分页查询")
@PostMapping(value = "page")
public ResultJson page(@RequestBody FindRuleDto ruleDto) {
return ResultJson.ok(ieRuleService.page(ruleDto));
}
@ApiOperation(value = "添加")
@PostMapping(value = "save")
public ResultJson insert(@RequestBody @Validated(Insert.class) ERule model) {
if (CollectionUtils.isNotEmpty(
ieRuleService.lambdaQuery()
.eq(ERule::getName,String.valueOf(model.getName()).trim())
.list())
){
return ResultJson.error("该名称重复");
}
if (
StringUtils.isBlank(model.getDiffMax())
&& StringUtils.isBlank(model.getMin())
&& StringUtils.isBlank(model.getMax())
){
return ResultJson.error("请设置规则");
}
if (!ItemType.map().containsKey(model.getItem())) {
return ResultJson.error("规则类型不存在");
}
return ResultJson.ok(ieRuleService.save(model));
}
@ApiOperation(value = "修改")
@PostMapping(value = "edit")
public ResultJson update(@RequestBody @Validated(Update.class) ERule model) {
if (CollectionUtils.isNotEmpty(
ieRuleService.lambdaQuery()
.eq(ERule::getName,String.valueOf(model.getName()).trim())
.ne(ERule::getId, model.getId())
.list())
){
return ResultJson.error("该名称重复");
}
return ResultJson.ok(ieRuleService.updateById(model));
}
@ApiOperation(value = "删除")
@GetMapping(value = "del/{id}")
public ResultJson delete(@PathVariable("id") Integer id) {
if (Objects.isNull(ieRuleService.getById(id))) {
return ResultJson.error("当前数据不存在");
}
return ResultJson.ok(ieRuleService.removeById(id));
}
@ApiOperation(value = "获取规则类型")
@GetMapping(value = "getItem")
public ResultJson getItem() {
return ResultJson.ok(ItemType.list());
}
}

View File

@ -0,0 +1,112 @@
package com.whdc.controller;
import com.whdc.model.dto.FindStationDto;
import com.whdc.model.entity.EStationRules;
import com.whdc.model.group.Insert;
import com.whdc.model.group.Update;
import com.whdc.service.IERuleService;
import com.whdc.service.IEStationRulesService;
import com.whdc.utils.ResultJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Objects;
/**
* @author xusan
* @since 2023-03-19
*/
@Api(tags = "站点规则管理 - Controller")
@RestController
@RequestMapping("/v2/eStationRule")
public class EStationRulesController {
@Autowired
private IEStationRulesService ieStationRulesService;
@Autowired
private IERuleService ieruleService;
@ApiOperation(value = "查询全部")
@PostMapping(value = "find")
public ResultJson find(@RequestBody FindStationDto eStationRules) {
return ResultJson.ok(ieStationRulesService.find(eStationRules));
}
@ApiOperation(value = "分页查询")
@PostMapping(value = "page")
public ResultJson page(@RequestBody FindStationDto eStationRules) {
return ResultJson.ok(ieStationRulesService.page(eStationRules));
}
@ApiOperation(value = "新增测站规则")
@PostMapping(value = "save")
public ResultJson bind(@RequestBody @Validated({Insert.class}) EStationRules eStationRules) {
if (Objects.isNull(ieruleService.getById(eStationRules.getRuleId()))) {
return ResultJson.error("当前规则不存在");
}
if (CollectionUtils.isNotEmpty(
ieStationRulesService.lambdaQuery()
.eq(EStationRules::getStcd,eStationRules.getStcd())
.eq(EStationRules::getRuleId,eStationRules.getRuleId())
.list()
)){
return ResultJson.error("当前规则和测站已绑定");
}
return ResultJson.ok(ieStationRulesService.save(eStationRules));
}
@ApiOperation(value = "修改测站规则")
@PostMapping(value = "update")
public ResultJson bindUpdate(@RequestBody @Validated({Update.class}) EStationRules eStationRules) {
if (Objects.isNull(ieStationRulesService.getById(eStationRules.getId()))) {
return ResultJson.error("当前数据不存在");
}
if (Objects.isNull(ieruleService.getById(eStationRules.getRuleId()))) {
return ResultJson.error("当前规则不存在");
}
if (CollectionUtils.isNotEmpty(
ieStationRulesService.lambdaQuery()
.eq(EStationRules::getStcd,eStationRules.getStcd())
.eq(EStationRules::getRuleId,eStationRules.getRuleId())
.ne(EStationRules::getId,eStationRules.getId())
.list()
)){
return ResultJson.error("当前规则和测站已绑定");
}
return ResultJson.ok(ieStationRulesService.updateById(eStationRules));
}
@ApiOperation(value = "删除")
@GetMapping(value = "del/{id}")
public ResultJson del(@PathVariable Integer id) {
EStationRules model = ieStationRulesService.getById(id);
if (Objects.isNull(model)) {
return ResultJson.error("当前数据不存在");
}
return ResultJson.ok(ieStationRulesService.removeById(id,model));
}
}

View File

@ -1,70 +1,68 @@
package com.whdc.zhdbaqapi.exception;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
import java.util.StringJoiner;
/**
*
*
* @author
* @date 2022-04-09 15:38
*/
@Controller
@RequestMapping("${server.error.path:${error.path:/error}}")
public class CustomErrorController extends BasicErrorController {
@Value("${server.error.path:${error.path:/error}}")
private String path;
public CustomErrorController(ServerProperties serverProperties) {
super(new DefaultErrorAttributes(), serverProperties.getError());
}
/**
* JSON
* json
*/
@Override
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
HttpStatus status = getStatus(request);
Map<String, Object> map = new HashMap<String, Object>(16);
Map<String, Object> originalMsgMap = getErrorAttributes(request, ErrorAttributeOptions.defaults());
String path = (String) originalMsgMap.get("path");
String error = (String) originalMsgMap.get("error");
String message = (String) originalMsgMap.get("message");
StringJoiner joiner = new StringJoiner(",", "[", "]");
joiner.add(path).add(error).add(message);
map.put("code", status.value());
map.put("msg", joiner.toString());
return new ResponseEntity<Map<String, Object>>(map, status);
}
/**
* HTML
* html
*/
@Override
public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
//请求的状态
HttpStatus status = getStatus(request);
response.setStatus(getStatus(request).value());
Map<String, Object> model = getErrorAttributes(request, ErrorAttributeOptions.defaults());
ModelAndView modelAndView = resolveErrorView(request, response, status, model);
//指定自定义的视图
return (modelAndView == null ? new ModelAndView("error", model) : modelAndView);
}
}
package com.whdc.exception;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
import java.util.StringJoiner;
/**
*
*
* @author
* @date 2022-04-09 15:38
*/
@Controller
@RequestMapping("${server.error.path:${error.path:/error}}")
public class CustomErrorController extends BasicErrorController {
@Value("${server.error.path:${error.path:/error}}")
private String path;
public CustomErrorController(ServerProperties serverProperties) {
super(new DefaultErrorAttributes(), serverProperties.getError());
}
/**
* JSON
*/
@Override
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
HttpStatus status = getStatus(request);
Map<String, Object> map = new HashMap<String, Object>(16);
Map<String, Object> originalMsgMap = getErrorAttributes(request, ErrorAttributeOptions.defaults());
String path = (String) originalMsgMap.get("path");
String error = (String) originalMsgMap.get("error");
String message = (String) originalMsgMap.get("message");
StringJoiner joiner = new StringJoiner(",", "[", "]");
joiner.add(path).add(error).add(message);
map.put("code", status.value());
map.put("msg", joiner.toString());
return new ResponseEntity<Map<String, Object>>(map, status);
}
/**
* HTML
*/
@Override
public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
//请求的状态
HttpStatus status = getStatus(request);
response.setStatus(getStatus(request).value());
Map<String, Object> model = getErrorAttributes(request, ErrorAttributeOptions.defaults());
ModelAndView modelAndView = resolveErrorView(request, response, status, model);
//指定自定义的视图
return (modelAndView == null ? new ModelAndView("error", model) : modelAndView);
}
}

View File

@ -1,25 +1,25 @@
package com.whdc.zhdbaqapi.exception;
/**
* @author
* @date 2022-06-26 10:58
*/
public class MyException extends RuntimeException {
private String msg;
public String getMsg() {
return msg;
}
public MyException(String msg) {
super(msg);
this.msg = msg;
}
public MyException(String msg, Throwable e) {
super(msg, e);
this.msg = msg;
}
}
package com.whdc.exception;
/**
* @author
* @date 2022-06-26 10:58
*/
public class MyException extends RuntimeException {
private final String msg;
public String getMsg() {
return msg;
}
public MyException(String msg) {
super(msg);
this.msg = msg;
}
public MyException(String msg, Throwable e) {
super(msg, e);
this.msg = msg;
}
}

View File

@ -1,206 +1,199 @@
package com.whdc.zhdbaqapi.exception;
import cn.dev33.satoken.exception.NotLoginException;
import com.whdc.zhdbaqapi.utils.ResultJson;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.HttpMediaTypeNotSupportedException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.annotation.PostConstruct;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.ValidationException;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.Set;
/**
* @author
* @date 2022-06-26 10:58
*/
@RestControllerAdvice
@Slf4j
public class MyExceptionHandler {
@PostConstruct
public void init() {
}
/**
*
*
* @param e
*/
private void saveLogs(Exception e) {
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(MissingServletRequestParameterException.class)
public ResultJson handleMissingServletRequestParameterException(MissingServletRequestParameterException e) {
log.error("缺少请求参数", e);
return ResultJson.error(ResultJson.PARAM_ERROR, "缺少请求参数");
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(HttpMessageNotReadableException.class)
public ResultJson handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
log.error("缺少请求参数", e);
return ResultJson.error(ResultJson.PARAM_ERROR, "参数格式错误。使用 json 格式字符串传递参数");
}
/**
* 400 - Bad Request---------------------
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResultJson handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
try {
// log.error("参数验证失败 " + e.getMessage(), e);
BindingResult result = e.getBindingResult();
if (result.getErrorCount() > 0) {
StringBuffer strbuf = new StringBuffer();
for (ObjectError err : result.getAllErrors()) {
if (strbuf.length() > 0) {
strbuf.append(";");
}
strbuf.append(err.getDefaultMessage());
}
return ResultJson.error(ResultJson.PARAM_ERROR, "参数验证失败:" + strbuf.toString());
}
return ResultJson.error(ResultJson.PARAM_ERROR, "参数验证失败");
} catch (Exception err) {
return ResultJson.error(ResultJson.PARAM_ERROR, "参数验证失败," + err.getMessage());
}
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(BindException.class)
public ResultJson handleBindException(BindException e) {
BindingResult result = e.getBindingResult();
FieldError error = result.getFieldError();
String field = error.getField();
String code = error.getDefaultMessage();
String message = String.format("%s:%s", field, code);
log.error("参数绑定失败", message);
return ResultJson.error(ResultJson.PARAM_ERROR, "参数绑定失败," + message);
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(ConstraintViolationException.class)
public ResultJson handleServiceException(ConstraintViolationException e) {
Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
ConstraintViolation<?> violation = violations.iterator().next();
String message = violation.getMessage();
log.error("参数验证失败 " + message, e);
return ResultJson.error(ResultJson.PARAM_ERROR, "参数验证失败," + message);
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(ValidationException.class)
public ResultJson handleValidationException(ValidationException e) {
log.error("参数验证失败 " + e.getMessage(), e);
return ResultJson.error(ResultJson.PARAM_ERROR, "参数验证失败");
}
/**
* 405 - Method Not Allowed
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
public ResultJson handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
log.error("不支持当前请求方法", e.getMessage());
return ResultJson.error(ResultJson.METHOD_NOT_ALLOWED, "不支持当前请求方法");
}
/**
* 415 - Unsupported Media Type
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(HttpMediaTypeNotSupportedException.class)
public ResultJson handleHttpMediaTypeNotSupportedException(Exception e) {
log.error("不支持当前媒体类型", e.getMessage());
return ResultJson.error(ResultJson.NSUPPORTED_MEDIA_TYPE, "不支持当前媒体类型");
}
/**
* :
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(DataIntegrityViolationException.class)
public ResultJson handleException(DataIntegrityViolationException e) {
log.error("操作数据库出现异常: ", e);
return ResultJson.error(ResultJson.FAIL, "操作数据库出现异常");
}
/**
*
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(Exception.class)
public ResultJson handleException(Exception e) {
log.error("通用异常:" + e.getMessage(), e);
if (e instanceof SQLIntegrityConstraintViolationException) {
return ResultJson.error(ResultJson.FAIL, "数据库主键冲突,请联系管理员");
} else if (e instanceof org.springframework.web.servlet.NoHandlerFoundException) {
return ResultJson.error(ResultJson.FAIL, "找不到资源");
}
return ResultJson.error(ResultJson.SERVER_ERROR, "内部服务器错误");
}
/**
* 500 - Internal Server Error
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(MyException.class)
public ResultJson handleServiceException(MyException e) {
log.error("业务逻辑异常", e);
//RetryableException 无法单独捕获处理,只能简单处理一下返回值
String msg = e.getMsg();
if (StringUtils.isNotBlank(e.getMsg()) && e.getMsg().startsWith("Connection refused: connect executing POST")) {
msg = "连接被拒绝";
}
return ResultJson.error(ResultJson.FAIL, msg);
}
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(NotLoginException.class)
public ResultJson handleNotLoginException(NotLoginException e) {
log.error("业务逻辑异常", e);
return ResultJson.error(ResultJson.UNAUTHORIZED, e.getMessage());
}
}
package com.whdc.exception;
import com.whdc.utils.ResultJson;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.HttpMediaTypeNotSupportedException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.annotation.PostConstruct;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.ValidationException;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.Set;
/**
* @author
* @date 2022-06-26 10:58
*/
@RestControllerAdvice
@Slf4j
public class MyExceptionHandler {
@PostConstruct
public void init() {
}
/**
*
*
* @param e
*/
private void saveLogs(Exception e) {
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(MissingServletRequestParameterException.class)
public ResultJson handleMissingServletRequestParameterException(MissingServletRequestParameterException e) {
log.error("缺少请求参数", e);
return ResultJson.error(ResultJson.PARAM_ERROR, "缺少请求参数");
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(HttpMessageNotReadableException.class)
public ResultJson handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
log.error("缺少请求参数", e);
return ResultJson.error(ResultJson.PARAM_ERROR, "参数格式错误。使用 json 格式字符串传递参数");
}
/**
* 400 - Bad Request---------------------
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResultJson handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
try {
// log.error("参数验证失败 " + e.getMessage(), e);
BindingResult result = e.getBindingResult();
if (result.getErrorCount() > 0) {
StringBuffer strbuf = new StringBuffer();
for (ObjectError err : result.getAllErrors()) {
if (strbuf.length() > 0) {
strbuf.append(";");
}
strbuf.append(err.getDefaultMessage());
}
return ResultJson.error(ResultJson.PARAM_ERROR, "参数验证失败1" + strbuf);
}
return ResultJson.error(ResultJson.PARAM_ERROR, "参数验证失败2");
} catch (Exception err) {
return ResultJson.error(ResultJson.PARAM_ERROR, "参数验证失败3," + err.getMessage());
}
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(BindException.class)
public ResultJson handleBindException(BindException e) {
BindingResult result = e.getBindingResult();
FieldError error = result.getFieldError();
String field = error.getField();
String code = error.getDefaultMessage();
String message = String.format("%s:%s", field, code);
log.error("参数绑定失败", message);
return ResultJson.error(ResultJson.PARAM_ERROR, "参数绑定失败," + message);
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(ConstraintViolationException.class)
public ResultJson handleServiceException(ConstraintViolationException e) {
Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
ConstraintViolation<?> violation = violations.iterator().next();
String message = violation.getMessage();
log.error("参数验证失败4 " + message, e);
return ResultJson.error(ResultJson.PARAM_ERROR, "参数验证失败5," + message);
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(ValidationException.class)
public ResultJson handleValidationException(ValidationException e) {
log.error("参数验证失败6 " + e.getMessage());
e.printStackTrace();
return ResultJson.error(ResultJson.PARAM_ERROR, "参数验证失败7");
}
/**
* 405 - Method Not Allowed
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
public ResultJson handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
log.error("不支持当前请求方法", e.getMessage());
return ResultJson.error(ResultJson.METHOD_NOT_ALLOWED, "不支持当前请求方法");
}
/**
* 415 - Unsupported Media Type
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(HttpMediaTypeNotSupportedException.class)
public ResultJson handleHttpMediaTypeNotSupportedException(Exception e) {
log.error("不支持当前媒体类型", e.getMessage());
return ResultJson.error(ResultJson.NSUPPORTED_MEDIA_TYPE, "不支持当前媒体类型");
}
/**
* :
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(DataIntegrityViolationException.class)
public ResultJson handleException(DataIntegrityViolationException e) {
log.error("操作数据库出现异常: ", e);
return ResultJson.error(ResultJson.FAIL, "操作数据库出现异常");
}
/**
*
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(Exception.class)
public ResultJson handleException(Exception e) {
log.error("通用异常:" + e.getMessage(), e);
if (e instanceof SQLIntegrityConstraintViolationException) {
return ResultJson.error(ResultJson.FAIL, "数据库主键冲突,请联系管理员");
} else if (e instanceof org.springframework.web.servlet.NoHandlerFoundException) {
return ResultJson.error(ResultJson.FAIL, "找不到资源");
}
return ResultJson.error(ResultJson.SERVER_ERROR, "内部服务器错误");
}
/**
* 500 - Internal Server Error
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(MyException.class)
public ResultJson handleServiceException(MyException e) {
log.error("业务逻辑异常", e);
//RetryableException 无法单独捕获处理,只能简单处理一下返回值
String msg = e.getMsg();
if (StringUtils.isNotBlank(e.getMsg()) && e.getMsg().startsWith("Connection refused: connect executing POST")) {
msg = "连接被拒绝";
}
return ResultJson.error(ResultJson.FAIL, msg);
}
}

View File

@ -0,0 +1,28 @@
package com.whdc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.model.dto.FindRuleDto;
import com.whdc.model.entity.ERule;
import org.apache.ibatis.annotations.Param;
/**
* <p>
* Mapper
* </p>
*
* @author xusan
* @since 2023-03-19
*/
public interface ERuleMapper extends BaseMapper<ERule> {
/**
*
*
* @param page
* @param findDto
* @return
*/
IPage<ERule> page(@Param("page") IPage<ERule> page, @Param("findDto") FindRuleDto findDto);
}

View File

@ -0,0 +1,28 @@
package com.whdc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.model.dto.FindStationDto;
import com.whdc.model.entity.EStationRules;
import com.whdc.model.vo.EStationRulesVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* Mapper
* </p>
*
* @author xusan
* @since 2023-03-19
*/
public interface EStationRulesMapper extends BaseMapper<EStationRules> {
IPage<EStationRulesVo> page(@Param("page") IPage<FindStationDto> page, @Param("findDto") FindStationDto findDto);
List<EStationRulesVo> find(@Param("findDto") FindStationDto findDto);
}

View File

@ -0,0 +1,25 @@
package com.whdc.model;
/**
* @author xusan
* @date 2023/4/27 9:41
*/
public class MyConstant {
public static final String
// 删除
DEL = "0",
// 未删除
REC = "1",
// redis KEY
TOKEN_KEY = "SW_TOKEN_SJQX";
/**
* -
*/
public static final String ROLE_PUSH = "data_zh_om";
}

View File

@ -0,0 +1,72 @@
package com.whdc.model.bean;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* @author xusan
* @date 202332210:32:54
* @description:
*/
public enum ItemType {
YU_LIANG("雨量", "P"),
SHUI_WEI("水位", "Z"),
LIU_LIANG("流量", "Q");
private String name;
private String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
ItemType(String name, String value) {
this.name = name;
this.value = value;
}
public static List<JSONObject> list() {
List<JSONObject> list = new ArrayList<>();
ItemType[] values = ItemType.values();
for (ItemType type : values) {
JSONObject obj = new JSONObject();
obj.put("name", type.getName());
obj.put("value", type.getValue());
list.add(obj);
}
return list;
}
public static Map<String, ItemType> map() {
Map<String, ItemType> map = new HashMap<>();
ItemType[] values = ItemType.values();
for (ItemType e : values) {
map.put(e.getValue(), e);
}
return map;
}
public static ItemType getByValue(String value) {
if (StringUtils.isEmpty(value)) return null;
return map().get(value);
}
}

View File

@ -0,0 +1,72 @@
package com.whdc.model.dto;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotEmpty;
/**
* @author xusan
* @date 202332008:57:22
*/
@Data
public class ERuleDto {
/**
*
*/
@ApiParam(value = "主键自增", required = true, example = "0")
@ApiModelProperty(value = "主键自增", required = true, dataType = "Integer", example = "0")
private Integer id;
/**
*
*/
@ApiParam(value = "规则名称", required = true, example = "规则名称")
@ApiModelProperty(value = "规则名称", required = true, dataType = "String", example = "规则名称")
@NotEmpty(message = "规则名称不能为空")
@Max(50)
private String name;
/**
* 1:
* 2:
*/
@ApiParam(value = "1:正常值范围规则 2:最大差值规则", required = false, example = "1:正常值范围规则 2:最大差值规则 ")
@ApiModelProperty(value = "1:正常值范围规则 2:最大差值规则, required = false ", dataType = "String", example = " 1:正常值范围规则 2:最大差值规则 ")
@NotEmpty(message = "规则类型不能为空")
private String ruleType;
/**
*
*/
@ApiParam(value = "测站类型", required = true, example = "测站类型")
@ApiModelProperty(value = "测站类型", required = true, dataType = "String", example = "测站类型")
@NotEmpty(message = "测站类型不能为空")
@Max(2)
private String type;
/**
*
*/
@ApiParam(value = "最小值", required = false, example = "最小值")
@ApiModelProperty(value = "最小值", required = false, dataType = "String", example = "最小值")
@Max(100)
private String min;
/**
*
*/
@ApiParam(value = "最大值", required = false, example = "最大值")
@ApiModelProperty(value = "最大值", required = false, dataType = "String", example = "最大值")
@Max(100)
private String max;
/**
*
*/
@ApiParam(value = "两条数据之间的差值", required = false, example = "两条数据之间的差值")
@ApiModelProperty(value = "两条数据之间的差值", required = false, dataType = "String", example = "两条数据之间的差值")
@Max(100)
private String lastDataMax;
}

View File

@ -1,35 +1,31 @@
package com.whdc.zhdbaqapi.model.dto;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Pattern;
@Data
public class FindPageDto {
// 页数从1开始默认1
@ApiModelProperty(value = "当前页", example = "1")
private Integer pageNumber = 1;
// 每页记录数默认10
@ApiModelProperty(value = "每页条数", example = "10")
private Integer pageSize = 10;
// 是否统计总数,默认 true
@ApiModelProperty(value = "是否统计总数。数据量大时,为了提高查询效率,可以将该字段置为 false", example = "10")
private Boolean searchCount = true;
// 排序字段
@ApiModelProperty(value = "排序字段")
private String sortField;
@ApiModelProperty(value = "排序顺序", example = "asc")
@Pattern(message = "排序顺序,仅支持 asc 或者 desc", regexp = "asc|desc")
private String sortOrder = "asc";
public Page getPage() {
return new Page(pageNumber, pageSize, searchCount);
}
}
package com.whdc.model.dto;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Pattern;
@Data
public class FindPageDto {
@ApiModelProperty(value = "当前页", example = "1")
private Integer pageNumber = 1;
@ApiModelProperty(value = "每页条数", example = "10")
private Integer pageSize = 10;
@ApiModelProperty(value = "是否统计总数。数据量大时,为了提高查询效率,可以将该字段置为 false", example = "10")
private Boolean searchCount = true;
@ApiModelProperty(value = "排序字段")
private String sortField;
@ApiModelProperty(value = "排序顺序", example = "asc")
@Pattern(message = "排序顺序,仅支持 asc 或者 desc", regexp = "asc|desc")
private String sortOrder = "asc";
public Page getPage() {
return new Page(pageNumber, pageSize, searchCount);
}
}

View File

@ -0,0 +1,38 @@
package com.whdc.model.dto;
import com.whdc.annotation.DateTimeRange;
import com.whdc.model.group.Find;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import java.util.concurrent.TimeUnit;
/**
* @author xusan
* @date 202332008:57:22
*/
@Data
@DateTimeRange(message = "时间间隔不能超过 31 天", startField = "stm", endField = "etm", interval = 31, timeUnit = TimeUnit.DAYS)
public class FindRuleDto extends FindPageDto {
@ApiModelProperty(value = "规则名称", dataType = "java.lang.String")
private String name;
@ApiModelProperty(value = "规则类型", dataType = "java.lang.String")
private String item;
@ApiModelProperty(value = "起始时间", example = "2023-03-20 10:00:00")
@NotEmpty(message = "起始时间不能为空", groups = Find.class)
@Pattern(regexp = "^[1-9]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\\s+(20|21|22|23|[0-1]\\d):[0-5]\\d:[0-5]\\d$",
message = "时间格式应为yyyy-MM-dd HH:mm:ss", groups = Find.class)
private String stm;
@ApiModelProperty(value = "截止时间", example = "2023-03-20 10:00:00")
@NotEmpty(message = "截止时间不能为空", groups = Find.class)
@Pattern(regexp = "^[1-9]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\\s+(20|21|22|23|[0-1]\\d):[0-5]\\d:[0-5]\\d$",
message = "时间格式应为yyyy-MM-dd HH:mm:ss", groups = Find.class)
private String etm;
}

View File

@ -0,0 +1,22 @@
package com.whdc.model.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author xusan
* @date 202332008:57:22
*/
@Data
public class FindStationDto extends FindPageDto {
@ApiModelProperty(value = "规则名称", dataType = "java.lang.String")
private String name;
@ApiModelProperty(value = "测站编码", dataType = "java.lang.String")
private String stcd;
@ApiModelProperty(value = "适用测站类型", dataType = "java.lang.String")
private String item;
}

View File

@ -0,0 +1,148 @@
package com.whdc.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.whdc.model.group.Insert;
import com.whdc.model.group.Update;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.Locale;
import static com.whdc.model.MyConstant.DEL;
import static com.whdc.model.MyConstant.REC;
/**
* <p>
*
* </p>
*
* @author xusan
* @date 2023-03-19
*/
@Data
@ApiModel(description = "正常范围规则表")
@Accessors(chain = true)
@TableName("E_RULE")
public class ERule extends Model<ERule> {
private static final long serialVersionUID = 1L;
/**
*
*/
@ApiParam(value = "主键自增", required = true)
@ApiModelProperty(value = "主键自增", required = true, dataType = "Integer")
@TableId(value = "ID", type = IdType.AUTO)
@NotNull(message = "主键不能为空", groups = {Update.class})
private Integer id;
/**
*
*/
@ApiParam(value = "规则名称", required = true, example = "")
@ApiModelProperty(value = "规则名称", required = true, dataType = "String")
@TableField(value = "NAME", updateStrategy = FieldStrategy.NOT_EMPTY)
@NotEmpty(message = "规则名称不能为空", groups = {Insert.class,Update.class})
@Max(50)
private String name;
/**
*
*/
@ApiParam(value = "规则类型", required = true, example = "")
@ApiModelProperty(value = "规则类型", required = true, dataType = "String")
@TableField(value = "ITEM", updateStrategy = FieldStrategy.NOT_EMPTY)
@NotEmpty(message = "规则类型不能为空", groups = {Insert.class,Update.class})
@Max(50)
private String item;
public void setItem(String item) {
if (StringUtils.isNotBlank(item)){
item = item.toUpperCase(Locale.ROOT);
}
this.item = item;
}
/**
*
*/
@ApiParam(value = "最小值", required = false, example = "")
@ApiModelProperty(value = "最小值", required = false, dataType = "String")
@TableField(value = "MIN", updateStrategy = FieldStrategy.NOT_EMPTY)
@Max(50)
private String min;
/**
*
*/
@ApiParam(value = "最大值", required = false, example = "")
@ApiModelProperty(value = "最大值", required = false, dataType = "String")
@TableField(value = "MAX", updateStrategy = FieldStrategy.NOT_EMPTY)
@Max(50)
private String max;
/**
*
*/
@ApiParam(value = "两条数据之间的最大差值", required = false, example = "")
@ApiModelProperty(value = "两条数据之间的最大差值", required = false, dataType = "String")
@TableField(value = "DIFF_MAX", updateStrategy = FieldStrategy.NOT_EMPTY)
private String diffMax;
/**
*
*/
@ApiParam(value = "时间段, 单位 s", required = false, example = "")
@ApiModelProperty(value = "时间段, 单位 s", required = false, dataType = "Integer")
@TableField(value = "DURATION", updateStrategy = FieldStrategy.NOT_EMPTY)
@Max(10)
private Integer duration;
/**
* ,: s ,
*/
@ApiParam(value = "接收超前时间,单位: s ,指接收时间超前范围", required = false, example = "")
@ApiModelProperty(value = "接收超前时间,单位: s ,指接收时间超前范围", required = false, dataType = "Integer")
@TableField(value = "LEADING_TIME", updateStrategy = FieldStrategy.NOT_EMPTY)
@Max(10)
private Integer leadingTime;
/**
* ,: s ,
*/
@ApiParam(value = "接收滞后时间,单位: s ,指接收时间滞后范围", required = false, example = "")
@ApiModelProperty(value = "接收滞后时间,单位: s ,指接收时间滞后范围", required = false, dataType = "Integer")
@TableField(value = "LAG_TIME", updateStrategy = FieldStrategy.NOT_EMPTY)
@Max(10)
private Integer lagTime;
/**
*
*/
@ApiParam(value = "创建时间", required = false)
@ApiModelProperty(value = "创建时间", required = false, dataType = "Date")
@TableField(value = "CREATETIME", updateStrategy = FieldStrategy.NOT_EMPTY)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createtime;
/**
* 1: 0:
*/
@ApiParam(value = "1: 未删除 0: 删除", required = false, example = "1")
@ApiModelProperty(value = "1: 未删除 0: 删除", required = false, dataType = "String", example = "1")
@TableField(value = "DEL", fill = FieldFill.INSERT, updateStrategy = FieldStrategy.NOT_EMPTY)
@TableLogic(value = REC,delval = DEL)
@Max(2)
private String del;
}

View File

@ -0,0 +1,90 @@
package com.whdc.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.whdc.model.group.Insert;
import com.whdc.model.group.Update;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
import java.util.Date;
import static com.whdc.model.MyConstant.DEL;
import static com.whdc.model.MyConstant.REC;
/**
* <p>
*
* </p>
*
* @author xusan
* @date 2023-03-19
*/
@Data
@ApiModel(description = "测站关联规则表")
@Accessors(chain = true)
@TableName("E_STATION_RULES")
public class EStationRules extends Model<EStationRules> {
private static final long serialVersionUID = 1L;
/**
* id
*/
@ApiParam(value = "主键id", required = true)
@ApiModelProperty(value = "主键id", required = true, dataType = "Integer")
@TableId(value = "ID", type = IdType.AUTO)
@NotNull(message = "主键id不能为空",groups = {Update.class})
private Integer id;
/**
*
*/
@ApiParam(value = "测站编码", required = true)
@ApiModelProperty(value = "测站编码", required = false, dataType = "String", example = "")
@TableField(value = "STCD")
@NotNull(message = "测站编码不能为空",groups = {Insert.class})
@Max(50)
private String stcd;
/**
* id
*/
@ApiParam(value = "规则id", required = true)
@ApiModelProperty(value = "规则id", required = false, dataType = "Integer", example = "")
@TableField(value = "RULE_ID", updateStrategy = FieldStrategy.IGNORED)
@NotNull(message = "规则不能为空",groups = {Insert.class})
private Integer ruleId;
/**
*
*/
@ApiParam(value = "顺序", required = true )
@ApiModelProperty(value = "顺序, required = false ", dataType = "Integer")
@TableField(value = "SORT", updateStrategy = FieldStrategy.NOT_EMPTY)
private Integer sort;
/**
*
*/
@ApiParam(value = "创建时间", required = false)
@ApiModelProperty(value = "创建时间", required = false, dataType = "Date", example = "")
@TableField(value = "CREATETIME", updateStrategy = FieldStrategy.NOT_EMPTY)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createtime;
/**
* 0: 1
*/
@ApiParam(value = "1: 未删除 0: 删除", required = false)
@ApiModelProperty(value = "1: 未删除 0: 删除", required = false, dataType = "String", example = "")
@TableField(fill = FieldFill.INSERT, updateStrategy = FieldStrategy.IGNORED)
@TableLogic(value = REC,delval = DEL)
@Max(2)
private String del;
}

View File

@ -1,8 +1,8 @@
package com.whdc.zhdbaqapi.model.group;
/**
* @author
* @date 2022-06-26 15:13
*/
public interface Delete {
}
package com.whdc.model.group;
/**
* @author
* @date 2022-06-26 15:13
*/
public interface Delete {
}

View File

@ -1,8 +1,8 @@
package com.whdc.zhdbaqapi.model.group;
/**
* @author
* @date 2022-06-27 22:27
*/
public interface Find {
}
package com.whdc.model.group;
/**
* @author
* @date 2022-06-27 22:27
*/
public interface Find {
}

View File

@ -1,8 +1,8 @@
package com.whdc.zhdbaqapi.model.group;
/**
* @author
* @date 2022-06-26 15:12
*/
public interface Insert {
}
package com.whdc.model.group;
/**
* @author
* @date 2022-06-26 15:12
*/
public interface Insert {
}

View File

@ -0,0 +1,8 @@
package com.whdc.model.group;
/**
* @author
* @date 2022-06-26 15:12
*/
public interface Update {
}

View File

@ -0,0 +1,31 @@
package com.whdc.model.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* @author
* @date 2022-06-26 10:43
*/
@Data
@Accessors(chain = true) // chain = true 实现链式调用
@JsonInclude(JsonInclude.Include.NON_NULL) // 表示序列化非null属性
public class ERuleVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Integer id;
@ApiModelProperty(value = "规则id")
private Integer ruleId;
@ApiModelProperty(value = "规则类型")
private String ruleType;
}

View File

@ -0,0 +1,45 @@
package com.whdc.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* @author xusan
* @date 202332814:07:28
*/
@Data
@Accessors(chain = true) // chain = true 实现链式调用
@JsonInclude(JsonInclude.Include.NON_NULL) // 表示序列化非null属性
public class EStationRulesVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Integer id;
@ApiModelProperty(value = "规则id")
private Integer ruleId;
@ApiModelProperty(value = "测站编码")
private String stcd;
@ApiModelProperty(value = "规则类型")
private String item;
@ApiModelProperty(value = "规则名称")
private String name;
@ApiModelProperty(value = "顺序")
private String sort;
@ApiModelProperty(value = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createtime;
}

View File

@ -0,0 +1,36 @@
package com.whdc.model.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @author
* @date 2022-06-26 10:43
*/
@Data
@Accessors(chain = true) // chain = true 实现链式调用
@JsonInclude(JsonInclude.Include.NON_NULL) // 表示序列化非null属性
public class ValidateVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "是否通过 1是可0是否")
private Integer isPass = 1;
@ApiModelProperty(value = "提示信息")
private String msg;
@ApiModelProperty(value = "验证不通过规则id")
private String npRuleCode;
@ApiModelProperty(value = "规则id")
private List<String> ruleCodes = new ArrayList<>();
}

View File

@ -0,0 +1,25 @@
package com.whdc.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.whdc.model.dto.FindRuleDto;
import com.whdc.model.entity.ERule;
/**
* <p>
*
* </p>
*
* @author xusan
* @since 2023-03-19
*/
public interface IERuleService extends IService<ERule> {
/**
*
* @param eData
* @return
*/
IPage<ERule> page(FindRuleDto eData);
}

View File

@ -0,0 +1,30 @@
package com.whdc.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.whdc.model.dto.FindStationDto;
import com.whdc.model.entity.EStationRules;
import com.whdc.model.vo.EStationRulesVo;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author xusan
* @since 2023-03-19
*/
public interface IEStationRulesService extends IService<EStationRules> {
// 获取所有规则分页
IPage<EStationRulesVo> page(FindStationDto ruleDto);
// 获取所有规则
List<EStationRulesVo> find(FindStationDto ruleDto);
boolean removeById(Integer id, EStationRules model);
void delRule(Integer eRuleId);
}

View File

@ -0,0 +1,44 @@
package com.whdc.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.whdc.mapper.ERuleMapper;
import com.whdc.model.dto.FindRuleDto;
import com.whdc.model.entity.ERule;
import com.whdc.service.IERuleService;
import com.whdc.service.IEStationRulesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* <p>
*
* </p>
*
* @author xusan
* @since 2023-03-19
*/
@Service
public class ERuleServiceImpl extends ServiceImpl<ERuleMapper, ERule> implements IERuleService {
@Autowired
private IEStationRulesService ieStationRulesService;
@Override
public IPage<ERule> page(FindRuleDto findDto) {
return baseMapper.page(findDto.getPage(), findDto);
}
@Override
public boolean updateById(ERule model){
boolean update = super.updateById(model);
if (update){
ieStationRulesService.delRule(model.getId());
}
return update;
}
}

View File

@ -0,0 +1,83 @@
package com.whdc.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.whdc.mapper.EStationRulesMapper;
import com.whdc.model.dto.FindStationDto;
import com.whdc.model.entity.EStationRules;
import com.whdc.model.vo.EStationRulesVo;
import com.whdc.service.IEStationRulesService;
import com.whdc.valid.component.RuleRedisService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author xusan
* @since 2023-03-19
*/
@Service
public class EStationRulesServiceImpl extends ServiceImpl<EStationRulesMapper, EStationRules> implements IEStationRulesService {
@Autowired
private RuleRedisService ruleRedis;
@Override
public IPage<EStationRulesVo> page(FindStationDto ruleDto) {
return baseMapper.page(ruleDto.getPage(), ruleDto);
}
@Override
public List<EStationRulesVo> find(FindStationDto ruleDto) {
return baseMapper.find(ruleDto);
}
@Override
public boolean updateById(EStationRules model){
boolean update = super.updateById(model);
if (update){
ruleRedis.delRule(model.getStcd());
}
return update;
}
@Override
public boolean removeById( Integer id,EStationRules model){
boolean update = super.removeById(id);
if (update){
ruleRedis.delRule(model.getStcd());
}
return update;
}
@Override
public void delRule(Integer eRuleId) {
List<EStationRules> list = this.lambdaQuery().eq(EStationRules::getRuleId, eRuleId)
.list();
if (CollectionUtils.isNotEmpty(list)) {
for (EStationRules rules : list) {
ruleRedis.delRule(rules.getStcd());
}
}
}
}

View File

@ -0,0 +1,29 @@
package com.whdc.strategy;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Context
*/
@Component
public class SaveContext {
private final Map<String, SyncSaveInterface> strategyMap = new ConcurrentHashMap<>();
@Autowired
public SaveContext(Map<String, SyncSaveInterface> strategyMap) {
this.strategyMap.putAll(strategyMap);
}
// 新增
public boolean syncSave(String channel, JSONObject jsonObject) {
return strategyMap.get(channel).syncSave(jsonObject);
}
}

View File

@ -0,0 +1,14 @@
package com.whdc.strategy;
import com.alibaba.fastjson.JSONObject;
/**
* @author xusan
* @date 2023/4/20 16:28
*/
public interface SyncSaveInterface {
boolean syncSave(JSONObject jsonObject);
}

View File

@ -1,88 +1,129 @@
package com.whdc.zhdbaqapi.utils;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.io.FileInputStream;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
/**
* @author
* @date 2022-07-22 8:46
*/
public class DataUtils {
private static Map<String, String> extension2Scheme = new HashMap<String, String>();
static {
extension2Scheme.put("jpg", "data:image/jpg;base64,");
extension2Scheme.put("jpeg", "data:image/jpeg;base64,");
extension2Scheme.put("png", "data:image/png;base64,");
extension2Scheme.put("gif", "data:image/gif;base64,");
extension2Scheme.put("icon", "data:image/x-icon;base64,");
}
/**
* σ=sqrt(s^2)
* scale
*
*
* @param value
* @param scale
* @return
*/
public static BigDecimal sqrt(BigDecimal value, int scale) {
BigDecimal num2 = BigDecimal.valueOf(2);
int precision = 100;
MathContext mc = new MathContext(precision, RoundingMode.HALF_UP);
BigDecimal deviation = value;
int cnt = 0;
while (cnt < precision) {
deviation = (deviation.add(value.divide(deviation, mc))).divide(num2, mc);
cnt++;
}
deviation = deviation.setScale(scale, BigDecimal.ROUND_HALF_UP);
return deviation;
}
public static String File2Base64(String filepath) {
if (StringUtils.isBlank(filepath)) {
return null;
}
File file1 = new File(filepath);
if (!file1.exists()) {
return null;
}
int lastPointIndex = filepath.lastIndexOf(".");
String type = filepath.substring(lastPointIndex + 1);
if (!extension2Scheme.containsKey(type.toLowerCase())) {
System.out.println("文件类型错误 " + type);
return null;
}
try (FileInputStream inputStream = new FileInputStream(file1)) {
byte[] buffer = new byte[inputStream.available()];
if (inputStream.read(buffer) == -1) {
inputStream.close();
}
return extension2Scheme.get(type.toLowerCase()) + Base64.getEncoder().encodeToString(buffer);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void DelFile(String filepath) {
File file1 = new File(filepath);
System.out.println("清理图片缓存:" + filepath + (file1.delete() ? "成功" : "失败"));
}
}
package com.whdc.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.io.FileInputStream;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* @author
* @date 2022-07-22 8:46
*/
@Slf4j
public class DataUtils {
public static final BigDecimal MIN_VALUE = BigDecimal.valueOf(0.001);
private static Map<String, String> extension2Scheme = new HashMap<String, String>();
static {
extension2Scheme.put("jpg", "data:image/jpg;base64,");
extension2Scheme.put("jpeg", "data:image/jpeg;base64,");
extension2Scheme.put("png", "data:image/png;base64,");
extension2Scheme.put("gif", "data:image/gif;base64,");
extension2Scheme.put("icon", "data:image/x-icon;base64,");
}
/**
* σ=sqrt(s^2)
* scale
*
*
* @param value
* @param scale
* @return
*/
public static BigDecimal sqrt(BigDecimal value, int scale) {
BigDecimal num2 = BigDecimal.valueOf(2);
int precision = 100;
MathContext mc = new MathContext(precision, RoundingMode.HALF_UP);
BigDecimal deviation = value;
int cnt = 0;
while (cnt < precision) {
deviation = (deviation.add(value.divide(deviation, mc))).divide(num2, mc);
cnt++;
}
deviation = deviation.setScale(scale, BigDecimal.ROUND_HALF_UP);
return deviation;
}
public static String File2Base64(String filepath) {
if (StringUtils.isBlank(filepath)) {
return null;
}
File file1 = new File(filepath);
if (!file1.exists()) {
return null;
}
int lastPointIndex = filepath.lastIndexOf(".");
String type = filepath.substring(lastPointIndex + 1);
if (!extension2Scheme.containsKey(type.toLowerCase())) {
System.out.println("文件类型错误 " + type);
return null;
}
try (FileInputStream inputStream = new FileInputStream(file1)) {
byte[] buffer = new byte[inputStream.available()];
if (inputStream.read(buffer) == -1) {
inputStream.close();
}
return extension2Scheme.get(type.toLowerCase()) + Base64.getEncoder().encodeToString(buffer);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void DelFile(String filepath) {
File file1 = new File(filepath);
System.out.println("清理图片缓存:" + filepath + (file1.delete() ? "成功" : "失败"));
}
public static Void handleException(Throwable ex) {
log.error("请求出现异常:" + ex.getMessage(), ex);
return null;
}
public static String handleExceptionStr(Throwable ex) {
log.error("请求出现异常:" + ex.getMessage(), ex);
return null;
}
public static Integer handleExceptionInt(Throwable ex) {
log.error("请求出现异常:" + ex.getMessage(), ex);
return null;
}
/**
*
* @param elValue
* @return
*/
public static BigDecimal gcFormat(BigDecimal elValue){
if (Objects.isNull(elValue)){
return null;
}
if (BigDecimal.ZERO.equals(elValue)){
return MIN_VALUE;
}
return elValue;
}
}

View File

@ -1,74 +1,101 @@
package com.whdc.zhdbaqapi.utils;
import net.sf.jsqlparser.expression.DateTimeLiteralExpression;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.SimpleTimeZone;
/**
* @author
* @date 2022-06-26 1:01
*/
public class DateUtils {
/**
* (yyyy-MM-dd HH:mm:ss)
*/
public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static final ThreadLocal<SimpleDateFormat> sdfhmsS = new ThreadLocal<SimpleDateFormat>() {
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
}
};
public static final ThreadLocal<SimpleDateFormat> sdfhms = new ThreadLocal<SimpleDateFormat>() {
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat(DATE_TIME_PATTERN);
}
};
public static final ThreadLocal<SimpleDateFormat> sdf_utc = new ThreadLocal<SimpleDateFormat>() {
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
}
};
public static final ThreadLocal<SimpleDateFormat> sdf_utc_sss = new ThreadLocal<SimpleDateFormat>() {
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
}
};
/**
* mongo isodate
*
* @param dateStr
* @return
*/
public static Date dateToISODate(String dateStr) throws ParseException {
//T代表后面跟着时间Z代表UTC统一时间
Date date = formatD(dateStr);
SimpleDateFormat format = sdfhms.get();
format.setCalendar(new GregorianCalendar(new SimpleTimeZone(0, "GMT")));
String isoDate = format.format(date);
return format.parse(isoDate);
}
public static Date formatD(String dateStr) throws ParseException {
return formatD(dateStr, DATE_TIME_PATTERN);
}
public static Date formatD(String dateStr, String format) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
return simpleDateFormat.parse(dateStr);
}
public static void main(String[] args) throws ParseException {
System.out.println(dateToISODate("2021-11-05T13:00:00Z"));
}
}
package com.whdc.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.SimpleTimeZone;
/**
* @author
* @date 2022-06-26 1:01
*/
public class DateUtils {
/**
* (yyyy-MM-dd HH:mm:ss)
*/
public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static final ThreadLocal<SimpleDateFormat> sdfhmsS = new ThreadLocal<SimpleDateFormat>() {
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
}
};
public static final ThreadLocal<SimpleDateFormat> sdfYMDh = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm"));
public static final ThreadLocal<SimpleDateFormat> sdfhms = new ThreadLocal<SimpleDateFormat>() {
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat(DATE_TIME_PATTERN);
}
};
public static final ThreadLocal<SimpleDateFormat> sdf_utc = new ThreadLocal<SimpleDateFormat>() {
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
}
};
public static final ThreadLocal<SimpleDateFormat> sdf_utc_sss = new ThreadLocal<SimpleDateFormat>() {
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
}
};
public static final ThreadLocal<SimpleDateFormat> sdf_Str = ThreadLocal.withInitial(() -> new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"));
public static LocalDateTime strToLDT(String str,String format){
return LocalDateTime.parse(str, DateTimeFormatter.ofPattern(format));
}
public static String dateToStr(Date date){
return sdfhms.get().format(date);
}
public static Date dateToStr(String dateString){
try {
return sdf_Str.get().parse(dateString);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
public static String dateToStr(Date date, ThreadLocal<SimpleDateFormat> format){
return format.get().format(date);
}
/**
* mongo isodate
*
* @param dateStr
* @return
*/
public static Date dateToISODate(String dateStr) throws ParseException {
//T代表后面跟着时间Z代表UTC统一时间
Date date = formatD(dateStr);
SimpleDateFormat format = sdfhms.get();
format.setCalendar(new GregorianCalendar(new SimpleTimeZone(0, "GMT")));
String isoDate = format.format(date);
return format.parse(isoDate);
}
public static Date formatD(String dateStr) throws ParseException {
return formatD(dateStr, DATE_TIME_PATTERN);
}
public static Date formatD(String dateStr, String format) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
return simpleDateFormat.parse(dateStr);
}
public static void main(String[] args) throws ParseException {
System.out.println(dateToISODate("2021-11-05T13:00:00Z"));
}
}

View File

@ -0,0 +1,31 @@
package com.whdc.utils;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
/**
* @author xusan
* @date 2023/4/17 16:44
*/
public class JsonUtils {
public static boolean isJson(String str) {
if (StringUtils.isBlank(str)){
return false;
}
try {
JSONObject.parseObject(str);
return true;
} catch (Exception e) {
return false;
}
}
public static void updateJson(JSONObject jsonObject,String key){
String data = jsonObject.getString("DATA");
if (StringUtils.isNotBlank(data) && StringUtils.isBlank(jsonObject.getString(key))){
jsonObject.put(key,data);
}
}
}

View File

@ -0,0 +1,25 @@
package com.whdc.utils;
import org.apache.commons.lang3.StringUtils;
import java.util.regex.Pattern;
/**
* @author xusan
* @date 2023/4/11 15:03
*/
public class NumUtils {
public static Pattern isNumber = Pattern.compile("^-?\\d+(\\.\\d+)?$");
public static boolean isNumber(String number) {
// 非空校验
if (StringUtils.isEmpty(number)) {
return false;
}
// 数字校验(可以包含小数可以是1,9,-1,1.1,-1.1,不能是+1.1,+1)
// 这个支持+1.1,+1
// Pattern pattern = Pattern.compile("[+-]?[@-9]+(\\\\.[0-9]+)?");
return isNumber.matcher(number).matches();
}
}

View File

@ -0,0 +1,113 @@
package com.whdc.utils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.util.Collection;
import java.util.Objects;
import java.util.Set;
/**
* @author xusan
* @date 2023/4/13 14:19
*/
public class RedisConfUtils {
public static StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
public static void setStringRedisSerializer(RedisTemplate<String, Object> redisTemplate) {
if (!Objects.isNull(redisTemplate)) {
if (!(redisTemplate.getKeySerializer() instanceof StringRedisSerializer)) {
redisTemplate.setKeySerializer(stringRedisSerializer);
}
}
}
public static void setDefaultRedisSerializer(RedisTemplate<String, Object> redisTemplate) {
if (!Objects.isNull(redisTemplate)) {
if (redisTemplate.getKeySerializer() instanceof StringRedisSerializer) {
redisTemplate.setKeySerializer(redisTemplate.getHashKeySerializer());
}
}
}
public static void setStringRedisSeria(RedisTemplate<String, String> redisTemplate) {
if (!Objects.isNull(redisTemplate)) {
if (!(redisTemplate.getKeySerializer() instanceof StringRedisSerializer)) {
redisTemplate.setKeySerializer(stringRedisSerializer);
}
}
}
public static void setDefaultRedisSeria(RedisTemplate<String, String> redisTemplate) {
if (!Objects.isNull(redisTemplate)) {
if (redisTemplate.getKeySerializer() instanceof StringRedisSerializer) {
redisTemplate.setKeySerializer(redisTemplate.getHashKeySerializer());
}
}
}
public static Object get(String key, RedisTemplate<String, Object> redisTemplate) {
try {
setStringRedisSerializer(redisTemplate);
return redisTemplate.opsForValue().get(key);
} finally {
setDefaultRedisSerializer(redisTemplate);
}
}
public static void set(String key, Object o, RedisTemplate<String, Object> redisTemplate) {
try {
setStringRedisSerializer(redisTemplate);
redisTemplate.opsForValue().set(key, o);
} finally {
setDefaultRedisSerializer(redisTemplate);
}
}
public static Set<String> getKeys(String key, RedisTemplate<String, Object> redisTemplate) {
try {
setStringRedisSerializer(redisTemplate);
return redisTemplate.keys(key + "*");
} finally {
setDefaultRedisSerializer(redisTemplate);
}
}
public static Boolean hasKey(String key, RedisTemplate<String, Object> redisTemplate) {
try {
setStringRedisSerializer(redisTemplate);
return redisTemplate.hasKey(key);
} finally {
setDefaultRedisSerializer(redisTemplate);
}
}
public static void delete(String key, RedisTemplate<String, String> redisTemplate) {
try {
setStringRedisSeria(redisTemplate);
redisTemplate.delete(key);
} finally {
setDefaultRedisSeria(redisTemplate);
}
}
public static void delete(Collection<String> keys, RedisTemplate<String, String> redisTemplate) {
try {
setStringRedisSeria(redisTemplate);
redisTemplate.delete(keys);
} finally {
setDefaultRedisSeria(redisTemplate);
}
}
}

View File

@ -1,128 +1,128 @@
package com.whdc.zhdbaqapi.utils;
import javax.servlet.http.HttpServletRequest;
public class ReqUtils {
private static String dbPath = null;
/**
* IP使request.getRemoteAddr();使IP,
* X-Forwarded-ForIPIP
* X-Forwarded-ForunknownIP
* X-Forwarded-For192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
* IP 192.168.1.110
*
* @param request
* @return
*/
public static String getIpAddress(HttpServletRequest request) {// 获取客户端ip地址
String clientIp = request.getHeader("x-forwarded-for");
if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
clientIp = request.getHeader("Proxy-Client-IP");
}
if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
clientIp = request.getHeader("WL-Proxy-Client-IP");
}
if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
clientIp = request.getRemoteAddr();
}
/*
* ipip.
*/
String sIP = null;
if (clientIp != null && !clientIp.contains("unknown") && clientIp.indexOf(",") > 0) {
String[] ipsz = clientIp.split(",");
for (String anIpsz : ipsz) {
if (!isInnerIP(anIpsz.trim())) {
sIP = anIpsz.trim();
break;
}
}
/*
* ipipip.
*/
if (null == sIP) {
sIP = ipsz[0].trim();
}
clientIp = sIP;
}
if (clientIp != null && clientIp.contains("unknown")) {
clientIp = clientIp.replaceAll("unknown,", "");
clientIp = clientIp.trim();
}
if ("".equals(clientIp) || null == clientIp) {
clientIp = "127.0.0.1";
}
return clientIp;
}
/**
* IP
*
* @param ipAddress ip
* @return
*/
public static boolean isInnerIP(String ipAddress) {
boolean isInnerIp;
long ipNum = getIpNum(ipAddress);
/**
IPA 10.0.0.0-10.255.255.255
B 172.16.0.0-172.31.255.255
C 192.168.0.0-192.168.255.255
127
**/
long aBegin = getIpNum("10.0.0.0");
long aEnd = getIpNum("10.255.255.255");
long bBegin = getIpNum("172.16.0.0");
long bEnd = getIpNum("172.31.255.255");
long cBegin = getIpNum("192.168.0.0");
long cEnd = getIpNum("192.168.255.255");
isInnerIp = isInner(ipNum, aBegin, aEnd) || isInner(ipNum, bBegin, bEnd) || isInner(ipNum, cBegin, cEnd)
|| ipAddress.equals("127.0.0.1");
return isInnerIp;
}
private static long getIpNum(String ipAddress) {
String[] ip = ipAddress.split("\\.");
long a = Integer.parseInt(ip[0]);
long b = Integer.parseInt(ip[1]);
long c = Integer.parseInt(ip[2]);
long d = Integer.parseInt(ip[3]);
return a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
}
private static boolean isInner(long userIp, long begin, long end) {
return (userIp >= begin) && (userIp <= end);
}
public static String getRealIP(HttpServletRequest request) {
// 获取客户端ip地址
String clientIp = request.getHeader("x-forwarded-for");
if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
clientIp = request.getRemoteAddr();
}
String[] clientIps = clientIp.split(",");
if (clientIps.length <= 1) return clientIp.trim();
// 判断是否来自CDN
if (isComefromCDN(request)) {
if (clientIps.length >= 2) return clientIps[clientIps.length - 2].trim();
}
return clientIps[clientIps.length - 1].trim();
}
private static boolean isComefromCDN(HttpServletRequest request) {
String host = request.getHeader("host");
return host.contains("www.189.cn") ||
host.contains("shouji.189.cn") ||
host.contains("image2.chinatelecom-ec.com") ||
host.contains("image1.chinatelecom-ec.com");
}
}
package com.whdc.utils;
import javax.servlet.http.HttpServletRequest;
public class ReqUtils {
private static final String dbPath = null;
/**
* IP使request.getRemoteAddr();使IP,
* X-Forwarded-ForIPIP
* X-Forwarded-ForunknownIP
* X-Forwarded-For192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
* IP 192.168.1.110
*
* @param request
* @return
*/
public static String getIpAddress(HttpServletRequest request) {// 获取客户端ip地址
String clientIp = request.getHeader("x-forwarded-for");
if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
clientIp = request.getHeader("Proxy-Client-IP");
}
if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
clientIp = request.getHeader("WL-Proxy-Client-IP");
}
if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
clientIp = request.getRemoteAddr();
}
/*
* ipip.
*/
String sIP = null;
if (clientIp != null && !clientIp.contains("unknown") && clientIp.indexOf(",") > 0) {
String[] ipsz = clientIp.split(",");
for (String anIpsz : ipsz) {
if (!isInnerIP(anIpsz.trim())) {
sIP = anIpsz.trim();
break;
}
}
/*
* ipipip.
*/
if (null == sIP) {
sIP = ipsz[0].trim();
}
clientIp = sIP;
}
if (clientIp != null && clientIp.contains("unknown")) {
clientIp = clientIp.replaceAll("unknown,", "");
clientIp = clientIp.trim();
}
if ("".equals(clientIp) || null == clientIp) {
clientIp = "127.0.0.1";
}
return clientIp;
}
/**
* IP
*
* @param ipAddress ip
* @return
*/
public static boolean isInnerIP(String ipAddress) {
boolean isInnerIp;
long ipNum = getIpNum(ipAddress);
/**
IPA 10.0.0.0-10.255.255.255
B 172.16.0.0-172.31.255.255
C 192.168.0.0-192.168.255.255
127
**/
long aBegin = getIpNum("10.0.0.0");
long aEnd = getIpNum("10.255.255.255");
long bBegin = getIpNum("172.16.0.0");
long bEnd = getIpNum("172.31.255.255");
long cBegin = getIpNum("192.168.0.0");
long cEnd = getIpNum("192.168.255.255");
isInnerIp = isInner(ipNum, aBegin, aEnd) || isInner(ipNum, bBegin, bEnd) || isInner(ipNum, cBegin, cEnd)
|| ipAddress.equals("127.0.0.1");
return isInnerIp;
}
private static long getIpNum(String ipAddress) {
String[] ip = ipAddress.split("\\.");
long a = Integer.parseInt(ip[0]);
long b = Integer.parseInt(ip[1]);
long c = Integer.parseInt(ip[2]);
long d = Integer.parseInt(ip[3]);
return a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
}
private static boolean isInner(long userIp, long begin, long end) {
return (userIp >= begin) && (userIp <= end);
}
public static String getRealIP(HttpServletRequest request) {
// 获取客户端ip地址
String clientIp = request.getHeader("x-forwarded-for");
if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
clientIp = request.getRemoteAddr();
}
String[] clientIps = clientIp.split(",");
if (clientIps.length <= 1) return clientIp.trim();
// 判断是否来自CDN
if (isComefromCDN(request)) {
if (clientIps.length >= 2) return clientIps[clientIps.length - 2].trim();
}
return clientIps[clientIps.length - 1].trim();
}
private static boolean isComefromCDN(HttpServletRequest request) {
String host = request.getHeader("host");
return host.contains("www.189.cn") ||
host.contains("shouji.189.cn") ||
host.contains("image2.chinatelecom-ec.com") ||
host.contains("image1.chinatelecom-ec.com");
}
}

View File

@ -1,171 +1,171 @@
package com.whdc.zhdbaqapi.utils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.Date;
@ApiModel(description = "数据传输对象")
@Component
@SuppressWarnings("all")
public class ResultJson<T> implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
public static final Integer SUCCESS = 200;
private static final String SUCCESS_MSG = "success";
/**
*
*/
public static final Integer FAIL = 900;
private static final String FAIL_MSG = "fail";
public static final Integer PARAM_ERROR = 400; // 失败、参数错误等
public static final Integer UNAUTHORIZED = 401; // 用户验证失败,或者用户验证信息过期
public static final Integer PERMISSION_DENIED = 403; // 没有权限
public static final Integer NOT_FOUND = 404; // 未找到资源
public static final Integer METHOD_NOT_ALLOWED = 405; // 不支持的类型
public static final Integer NSUPPORTED_MEDIA_TYPE = 415; // 不支持的媒体
public static final Integer NOT_ALLOWED = 405; // 请求太频繁同一个用户token)、同一个url、同样的请求参数请求间隔小于0.5秒
public static final Integer SERVER_ERROR = 500; // 后台错误
public static final Integer SRC_TIMEOUT = 504; // 请求资源超时
@ApiModelProperty("数据消息")
private String msg;
@ApiModelProperty("传输状态码200=成功400=参数错误; 500=后端错误900=失败)")
private Integer code;
@ApiModelProperty("传输数据")
private T data;
@ApiModelProperty("接口响应时间戳")
private String restm; // 接口响应时间戳。如果有缓存,则该时间表示最后接口响应时间
public static ResultJson error() {
return error(FAIL, "未知异常,请联系管理员");
}
public static ResultJson error(String msg) {
return error(FAIL, msg);
}
public static ResultJson error(int code, String msg) {
ResultJson r = new ResultJson();
r.setCode(code);
r.setMsg(msg);
r.setRestm(DateUtils.sdfhmsS.get().format(new Date()));
return r;
}
public static ResultJson error(int code, String msg, Object data) {
ResultJson r = new ResultJson();
r.setCode(code);
r.setMsg(msg);
r.setData(data);
r.setRestm(DateUtils.sdfhmsS.get().format(new Date()));
return r;
}
public static ResultJson ok(Integer code, String msg) {
ResultJson r = new ResultJson();
r.setMsg(msg);
r.setCode(code);
r.setRestm(DateUtils.sdfhmsS.get().format(new Date()));
return r;
}
public static ResultJson ok() {
ResultJson r = new ResultJson();
r.setCode(SUCCESS);
r.setMsg(SUCCESS_MSG);
r.setRestm(DateUtils.sdfhmsS.get().format(new Date()));
return r;
}
public static ResultJson ok(Object data) {
ResultJson r = new ResultJson();
r.setCode(SUCCESS);
r.setMsg(SUCCESS_MSG);
r.setData(data);
r.setRestm(DateUtils.sdfhmsS.get().format(new Date()));
return r;
}
public static ResultJson ok(Object data, String msg) {
ResultJson r = new ResultJson();
r.setData(data);
r.setCode(SUCCESS);
r.setMsg(msg);
r.setRestm(DateUtils.sdfhmsS.get().format(new Date()));
return r;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public static Integer getSUCCESS() {
return SUCCESS;
}
public static String getSuccessMsg() {
return SUCCESS_MSG;
}
public static Integer getFAIL() {
return FAIL;
}
public static String getFailMsg() {
return FAIL_MSG;
}
public String getRestm() {
return restm;
}
public void setRestm(String restm) {
this.restm = restm;
}
@Override
public String toString() {
return "ResultJson{" +
"msg='" + msg + "'" +
", code=" + code +
", data=" + data +
", restm=" + restm +
'}';
}
}
package com.whdc.utils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.Date;
@ApiModel(description = "数据传输对象")
@Component
@SuppressWarnings("all")
public class ResultJson<T> implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
public static final Integer SUCCESS = 200;
private static final String SUCCESS_MSG = "success";
/**
*
*/
public static final Integer FAIL = 900;
private static final String FAIL_MSG = "fail";
public static final Integer PARAM_ERROR = 400; // 失败、参数错误等
public static final Integer UNAUTHORIZED = 401; // 用户验证失败,或者用户验证信息过期
public static final Integer PERMISSION_DENIED = 403; // 没有权限
public static final Integer NOT_FOUND = 404; // 未找到资源
public static final Integer METHOD_NOT_ALLOWED = 405; // 不支持的类型
public static final Integer NSUPPORTED_MEDIA_TYPE = 415; // 不支持的媒体
public static final Integer NOT_ALLOWED = 405; // 请求太频繁同一个用户token)、同一个url、同样的请求参数请求间隔小于0.5秒
public static final Integer SERVER_ERROR = 500; // 后台错误
public static final Integer SRC_TIMEOUT = 504; // 请求资源超时
@ApiModelProperty("数据消息")
private String msg;
@ApiModelProperty("传输状态码200=成功400=参数错误; 500=后端错误900=失败)")
private Integer code;
@ApiModelProperty("传输数据")
private T data;
@ApiModelProperty("接口响应时间戳")
private String restm; // 接口响应时间戳。如果有缓存,则该时间表示最后接口响应时间
public static ResultJson error() {
return error(FAIL, "未知异常,请联系管理员");
}
public static ResultJson error(String msg) {
return error(FAIL, msg);
}
public static ResultJson error(int code, String msg) {
ResultJson r = new ResultJson();
r.setCode(code);
r.setMsg(msg);
r.setRestm(DateUtils.sdfhmsS.get().format(new Date()));
return r;
}
public static ResultJson error(int code, String msg, Object data) {
ResultJson r = new ResultJson();
r.setCode(code);
r.setMsg(msg);
r.setData(data);
r.setRestm(DateUtils.sdfhmsS.get().format(new Date()));
return r;
}
public static ResultJson ok(Integer code, String msg) {
ResultJson r = new ResultJson();
r.setMsg(msg);
r.setCode(code);
r.setRestm(DateUtils.sdfhmsS.get().format(new Date()));
return r;
}
public static ResultJson ok() {
ResultJson r = new ResultJson();
r.setCode(SUCCESS);
r.setMsg(SUCCESS_MSG);
r.setRestm(DateUtils.sdfhmsS.get().format(new Date()));
return r;
}
public static ResultJson ok(Object data) {
ResultJson r = new ResultJson();
r.setCode(SUCCESS);
r.setMsg(SUCCESS_MSG);
r.setData(data);
r.setRestm(DateUtils.sdfhmsS.get().format(new Date()));
return r;
}
public static ResultJson ok(Object data, String msg) {
ResultJson r = new ResultJson();
r.setData(data);
r.setCode(SUCCESS);
r.setMsg(msg);
r.setRestm(DateUtils.sdfhmsS.get().format(new Date()));
return r;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public static Integer getSUCCESS() {
return SUCCESS;
}
public static String getSuccessMsg() {
return SUCCESS_MSG;
}
public static Integer getFAIL() {
return FAIL;
}
public static String getFailMsg() {
return FAIL_MSG;
}
public String getRestm() {
return restm;
}
public void setRestm(String restm) {
this.restm = restm;
}
@Override
public String toString() {
return "ResultJson{" +
"msg='" + msg + "'" +
", code=" + code +
", data=" + data +
", restm=" + restm +
'}';
}
}

View File

@ -0,0 +1,82 @@
package com.whdc.valid.component;
import com.alibaba.fastjson.JSON;
import com.whdc.valid.mapper.ValidateMapper;
import com.whdc.valid.model.ValidateVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Component("ruleRedis")
public class RuleRedisService {
private static final String VALIDATE_REDIS_KEY = "validate:";
@Autowired
private RedisTemplate<String, String> ruleRedisTemplate;
public List<ValidateVo> getRule(String stcd,ValidateMapper validateMapper) {
log.info("获取规则: " + stcd);
String key = VALIDATE_REDIS_KEY + stcd;
if (Boolean.TRUE.equals(ruleRedisTemplate.hasKey(key))) {
List<String> json = ruleRedisTemplate.opsForList().range(key, 0, -1);
if (CollectionUtils.isNotEmpty(json)) {
return
json.stream()
.filter(StringUtils::isNotBlank)
.map(s -> JSON.toJavaObject(JSON.parseObject(s), ValidateVo.class))
.collect(Collectors.toList());
}
}
List<ValidateVo> rules = validateMapper.getRuleByStcd(stcd);
log.info("保存规则: " + rules.size());
if (CollectionUtils.isNotEmpty(rules)) {
Long aLong = ruleRedisTemplate.opsForList().rightPushAll(key, rules.stream().map(JSON::toJSONString).collect(Collectors.toList()));
if (aLong != rules.size()) {
log.info("保存规则失败: " + key + "_" + rules.size());
}
} else {
ruleRedisTemplate.opsForList().rightPushAll(key, "");
}
return rules;
}
public void delRule(String stcd){
if (StringUtils.isBlank(stcd)){
return;
}
String key = VALIDATE_REDIS_KEY + stcd;
if (Boolean.TRUE.equals(ruleRedisTemplate.hasKey(key))) {
Boolean delete = ruleRedisTemplate.delete(key);
if (!Boolean.TRUE.equals(delete)) {
log.info("删除失败, 主键: {}" ,key);
}
}
}
}

View File

@ -0,0 +1,10 @@
package com.whdc.valid.conf;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.whdc.valid.mapper")
public class MapperScanConfig {
}

View File

@ -0,0 +1,118 @@
package com.whdc.valid.conf;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
/**
* @author xusan
* @date 20239811:09:47
*/
@Configuration
public class RuleRestTemplateConfig {
/**
# redis
redisRules:
database: 0
host: 127.0.0.1
port: 6379
password:
timeout: 60000
lettuce:
pool:
max-active: 50
max-idle: 50
min-idle: 1
max-wait: 50000
*/
@Value("${spring.redisRules.host}")
private String host;
@Value("${spring.redisRules.port}")
private Integer port;
@Value("${spring.redisRules.password}")
private String password;
@Value("${spring.redisRules.database}")
private int database;
@Value("${spring.redisRules.lettuce.pool.max-active}")
private String maxActive;
@Value("${spring.redisRules.lettuce.pool.max-idle}")
private String maxIdle;
@Value("${spring.redisRules.lettuce.pool.min-idle}")
private String minIdle;
@Value("${spring.redisRules.lettuce.pool.max-wait}")
private String maxWait;
@Value("${spring.redisRules.timeout}")
private String timeOut;
private LettuceConnectionFactory getConnectionOneFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration =
new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(host);
redisStandaloneConfiguration.setDatabase(database);
redisStandaloneConfiguration.setPassword(password);
redisStandaloneConfiguration.setPort(port);
GenericObjectPoolConfig genericObjectPoolConfig =
new GenericObjectPoolConfig();
genericObjectPoolConfig.setMaxIdle(Integer.parseInt(maxIdle));
genericObjectPoolConfig.setMinIdle(Integer.parseInt(minIdle));
genericObjectPoolConfig.setMaxTotal(Integer.parseInt(maxActive));
genericObjectPoolConfig.setMaxWait(Duration.ofMillis(Integer.parseInt(maxWait)));
LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder
builder = LettucePoolingClientConfiguration.builder().
commandTimeout(Duration.ofMillis(Integer.parseInt(timeOut)));
builder.poolConfig(genericObjectPoolConfig);
LettuceClientConfiguration lettuceClientConfiguration = builder.build();
//根据配置和客户端配置创建连接
LettuceConnectionFactory lettuceConnectionFactory = new
LettuceConnectionFactory(redisStandaloneConfiguration,lettuceClientConfiguration);
lettuceConnectionFactory .afterPropertiesSet();
return lettuceConnectionFactory;
}
@Bean("ruleRedisTemplate")
public RedisTemplate<String, String> ruleRedisTemplate() {
LettuceConnectionFactory connectionFactory = getConnectionOneFactory();
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory);
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisSerializer<?> stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
return redisTemplate;
}
}

View File

@ -0,0 +1,29 @@
package com.whdc.valid.error;
/**
* @author
* @date 2022-06-26 10:58
*/
public class MyException extends RuntimeException {
private final String msg;
public String getMsg() {
return msg;
}
public MyException(String msg) {
super(msg);
this.msg = msg;
}
public MyException(String msg, Throwable e) {
super(msg, e);
this.msg = msg;
}
public static MyException getException(String msg) {
return new MyException(msg);
}
}

View File

@ -0,0 +1,24 @@
package com.whdc.valid.mapper;
import com.whdc.valid.model.ValidateVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @author XuSan
*/
@Mapper
public interface ValidateMapper {
/**
* stcd
* @param stcd
* @return
*/
@Select("SELECT E.ITEM,E.MIN,E.MAX,E.DIFF_MAX,E.DURATION,E.LEADING_TIME,E.LAG_TIME,T.SORT FROM E_STATION_RULES T LEFT JOIN E_RULE E ON T.RULE_ID = E.ID WHERE T.DEL = 1 AND E.DEL = 1 AND T.STCD = #{stcd} ORDER BY T.SORT ASC;")
List<ValidateVo> getRuleByStcd(String stcd);
}

View File

@ -0,0 +1,49 @@
package com.whdc.valid.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author xusan
* @date 202332008:57:22
*/
@Data
public class ValidateDto implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "测站编码", dataType = "java.lang.String")
private String stcd;
@ApiModelProperty(value = "所在区域", dataType = "java.lang.String")
private String countyCode;
@ApiModelProperty(value = "监测时间", dataType = "java.lang.Date")
private Date tm;
private Data data;
@lombok.Data
public static class Data {
/**
*
*/
private BigDecimal p;
/**
*
*/
private BigDecimal q;
/**
*
*/
private BigDecimal z;
}
}

View File

@ -0,0 +1,80 @@
package com.whdc.valid.model;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author
* @date 2022-06-26 10:43
*/
@Data
@Accessors(chain = true) // chain = true 实现链式调用
@JsonInclude(JsonInclude.Include.NON_NULL) // 表示序列化非null属性
public class ValidateVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@ApiParam(value = "规则类型", required = true, example = "")
@ApiModelProperty(value = "规则类型", required = true, dataType = "String")
private String item;
/**
*
*/
@ApiParam(value = "最小值", required = false, example = "")
@ApiModelProperty(value = "最小值", required = false, dataType = "String")
private BigDecimal min;
/**
*
*/
@ApiParam(value = "最大值", required = false, example = "")
@ApiModelProperty(value = "最大值", required = false, dataType = "String")
private BigDecimal max;
/**
*
*/
@ApiParam(value = "两条数据之间的最大差值", required = false, example = "")
@ApiModelProperty(value = "两条数据之间的最大差值", required = false, dataType = "String")
private BigDecimal diffMax;
/**
* ,: s ,
*/
@ApiParam(value = "接收超前时间,单位: s ,指接收时间超前范围", required = false, example = "")
@ApiModelProperty(value = "接收超前时间,单位: s ,指接收时间超前范围", required = false, dataType = "Integer")
private Integer leadingTime;
/**
* ,: s ,
*/
@ApiParam(value = "接收滞后时间,单位: s ,指接收时间滞后范围", required = false, example = "")
@ApiModelProperty(value = "接收滞后时间,单位: s ,指接收时间滞后范围", required = false, dataType = "Integer")
private Integer lagTime;
/**
*
*/
@ApiParam(value = "时间段, 单位 s", required = false, example = "")
@ApiModelProperty(value = "时间段, 单位 s", required = false, dataType = "Integer")
private Integer duration;
@ApiParam(value = "排序", required = false, example = "")
@ApiModelProperty(value = "排序", required = false, dataType = "Integer")
private Integer sort;
}

View File

@ -0,0 +1,10 @@
package com.whdc.valid.service;
public interface ValidateService {
Boolean validate(String json);
Boolean validate(String json,String prevJson);
Boolean needPrev(String json);
}

View File

@ -0,0 +1,526 @@
package com.whdc.valid.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.whdc.model.bean.ItemType;
import com.whdc.valid.component.RuleRedisService;
import com.whdc.valid.mapper.ValidateMapper;
import com.whdc.valid.model.ValidateDto;
import com.whdc.valid.model.ValidateVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import static com.whdc.model.bean.ItemType.getByValue;
import static com.whdc.valid.error.MyException.getException;
@Slf4j
@Service
public class ValidateServiceImpl implements ValidateService {
@Autowired
private ValidateMapper validateMapper;
@Autowired
private RuleRedisService ruleRedis;
/**
*
*
* @param json
* @return true: false:
*/
public Boolean validate(String json) {
return validate(json, null);
}
/**
*
*
* @param json
* @return
*/
public Boolean validateV1(String json) {
ValidateDto dto = getValidateDto(json); //正常值
ValidateDto.Data data = dto.getData();
BigDecimal p = data.getP();
BigDecimal z = data.getZ();
BigDecimal q = data.getQ();
if (BigDecimal.ZERO.compareTo(p) < 0
&& BigDecimal.ZERO.compareTo(z) < 0
&& BigDecimal.ZERO.compareTo(q) < 0
) {
return false;
}
List<ValidateVo> rule = ruleRedis.getRule(dto.getStcd(), validateMapper);
if (CollectionUtils.isEmpty(rule)) {
return true;
}
// Map<String, List<ValidateVo>> items = rule.stream()
// .collect(Collectors.groupingBy(ValidateVo::getItem));
//
// List<ValidateVo> rules = new ArrayList<>();
//
// if (Objects.nonNull(p)) {
// List<ValidateVo> list = items.get("P");
// if (CollectionUtils.isNotEmpty(list)) {
// rules.addAll(list);
// }
// }
// if (Objects.nonNull(z)) {
// List<ValidateVo> list = items.get("Z");
// if (CollectionUtils.isNotEmpty(list)) {
// rules.addAll(list);
// }
// }
// if (Objects.nonNull(q)) {
// List<ValidateVo> list = items.get("Q");
// if (CollectionUtils.isNotEmpty(list)) {
// rules.addAll(list);
// }
// }
// if (CollectionUtils.isEmpty(rules)) {
// return true;
// }
Date tm = dto.getTm();
long currentTime = System.currentTimeMillis();
for (ValidateVo vo : rule) {
BigDecimal min = vo.getMin();
BigDecimal max = vo.getMax();
Integer leadingTime = vo.getLeadingTime();
Integer lagTime = vo.getLagTime();
if (Objects.nonNull(leadingTime)) {
if (tm.getTime() > currentTime + (leadingTime * 1000)) {
return false;
}
}
if (Objects.nonNull(lagTime)) {
if (tm.getTime() < currentTime - (lagTime * 1000)) {
return false;
}
}
String item = vo.getItem();
if (StringUtils.isBlank(item)) {
continue;
}
if (Objects.isNull(min) && Objects.isNull(max) && Objects.isNull(leadingTime) && Objects.isNull(lagTime)) {
continue;
}
ItemType itemType = getByValue(item);
if (Objects.isNull(itemType)) {
continue;
}
switch (itemType) {
case YU_LIANG: { // 雨量判断 P
if (!rangeRuleValidate(p, min, max)) {
return false;
}
break;
}
case SHUI_WEI: { // 水位判断 Z
if (!rangeRuleValidate(z, min, max)) {
return false;
}
break;
}
case LIU_LIANG: { // 流量判断 Q
if (!rangeRuleValidate(q, min, max)) {
return false;
}
break;
}
default: {
}
}
}
return true;
}
private Boolean rangeRuleValidate(BigDecimal value, BigDecimal min, BigDecimal max) {
if (Objects.nonNull(value)) {
if (Objects.nonNull(min) && value.compareTo(min) < 0) {
log.info("对比值小于最小值: {} < {}", value, min);
return false;
}
if (Objects.nonNull(max) && value.compareTo(max) > 0) {
log.info("对比值大于最大值: {} < {}", max, value);
return false;
}
}
return true;
}
/**
*
*
* @param json
* @param prevJson
* @return true: false:
*/
public Boolean validate(String json, String prevJson) {
ValidateDto dto = getValidateDto(json); //正常值
ValidateDto prevDto = null;
if (StringUtils.isNotBlank(prevJson)) {
prevDto = getValidateDto(prevJson); // 老差值
}
ValidateDto.Data data = dto.getData();
BigDecimal p = data.getP();
BigDecimal z = data.getZ();
BigDecimal q = data.getQ();
if (BigDecimal.ZERO.compareTo(p) < 0
&& BigDecimal.ZERO.compareTo(z) < 0
&& BigDecimal.ZERO.compareTo(q) < 0
) {
log.info("对比值小于0: {} {} {}", p, z, q);
return false;
}
List<ValidateVo> rule = ruleRedis.getRule(dto.getStcd(), validateMapper);
if (CollectionUtils.isEmpty(rule)) {
log.info("规则为空: {}", rule);
return true;
}
Date tm = dto.getTm();
long currentTime = System.currentTimeMillis();
for (ValidateVo vo : rule) {
BigDecimal min = vo.getMin();
BigDecimal max = vo.getMax();
Integer leadingTime = vo.getLeadingTime();
Integer lagTime = vo.getLagTime();
String item = vo.getItem();
ItemType itemType = getByValue(item);
if (Objects.nonNull(min) && Objects.nonNull(max) && Objects.nonNull(leadingTime) && Objects.nonNull(lagTime)) {
if (Objects.nonNull(leadingTime)) {
long time = currentTime + (leadingTime * 1000);
if (tm.getTime() > time) {
log.info("时间大于最大差值时间: {} > {}", tm.getTime(), time);
return false;
}
}
if (Objects.nonNull(lagTime)) {
long time = currentTime - (lagTime * 1000);
if (tm.getTime() < time) {
log.info("时间小于最小差值时间: {} < {}", tm.getTime(), time);
return false;
}
}
if (StringUtils.isBlank(item)) {
log.info("规则类型为空");
continue;
}
if (Objects.isNull(itemType)) {
continue;
}
switch (itemType) {
case YU_LIANG: { // 雨量判断 P
if (!rangeRuleValidate(p, min, max)) {
return false;
}
break;
}
case SHUI_WEI: { // 水位判断 Z
if (!rangeRuleValidate(z, min, max)) {
return false;
}
break;
}
case LIU_LIANG: { // 流量判断 Q
if (!rangeRuleValidate(q, min, max)) {
return false;
}
break;
}
default: {
}
}
}
if (Objects.isNull(prevDto)) {
continue;
}
ValidateDto.Data oldData = prevDto.getData();
BigDecimal oldP = oldData.getP();
BigDecimal oldZ = oldData.getZ();
BigDecimal oldQ = oldData.getQ();
if (BigDecimal.ZERO.compareTo(oldP) < 0
&& BigDecimal.ZERO.compareTo(oldZ) < 0
&& BigDecimal.ZERO.compareTo(oldQ) < 0
) {
return false;
}
// 获取时间
Date oldTm = prevDto.getTm();
BigDecimal diffMax = vo.getDiffMax();
Integer duration = vo.getDuration();
if (Objects.nonNull(duration)) {
if (Math.abs(tm.getTime() - oldTm.getTime()) > duration * 1000) {
continue;
}
if (Objects.isNull(itemType)) {
continue;
}
switch (itemType) {
case YU_LIANG: { // 雨量判断 P
if (Objects.nonNull(p) && Objects.nonNull(oldP) && Math.abs(p.subtract(oldP).doubleValue()) > diffMax.doubleValue()) {
return false;
}
break;
}
case SHUI_WEI: { // 水位判断 Z
if (Objects.nonNull(z) && Objects.nonNull(oldZ) && Math.abs(z.subtract(oldZ).doubleValue()) > diffMax.doubleValue()) {
return false;
}
break;
}
case LIU_LIANG: { // 流量判断 Q
if (Objects.nonNull(q) && Objects.nonNull(oldQ) && Math.abs(q.subtract(oldQ).doubleValue()) > diffMax.doubleValue()) {
return false;
}
break;
}
default: {
}
}
}
}
return true;
}
public Boolean validateV1(String json, String prevJson) {
if (!validate(json)) { // 正常值判断
return false;
}
ValidateDto dto = getValidateDto(json); // 差值
List<ValidateVo> rule = ruleRedis.getRule(dto.getStcd(), validateMapper);
if (CollectionUtils.isEmpty(rule)) {
return true;
}
ValidateDto prevDto = getValidateDto(prevJson); // 老差值
ValidateDto.Data data = dto.getData();
BigDecimal p = data.getP();
BigDecimal z = data.getZ();
BigDecimal q = data.getQ();
if (BigDecimal.ZERO.compareTo(p) < 0
&& BigDecimal.ZERO.compareTo(z) < 0
&& BigDecimal.ZERO.compareTo(q) < 0
) {
return false;
}
ValidateDto.Data oldData = prevDto.getData();
BigDecimal oldP = oldData.getP();
BigDecimal oldZ = oldData.getZ();
BigDecimal oldQ = oldData.getQ();
if (BigDecimal.ZERO.compareTo(oldP) < 0
&& BigDecimal.ZERO.compareTo(oldZ) < 0
&& BigDecimal.ZERO.compareTo(oldQ) < 0
) {
return false;
}
// 获取时间
Date tm = dto.getTm();
Date oldTm = prevDto.getTm();
for (ValidateVo vo : rule) {
BigDecimal diffMax = vo.getDiffMax();
Integer duration = vo.getDuration();
if (Objects.nonNull(duration)) {
if (Math.abs(tm.getTime() - oldTm.getTime()) > duration * 1000) {
continue;
}
if (Objects.nonNull(p) && Objects.nonNull(oldP) && Math.abs(p.subtract(oldP).doubleValue()) > diffMax.doubleValue()) {
return false;
}
if (Objects.nonNull(z) && Objects.nonNull(oldZ) && Math.abs(z.subtract(oldZ).doubleValue()) > diffMax.doubleValue()) {
return false;
}
if (Objects.nonNull(q) && Objects.nonNull(oldQ) && Math.abs(q.subtract(oldQ).doubleValue()) > diffMax.doubleValue()) {
return false;
}
}
}
return true;
}
/**
*
*
* @param json
* @return true: , false:
*/
public Boolean needPrev(String json) {
ValidateDto dto = getValidateDto(json); // 多个值
List<ValidateVo> rule = ruleRedis.getRule(dto.getStcd(), validateMapper);
if (CollectionUtils.isEmpty(rule)) {
return false;
}
if (CollectionUtils.isEmpty(
rule.stream().map(ValidateVo::getDiffMax)
.filter(Objects::nonNull)
.collect(Collectors.toList())
)) {
return false;
}
return true;
}
private ValidateDto getValidateDto(String json) {
JSONObject jsonObject;
try {
jsonObject = JSON.parseObject(json);
} catch (JSONException e) {
throw getException("格式错误: " + json);
}
if (Objects.isNull(jsonObject)) {
throw getException("空数据");
}
ValidateDto validateDto = JSON.toJavaObject(jsonObject, ValidateDto.class);
if (Objects.isNull(validateDto.getStcd())) {
throw getException("编码不能为空");
}
Date tm = validateDto.getTm();
if (Objects.isNull(tm)) {
throw getException("时间不能为空");
}
ValidateDto.Data data = validateDto.getData();
if (Objects.isNull(data)) {
throw getException("数据不能为空");
} else {
if (Objects.isNull(data.getP())
&& Objects.isNull(data.getQ())
&& Objects.isNull(data.getZ())
) {
throw getException("数据内容不能为空");
}
}
return validateDto;
}
}

View File

@ -1,30 +0,0 @@
package com.whdc.zhdbaqapi.component;
import com.whdc.zhdbaqapi.service.IDeviceDataService;
import com.whdc.zhdbaqapi.service.IDeviceSLDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* @author
* @date 2022-07-22 1:04
*/
@Component
public class ScheduledTask {
@Autowired
private IDeviceDataService iDeviceDataService;
@Autowired
private IDeviceSLDataService iDeviceSLDataService;
@Scheduled(fixedDelay = 60000)
public void scheduledTask() {
String OS = System.getProperty("os.name").toLowerCase();
// 简单粗暴的判断,在 linux 环境下运行时,为生成环境
if (OS.contains("linux")) {
iDeviceDataService.syncData();
iDeviceSLDataService.syncData();
}
}
}

View File

@ -1,52 +0,0 @@
package com.whdc.zhdbaqapi.component;
/**
* @author
* @date 2022-07-06 10:39
*/
import cn.dev33.satoken.stp.StpInterface;
import com.whdc.zhdbaqapi.model.entity.SysUser;
import com.whdc.zhdbaqapi.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
*
*/
@Component // 保证此类被SpringBoot扫描完成Sa-Token的自定义权限验证扩展
public class StpInterfaceImpl implements StpInterface {
@Autowired
private ISysUserService iSysUserService;
@Override
public List<String> getPermissionList(Object o, String s) {
return null;
}
/**
* ()
*/
@Override
public List<String> getRoleList(Object loginId, String loginType) {
SysUser sysUser = iSysUserService.getById(Integer.valueOf(loginId.toString()));
// 实际项目中要根据具体业务逻辑来查询角色
List<String> list = new ArrayList<String>();
if(sysUser.getType() == 0){
list.add("super-admin");
}else if(sysUser.getType() == 1){
list.add("admin");
}else if(sysUser.getType() == 2){
list.add("user");
}
return list;
}
}

View File

@ -1,29 +0,0 @@
package com.whdc.zhdbaqapi.config;
import cn.dev33.satoken.interceptor.SaRouteInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author
* @date 2022-07-06 7:52
*/
@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {
// 注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册 Sa-Token 的路由拦截器
registry.addInterceptor(new SaRouteInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/socket.io**")
.excludePathPatterns("/doc.html**")
.excludePathPatterns("/swagger-resources")
.excludePathPatterns("/webjars/**")
.excludePathPatterns("/v3/api-docs**")
.excludePathPatterns("/v1/sysuser/doLogin")
.excludePathPatterns("/v1/auth/getToken")
.excludePathPatterns("/v1/sysuser/registerByToken");
}
}

View File

@ -1,14 +0,0 @@
package com.whdc.zhdbaqapi.constant;
/**
* @author
* @date 2022-07-17 10:18
*/
public class Constants {
public static final String PASSWORD_SALT = "whdc";
public static final String CACHE_NAME = "DeviceInfoListAll";
public static final String CACHE_NAME_SL = "DeviceSLInfoListAll";
}

View File

@ -1,32 +0,0 @@
package com.whdc.zhdbaqapi.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.model.dto.FindDeviceDto;
import com.whdc.zhdbaqapi.model.vo.DeviceDataVo;
import com.whdc.zhdbaqapi.service.IDeviceDataService;
import com.whdc.zhdbaqapi.utils.ResultJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author
* @date 2022-07-22 0:47
*/
@Api(tags = "设备数据 - Controller")
@RestController
@RequestMapping("/v1/deviceData")
public class DeviceDataController {
@Autowired
private IDeviceDataService iDeviceDataService;
@ApiOperation(value = "分页查询")
@PostMapping(value = "/page")
public ResultJson<IPage<DeviceDataVo>> page(@RequestBody FindDeviceDto findDto) {
return ResultJson.ok(iDeviceDataService.page(findDto));
}
}

View File

@ -1,51 +0,0 @@
package com.whdc.zhdbaqapi.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.mapper.DeviceGNSSMapper;
import com.whdc.zhdbaqapi.model.dto.FindPageDto;
import com.whdc.zhdbaqapi.model.dto.IntegerIdDto;
import com.whdc.zhdbaqapi.model.entity.DeviceGNSS;
import com.whdc.zhdbaqapi.model.entity.DeviceInfo;
import com.whdc.zhdbaqapi.utils.ResultJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "GNSS设备信息 - Controller")
@RestController
@RequestMapping("/v1/deviceGNSSInfo")
@Slf4j
public class DeviceGNSSController {
@Autowired
private DeviceGNSSMapper deviceGNSSMapper;
@ApiOperation(value = "新增")
@PostMapping("/save")
public ResultJson<Boolean> save(@RequestBody @Validated DeviceGNSS bean) {
return ResultJson.ok(deviceGNSSMapper.insert(bean) == 1);
}
@ApiOperation(value = "删除")
@PostMapping("/del")
public ResultJson<Boolean> del(@RequestBody @Validated IntegerIdDto bean) {
return ResultJson.ok(deviceGNSSMapper.deleteById(bean.getId()) == 1);
}
@ApiOperation(value = "修改")
@PostMapping("/edit")
public ResultJson<Boolean> edit(@RequestBody @Validated DeviceGNSS bean) {
return ResultJson.ok(deviceGNSSMapper.updateById(bean) == 1);
}
@ApiOperation(value = "分页查询")
@PostMapping(value = "/page")
public ResultJson<IPage<DeviceInfo>> page(@RequestBody FindPageDto findDto) {
return ResultJson.ok(deviceGNSSMapper.page(findDto.getPage()));
}
}

View File

@ -1,31 +0,0 @@
package com.whdc.zhdbaqapi.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.mapper.DeviceGNSSDataMapper;
import com.whdc.zhdbaqapi.model.dto.FindPageDto;
import com.whdc.zhdbaqapi.model.entity.DeviceGNSSData;
import com.whdc.zhdbaqapi.model.entity.DeviceInfo;
import com.whdc.zhdbaqapi.utils.ResultJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "GNSS设备信息 - Controller")
@RestController
@RequestMapping("/v1/deviceGNSSData")
@Slf4j
public class DeviceGNSSDataController {
@Autowired
private DeviceGNSSDataMapper deviceGNSSDataMapper;
@ApiOperation(value = "分页查询")
@PostMapping(value = "/page")
public ResultJson<IPage<DeviceGNSSData>> page(@RequestBody FindPageDto findDto) {
return ResultJson.ok(deviceGNSSDataMapper.page(findDto.getPage()));
}
}

View File

@ -1,85 +0,0 @@
package com.whdc.zhdbaqapi.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.model.dto.FindDeviceDto;
import com.whdc.zhdbaqapi.model.dto.IntegerIdDto;
import com.whdc.zhdbaqapi.model.dto.StationCodeDto;
import com.whdc.zhdbaqapi.model.entity.DeviceInfo;
import com.whdc.zhdbaqapi.model.vo.DeviceInfoImpVo;
import com.whdc.zhdbaqapi.service.IDeviceInfoService;
import com.whdc.zhdbaqapi.utils.ResultJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* @author
* @date 2022-07-21 23:58
*/
@Api(tags = "设备信息 - Controller")
@RestController
@RequestMapping("/v1/deviceInfo")
@Slf4j
public class DeviceInfoController {
@Autowired
private IDeviceInfoService iDeviceInfoService;
@ApiOperation(value = "获取单个对象")
@PostMapping("/get")
public ResultJson<DeviceInfo> get(@RequestBody @Validated IntegerIdDto idDto) {
return ResultJson.ok(iDeviceInfoService.get(idDto.getId()));
}
@ApiOperation(value = "新增")
@PostMapping("/save")
public ResultJson<Boolean> save(@RequestBody @Validated DeviceInfo bean) {
return ResultJson.ok(iDeviceInfoService.save(bean));
}
@ApiOperation(value = "删除")
@PostMapping("/del")
public ResultJson<Boolean> del(@RequestBody @Validated IntegerIdDto bean) {
return ResultJson.ok(iDeviceInfoService.removeById(bean.getId()));
}
@ApiOperation(value = "修改")
@PostMapping("/edit")
public ResultJson<Boolean> edit(@RequestBody @Validated DeviceInfo bean) {
return ResultJson.ok(iDeviceInfoService.updateById(bean));
}
@ApiOperation(value = "恢复")
@PostMapping("/restore")
public ResultJson<Boolean> edit(@RequestBody @Validated IntegerIdDto bean) {
return ResultJson.ok(iDeviceInfoService.restore(bean.getId()));
}
@ApiOperation(value = "列表查询")
@PostMapping(value = "/list")
public ResultJson<List<DeviceInfo>> list(@RequestBody StationCodeDto dto) {
return ResultJson.ok(iDeviceInfoService.list(dto.getStationCode()));
}
@ApiOperation(value = "分页查询")
@PostMapping(value = "/page")
public ResultJson<IPage<DeviceInfo>> page(@RequestBody FindDeviceDto findDto) {
return ResultJson.ok(iDeviceInfoService.page(findDto));
}
@ApiOperation(value = "Excel数据导入")
@PostMapping("/imp")
public ResultJson<DeviceInfoImpVo> imp(@RequestParam(value = "file") @RequestPart MultipartFile file) throws Exception {
if (file == null) {
return ResultJson.error("无效文件");
}
return ResultJson.ok(iDeviceInfoService.imp(file.getInputStream()));
}
}

View File

@ -1,54 +0,0 @@
package com.whdc.zhdbaqapi.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.mapper.DeviceRobotPointMapper;
import com.whdc.zhdbaqapi.model.dto.FindPageDto;
import com.whdc.zhdbaqapi.model.dto.IntegerIdDto;
import com.whdc.zhdbaqapi.model.entity.DeviceInfo;
import com.whdc.zhdbaqapi.model.entity.DeviceRobot;
import com.whdc.zhdbaqapi.utils.ResultJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@Api(tags = "变形机器人信息 - Controller")
@RestController
@RequestMapping("/v1/deviceRobotInfo")
@Slf4j
public class DeviceRobotController {
@Autowired
private DeviceRobotPointMapper deviceRobotPointMapper;
@ApiOperation(value = "新增")
@PostMapping("/save/point")
public ResultJson<Boolean> save(@RequestBody @Validated DeviceRobot bean) {
bean.getPoint().setEpoch(new Date());
return ResultJson.ok(deviceRobotPointMapper.insert(bean.getPoint()) == 1);
}
@ApiOperation(value = "删除")
@PostMapping("/del/point")
public ResultJson<Boolean> del(@RequestBody @Validated IntegerIdDto bean) {
return ResultJson.ok(deviceRobotPointMapper.deleteById(bean.getId()) == 1);
}
@ApiOperation(value = "修改")
@PostMapping("/edit/point")
public ResultJson<Boolean> edit(@RequestBody @Validated DeviceRobot bean) {
return ResultJson.ok(deviceRobotPointMapper.updateById(bean.getPoint()) == 1);
}
@ApiOperation(value = "分页查询")
@PostMapping(value = "/page/point")
public ResultJson<IPage<DeviceInfo>> page(@RequestBody FindPageDto findDto) {
return ResultJson.ok(deviceRobotPointMapper.page(findDto.getPage()));
}
}

View File

@ -1,30 +0,0 @@
package com.whdc.zhdbaqapi.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.mapper.DeviceRobotDataMapper;
import com.whdc.zhdbaqapi.model.dto.FindPageDto;
import com.whdc.zhdbaqapi.model.entity.DeviceGNSSData;
import com.whdc.zhdbaqapi.utils.ResultJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "GNSS设备信息 - Controller")
@RestController
@RequestMapping("/v1/deviceRobotData")
@Slf4j
public class DeviceRobotDataController {
@Autowired
private DeviceRobotDataMapper deviceRobotDataMapper;
@ApiOperation(value = "分页查询")
@PostMapping(value = "/page")
public ResultJson<IPage<DeviceGNSSData>> page(@RequestBody FindPageDto findDto) {
return ResultJson.ok(deviceRobotDataMapper.page(findDto.getPage()));
}
}

View File

@ -1,33 +0,0 @@
package com.whdc.zhdbaqapi.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.model.dto.FindDeviceDto;
import com.whdc.zhdbaqapi.model.vo.DeviceDataVo;
import com.whdc.zhdbaqapi.service.IDeviceDataService;
import com.whdc.zhdbaqapi.service.IDeviceSLDataService;
import com.whdc.zhdbaqapi.utils.ResultJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author
* @date 2022-07-22 0:47
*/
@Api(tags = "设备数据 - Controller")
@RestController
@RequestMapping("/v1/deviceSLData")
public class DeviceSLDataController {
@Autowired
private IDeviceSLDataService iDeviceSLDataService;
@ApiOperation(value = "分页查询")
@PostMapping(value = "/page")
public ResultJson<IPage<DeviceDataVo>> page(@RequestBody FindDeviceDto findDto) {
return ResultJson.ok(iDeviceSLDataService.page(findDto));
}
}

View File

@ -1,86 +0,0 @@
package com.whdc.zhdbaqapi.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.model.dto.FindDeviceDto;
import com.whdc.zhdbaqapi.model.dto.IntegerIdDto;
import com.whdc.zhdbaqapi.model.dto.StationCodeDto;
import com.whdc.zhdbaqapi.model.entity.DeviceInfo;
import com.whdc.zhdbaqapi.model.entity.DeviceSLInfo;
import com.whdc.zhdbaqapi.model.vo.DeviceInfoImpVo;
import com.whdc.zhdbaqapi.service.IDeviceSLInfoService;
import com.whdc.zhdbaqapi.utils.ResultJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* @author
* @date 2022-07-21 23:58
*/
@Api(tags = "设备信息 - Controller")
@RestController
@RequestMapping("/v1/deviceSLInfo")
@Slf4j
public class DeviceSLInfoController {
@Autowired
private IDeviceSLInfoService iDeviceSLInfoService;
@ApiOperation(value = "获取单个对象")
@PostMapping("/get")
public ResultJson<DeviceInfo> get(@RequestBody @Validated IntegerIdDto idDto) {
return ResultJson.ok(iDeviceSLInfoService.get(idDto.getId()));
}
@ApiOperation(value = "新增")
@PostMapping("/save")
public ResultJson<Boolean> save(@RequestBody @Validated DeviceSLInfo bean) {
return ResultJson.ok(iDeviceSLInfoService.save(bean));
}
@ApiOperation(value = "删除")
@PostMapping("/del")
public ResultJson<Boolean> del(@RequestBody @Validated IntegerIdDto bean) {
return ResultJson.ok(iDeviceSLInfoService.removeById(bean.getId()));
}
@ApiOperation(value = "修改")
@PostMapping("/edit")
public ResultJson<Boolean> edit(@RequestBody @Validated DeviceSLInfo bean) {
return ResultJson.ok(iDeviceSLInfoService.updateById(bean));
}
@ApiOperation(value = "恢复")
@PostMapping("/restore")
public ResultJson<Boolean> edit(@RequestBody @Validated IntegerIdDto bean) {
return ResultJson.ok(iDeviceSLInfoService.restore(bean.getId()));
}
@ApiOperation(value = "列表查询")
@PostMapping(value = "/list")
public ResultJson<List<DeviceInfo>> list(@RequestBody StationCodeDto dto) {
return ResultJson.ok(iDeviceSLInfoService.list(dto.getStationCode()));
}
@ApiOperation(value = "分页查询")
@PostMapping(value = "/page")
public ResultJson<IPage<DeviceInfo>> page(@RequestBody FindDeviceDto findDto) {
return ResultJson.ok(iDeviceSLInfoService.page(findDto));
}
@ApiOperation(value = "Excel数据导入")
@PostMapping("/imp")
public ResultJson<DeviceInfoImpVo> imp(@RequestParam(value = "file") @RequestPart MultipartFile file) throws Exception {
if (file == null) {
return ResultJson.error("无效文件");
}
return ResultJson.ok(iDeviceSLInfoService.imp(file.getInputStream()));
}
}

View File

@ -1,24 +0,0 @@
package com.whdc.zhdbaqapi.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.whdc.zhdbaqapi.utils.ResultJson;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author
* @date 2022-06-26 0:24
*/
@RestController
@ApiSupport(author = "李赛")
@Slf4j
public class HomeController {
@ApiOperationSupport(author = "接口连通测试")
@GetMapping("/")
public ResultJson index() {
return ResultJson.ok("接口连通测试通过");
}
}

View File

@ -1,131 +0,0 @@
package com.whdc.zhdbaqapi.controller;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.model.dto.*;
import com.whdc.zhdbaqapi.model.entity.ForeignUserInfo;
import com.whdc.zhdbaqapi.model.entity.SysUser;
import com.whdc.zhdbaqapi.model.vo.AuthToken;
import com.whdc.zhdbaqapi.model.vo.LoginVo;
import com.whdc.zhdbaqapi.service.ISysUserService;
import com.whdc.zhdbaqapi.utils.HttpUtil;
import com.whdc.zhdbaqapi.utils.ResultJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.lang.reflect.InvocationTargetException;
/**
* @author
* @date 2022-06-26 10:58
*/
@Api(tags = "用户信息 - Controller")
@RestController
@RequestMapping("/v1/sysuser")
public class SysUserController {
@Autowired
private ISysUserService iSysUserService;
@ApiOperation(value = "新增")
@PostMapping("/save")
public ResultJson<Boolean> save(@RequestBody @Validated SysUser bean) {
return ResultJson.ok(iSysUserService.save(bean));
}
@ApiOperation(value = "删除")
@PostMapping("/del")
public ResultJson<Boolean> del(@RequestBody @Validated IdDto bean) {
return ResultJson.ok(iSysUserService.removeById(bean.getId()));
}
@ApiOperation(value = "修改")
@PostMapping("/edit")
public ResultJson<Boolean> edit(@RequestBody @Validated SysUser bean) {
return ResultJson.ok(iSysUserService.updateById(bean));
}
@ApiOperation(value = "分页查询")
@PostMapping(value = "/page")
public ResultJson<IPage<SysUser>> page(@RequestBody FindSysUserDto findDto) {
return ResultJson.ok(iSysUserService.page(findDto));
}
@ApiOperation(value = "登录", notes = "登录后,从 tokenInfo 中获取 token 相关信息。headers[tokenName] = tokenValue ")
@PostMapping("doLogin")
public ResultJson<LoginVo> doLogin(@RequestBody @Validated LoginDto obj) throws InvocationTargetException, IllegalAccessException {
LoginVo loginVo = iSysUserService.login(obj);
if (loginVo == null || loginVo.getId() == null) {
return ResultJson.error("登录失败");
} else {
StpUtil.login(loginVo.getId()); // 使用 user id 登录
// 获取 Token 相关参数
loginVo.setTokenInfo(new AuthToken(StpUtil.getTokenInfo()));
loginVo.setRoleList(StpUtil.getRoleList());
return ResultJson.ok(loginVo);
}
}
@ApiOperation(value = "查询登录状态")
@PostMapping("isLogin")
public ResultJson<AuthToken> isLogin() {
return ResultJson.ok(StpUtil.getTokenInfo());
}
@ApiOperation(value = "按id踢人下线")
@PostMapping("kickout")
public ResultJson kickout(@RequestBody IdDto idDto) {
StpUtil.kickout(idDto.getId());
return ResultJson.ok("将用户[" + idDto.getId() + "]踢下线");
}
@ApiOperation(value = "token注册")
@PostMapping("registerByToken")
public ResultJson<SaTokenInfo> registerByToken(@RequestBody @Validated ForeignTokenDto dto) throws InvocationTargetException, IllegalAccessException {
String jstr = HttpUtil.get("http://172.20.1.210:30042/sys/loginByToken?token=" + dto.getToken());
System.out.println("=======================");
System.out.println(dto.getToken());
System.out.println(jstr);
ForeignResp resp = JSON.parseObject(jstr, ForeignResp.class);
if (resp.getCode() != 200) {
return ResultJson.error("登录失败");
}
ForeignUserInfo userInfo = resp.getResult().getUserInfo();
SysUser bean = new SysUser();
bean.setName(userInfo.getRealname());
bean.setType(9527);
bean.setLoginName(userInfo.getUsername());
bean.setPassword(null);
bean.setForeignId(userInfo.getId());
SysUser byForeignId = iSysUserService.getByForeignId(userInfo.getId());
if (byForeignId == null) {
iSysUserService.save(bean);
}
LoginDto obj = new LoginDto();
obj.setLoginName(bean.getLoginName());
obj.setPassword(null);
LoginVo loginVo = iSysUserService.login(obj);
if (loginVo == null || loginVo.getId() == null) {
return ResultJson.error("登录失败");
} else {
StpUtil.login(loginVo.getId()); // 使用 user id 登录
// 获取 Token 相关参数
loginVo.setTokenInfo(new AuthToken(StpUtil.getTokenInfo()));
loginVo.setRoleList(StpUtil.getRoleList());
return ResultJson.ok(loginVo);
}
}
}

View File

@ -1,26 +0,0 @@
package com.whdc.zhdbaqapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.model.dto.FindDeviceDto;
import com.whdc.zhdbaqapi.model.entity.DeviceData;
import com.whdc.zhdbaqapi.model.entity.SysUser;
import org.apache.ibatis.annotations.Param;
/**
* @author
* @date 2022-07-21 23:40
*/
public interface DeviceDataMapper extends BaseMapper<DeviceData> {
/**
*
*
* @param page
* @param findDto
* @return
*/
IPage<DeviceData> page(@Param("page") IPage<SysUser> page, @Param("obj") FindDeviceDto findDto);
void clearByDeviceId(@Param("deviceId") String deviceId, @Param("channelNum") Integer channelNum);
}

View File

@ -1,14 +0,0 @@
package com.whdc.zhdbaqapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.model.entity.DeviceGNSS;
import com.whdc.zhdbaqapi.model.entity.DeviceGNSSData;
import com.whdc.zhdbaqapi.model.entity.SysUser;
import org.apache.ibatis.annotations.Param;
public interface DeviceGNSSDataMapper extends BaseMapper<DeviceGNSSData> {
IPage<DeviceGNSSData> page(@Param("page") IPage<SysUser> page);
}

View File

@ -1,13 +0,0 @@
package com.whdc.zhdbaqapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.model.entity.DeviceGNSS;
import com.whdc.zhdbaqapi.model.entity.SysUser;
import org.apache.ibatis.annotations.Param;
public interface DeviceGNSSMapper extends BaseMapper<DeviceGNSS> {
IPage<DeviceGNSS> page(@Param("page") IPage<SysUser> page);
}

View File

@ -1,59 +0,0 @@
package com.whdc.zhdbaqapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.model.dto.FindDeviceDto;
import com.whdc.zhdbaqapi.model.entity.DeviceInfo;
import com.whdc.zhdbaqapi.model.entity.SysUser;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
/**
* @author
* @date 2022-07-21 23:40
*/
public interface DeviceInfoMapper extends BaseMapper<DeviceInfo> {
/**
* TODO: SKETCH_MAP text IFNULL(SKETCH_MAP, '') SKETCH_MAP
* @param id
* @return
*/
DeviceInfo get(Integer id);
/**
*
*
* @return
*/
List<DeviceInfo> list(String stationCode);
List<DeviceInfo> listAll();
/**
*
*
* @param page
* @param findDto
* @return
*/
IPage<DeviceInfo> page(@Param("page") IPage<SysUser> page, @Param("obj") FindDeviceDto findDto);
/**
* stationCode
*
* @param scs
* @return
*/
List<DeviceInfo> listBySC(Set<String> scs);
/**
* station_code
* @param stationCode
* @return
*/
DeviceInfo checkValidStationCode(String stationCode);
}

View File

@ -1,14 +0,0 @@
package com.whdc.zhdbaqapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.model.entity.DeviceGNSSData;
import com.whdc.zhdbaqapi.model.entity.DeviceRobotData;
import com.whdc.zhdbaqapi.model.entity.SysUser;
import org.apache.ibatis.annotations.Param;
public interface DeviceRobotDataMapper extends BaseMapper<DeviceRobotData> {
IPage<DeviceRobotData> page(@Param("page") IPage<SysUser> page);
}

View File

@ -1,14 +0,0 @@
package com.whdc.zhdbaqapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.model.entity.DeviceGNSS;
import com.whdc.zhdbaqapi.model.entity.RobotPoint;
import com.whdc.zhdbaqapi.model.entity.SysUser;
import org.apache.ibatis.annotations.Param;
public interface DeviceRobotPointMapper extends BaseMapper<RobotPoint> {
IPage<DeviceGNSS> page(@Param("page") IPage<SysUser> page);
}

View File

@ -1,27 +0,0 @@
package com.whdc.zhdbaqapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.model.dto.FindDeviceDto;
import com.whdc.zhdbaqapi.model.entity.DeviceData;
import com.whdc.zhdbaqapi.model.entity.DeviceSLData;
import com.whdc.zhdbaqapi.model.entity.SysUser;
import org.apache.ibatis.annotations.Param;
/**
* @author
* @date 2022-07-21 23:40
*/
public interface DeviceSLDataMapper extends BaseMapper<DeviceSLData> {
/**
*
*
* @param page
* @param findDto
* @return
*/
IPage<DeviceSLData> page(@Param("page") IPage<SysUser> page, @Param("obj") FindDeviceDto findDto);
void clearByDeviceId(@Param("deviceId") String deviceId, @Param("channelNum") Integer channelNum);
}

View File

@ -1,62 +0,0 @@
package com.whdc.zhdbaqapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.model.dto.FindDeviceDto;
import com.whdc.zhdbaqapi.model.entity.DeviceInfo;
import com.whdc.zhdbaqapi.model.entity.DeviceSLInfo;
import com.whdc.zhdbaqapi.model.entity.SysUser;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
/**
* @author
* @date 2022-07-21 23:40
*/
public interface DeviceSLInfoMapper extends BaseMapper<DeviceSLInfo> {
/**
* TODO: SKETCH_MAP text IFNULL(SKETCH_MAP, '') SKETCH_MAP
*
* @param id
* @return
*/
DeviceSLInfo get(Integer id);
/**
*
*
* @return
*/
List<DeviceSLInfo> list(String stationCode);
List<DeviceSLInfo> listAll();
/**
*
*
* @param page
* @param findDto
* @return
*/
IPage<DeviceSLInfo> page(@Param("page") IPage<SysUser> page, @Param("obj") FindDeviceDto findDto);
/**
* stationCode
*
* @param scs
* @return
*/
List<DeviceSLInfo> listBySC(Set<String> scs);
/**
* station_code
*
* @param stationCode
* @return
*/
DeviceSLInfo checkValidStationCode(String stationCode);
}

View File

@ -1,33 +0,0 @@
package com.whdc.zhdbaqapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.whdc.zhdbaqapi.model.dto.FindSysUserDto;
import com.whdc.zhdbaqapi.model.entity.SysUser;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author
* @date 2022-07-01 1:17
*/
public interface SysUserMapper extends BaseMapper<SysUser> {
/**
*
*
* @return
*/
List<SysUser> list();
/**
*
*
* @param page
* @param findDto
* @return
*/
IPage<SysUser> page(@Param("page") IPage<SysUser> page, @Param("obj") FindSysUserDto findDto);
SysUser findByForeignId(String foreignId);
}

View File

@ -1,31 +0,0 @@
package com.whdc.zhdbaqapi.model.cklat;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* @author
* @date 2022-07-22 8:14
*/
@Data
@Accessors(chain = true) // chain = true 实现链式调用
public class CklatQueryDto {
@JsonProperty("device_id")
@JSONField(name = "device_id")
private String deviceId;
@JsonProperty("channel_num")
@JSONField(name = "channel_num")
private Integer channelNum;
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssZ", timezone = "GMT+8")
@JSONField(name = "start_timestamp", format = "yyyy-MM-dd'T'HH:mm:ssZ")
@JsonProperty("start_timestamp")
private Date startTimestamp;
}

View File

@ -1,44 +0,0 @@
package com.whdc.zhdbaqapi.model.cklat;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author
* @date 2022-07-22 7:48
*/
@Data
public class CklatRecord {
/*
"device_id": "00004216",
"timestamp": "2021-09-05T22:00:07+08:00",
"channel_num": 0,
"data_a": 2906.9,
"data_b": 26.77,
"data_c": 83857808
*/
@JsonProperty("device_id")
private String deviceId;
@JsonProperty("timestamp")
private Date timestamp;
@JsonProperty("channel_num")
private Integer channelNum;
@JsonProperty("data_a")
private BigDecimal dataA;
@JsonProperty("data_b")
private BigDecimal dataB;
@JsonProperty("data_c")
private BigDecimal dataC;
}

View File

@ -1,17 +0,0 @@
package com.whdc.zhdbaqapi.model.cklat;
import lombok.Data;
import java.util.List;
/**
* @author
* @date 2022-07-22 7:48
*/
@Data
public class CklatResult {
private Integer total;
private List<CklatRecord> rows;
private String status;
private String message;
}

View File

@ -1,17 +0,0 @@
package com.whdc.zhdbaqapi.model.dto;
import io.swagger.annotations.ApiParam;
import lombok.Data;
/**
* @author
* @date 2022-07-01 1:21
*/
@Data
public class ChangePwdDto {
@ApiParam(value = "旧密码")
private String oldpwd;
@ApiParam(value = "新密码")
private String newpwd;
}

View File

@ -1,29 +0,0 @@
package com.whdc.zhdbaqapi.model.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Pattern;
/**
* @author
* @date 2022-07-01 1:17
*/
@Data
public class FindDeviceDto extends FindPageDto {
@ApiModelProperty(value = "起始时间格式应为yyyy-MM-dd HH:mm:ss", dataType = "java.lang.String")
@Pattern(regexp = "^[1-9]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\\s+(20|21|22|23|[0-1]\\d):[0-5]\\d:[0-5]\\d$",
message = "时间格式应为yyyy-MM-dd HH:mm:ss")
private String stm;
@ApiModelProperty(value = "截止时间格式应为yyyy-MM-dd HH:mm:ss", dataType = "java.lang.String")
@Pattern(regexp = "^[1-9]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\\s+(20|21|22|23|[0-1]\\d):[0-5]\\d:[0-5]\\d$",
message = "时间格式应为yyyy-MM-dd HH:mm:ss")
private String etm;
@ApiModelProperty(value = "站点编码", dataType = "java.lang.String")
private String deviceId;
@ApiModelProperty(value = "测点编号", dataType = "java.lang.String")
private String stationCode;
}

View File

@ -1,17 +0,0 @@
package com.whdc.zhdbaqapi.model.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author
* @date 2022-07-01 1:17
*/
@Data
public class FindSysUserDto extends FindPageDto {
@ApiModelProperty(value = "姓名", dataType = "java.lang.String")
private String name;
@ApiModelProperty(value = "登录名", dataType = "java.lang.String")
private String loginName;
}

View File

@ -1,16 +0,0 @@
package com.whdc.zhdbaqapi.model.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true) // chain = true 实现链式调用
public class ForeignResp {
boolean success;
String message;
String extMessage;
int code;
@JsonProperty(value = "result")
ForeignResult result;
}

View File

@ -1,14 +0,0 @@
package com.whdc.zhdbaqapi.model.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.whdc.zhdbaqapi.model.entity.ForeignUserInfo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true) // chain = true 实现链式调用
public class ForeignResult {
int multi_depart;
@JsonProperty(value = "userInfo")
ForeignUserInfo userInfo;
}

View File

@ -1,15 +0,0 @@
package com.whdc.zhdbaqapi.model.dto;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
public class ForeignTokenDto {
@ApiParam(value = "token", example = "")
@ApiModelProperty(value = "token", dataType = "java.lang.String")
@NotBlank(message = "token")
private String token;
}

View File

@ -1,22 +0,0 @@
package com.whdc.zhdbaqapi.model.dto;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @author
* @date 2022-06-26 10:43
*/
@Data
public class IdDto implements Serializable {
private static final long serialVersionUID = 1L;
@ApiParam(value = "主键ID", example = "")
@ApiModelProperty(value = "主键ID", dataType = "java.lang.String")
@NotBlank(message = "主键ID")
private String id;
}

View File

@ -1,22 +0,0 @@
package com.whdc.zhdbaqapi.model.dto;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @author
* @date 2022-06-26 10:43
*/
@Data
public class IntegerIdDto implements Serializable {
private static final long serialVersionUID = 1L;
@ApiParam(value = "主键ID", example = "")
@ApiModelProperty(value = "主键ID", dataType = "java.lang.Integer")
@NotNull(message = "主键ID")
private Integer id;
}

View File

@ -1,23 +0,0 @@
package com.whdc.zhdbaqapi.model.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotEmpty;
/**
* @author
* @date 2022-07-01 1:21
*/
@Data
public class LoginDto {
@ApiParam(value = "登录名")
@NotEmpty(message = "登录名不能为空")
private String loginName;
@ApiParam(value = "密码")
@NotEmpty(message = "密码不能为空")
private String password;
}

View File

@ -1,22 +0,0 @@
package com.whdc.zhdbaqapi.model.dto;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @author
* @date 2022-06-26 10:43
*/
@Data
public class StationCodeDto implements Serializable {
private static final long serialVersionUID = 1L;
@ApiParam(value = "测点编号", example = "")
@ApiModelProperty(value = "测点编号", dataType = "java.lang.String")
@NotBlank(message = "测点编号")
private String stationCode;
}

View File

@ -1,35 +0,0 @@
package com.whdc.zhdbaqapi.model.dto;
import com.whdc.zhdbaqapi.annotation.DateTimeRange;
import com.whdc.zhdbaqapi.model.group.Find;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import java.util.concurrent.TimeUnit;
/**
* @author
* @date 2022-07-18 1:37
*/
@Data
@DateTimeRange(message = "时间间隔不能超过 7 天", startField = "stm", endField = "etm", interval = 7, timeUnit = TimeUnit.DAYS)
public class StcdStmEtmDto {
@ApiModelProperty(value = "站码")
@NotEmpty(message = "站码不能为空")
private String stcd;
@ApiModelProperty(value = "起始时间", example = "2022-07-18 00:00:00")
@NotEmpty(message = "起始时间不能为空")
@Pattern(regexp = "^[1-9]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\\s+(20|21|22|23|[0-1]\\d):[0-5]\\d:[0-5]\\d$",
message = "时间格式应为yyyy-MM-dd HH:mm:ss", groups = Find.class)
private String stm;
@ApiModelProperty(value = "截止时间", example = "2022-07-18 10:00:00")
@NotEmpty(message = "截止时间不能为空")
@Pattern(regexp = "^[1-9]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\\s+(20|21|22|23|[0-1]\\d):[0-5]\\d:[0-5]\\d$",
message = "时间格式应为yyyy-MM-dd HH:mm:ss", groups = Find.class)
private String etm;
}

View File

@ -1,118 +0,0 @@
package com.whdc.zhdbaqapi.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author
* @date 2022-07-21 23:28
*/
@Data
@TableName("DEVICE_DATA")
@Accessors(chain = true) // chain = true 实现链式调用
@ApiModel(value = "DEVICE_DATA 对象", description = "设备数据")
@JsonInclude(JsonInclude.Include.NON_NULL) // 表示序列化非null属性
public class DeviceData {
/**
* id
*/
@ApiParam(value = "主键id")
@ApiModelProperty(value = "主键id", dataType = "java.lang.Integer")
@TableId(value = "ID", type = IdType.AUTO)
private Integer id;
/**
*
*/
@ApiParam(value = "渗压值")
@ApiModelProperty(value = "渗压值", dataType = "java.math.BigDecimal")
@TableField("OSMOMETER")
private BigDecimal osmometer;
/**
* =5 data_a data_b
*/
@ApiParam(value = "通道类型。=5时 data_a 频率data_b 温度")
@ApiModelProperty(value = "通道类型。=5时 data_a 频率data_b 温度", dataType = "java.lang.String")
@TableField("CHANNEL_TYPE")
private String channelType;
/**
*
*/
@ApiParam(value = "入库时间")
@ApiModelProperty(value = "入库时间", dataType = "java.lang.Date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField("CREATETIME")
private Date createtime;
/**
*
*/
@ApiParam(value = "")
@ApiModelProperty(value = "", dataType = "java.math.BigDecimal")
@TableField("DATA_C")
private BigDecimal dataC;
/**
*
*/
@ApiParam(value = "")
@ApiModelProperty(value = "", dataType = "java.math.BigDecimal")
@TableField("DATA_B")
private BigDecimal dataB;
/**
*
*/
@ApiParam(value = "")
@ApiModelProperty(value = "", dataType = "java.math.BigDecimal")
@TableField("DATA_A")
private BigDecimal dataA;
/**
*
*/
@ApiParam(value = "通道号")
@ApiModelProperty(value = "通道号", dataType = "java.lang.Integer")
@TableField("CHANNEL_NUM")
private Integer channelNum;
/**
*
*/
@ApiParam(value = "数据时间")
@ApiModelProperty(value = "数据时间", dataType = "java.lang.Date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField("TIMESTAMP")
private Date timestamp;
/**
* MCU
*/
@ApiParam(value = "测站编码MCU")
@ApiModelProperty(value = "测站编码MCU", dataType = "java.lang.String")
@TableField("DEVICE_ID")
private String deviceId;
/**
*
*/
@ApiParam(value = "管内水位")
@ApiModelProperty(value = "管内水位", dataType = "java.math.BigDecimal")
@TableField("PIPE_Z")
private BigDecimal pipeZ;
}

View File

@ -1,122 +0,0 @@
package com.whdc.zhdbaqapi.model.entity;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@Data
@TableName("DSM_GNSS_DEVICE")
@Accessors(chain = true) // chain = true 实现链式调用
@ApiModel(value = "DEVICE_GNSS 对象", description = "GNSS设备信息")
@JsonInclude(JsonInclude.Include.ALWAYS) // 表示序列化非null属性
public class DeviceGNSS implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@ApiParam(value = "主键id")
@ApiModelProperty(value = "主键id", dataType = "java.lang.Integer")
@TableId(value = "ID", type = IdType.AUTO)
protected Integer id;
/**
*
*/
@ApiParam(value = "设备名称")
@ApiModelProperty(value = "设备名称", dataType = "java.lang.String", required = true)
@Excel(name = "设备名称")
@NotEmpty(message = "设备名称")
@TableField("STATION_NAME")
private String stationName;
/**
*
* /
*/
@ApiParam(value = "设备类型")
@ApiModelProperty(value = "设备类型", dataType = "java.lang.String", required = true)
@Excel(name = "设备类型")
@NotEmpty(message = "设备类型")
@TableField("STATION_TYPE")
private String stationType;
/**
*
*/
@ApiParam(value = "开始解算时间")
@ApiModelProperty(value = "开始解算时间", dataType = "java.util.Date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@Excel(name = "开始解算时间")
@TableField("START_TIME")
private Date startTime;
/**
*
*/
@ApiParam(value = "终止解算时间")
@ApiModelProperty(value = "终止解算时间", dataType = "java.util.Date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@Excel(name = "终止解算时间")
@TableField("END_TIME")
private Date endTime;
/**
*
*/
@ApiParam(value = "纬度")
@ApiModelProperty(value = "纬度", dataType = "java.math.BigDecimal")
@Excel(name = "纬度")
@TableField("B")
private BigDecimal b;
/**
*
*/
@ApiParam(value = "经度")
@ApiModelProperty(value = "经度", dataType = "java.math.BigDecimal")
@Excel(name = "经度")
@TableField("L")
private BigDecimal l;
/**
* X
*/
@ApiParam(value = "表面位移测点X方向值")
@ApiModelProperty(value = "表面位移测点X方向值", dataType = "java.math.BigDecimal")
@Excel(name = "表面位移测点X方向值")
@TableField("X")
private BigDecimal x;
/**
* Y
*/
@ApiParam(value = "表面位移测点Y方向值")
@ApiModelProperty(value = "表面位移测点Y方向值", dataType = "java.math.BigDecimal")
@Excel(name = "表面位移测点Y方向值")
@TableField("Y")
private BigDecimal y;
/**
* H
*/
@ApiParam(value = "表面位移测点H方向值")
@ApiModelProperty(value = "表面位移测点H方向值", dataType = "java.math.BigDecimal")
@Excel(name = "表面位移测点H方向值")
@TableField("H")
private BigDecimal h;
}

View File

@ -1,175 +0,0 @@
package com.whdc.zhdbaqapi.model.entity;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.Date;
@Data
@TableName("DSM_GNSS_SURF_DEVICE_DATA_HIST")
@Accessors(chain = true) // chain = true 实现链式调用
@ApiModel(value = "DSM_GNSS_SURF_DEVICE_DATA_HIST 对象", description = "GNSS设备监测数据")
@JsonInclude(JsonInclude.Include.ALWAYS) // 表示序列化非null属性
public class DeviceGNSSData {
/**
* id
*/
@ApiParam(value = "主键id")
@ApiModelProperty(value = "主键id", dataType = "java.lang.Integer")
@TableId(value = "ID", type = IdType.AUTO)
private Integer id;
/**
* ID
*/
@ApiParam(value = "表面位移测点ID")
@ApiModelProperty(value = "表面位移测点ID", dataType = "java.lang.Integer")
@Excel(name = "表面位移测点ID")
@NotEmpty(message = "表面位移测点ID")
@TableField("DEVICE_ID")
private Integer deviceId;
/**
* ID
*/
@ApiParam(value = "表面位移监测类型ID")
@ApiModelProperty(value = "表面位移监测类型ID", dataType = "java.lang.Integer")
@Excel(name = "表面位移监测类型ID")
@NotEmpty(message = "表面位移监测类型ID")
@TableField("DEVICE_DATA_TYPE_ID")
private Integer DeviceDataTypeId;
/**
* X
*/
@ApiParam(value = "表面位移测点X方向值")
@ApiModelProperty(value = "表面位移测点X方向值", dataType = "java.math.BigDecimal")
@Excel(name = "表面位移测点X方向值")
@TableField("V1")
private BigDecimal v1;
/**
* Y
*/
@ApiParam(value = "表面位移测点Y方向值")
@ApiModelProperty(value = "表面位移测点Y方向值", dataType = "java.math.BigDecimal")
@Excel(name = "表面位移测点Y方向值")
@TableField("V2")
private BigDecimal v2;
/**
* H
*/
@ApiParam(value = "表面位移测点H方向值")
@ApiModelProperty(value = "表面位移测点H方向值", dataType = "java.math.BigDecimal")
@Excel(name = "表面位移测点H方向值")
@TableField("V3")
private BigDecimal v3;
/**
* 1
*/
@ApiParam(value = "预留1")
@ApiModelProperty(value = "预留1", dataType = "java.math.BigDecimal")
@Excel(name = "预留1")
@TableField("V4")
private BigDecimal v4;
/**
* 2
*/
@ApiParam(value = "预留2")
@ApiModelProperty(value = "预留2", dataType = "java.math.BigDecimal")
@Excel(name = "预留2")
@TableField("V5")
private BigDecimal v5;
/**
* ID
*/
@ApiParam(value = "创建人ID")
@ApiModelProperty(value = "创建人ID", dataType = "java.lang.Integer")
@Excel(name = "创建人ID")
@NotEmpty(message = "创建人ID")
@TableField("CREATE_USER_ID")
private Integer createUserId;
/**
*
*/
@ApiParam(value = "创建时间")
@ApiModelProperty(value = "创建时间", dataType = "java.util.Date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@Excel(name = "创建时间")
@TableField("CREATE_TIME")
private Date createTime;
/**
* ID
*/
@ApiParam(value = "修改人ID")
@ApiModelProperty(value = "修改人ID", dataType = "java.lang.Integer")
@Excel(name = "修改人ID")
@NotEmpty(message = "修改人ID")
@TableField("MODIFY_USER_ID")
private Integer modifyUserId;
/**
*
*/
@ApiParam(value = "修改时间")
@ApiModelProperty(value = "修改时间", dataType = "java.util.Date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@Excel(name = "修改时间")
@TableField("MODIFY_TIME")
private Date modifyTime;
/**
*
*/
@ApiParam(value = "测点采集时间")
@ApiModelProperty(value = "测点采集时间", dataType = "java.util.Date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@Excel(name = "测点采集时间")
@TableField("DAC_TIME")
private Date dacTime;
/**
* DV1
*/
@ApiParam(value = "DV1")
@ApiModelProperty(value = "DV1", dataType = "java.math.BigDecimal")
@Excel(name = "DV1")
@TableField("DV1")
private BigDecimal dv1;
/**
* DV2
*/
@ApiParam(value = "DV2")
@ApiModelProperty(value = "DV2", dataType = "java.math.BigDecimal")
@Excel(name = "DV2")
@TableField("DV2")
private BigDecimal dv2;
/**
* DV3
*/
@ApiParam(value = "DV3")
@ApiModelProperty(value = "DV3", dataType = "java.math.BigDecimal")
@Excel(name = "DV3")
@TableField("DV3")
private BigDecimal dv3;
}

View File

@ -1,544 +0,0 @@
package com.whdc.zhdbaqapi.model.entity;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author
* @date 2022-07-21 23:26
*/
@Data
@TableName("DEVICE_INFO")
@Accessors(chain = true) // chain = true 实现链式调用
@ApiModel(value = "DEVICE_INFO 对象", description = "设备信息")
@JsonInclude(JsonInclude.Include.NON_NULL) // 表示序列化非null属性
public class DeviceInfo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@ApiParam(value = "主键id")
@ApiModelProperty(value = "主键id", dataType = "java.lang.Integer", position = 1)
@TableId(value = "ID", type = IdType.AUTO)
private Integer id;
/**
*
*/
@ApiParam(value = "测点编号")
@ApiModelProperty(value = "测点编号", dataType = "java.lang.String", required = true, position = 2)
@Excel(name = "测点编号")
@NotEmpty(message = "测点编号必填")
@TableField("STATION_CODE")
private String stationCode;
/**
* MCU
*/
@ApiParam(value = "测站编码MCU")
@ApiModelProperty(value = "测站编码MCU", dataType = "java.lang.String", required = true, position = 3)
@Excel(name = "测站编码MCU")
@NotEmpty(message = "测站编码MCU必填")
@TableField("DEVICE_ID")
private String deviceId;
/**
*
*/
@ApiParam(value = "通道号")
@ApiModelProperty(value = "通道号", dataType = "java.lang.Integer", required = true, position = 4)
@Excel(name = "通道号")
@NotNull(message = "通道号必填")
@Max(message = "通道号最大值 7", value = 7)
@Min(message = "通道号最小值 0", value = 0)
@TableField("CHANNEL_NUM")
private Integer channelNum;
/**
* (K)
*/
@ApiParam(value = "温度率定系娄K")
@ApiModelProperty(value = "温度率定系娄K", dataType = "java.math.BigDecimal", required = true, position = 5)
@Excel(name = "温度率定系娄K")
@NotNull(message = "温度率定系娄K必填")
@TableField("TEMPERATURE_K")
private BigDecimal temperatureK;
/**
*
*/
@ApiParam(value = "初始温度读数")
@ApiModelProperty(value = "初始温度读数", dataType = "java.lang.Double", required = true, position = 6)
@Excel(name = "初始温度读数")
@NotNull(message = "初始温度读数必填")
@TableField("START_TEMPERATURE")
private BigDecimal startTemperature;
/**
* (G)
*/
@ApiParam(value = "率定系数G")
@ApiModelProperty(value = "率定系数G", dataType = "java.math.BigDecimal", required = true, position = 7)
@Excel(name = "率定系数G")
@NotNull(message = "率定系数G必填")
@TableField("CALIBRATION_COEFFICIENT")
private BigDecimal calibrationCoefficient;
/**
* 1000
*/
@ApiParam(value = "初始读数")
@ApiModelProperty(value = "初始读数", notes = "单位是“模数”, 乘 1000 后开方得到频率值", dataType = "java.math.BigDecimal", required = true, position = 8)
@Excel(name = "初始读数")
@NotNull(message = "初始读数必填")
@TableField("INITIAL_READING")
private BigDecimal initialReading;
/**
*
*/
@ApiParam(value = "项目名称")
@ApiModelProperty(value = "项目名称", dataType = "java.lang.String", position = 9)
@Excel(name = "工程或项目名称")
@TableField("PROJECT_NAME")
private String projectName;
/**
*
*/
@ApiParam(value = "备注")
@ApiModelProperty(value = "备注", dataType = "java.lang.String")
@Excel(name = "备注")
@TableField("REMARK")
private String remark;
/**
*
*/
@ApiParam(value = "监理工程师")
@ApiModelProperty(value = "监理工程师", dataType = "java.lang.String")
@Excel(name = "监理工程师")
@TableField("SUPERVISOR")
private String supervisor;
/**
*
*/
@ApiParam(value = "创建时间")
@ApiModelProperty(value = "创建时间", dataType = "java.util.Date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField("CREATION_TIME")
private Date creationTime;
/**
*
*/
@ApiParam(value = "修改时间")
@ApiModelProperty(value = "修改时间", dataType = "java.util.Date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField("MODIFICATION_TIME")
private Date modificationTime;
/**
* 0: 1
*/
@ApiParam(value = "0:删除 1 已逻辑删除")
@ApiModelProperty(value = "0:删除 1 已逻辑删除", dataType = "java.lang.Integer")
@TableField("DEL")
private Integer del;
/**
*
*/
@ApiParam(value = "埋设示意图")
@ApiModelProperty(value = "埋设示意图", dataType = "java.lang.String")
@TableField(value = "SKETCH_MAP")
private String sketchMap;
/**
*
*/
@ApiParam(value = "日期")
@ApiModelProperty(value = "日期", dataType = "java.util.Date")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@Excel(name = "日期")
@TableField("CREATE_DATE")
private Date createDate;
/**
*
*/
@ApiParam(value = "埋设及填表人")
@ApiModelProperty(value = "埋设及填表人", dataType = "java.lang.String")
@Excel(name = "埋设及填表人")
@TableField("BURIED_PERSONNEL")
private String buriedPersonnel;
/**
*
*/
@ApiParam(value = "校验人")
@ApiModelProperty(value = "校验人", dataType = "java.lang.String")
@Excel(name = "校验人")
@TableField("CHECK_PERSONNEL")
private String checkPersonnel;
/**
*
*/
@ApiParam(value = "技术负责人")
@ApiModelProperty(value = "技术负责人", dataType = "java.lang.String")
@Excel(name = "技术负责人")
@TableField("TECHNICAL_DIRECTOR")
private String technicalDirector;
/**
* m
*/
@ApiParam(value = "下游水位m")
@ApiModelProperty(value = "下游水位m", dataType = "java.lang.Double")
@Excel(name = "下游水位")
@TableField("TAILWATER_LEVEL")
private Double tailwaterLevel;
/**
* m
*/
@ApiParam(value = "上游水位m")
@ApiModelProperty(value = "上游水位m", dataType = "java.lang.Double")
@Excel(name = "上游水位")
@TableField("HEADWATER_LEVEL")
private Double headwaterLevel;
/**
*
*/
@ApiParam(value = "天气")
@ApiModelProperty(value = "天气", dataType = "java.lang.String")
@Excel(name = "天气")
@TableField("WEATHER")
private String weather;
/**
*
*/
@ApiParam(value = "气压")
@ApiModelProperty(value = "气压", dataType = "java.math.BigDecimal")
@Excel(name = "气压")
@TableField("AIR_PRESSURE")
private BigDecimal airPressure;
/**
*
*/
@ApiParam(value = "气温")
@ApiModelProperty(value = "气温", dataType = "java.math.BigDecimal")
@Excel(name = "气温")
@TableField("AIR_TEMPERATURE")
private BigDecimal airTemperature;
/**
*
*/
@ApiParam(value = "埋设日期")
@ApiModelProperty(value = "埋设日期", dataType = "java.util.Date")
@Excel(name = "埋设日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@TableField("EMBEDDING_DATE")
private Date embeddingDate;
/**
* Hz,kHz
*/
@ApiParam(value = "埋设完毕读数Hz,kHz")
@ApiModelProperty(value = "埋设完毕读数Hz,kHz", dataType = "java.lang.String")
@Excel(name = "埋设完毕读数Hz,kHz")
@TableField("EMBEDDING_FINISH_READING")
private String embeddingFinishReading;
/**
* Hz,kHz
*/
@ApiParam(value = "零压读数Hz,kHz")
@ApiModelProperty(value = "零压读数Hz,kHz", dataType = "java.math.BigDecimal")
@Excel(name = "零压读数Hz,kHz")
@TableField("ZERO_PRESSURE_READINGS")
private BigDecimal zeroPressureReadings;
/**
* Hz,kHz
*/
@ApiParam(value = "就位后读数Hz,kHz")
@ApiModelProperty(value = "就位后读数Hz,kHz", dataType = "java.math.BigDecimal")
@Excel(name = "就位后读数Hz,kHz")
@TableField("END_READINGS")
private BigDecimal endReadings;
/**
* Hz,kHz
*/
@ApiParam(value = "入孔前读数Hz,kHz")
@ApiModelProperty(value = "入孔前读数Hz,kHz", dataType = "java.lang.String")
@Excel(name = "入孔前读数Hz,kHz")
@TableField("START_READINGS")
private String startReadings;
/**
*
*/
@ApiParam(value = "孔内水深")
@ApiModelProperty(value = "孔内水深", dataType = "java.math.BigDecimal")
@Excel(name = "孔内水深")
@TableField("DRAFT")
private BigDecimal draft;
/**
* Hz,kHz
*/
@ApiParam(value = "现场室内读数Hz,kHz")
@ApiModelProperty(value = "现场室内读数Hz,kHz", dataType = "java.math.BigDecimal")
@Excel(name = "现场室内读数Hz,kHz")
@TableField("READINGS")
private BigDecimal readings;
/**
* m
*/
@ApiParam(value = "坝轴距m")
@ApiModelProperty(value = "坝轴距m", dataType = "java.math.BigDecimal")
@Excel(name = "坝轴距m")
@TableField("DAM_WHEELBASE")
private BigDecimal damWheelbase;
/**
* m
*/
@ApiParam(value = "桩号m")
@ApiModelProperty(value = "桩号m", dataType = "java.lang.String")
@Excel(name = "桩号m")
@TableField("COLUMN_NO")
private String columnNo;
/**
* m
*/
@ApiParam(value = "埋设高程m")
@ApiModelProperty(value = "埋设高程m", dataType = "java.math.BigDecimal")
@Excel(name = "埋设高程m")
@NotNull(message = "埋设高程必填")
@TableField("EMBEDDING_ELEVATION")
private BigDecimal embeddingElevation;
/**
*
*/
@ApiParam(value = "电缆长度标记")
@ApiModelProperty(value = "电缆长度标记", dataType = "java.lang.String")
@Excel(name = "电缆长度标记m")
@TableField("CABLE_LENGTH_MARK")
private String cableLengthMark;
/**
* m
*/
@ApiParam(value = "电缆长度m")
@ApiModelProperty(value = "电缆长度m", dataType = "java.math.BigDecimal")
@Excel(name = "电缆长度m")
@TableField("CABLE_LENGTH")
private BigDecimal cableLength;
/**
*
*/
@ApiParam(value = "测头内阻")
@ApiModelProperty(value = "测头内阻", dataType = "java.lang.String")
@Excel(name = "测头内阻")
@TableField("RESISTANCE")
private String resistance;
/**
*
*/
@ApiParam(value = "量程")
@ApiModelProperty(value = "量程", dataType = "java.math.BigDecimal")
@Excel(name = "量程")
@TableField("RANGE")
private BigDecimal range;
/**
* Kkpa/Hz,kHz
*/
@ApiParam(value = "传感器系数Kkpa/Hz,kHz")
@ApiModelProperty(value = "传感器系数Kkpa/Hz,kHz", dataType = "java.math.BigDecimal")
@Excel(name = "传感器系数Kkpa/Hz,kHz")
@TableField("SENSOR_COEFFICIENT")
private BigDecimal sensorCoefficient;
/**
*
*/
@ApiParam(value = "生产厂家")
@ApiModelProperty(value = "生产厂家", dataType = "java.lang.String")
@Excel(name = "生产厂家")
@TableField("MANUFACTURER")
private String manufacturer;
/**
*
*/
@ApiParam(value = "测头编号")
@ApiModelProperty(value = "测头编号", dataType = "java.lang.String")
@Excel(name = "测头编号")
@TableField("MEASURING_PROBE_NO")
private String measuringProbeNo;
/**
*
*/
@ApiParam(value = "稳定水位")
@ApiModelProperty(value = "稳定水位", dataType = "java.lang.Double")
@Excel(name = "稳定水位")
@TableField("STEADY_WATER_LEVEL")
private Double steadyWaterLevel;
/**
*
*/
@ApiParam(value = "初见水位")
@ApiModelProperty(value = "初见水位", dataType = "java.lang.Double")
@Excel(name = "初见水位")
@TableField("INITIAL_WATER_LEVEL")
private Double initialWaterLevel;
/**
*
*/
@ApiParam(value = "钻孔直径mm")
@ApiModelProperty(value = "钻孔直径mm", dataType = "java.lang.String")
@Excel(name = "钻孔直径mm")
@TableField("DRILLING_SIZE")
private String drillingSize;
/**
*
*/
@ApiParam(value = "钻孔编号")
@ApiModelProperty(value = "钻孔编号", dataType = "java.lang.String")
@Excel(name = "钻孔编号")
@TableField("DRILLING_NO")
private String drillingNo;
/**
*
*/
@ApiParam(value = "作废字段,为了兼容前面的,暂时未删除")
@ApiModelProperty(value = "作废字段,为了兼容前面的,暂时未删除", dataType = "java.math.BigDecimal")
@TableField("PRESSURE")
private BigDecimal pressure;
/**
*
*/
@ApiParam(value = "作废字段,为了兼容前面的,暂时未删除")
@ApiModelProperty(value = "作废字段,为了兼容前面的,暂时未删除", dataType = "java.math.BigDecimal")
@TableField("RECENT_DATA")
private BigDecimal recentData;
/**
*
*/
@ApiParam(value = "最后数据同步时间")
@ApiModelProperty(value = "最后数据同步时间", dataType = "java.util.Date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField("LATEST_REPORTING_TIME")
private Date latestReportingTime;
/**
*
*/
@ApiParam(value = "所在断面")
@ApiModelProperty(value = "所在断面", dataType = "java.lang.String")
@TableField("CROSS_SECTION")
private String crossSection;
/**
*
*/
@ApiParam(value = "所在大坝")
@ApiModelProperty(value = "所在大坝", dataType = "java.lang.String")
@TableField("DAM")
private String dam;
/**
*
*/
@ApiParam(value = "作废字段,为了兼容前面的,暂时未删除")
@ApiModelProperty(value = "作废字段,为了兼容前面的,暂时未删除", dataType = "java.lang.String")
@TableField("MOUNTING_HEIGHT")
private String mountingHeight;
/**
*
*/
@ApiParam(value = "安装高程")
@ApiModelProperty(value = "安装高程", dataType = "java.lang.Double")
@TableField("INSTALLATION_POSITION_Z")
private Double installationPositionZ;
/**
*
*/
@ApiParam(value = "渗压计到孔底距离")
@ApiModelProperty(value = "渗压计到孔底距离", dataType = "java.lang.Double")
@TableField("DIST_FROM_OSMOSIS_METER_TO_BOTTOM")
private Double distFromOsmosisMeterToBottom;
/**
*
*/
@ApiParam(value = "安装纬度")
@ApiModelProperty(value = "安装纬度", dataType = "java.lang.Double")
@TableField("INSTALLATION_POSITION_Y")
private Double installationPositionY;
/**
*
*/
@ApiParam(value = "安装经度")
@ApiModelProperty(value = "安装经度", dataType = "java.lang.Double")
@TableField("INSTALLATION_POSITION_X")
private Double installationPositionX;
@Excel(name = "埋设示意图说明", type = 2, savePath = "img")
@TableField(exist = false)
private String picPath;
@ApiParam(value = "管口高程")
@ApiModelProperty(value = "管口高程", dataType = "java.lang.Double")
@TableField("PIPE_TOP_HEIGHT")
private Double pipeTopHeight;
@ApiParam(value = "管底高程")
@ApiModelProperty(value = "管底高程", dataType = "java.lang.Double")
@TableField("PIPE_BOTTOM_HEIGHT")
private Double pipeBottomHeight;
}

View File

@ -1,8 +0,0 @@
package com.whdc.zhdbaqapi.model.entity;
import lombok.Data;
@Data
public class DeviceRobot {
private RobotPoint point;
}

Some files were not shown because too many files have changed in this diff Show More