李磊
4 years ago
79 changed files with 3852 additions and 1 deletions
@ -0,0 +1,3 @@ |
|||
Manifest-Version: 1.0 |
|||
Main-Class: com.stone.Application |
|||
|
@ -1,2 +1,17 @@ |
|||
# DYBG |
|||
# DYBGManager |
|||
|
|||
打印报告 |
|||
|
|||
济南16版报检到18版出具承压报告时间 和 济南18版报检到16版出具机电报告时间的报告都得做特殊的处理。 |
|||
|
|||
> 全部从18版报检,承压走18版查询报告,机电走16版查询报告 |
|||
> |
|||
> |
|||
|
|||
# aspose在pdf里添加电子印章 |
|||
https://www.evget.com/article/2013/3/13/18632.html |
|||
|
|||
https://www.evget.com/article/2011/9/2/16570.html |
|||
|
|||
http://www.componentcn.com/kongjianjishu/kongjianjishu/2015-06-15/2823.html |
|||
|
|||
|
@ -0,0 +1,224 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
|||
xmlns="http://maven.apache.org/POM/4.0.0" |
|||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
|||
<!-- 认认真真的注释一下maven的配置文件 --> |
|||
|
|||
<!-- 声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。--> |
|||
<modelVersion>4.0.0</modelVersion> |
|||
<!-- 项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也是由此生成 --> |
|||
<groupId>com.stone</groupId> |
|||
<!-- 构件的标识符,它和group ID一起唯一标识一个构件;在某个 特定的group ID下,artifact ID也必须是唯一的。构件是项目产生的或使用的一个东西,Maven为项目产生的构件包括:JARs,源码,二进制发布和WARs等。--> |
|||
<artifactId>DYBGManager</artifactId> |
|||
<packaging>war</packaging> |
|||
|
|||
<!-- 父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。 坐标包括group ID,artifact ID和 version。--> |
|||
<parent> |
|||
<!-- Spring boot的项目必须要将parent设置为spring boot的parent,该parent包含了大量默认的配置,大大简化了我们的开发 --> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-parent</artifactId> |
|||
<version>2.1.0.RELEASE</version> |
|||
</parent> |
|||
|
|||
<!-- 以值替代名称,Properties可以在整个POM中使用,也可以作为触发条件;格式是<name>value</name>。--> |
|||
<properties> |
|||
<java.version>1.8</java.version> |
|||
<mybatis.spring.version>1.2.4</mybatis.spring.version> |
|||
<mapper.starter.version>2.0.4</mapper.starter.version> |
|||
<pagehelper.starter.version>1.2.9</pagehelper.starter.version> |
|||
</properties> |
|||
|
|||
<!-- 该元素描述了项目相关的所有依赖。这些依赖组成了项目构建过程中的一个个环节。它们自动从项目定义的仓库中下载。--> |
|||
<dependencies> |
|||
<!-- 导入spring boot的web支持 --> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-web</artifactId> |
|||
<!-- 去除内嵌tomcat 生产环境下开启--> |
|||
<!--<exclusions> |
|||
<exclusion> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-tomcat</artifactId> |
|||
</exclusion> |
|||
</exclusions>--> |
|||
</dependency> |
|||
<!-- 导入spring boot对数据库jdbc的支持 --> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-jdbc</artifactId> |
|||
</dependency> |
|||
<!-- 使用spring-aop和AspectJ 支持面向切面编程 --> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-aop</artifactId> |
|||
</dependency> |
|||
<!-- 对常用的测试框架Junit,Hamcrest 和 Mockito的支持 包含spring-test的模块 --> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-test</artifactId> |
|||
</dependency> |
|||
<!-- 增加redis数据库配置 --> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-data-redis</artifactId> |
|||
</dependency> |
|||
<!-- 可以从被@ConfigurationProperties注解的节点轻松的产生自己的配置元数据文件 --> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-configuration-processor</artifactId> |
|||
<optional>true</optional> |
|||
</dependency> |
|||
<!-- 导入mysql连接设置 --> |
|||
<dependency> |
|||
<groupId>mysql</groupId> |
|||
<artifactId>mysql-connector-java</artifactId> |
|||
<version>8.0.13</version> |
|||
</dependency> |
|||
<!-- 导入oracle连接设置 --> |
|||
<!--<dependency> |
|||
<groupId>com.oracle</groupId> |
|||
<artifactId>ojdbc14</artifactId> |
|||
<version>10.2.0.4.0</version> |
|||
<scope>system</scope> |
|||
<systemPath>${project.basedir}/src/main/resources/generator/ojdbc14.jar</systemPath> |
|||
</dependency>--> |
|||
<!-- 导入sqlserver连接设置 --> |
|||
<!--<dependency> |
|||
<groupId>com.microsoft</groupId> |
|||
<artifactId>sqlserver</artifactId> |
|||
<version>1.0</version> |
|||
<scope>system</scope> |
|||
<systemPath>${project.basedir}/src/main/resources/generator/sqljdbc2008.jar</systemPath> |
|||
</dependency>--> |
|||
<!-- 导入大圣之前写的消红jar包 --> |
|||
<!--<dependency> |
|||
<groupId>org.tempuri</groupId> |
|||
<artifactId>webclient</artifactId> |
|||
<scope>system</scope> |
|||
<systemPath>${project.basedir}/src/main/resources/generator/webclient.jar</systemPath> |
|||
</dependency>--> |
|||
<!-- 导入spring对Apache Shiro的 --> |
|||
<dependency> |
|||
<groupId>org.apache.shiro</groupId> |
|||
<artifactId>shiro-spring</artifactId> |
|||
<version>1.4.2</version> |
|||
</dependency> |
|||
<!-- springBoot与mybatis的整合 --> |
|||
<dependency> |
|||
<groupId>org.mybatis.spring.boot</groupId> |
|||
<artifactId>mybatis-spring-boot-starter</artifactId> |
|||
<version>1.3.2</version> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>tk.mybatis</groupId> |
|||
<artifactId>mapper-spring-boot-starter</artifactId> |
|||
<version>${mapper.starter.version}</version> |
|||
</dependency> |
|||
<!-- springBoot的分页工具 --> |
|||
<dependency> |
|||
<groupId>com.github.pagehelper</groupId> |
|||
<artifactId>pagehelper-spring-boot-starter</artifactId> |
|||
<version>${pagehelper.starter.version}</version> |
|||
<!-- 当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。即告诉maven你只依赖指定的项目,不依赖项目的依赖。此元素主要用于解决版本冲突问题 --> |
|||
<exclusions> |
|||
<exclusion> |
|||
<groupId>org.mybatis.spring.boot</groupId> |
|||
<artifactId>mybatis-spring-boot-starter</artifactId> |
|||
</exclusion> |
|||
</exclusions> |
|||
</dependency> |
|||
<!-- 添加druid数据库连接池对springBoot的支持 --> |
|||
<dependency> |
|||
<groupId>com.alibaba</groupId> |
|||
<artifactId>druid-spring-boot-starter</artifactId> |
|||
<version>1.1.10</version> |
|||
</dependency> |
|||
<!-- 添加hutool工具类 --> |
|||
<dependency> |
|||
<groupId>cn.hutool</groupId> |
|||
<artifactId>hutool-all</artifactId> |
|||
<version>4.1.19</version> |
|||
</dependency> |
|||
<!-- 添加fastjson对json串的处理 --> |
|||
<dependency> |
|||
<groupId>com.alibaba</groupId> |
|||
<artifactId>fastjson</artifactId> |
|||
<version>1.2.51</version> |
|||
</dependency> |
|||
<!-- 添加shiro+redis缓存插件 --> |
|||
<dependency> |
|||
<groupId>org.crazycake</groupId> |
|||
<artifactId>shiro-redis</artifactId> |
|||
<version>3.2.3</version> |
|||
</dependency> |
|||
<!-- 添加lombok插件简化实体类冗余代码 --> |
|||
<dependency> |
|||
<groupId>org.projectlombok</groupId> |
|||
<artifactId>lombok</artifactId> |
|||
<version>1.18.4</version> |
|||
</dependency> |
|||
<!-- Swagger API文档 --> |
|||
<dependency> |
|||
<groupId>io.springfox</groupId> |
|||
<artifactId>springfox-swagger2</artifactId> |
|||
<version>2.9.2</version> |
|||
<exclusions> |
|||
<exclusion> |
|||
<groupId>io.swagger</groupId> |
|||
<artifactId>swagger-annotations</artifactId> |
|||
</exclusion> |
|||
<exclusion> |
|||
<groupId>io.swagger</groupId> |
|||
<artifactId>swagger-models</artifactId> |
|||
</exclusion> |
|||
</exclusions> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>io.springfox</groupId> |
|||
<artifactId>springfox-swagger-ui</artifactId> |
|||
<version>2.9.2</version> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>io.swagger</groupId> |
|||
<artifactId>swagger-annotations</artifactId> |
|||
<version>1.5.21</version> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>io.swagger</groupId> |
|||
<artifactId>swagger-models</artifactId> |
|||
<version>1.5.21</version> |
|||
</dependency> |
|||
<!--添加servlet的依赖 生产环境下开启--> |
|||
<!--<dependency> |
|||
<groupId>javax.servlet</groupId> |
|||
<artifactId>javax.servlet-api</artifactId> |
|||
<version>4.0.1</version> |
|||
<scope>provided</scope> |
|||
</dependency>--> |
|||
|
|||
<!-- 增加打包构建插件 --> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-maven-plugin</artifactId> |
|||
<version>2.1.8.RELEASE</version> |
|||
</dependency> |
|||
|
|||
</dependencies> |
|||
|
|||
<!-- 构建项目需要的信息 --> |
|||
<build> |
|||
<!-- 打包项目名称 --> |
|||
<finalName>${project.artifactId}</finalName> |
|||
<!-- 使用的插件列表 --> |
|||
<plugins> |
|||
<plugin> |
|||
<groupId>org.apache.maven.plugins</groupId> |
|||
<artifactId>maven-surefire-plugin</artifactId> |
|||
<configuration> |
|||
<testFailureIgnore>true</testFailureIgnore> |
|||
</configuration> |
|||
</plugin> |
|||
</plugins> |
|||
</build> |
|||
|
|||
</project> |
@ -0,0 +1,41 @@ |
|||
package com.stone; |
|||
|
|||
import org.slf4j.Logger; |
|||
import org.slf4j.LoggerFactory; |
|||
import org.springframework.boot.CommandLineRunner; |
|||
import org.springframework.boot.SpringApplication; |
|||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
|||
import org.springframework.boot.builder.SpringApplicationBuilder; |
|||
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; |
|||
import org.springframework.scheduling.annotation.EnableScheduling; |
|||
import org.springframework.stereotype.Controller; |
|||
import org.springframework.web.servlet.config.annotation.EnableWebMvc; |
|||
import tk.mybatis.spring.annotation.MapperScan; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@Controller |
|||
@EnableWebMvc |
|||
@SpringBootApplication |
|||
@MapperScan(basePackages = "com.stone.mapper") |
|||
public class Application extends SpringBootServletInitializer implements CommandLineRunner { |
|||
|
|||
private Logger logger = LoggerFactory.getLogger(Application.class); |
|||
|
|||
public static void main(String[] args) { |
|||
SpringApplication.run(Application.class, args); |
|||
} |
|||
|
|||
/*// 生产环境
|
|||
@Override |
|||
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { |
|||
return application.sources(Application.class); |
|||
}*/ |
|||
|
|||
@Override |
|||
public void run(String... args) { |
|||
logger.info("服务启动完成!"); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,123 @@ |
|||
package com.stone.api.enums; |
|||
|
|||
import com.stone.conf.exception.*; |
|||
import org.springframework.http.HttpStatus; |
|||
|
|||
/** |
|||
* 异常、HTTP状态码、默认自定义返回码 映射类 |
|||
*/ |
|||
public enum BusinessExceptionEnum { |
|||
|
|||
/** |
|||
* 无效参数 |
|||
*/ |
|||
PARAMETER_INVALID(ParameterInvalidException.class, HttpStatus.BAD_REQUEST, ResultCode.PARAM_IS_INVALID), |
|||
|
|||
/** |
|||
* 数据未找到 |
|||
*/ |
|||
NOT_FOUND(DataNotFoundException.class, HttpStatus.NOT_FOUND, ResultCode.RESULE_DATA_NONE), |
|||
|
|||
/** |
|||
* 接口方法不允许 |
|||
*/ |
|||
METHOD_NOT_ALLOWED(MethodNotAllowException.class, HttpStatus.METHOD_NOT_ALLOWED, ResultCode.INTERFACE_ADDRESS_INVALID), |
|||
|
|||
/** |
|||
* 数据已存在 |
|||
*/ |
|||
CONFLICT(DataConflictException.class, HttpStatus.CONFLICT, ResultCode.DATA_ALREADY_EXISTED), |
|||
|
|||
/** |
|||
* 用户未登录 |
|||
*/ |
|||
UNAUTHORIZED(UserNotLoginException.class, HttpStatus.UNAUTHORIZED, ResultCode.USER_NOT_LOGGED_IN), |
|||
|
|||
/** |
|||
* 无访问权限 |
|||
*/ |
|||
FORBIDDEN(PermissionForbiddenException.class, HttpStatus.FORBIDDEN, ResultCode.PERMISSION_NO_ACCESS), |
|||
|
|||
/** |
|||
* 远程访问时错误 |
|||
*/ |
|||
REMOTE_ACCESS_ERROR(RemoteAccessException.class, HttpStatus.INTERNAL_SERVER_ERROR, ResultCode.INTERFACE_OUTTER_INVOKE_ERROR), |
|||
|
|||
/** |
|||
* 系统内部错误 |
|||
*/ |
|||
INTERNAL_SERVER_ERROR(InternalServerException.class, HttpStatus.INTERNAL_SERVER_ERROR, ResultCode.SYSTEM_INNER_ERROR); |
|||
|
|||
private Class<? extends BusinessException> eClass; |
|||
|
|||
private HttpStatus httpStatus; |
|||
|
|||
private ResultCode resultCode; |
|||
|
|||
BusinessExceptionEnum(Class<? extends BusinessException> eClass, HttpStatus httpStatus, ResultCode resultCode) { |
|||
this.eClass = eClass; |
|||
this.httpStatus = httpStatus; |
|||
this.resultCode = resultCode; |
|||
} |
|||
|
|||
public Class<? extends BusinessException> getEClass() { |
|||
return eClass; |
|||
} |
|||
|
|||
public HttpStatus getHttpStatus() { |
|||
return httpStatus; |
|||
} |
|||
|
|||
public ResultCode getResultCode() { |
|||
return resultCode; |
|||
} |
|||
|
|||
public static boolean isSupportHttpStatus(int httpStatus) { |
|||
for (BusinessExceptionEnum exceptionEnum : BusinessExceptionEnum.values()) { |
|||
if (exceptionEnum.httpStatus.value() == httpStatus) { |
|||
return true; |
|||
} |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
public static boolean isSupportException(Class<?> z) { |
|||
for (BusinessExceptionEnum exceptionEnum : BusinessExceptionEnum.values()) { |
|||
if (exceptionEnum.eClass.equals(z)) { |
|||
return true; |
|||
} |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
public static BusinessExceptionEnum getByHttpStatus(HttpStatus httpStatus) { |
|||
if (httpStatus == null) { |
|||
return null; |
|||
} |
|||
|
|||
for (BusinessExceptionEnum exceptionEnum : BusinessExceptionEnum.values()) { |
|||
if (httpStatus.equals(exceptionEnum.httpStatus)) { |
|||
return exceptionEnum; |
|||
} |
|||
} |
|||
|
|||
return null; |
|||
} |
|||
|
|||
public static BusinessExceptionEnum getByEClass(Class<? extends BusinessException> eClass) { |
|||
if (eClass == null) { |
|||
return null; |
|||
} |
|||
|
|||
for (BusinessExceptionEnum exceptionEnum : BusinessExceptionEnum.values()) { |
|||
if (eClass.equals(exceptionEnum.eClass)) { |
|||
return exceptionEnum; |
|||
} |
|||
} |
|||
|
|||
return null; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,94 @@ |
|||
package com.stone.api.enums; |
|||
|
|||
/** |
|||
* API 统一返回状态码 |
|||
*/ |
|||
public enum ResultCode { |
|||
|
|||
/* 成功状态码 */ |
|||
SUCCESS(1, "成功"), |
|||
|
|||
/* 参数错误:10001-19999 */ |
|||
PARAM_IS_INVALID(10001, "参数无效"), |
|||
PARAM_IS_BLANK(10002, "参数为空"), |
|||
PARAM_TYPE_BIND_ERROR(10003, "参数类型错误"), |
|||
PARAM_NOT_COMPLETE(10004, "参数缺失"), |
|||
|
|||
/* 用户错误:20001-29999*/ |
|||
USER_NOT_LOGGED_IN(20001, "用户未登录"), |
|||
USER_LOGIN_ERROR(20002, "账号不存在或密码错误"), |
|||
USER_ACCOUNT_FORBIDDEN(20003, "账号已被禁用"), |
|||
USER_NOT_EXIST(20004, "用户不存在"), |
|||
USER_HAS_EXISTED(20005, "用户已存在"), |
|||
LOGIN_CREDENTIAL_EXISTED(20006, "凭证已存在"), |
|||
USER_SIGN_PASSWORD_ERROR(20007, "签名密码错误,请重新输入"), |
|||
|
|||
/* 业务错误:30001-39999 */ |
|||
SPECIFIED_QUESTIONED_USER_NOT_EXIST(30001, "业务错误"), |
|||
|
|||
/* 系统错误:40001-49999 */ |
|||
SYSTEM_INNER_ERROR(40001, "系统繁忙,请稍后重试"), |
|||
|
|||
/* 数据错误:50001-599999 */ |
|||
RESULE_DATA_NONE(50001, "数据未找到"), |
|||
DATA_IS_WRONG(50002, "数据有误"), |
|||
DATA_ALREADY_EXISTED(50003, "数据已存在"), |
|||
|
|||
/* 接口错误:60001-69999 */ |
|||
INTERFACE_INNER_INVOKE_ERROR(60001, "内部系统接口调用异常"), |
|||
INTERFACE_OUTTER_INVOKE_ERROR(60002, "外部系统接口调用异常"), |
|||
INTERFACE_FORBID_VISIT(60003, "该接口禁止访问"), |
|||
INTERFACE_ADDRESS_INVALID(60004, "接口地址无效"), |
|||
INTERFACE_REQUEST_TIMEOUT(60005, "接口请求超时"), |
|||
INTERFACE_EXCEED_LOAD(60006, "接口负载过高"), |
|||
|
|||
/* 权限错误:70001-79999 */ |
|||
PERMISSION_NO_ACCESS(70001, "无访问权限"), |
|||
RESOURCE_EXISTED(70002, "资源已存在"), |
|||
RESOURCE_NOT_EXISTED(70003, "资源不存在"), |
|||
|
|||
/* 预览错误:80001-89999 */ |
|||
PREVIEW_CHILD_PARAM_ERROR(80001, "子报告生成参数异常"), |
|||
PREVIEW_CONVERT_PDF_ERROR(80002, "转换 PDF 文件异常"); |
|||
|
|||
private Integer code; |
|||
|
|||
private String message; |
|||
|
|||
ResultCode(Integer code, String message) { |
|||
this.code = code; |
|||
this.message = message; |
|||
} |
|||
|
|||
public Integer code() { |
|||
return this.code; |
|||
} |
|||
|
|||
public String message() { |
|||
return this.message; |
|||
} |
|||
|
|||
public static String getMessage(String name) { |
|||
for (ResultCode item : ResultCode.values()) { |
|||
if (item.name().equals(name)) { |
|||
return item.message; |
|||
} |
|||
} |
|||
return name; |
|||
} |
|||
|
|||
public static Integer getCode(String name) { |
|||
for (ResultCode item : ResultCode.values()) { |
|||
if (item.name().equals(name)) { |
|||
return item.code; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
@Override |
|||
public String toString() { |
|||
return this.name(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,19 @@ |
|||
package com.stone.base; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public abstract class BaseController<E, ID extends Serializable> { |
|||
|
|||
/** |
|||
* 获取service |
|||
* @return |
|||
*/ |
|||
@Autowired |
|||
public abstract BaseService<E,ID> getService(); |
|||
|
|||
} |
@ -0,0 +1,42 @@ |
|||
package com.stone.base; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Builder; |
|||
import lombok.Data; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import javax.persistence.Column; |
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* 基础信息 |
|||
* @author zichen |
|||
*/ |
|||
@Data |
|||
public abstract class BaseEntity implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
@ApiModelProperty(value = "创建时间") |
|||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@Column(name = "create_time") |
|||
private Date createTime; |
|||
|
|||
@ApiModelProperty(value = "创建人") |
|||
@Column(name = "create_by") |
|||
private String createBy; |
|||
|
|||
@ApiModelProperty(value = "修改时间") |
|||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@Column(name = "update_time") |
|||
private Date updateTime; |
|||
|
|||
@ApiModelProperty(value = "修改人") |
|||
@Column(name = "update_by") |
|||
private String updateBy; |
|||
|
|||
} |
@ -0,0 +1,8 @@ |
|||
package com.stone.base; |
|||
|
|||
import tk.mybatis.mapper.common.Mapper; |
|||
import tk.mybatis.mapper.common.MySqlMapper; |
|||
|
|||
public interface BaseMapper<T> extends Mapper<T>, MySqlMapper<T> { |
|||
// FIXME 特别注意,该接口不能被扫描到,否则会出错
|
|||
} |
@ -0,0 +1,24 @@ |
|||
package com.stone.base; |
|||
|
|||
import org.apache.shiro.SecurityUtils; |
|||
import org.apache.shiro.session.Session; |
|||
import org.apache.shiro.subject.Subject; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* JDK8函数式接口注解 仅能包含一个抽象方法 |
|||
* @author zichen |
|||
*/ |
|||
@FunctionalInterface |
|||
public interface BaseService<E, ID extends Serializable> { |
|||
|
|||
BaseMapper<E> getRepository(); |
|||
|
|||
default Session getSession() { |
|||
Subject sub = SecurityUtils.getSubject(); |
|||
return sub.getSession(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,48 @@ |
|||
package com.stone.conf; |
|||
|
|||
import com.stone.conf.enums.FilePathConstants; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.context.annotation.Configuration; |
|||
import org.springframework.core.Ordered; |
|||
import org.springframework.http.HttpHeaders; |
|||
import org.springframework.web.servlet.config.annotation.CorsRegistry; |
|||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; |
|||
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; |
|||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; |
|||
|
|||
import java.util.Arrays; |
|||
|
|||
|
|||
@Configuration |
|||
public class WebMvcConfig implements WebMvcConfigurer { |
|||
|
|||
@Value("${front.ip}") |
|||
private String frontIp; |
|||
|
|||
@Value("${front.projectName}") |
|||
private String projectName; |
|||
|
|||
@Override |
|||
public void addResourceHandlers(ResourceHandlerRegistry registry) { |
|||
// 定义PDF预览网络路径
|
|||
registry.addResourceHandler(projectName + "18/pdf/**") |
|||
.addResourceLocations("file:" + FilePathConstants.TEMPLATE_18 + projectName + "/pdf/"); |
|||
// 定义图片资源路径
|
|||
registry.addResourceHandler(projectName + "16/pdf/**") |
|||
.addResourceLocations("file:" + FilePathConstants.TEMPLATE_16 + "/PDF/" + projectName); |
|||
} |
|||
|
|||
/** |
|||
* 允许跨域访问 |
|||
*/ |
|||
@Override |
|||
public void addCorsMappings(CorsRegistry registry) { |
|||
registry.addMapping("/**") |
|||
.allowedHeaders("*") |
|||
.allowedMethods("*") |
|||
.allowedOrigins(frontIp) //此处为前台项目的ip地址
|
|||
.allowCredentials(true) |
|||
.exposedHeaders(HttpHeaders.SET_COOKIE); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,51 @@ |
|||
package com.stone.conf.datasource.intermediate; |
|||
|
|||
import org.apache.ibatis.session.SqlSessionFactory; |
|||
import org.mybatis.spring.SqlSessionFactoryBean; |
|||
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; |
|||
import org.springframework.boot.context.properties.ConfigurationProperties; |
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.context.annotation.Configuration; |
|||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver; |
|||
import org.springframework.jdbc.datasource.DataSourceTransactionManager; |
|||
import tk.mybatis.spring.annotation.MapperScan; |
|||
|
|||
import javax.sql.DataSource; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@Configuration |
|||
@MapperScan(basePackages = "com.stone.mapper.intermediate", sqlSessionFactoryRef = "SessionTemplateIntermediate") |
|||
public class DruidIntermediate { |
|||
|
|||
@Bean |
|||
@ConfigurationProperties(prefix = "spring.datasource.intermediate") |
|||
public DataSourceProperties DataSourcePropertiesIntermediate(){ |
|||
return new DataSourceProperties(); |
|||
} |
|||
|
|||
@Bean |
|||
@ConfigurationProperties(prefix = "spring.datasource.intermediate") |
|||
public DataSource DataSourceIntermediates() { |
|||
return DataSourcePropertiesIntermediate().initializeDataSourceBuilder().build(); |
|||
// return DataSourceBuilder.create().build();
|
|||
} |
|||
|
|||
@Bean |
|||
public DataSourceTransactionManager TransactionManagerIntermediate() { |
|||
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(); |
|||
dataSourceTransactionManager.setDataSource(DataSourceIntermediates()); |
|||
return dataSourceTransactionManager; |
|||
} |
|||
|
|||
@Bean(name = "SessionTemplateIntermediate") |
|||
public SqlSessionFactory SqlSessionFactoryIntermediate() throws Exception { |
|||
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); |
|||
sessionFactory.setDataSource(DataSourceIntermediates()); |
|||
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() |
|||
.getResources( "classpath*:mapper/intermediate/*.xml")); |
|||
return sessionFactory.getObject(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,56 @@ |
|||
package com.stone.conf.datasource.senior; |
|||
|
|||
import org.apache.ibatis.session.SqlSessionFactory; |
|||
import org.mybatis.spring.SqlSessionFactoryBean; |
|||
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; |
|||
import org.springframework.boot.context.properties.ConfigurationProperties; |
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.context.annotation.Configuration; |
|||
import org.springframework.context.annotation.Primary; |
|||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver; |
|||
import org.springframework.jdbc.datasource.DataSourceTransactionManager; |
|||
import tk.mybatis.spring.annotation.MapperScan; |
|||
|
|||
import javax.sql.DataSource; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@Configuration |
|||
@MapperScan(basePackages = "com.stone.mapper.senior", sqlSessionFactoryRef = "SessionTemplateSenior") |
|||
public class DruidSenior { |
|||
|
|||
@Bean |
|||
@Primary |
|||
@ConfigurationProperties(prefix = "spring.datasource.senior") |
|||
public DataSourceProperties DataSourcePropertiesSenior(){ |
|||
return new DataSourceProperties(); |
|||
} |
|||
|
|||
@Bean |
|||
@Primary |
|||
@ConfigurationProperties(prefix = "spring.datasource.senior") |
|||
public DataSource DataSourceSeniors() { |
|||
return DataSourcePropertiesSenior().initializeDataSourceBuilder().build(); |
|||
// return DataSourceBuilder.create().build();
|
|||
} |
|||
|
|||
@Bean |
|||
@Primary |
|||
public DataSourceTransactionManager TransactionManagerSenior() { |
|||
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(); |
|||
dataSourceTransactionManager.setDataSource(DataSourceSeniors()); |
|||
return dataSourceTransactionManager; |
|||
} |
|||
|
|||
@Bean(name = "SessionTemplateSenior") |
|||
@Primary |
|||
public SqlSessionFactory SqlSessionFactorySenior() throws Exception { |
|||
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); |
|||
sessionFactory.setDataSource(DataSourceSeniors()); |
|||
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() |
|||
.getResources( "classpath*:mapper/senior/*.xml")); |
|||
return sessionFactory.getObject(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,15 @@ |
|||
package com.stone.conf.enums; |
|||
|
|||
public class Constants { |
|||
|
|||
public static final String SUCCESS_CODE = "100"; |
|||
public static final String SUCCESS_MSG = "请求成功"; |
|||
|
|||
/** |
|||
* session中存放用户信息的key值 |
|||
*/ |
|||
public static final String SESSION_USER_PERMISSION = "userPermission"; |
|||
|
|||
public final static String SESSION_USER_OBJECT = "SESSION_USER_OBJECT_EXP"; |
|||
|
|||
} |
@ -0,0 +1,37 @@ |
|||
package com.stone.conf.enums; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import lombok.*; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
@ApiModel(value = "设备种类代码") |
|||
public enum EquipmentCodeEnum { |
|||
|
|||
/* |
|||
* 错误信息 |
|||
* */ |
|||
GL("1000", "锅炉"), |
|||
|
|||
YLRQ("2000", "压力容器"), |
|||
|
|||
DT("3000", "电梯"), |
|||
|
|||
QZJ("4000", "起重机"), |
|||
|
|||
CC("5000", "厂车"), |
|||
|
|||
YLGDYJ("7000", "压力管道原件"), |
|||
|
|||
YLGD("8000", "压力管道"); |
|||
|
|||
@Getter @Setter |
|||
private String code; |
|||
|
|||
@Getter @Setter |
|||
private String name; |
|||
|
|||
} |
@ -0,0 +1,52 @@ |
|||
package com.stone.conf.enums; |
|||
|
|||
public enum ErrorEnum { |
|||
|
|||
/* |
|||
* 错误信息 |
|||
* */ |
|||
E_400("400", "请求处理异常,请稍后再试"), |
|||
|
|||
E_10009("10009", "账户已存在"), |
|||
|
|||
E_10008("10008", "原始密码输入错误,请重试"), |
|||
|
|||
E_10007("10007", "签名密码输入错误,请重试"), |
|||
|
|||
E_10006("10006", "模板文件不存在,请上传后下载"), |
|||
|
|||
E_10005("10005", "上传文件格式有误,请核对后导入"), |
|||
|
|||
E_20011("20011", "登陆已过期,请重新登陆"), |
|||
|
|||
E_90003("90003", "缺少必填参数"); |
|||
|
|||
private String errorCode; |
|||
|
|||
private String errorMsg; |
|||
|
|||
ErrorEnum() { |
|||
} |
|||
|
|||
ErrorEnum(String errorCode, String errorMsg) { |
|||
this.errorCode = errorCode; |
|||
this.errorMsg = errorMsg; |
|||
} |
|||
|
|||
public String getErrorCode() { |
|||
return errorCode; |
|||
} |
|||
|
|||
public void setErrorCode(String errorCode) { |
|||
this.errorCode = errorCode; |
|||
} |
|||
|
|||
public String getErrorMsg() { |
|||
return errorMsg; |
|||
} |
|||
|
|||
public void setErrorMsg(String errorMsg) { |
|||
this.errorMsg = errorMsg; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,13 @@ |
|||
package com.stone.conf.enums; |
|||
|
|||
/** |
|||
* 文件路径 |
|||
* @author zichen |
|||
*/ |
|||
public final class FilePathConstants { |
|||
|
|||
public static final String TEMPLATE_18 = "D:/static/"; |
|||
|
|||
public static final String TEMPLATE_16 = "D:/SDMA/"; |
|||
|
|||
} |
@ -0,0 +1,18 @@ |
|||
package com.stone.conf.enums; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public final class LinkConstants { |
|||
|
|||
public final static String BJ = "bjState"; |
|||
|
|||
public final static String RENWU = "fpState"; |
|||
|
|||
public final static String ALLOT_RENWU = "renwuState"; |
|||
|
|||
public final static String YSJL = "ysjlState"; |
|||
|
|||
public final static String REPORT = "reportState"; |
|||
|
|||
} |
@ -0,0 +1,13 @@ |
|||
package com.stone.conf.enums; |
|||
|
|||
import io.swagger.annotations.ApiModelProperty; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public class MagicValueConstants { |
|||
|
|||
@ApiModelProperty(value = "日期格式化") |
|||
public final static String DATE_FORMAT = "yyyy-MM-dd"; |
|||
|
|||
} |
@ -0,0 +1,21 @@ |
|||
package com.stone.conf.enums; |
|||
|
|||
import lombok.Getter; |
|||
import lombok.Setter; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public final class StateConstants { |
|||
|
|||
public final static String BJ = "bjState"; |
|||
|
|||
public final static String RENWU = "fpState"; |
|||
|
|||
public final static String ALLOT_RENWU = "renwuState"; |
|||
|
|||
public final static String YSJL = "ysjlState"; |
|||
|
|||
public final static String REPORT = "reportState"; |
|||
|
|||
} |
@ -0,0 +1,12 @@ |
|||
package com.stone.conf.enums; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public class VersionConstants { |
|||
|
|||
public final static String SENIOR = "18"; |
|||
|
|||
public final static String Intermediate = "16"; |
|||
|
|||
} |
@ -0,0 +1,54 @@ |
|||
package com.stone.conf.exception; |
|||
|
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.stone.api.enums.BusinessExceptionEnum; |
|||
import com.stone.api.enums.ResultCode; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
@EqualsAndHashCode(callSuper = true) |
|||
@Data |
|||
public class BusinessException extends RuntimeException { |
|||
|
|||
private static final long serialVersionUID = 194906846739586856L; |
|||
|
|||
protected String code; |
|||
|
|||
protected String message; |
|||
|
|||
protected ResultCode resultCode; |
|||
|
|||
protected Object data; |
|||
|
|||
public BusinessException() { |
|||
BusinessExceptionEnum exceptionEnum = BusinessExceptionEnum.getByEClass(this.getClass()); |
|||
if (exceptionEnum != null) { |
|||
resultCode = exceptionEnum.getResultCode(); |
|||
code = exceptionEnum.getResultCode().code().toString(); |
|||
message = exceptionEnum.getResultCode().message(); |
|||
} |
|||
|
|||
} |
|||
|
|||
public BusinessException(String message) { |
|||
this(); |
|||
this.message = message; |
|||
} |
|||
|
|||
public BusinessException(String format, Object... objects) { |
|||
this(); |
|||
this.message = StrUtil.format(format, "{}", objects); |
|||
} |
|||
|
|||
public BusinessException(ResultCode resultCode, Object data) { |
|||
this(resultCode); |
|||
this.data = data; |
|||
} |
|||
|
|||
public BusinessException(ResultCode resultCode) { |
|||
this.resultCode = resultCode; |
|||
this.code = resultCode.code().toString(); |
|||
this.message = resultCode.message(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,34 @@ |
|||
package com.stone.conf.exception; |
|||
|
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.stone.conf.enums.ErrorEnum; |
|||
import com.stone.util.common.ReturnJSONUtils; |
|||
|
|||
/** |
|||
* 本系统使用的自定义错误类 |
|||
* 比如在校验参数时,如果不符合要求,可以抛出此错误类 |
|||
* 拦截器可以统一拦截此错误,将其中json返回给前端 |
|||
*/ |
|||
|
|||
public class CommonJsonException extends RuntimeException { |
|||
|
|||
private JSONObject resultJson; |
|||
|
|||
/** |
|||
* 调用时可以在任何代码处直接throws这个Exception, |
|||
* 都会统一被拦截,并封装好json返回给前台 |
|||
* @param errorEnum 以错误的ErrorEnum做参数 |
|||
*/ |
|||
public CommonJsonException(ErrorEnum errorEnum) { |
|||
this.resultJson = ReturnJSONUtils.errorJson(errorEnum); |
|||
} |
|||
|
|||
public CommonJsonException(JSONObject resultJson) { |
|||
this.resultJson = resultJson; |
|||
} |
|||
|
|||
public JSONObject getResultJson() { |
|||
return resultJson; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,36 @@ |
|||
package com.stone.conf.exception; |
|||
|
|||
import com.stone.api.enums.ResultCode; |
|||
|
|||
/** |
|||
* 数据已经存在异常 |
|||
*/ |
|||
public class DataConflictException extends BusinessException { |
|||
|
|||
private static final long serialVersionUID = 3721036867889297081L; |
|||
|
|||
public DataConflictException() { |
|||
super(); |
|||
} |
|||
|
|||
public DataConflictException(Object data) { |
|||
super.data = data; |
|||
} |
|||
|
|||
public DataConflictException(ResultCode resultCode) { |
|||
super(resultCode); |
|||
} |
|||
|
|||
public DataConflictException(ResultCode resultCode, Object data) { |
|||
super(resultCode, data); |
|||
} |
|||
|
|||
public DataConflictException(String msg) { |
|||
super(msg); |
|||
} |
|||
|
|||
public DataConflictException(String formatMsg, Object... objects) { |
|||
super(formatMsg, objects); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,38 @@ |
|||
package com.stone.conf.exception; |
|||
|
|||
|
|||
import com.stone.api.enums.ResultCode; |
|||
|
|||
/** |
|||
* 数据没有找到异常 |
|||
*/ |
|||
public class DataNotFoundException extends BusinessException { |
|||
|
|||
private static final long serialVersionUID = 3721036867889297081L; |
|||
|
|||
public DataNotFoundException() { |
|||
super(); |
|||
} |
|||
|
|||
public DataNotFoundException(Object data) { |
|||
super(); |
|||
super.data = data; |
|||
} |
|||
|
|||
public DataNotFoundException(ResultCode resultCode) { |
|||
super(resultCode); |
|||
} |
|||
|
|||
public DataNotFoundException(ResultCode resultCode, Object data) { |
|||
super(resultCode, data); |
|||
} |
|||
|
|||
public DataNotFoundException(String msg) { |
|||
super(msg); |
|||
} |
|||
|
|||
public DataNotFoundException(String formatMsg, Object... objects) { |
|||
super(formatMsg, objects); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,30 @@ |
|||
package com.stone.conf.exception; |
|||
|
|||
/** |
|||
* 内部服务异常 |
|||
*/ |
|||
public class InternalServerException extends BusinessException { |
|||
|
|||
private static final long serialVersionUID = 2659909836556958676L; |
|||
|
|||
public InternalServerException() { |
|||
super(); |
|||
} |
|||
|
|||
public InternalServerException(String msg, Throwable cause) { |
|||
super(msg, cause); |
|||
} |
|||
|
|||
public InternalServerException(String msg, Throwable cause, Object... objects) { |
|||
super(msg, cause, objects); |
|||
} |
|||
|
|||
public InternalServerException(String msg) { |
|||
super(msg); |
|||
} |
|||
|
|||
public InternalServerException(String formatMsg, Object... objects) { |
|||
super(formatMsg, objects); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,37 @@ |
|||
package com.stone.conf.exception; |
|||
|
|||
import com.stone.api.enums.ResultCode; |
|||
|
|||
/** |
|||
* 方法不允许异常 |
|||
*/ |
|||
public class MethodNotAllowException extends BusinessException { |
|||
|
|||
private static final long serialVersionUID = -3813290937049524713L; |
|||
|
|||
public MethodNotAllowException() { |
|||
super(); |
|||
} |
|||
|
|||
public MethodNotAllowException(Object data) { |
|||
super.data = data; |
|||
} |
|||
|
|||
public MethodNotAllowException(ResultCode resultCode) { |
|||
super(resultCode); |
|||
} |
|||
|
|||
public MethodNotAllowException(ResultCode resultCode, Object data) { |
|||
super(resultCode, data); |
|||
} |
|||
|
|||
public MethodNotAllowException(String msg) { |
|||
super(msg); |
|||
} |
|||
|
|||
public MethodNotAllowException(String formatMsg, Object... objects) { |
|||
super(formatMsg, objects); |
|||
} |
|||
|
|||
|
|||
} |
@ -0,0 +1,37 @@ |
|||
package com.stone.conf.exception; |
|||
|
|||
import com.stone.api.enums.ResultCode; |
|||
|
|||
/** |
|||
* 参数无效异常 |
|||
*/ |
|||
public class ParameterInvalidException extends BusinessException { |
|||
|
|||
private static final long serialVersionUID = 3721036867889297081L; |
|||
|
|||
public ParameterInvalidException() { |
|||
super(); |
|||
} |
|||
|
|||
public ParameterInvalidException(Object data) { |
|||
super(); |
|||
super.data = data; |
|||
} |
|||
|
|||
public ParameterInvalidException(ResultCode resultCode) { |
|||
super(resultCode); |
|||
} |
|||
|
|||
public ParameterInvalidException(ResultCode resultCode, Object data) { |
|||
super(resultCode, data); |
|||
} |
|||
|
|||
public ParameterInvalidException(String msg) { |
|||
super(msg); |
|||
} |
|||
|
|||
public ParameterInvalidException(String formatMsg, Object... objects) { |
|||
super(formatMsg, objects); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,36 @@ |
|||
package com.stone.conf.exception; |
|||
|
|||
import com.stone.api.enums.ResultCode; |
|||
|
|||
/** |
|||
* 权限不足异常 |
|||
*/ |
|||
public class PermissionForbiddenException extends BusinessException { |
|||
|
|||
private static final long serialVersionUID = 3721036867889297081L; |
|||
|
|||
public PermissionForbiddenException() { |
|||
super(); |
|||
} |
|||
|
|||
public PermissionForbiddenException(Object data) { |
|||
super.data = data; |
|||
} |
|||
|
|||
public PermissionForbiddenException(ResultCode resultCode) { |
|||
super(resultCode); |
|||
} |
|||
|
|||
public PermissionForbiddenException(ResultCode resultCode, Object data) { |
|||
super(resultCode, data); |
|||
} |
|||
|
|||
public PermissionForbiddenException(String msg) { |
|||
super(msg); |
|||
} |
|||
|
|||
public PermissionForbiddenException(String formatMsg, Object... objects) { |
|||
super(formatMsg, objects); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,36 @@ |
|||
package com.stone.conf.exception; |
|||
|
|||
import com.stone.api.enums.ResultCode; |
|||
|
|||
/** |
|||
* 远程访问异常 |
|||
*/ |
|||
public class RemoteAccessException extends BusinessException { |
|||
|
|||
private static final long serialVersionUID = -832464574076215195L; |
|||
|
|||
public RemoteAccessException() { |
|||
super(); |
|||
} |
|||
|
|||
public RemoteAccessException(Object data) { |
|||
super.data = data; |
|||
} |
|||
|
|||
public RemoteAccessException(ResultCode resultCode) { |
|||
super(resultCode); |
|||
} |
|||
|
|||
public RemoteAccessException(ResultCode resultCode, Object data) { |
|||
super(resultCode, data); |
|||
} |
|||
|
|||
public RemoteAccessException(String msg) { |
|||
super(msg); |
|||
} |
|||
|
|||
public RemoteAccessException(String formatMsg, Object... objects) { |
|||
super(formatMsg, objects); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,22 @@ |
|||
package com.stone.conf.exception; |
|||
|
|||
/** |
|||
* 用户未登录异常 |
|||
*/ |
|||
public class UserNotLoginException extends BusinessException { |
|||
|
|||
private static final long serialVersionUID = -1879503946782379204L; |
|||
|
|||
public UserNotLoginException() { |
|||
super(); |
|||
} |
|||
|
|||
public UserNotLoginException(String msg) { |
|||
super(msg); |
|||
} |
|||
|
|||
public UserNotLoginException(String formatMsg, Object... objects) { |
|||
super(formatMsg, objects); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,67 @@ |
|||
package com.stone.conf.filter; |
|||
|
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.stone.api.enums.ResultCode; |
|||
import com.stone.conf.redis.RedisHelper; |
|||
import org.apache.shiro.SecurityUtils; |
|||
import org.apache.shiro.subject.Subject; |
|||
import org.apache.shiro.web.filter.authc.FormAuthenticationFilter; |
|||
import org.apache.shiro.web.util.WebUtils; |
|||
import org.springframework.boot.web.servlet.FilterRegistrationBean; |
|||
import org.springframework.context.annotation.Bean; |
|||
|
|||
import javax.servlet.ServletRequest; |
|||
import javax.servlet.ServletResponse; |
|||
import javax.servlet.http.HttpServletRequest; |
|||
import javax.servlet.http.HttpServletResponse; |
|||
import java.io.PrintWriter; |
|||
|
|||
/** |
|||
* 对没有登录的请求进行拦截, 全部返回json信息. |
|||
* 覆盖掉shiro原本的跳转login.jsp的拦截方式 |
|||
*/ |
|||
public class AjaxPermissionsAuthorizationFilter extends FormAuthenticationFilter { |
|||
|
|||
@Override |
|||
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) { |
|||
if ("OPTIONS".equals(WebUtils.toHttp(request).getMethod())) { |
|||
return true; |
|||
} |
|||
String token = WebUtils.toHttp(request).getHeader("Authorization"); |
|||
if (StrUtil.isEmpty(token) || (StrUtil.isNotEmpty(token) && !RedisHelper.exists(token))) { |
|||
JSONObject jsonObject = new JSONObject(); |
|||
jsonObject.put("returnCode", 20011); |
|||
jsonObject.put("returnMsg", "用户未登录"); |
|||
PrintWriter out = null; |
|||
HttpServletResponse res = (HttpServletResponse) response; |
|||
// 接下来的几句话是个坑,一定要加上,跨域访问才可以正常退出。
|
|||
res.setHeader("Access-Control-Allow-Origin", ((HttpServletRequest) request).getHeader("Origin")); |
|||
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization"); |
|||
res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, DELETE"); |
|||
res.setHeader("Access-Control-Allow-Credentials", "true"); |
|||
try { |
|||
res.setCharacterEncoding("UTF-8"); |
|||
res.setContentType("application/json"); |
|||
out = response.getWriter(); |
|||
out.println(jsonObject); |
|||
} catch (Exception ignored) { |
|||
} finally { |
|||
if (out != null) { |
|||
out.flush(); |
|||
out.close(); |
|||
} |
|||
} |
|||
return false; |
|||
} |
|||
return true; |
|||
} |
|||
|
|||
@Bean |
|||
public FilterRegistrationBean<AjaxPermissionsAuthorizationFilter> registration(AjaxPermissionsAuthorizationFilter filter) { |
|||
FilterRegistrationBean<AjaxPermissionsAuthorizationFilter> registration = new FilterRegistrationBean<>(filter); |
|||
registration.setEnabled(false); |
|||
return registration; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,43 @@ |
|||
package com.stone.conf.redis; |
|||
|
|||
import org.slf4j.Logger; |
|||
import org.slf4j.LoggerFactory; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.cache.annotation.CachingConfigurerSupport; |
|||
import org.springframework.cache.annotation.EnableCaching; |
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.context.annotation.Configuration; |
|||
import redis.clients.jedis.JedisPool; |
|||
import redis.clients.jedis.JedisPoolConfig; |
|||
|
|||
@Configuration |
|||
@EnableCaching |
|||
public class RedisConfig extends CachingConfigurerSupport { |
|||
|
|||
private Logger logger = LoggerFactory.getLogger(RedisConfig.class); |
|||
|
|||
@Value("${spring.redis.host}") |
|||
private String host; |
|||
|
|||
@Value("${spring.redis.port}") |
|||
private int port; |
|||
|
|||
@Value("${spring.redis.timeout}") |
|||
private int timeout; |
|||
|
|||
@Value("${spring.redis.jedis.pool.max-idle}") |
|||
private int maxIdle; |
|||
|
|||
@Value("${spring.redis.jedis.pool.max-wait}") |
|||
private long maxWaitMillis; |
|||
|
|||
@Bean |
|||
public JedisPool redisPoolFactory() { |
|||
logger.info("JedisPool注入成功!!"); |
|||
logger.info("redis地址:" + host + ":" + port); |
|||
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); |
|||
jedisPoolConfig.setMaxIdle(maxIdle); |
|||
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis); |
|||
return new JedisPool(jedisPoolConfig, host, port, timeout); |
|||
} |
|||
} |
@ -0,0 +1,132 @@ |
|||
package com.stone.conf.redis; |
|||
|
|||
import redis.clients.jedis.Jedis; |
|||
|
|||
import java.io.*; |
|||
|
|||
/** |
|||
* redis 序列化辅助类 |
|||
* |
|||
* @author zhoujl |
|||
* @date 2019-04-30 |
|||
*/ |
|||
public class RedisHelper { |
|||
|
|||
/** |
|||
* 添加缓存信息 |
|||
*/ |
|||
public static void add(String key, Object value) { |
|||
Jedis jedis = new Jedis("localhost"); |
|||
try { |
|||
jedis.set(key.getBytes(), ObjectTranscoder.serialize(value)); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 获取缓存信息 |
|||
*/ |
|||
public static Object get(String key) { |
|||
Jedis jedis = new Jedis("localhost"); |
|||
if (!jedis.exists(key.getBytes())) { |
|||
return null; |
|||
} |
|||
byte[] in = jedis.get(key.getBytes()); |
|||
return ObjectTranscoder.deserialize(in); |
|||
} |
|||
|
|||
/** |
|||
* 判断 key 是否存在 |
|||
* |
|||
* @param key 键信息 |
|||
* @return 是否存在 |
|||
*/ |
|||
public static Boolean exists(String key) { |
|||
Jedis jedis = new Jedis("localhost"); |
|||
return jedis.exists(key.getBytes()); |
|||
} |
|||
|
|||
/** |
|||
* 删除key |
|||
* |
|||
* @param key 键信息 |
|||
*/ |
|||
public static void delKey(String key) { |
|||
Jedis jedis = new Jedis("localhost"); |
|||
jedis.del(key.getBytes()); |
|||
} |
|||
|
|||
static class ObjectTranscoder { |
|||
|
|||
/** |
|||
* 序列化参数 |
|||
* |
|||
* @param value object |
|||
* @return byte |
|||
*/ |
|||
static byte[] serialize(Object value) { |
|||
if (value == null) { |
|||
throw new NullPointerException("参数不能为空"); |
|||
} |
|||
byte[] rv; |
|||
ByteArrayOutputStream bos = null; |
|||
ObjectOutputStream os = null; |
|||
try { |
|||
bos = new ByteArrayOutputStream(); |
|||
os = new ObjectOutputStream(bos); |
|||
os.writeObject(value); |
|||
os.close(); |
|||
bos.close(); |
|||
rv = bos.toByteArray(); |
|||
} catch (IOException e) { |
|||
throw new IllegalArgumentException("该对象不可序列化", e); |
|||
} finally { |
|||
try { |
|||
if (os != null) |
|||
os.close(); |
|||
if (bos != null) |
|||
bos.close(); |
|||
} catch (Exception e2) { |
|||
e2.printStackTrace(); |
|||
} |
|||
} |
|||
return rv; |
|||
} |
|||
|
|||
/** |
|||
* 反序列化参数 |
|||
* |
|||
* @param in byte |
|||
* @return object |
|||
*/ |
|||
static Object deserialize(byte[] in) { |
|||
|
|||
Object rv = null; |
|||
ByteArrayInputStream bis = null; |
|||
ObjectInputStream is = null; |
|||
try { |
|||
if (in != null) { |
|||
bis = new ByteArrayInputStream(in); |
|||
is = new ObjectInputStream(bis); |
|||
rv = is.readObject(); |
|||
is.close(); |
|||
bis.close(); |
|||
} |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} finally { |
|||
try { |
|||
if (is != null) |
|||
is.close(); |
|||
if (bis != null) |
|||
bis.close(); |
|||
} catch (Exception e2) { |
|||
e2.printStackTrace(); |
|||
} |
|||
} |
|||
return rv; |
|||
} |
|||
} |
|||
|
|||
} |
@ -0,0 +1,63 @@ |
|||
package com.stone.conf.session; |
|||
|
|||
import com.stone.conf.redis.RedisHelper; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.apache.shiro.session.Session; |
|||
import org.apache.shiro.session.SessionListener; |
|||
|
|||
import java.util.concurrent.atomic.AtomicInteger; |
|||
|
|||
/** |
|||
* shiro session监听 |
|||
* |
|||
* @author zhoujl |
|||
* @date 2019-09-17 |
|||
*/ |
|||
@Slf4j |
|||
public class ShiroSessionListener implements SessionListener { |
|||
|
|||
/** |
|||
* 统计在线人数 |
|||
*/ |
|||
private final AtomicInteger sessionCount = new AtomicInteger(0); |
|||
|
|||
/** |
|||
* 会话创建时触发 |
|||
*/ |
|||
@Override |
|||
public void onStart(Session session) { |
|||
log.info("会话创建:" + session.getId()); |
|||
// 会话创建,在线人数加一
|
|||
sessionCount.incrementAndGet(); |
|||
} |
|||
|
|||
/** |
|||
* 退出会话时触发 |
|||
*/ |
|||
@Override |
|||
public void onStop(Session session) { |
|||
log.info("会话退出:" + session.getId()); |
|||
// 会话退出,在线人数减一
|
|||
sessionCount.decrementAndGet(); |
|||
} |
|||
|
|||
/** |
|||
* 会话过期时触发 |
|||
*/ |
|||
@Override |
|||
public void onExpiration(Session session) { |
|||
log.info("会话过期:" + session.getId()); |
|||
// 会话过期,在线人数减一
|
|||
sessionCount.decrementAndGet(); |
|||
RedisHelper.delKey(session.getId() + ""); |
|||
} |
|||
|
|||
/** |
|||
* 获取在线人数使用 |
|||
* @return 在线人数 |
|||
*/ |
|||
public AtomicInteger getSessionCount() { |
|||
return sessionCount; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,61 @@ |
|||
package com.stone.conf.shiro; |
|||
|
|||
import com.stone.conf.redis.RedisHelper; |
|||
import com.stone.mapper.senior.BjdSeniorMapper; |
|||
import com.stone.model.po.bjd.BjdSenior; |
|||
import org.apache.shiro.SecurityUtils; |
|||
import org.apache.shiro.authc.AuthenticationException; |
|||
import org.apache.shiro.authc.AuthenticationInfo; |
|||
import org.apache.shiro.authc.AuthenticationToken; |
|||
import org.apache.shiro.authc.SimpleAuthenticationInfo; |
|||
import org.apache.shiro.authz.AuthorizationInfo; |
|||
import org.apache.shiro.realm.AuthorizingRealm; |
|||
import org.apache.shiro.subject.PrincipalCollection; |
|||
import org.apache.shiro.subject.Subject; |
|||
import tk.mybatis.mapper.weekend.Weekend; |
|||
import tk.mybatis.mapper.weekend.WeekendSqls; |
|||
|
|||
import javax.annotation.Resource; |
|||
|
|||
public class MyShiroRealm extends AuthorizingRealm { |
|||
|
|||
@Resource |
|||
private BjdSeniorMapper bjdSeniorMapper; |
|||
|
|||
/** |
|||
* 获取授权信息 |
|||
*/ |
|||
@Override |
|||
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { |
|||
return null; |
|||
} |
|||
|
|||
/** |
|||
* 获取身份验证信息 |
|||
* Shiro中,最终是通过 Realm 来获取应用程序中的用户、角色及权限信息的。 |
|||
* |
|||
* @param token 用户身份信息 token |
|||
* @return 返回封装了用户信息的 AuthenticationInfo 实例 |
|||
*/ |
|||
@Override |
|||
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { |
|||
// 获取用户的输入的账号.
|
|||
String loginName = (String) token.getPrincipal(); |
|||
// 通过username从数据库中查找 User对象,如果找到,没找到.
|
|||
// 实际项目中,这里可以根据实际情况做缓存,如果不做,Shiro自己也是有时间间隔机制,2分钟内不会重复执行该方法
|
|||
BjdSenior user = bjdSeniorMapper.selectOneByExample(Weekend.builder(BjdSenior.class).where(WeekendSqls.<BjdSenior>custom() |
|||
.andEqualTo(BjdSenior::getSerialNumber, loginName)).build()); |
|||
if (user == null) { |
|||
return null; |
|||
} |
|||
Subject subject = SecurityUtils.getSubject(); |
|||
// 将用户信息存入redis中
|
|||
RedisHelper.add(subject.getSession().getId() + "", user); |
|||
return new SimpleAuthenticationInfo( |
|||
user.getSerialNumber(), //用户名
|
|||
user.getWwcxmima(), //密码
|
|||
getName() //realm name
|
|||
); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,189 @@ |
|||
package com.stone.conf.shiro; |
|||
|
|||
import com.stone.conf.filter.AjaxPermissionsAuthorizationFilter; |
|||
import com.stone.conf.session.ShiroSessionListener; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.apache.shiro.authc.credential.HashedCredentialsMatcher; |
|||
import org.apache.shiro.codec.Base64; |
|||
import org.apache.shiro.mgt.RememberMeManager; |
|||
import org.apache.shiro.mgt.SecurityManager; |
|||
import org.apache.shiro.session.SessionListener; |
|||
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; |
|||
import org.apache.shiro.spring.web.ShiroFilterFactoryBean; |
|||
import org.apache.shiro.web.filter.authc.FormAuthenticationFilter; |
|||
import org.apache.shiro.web.mgt.CookieRememberMeManager; |
|||
import org.apache.shiro.web.mgt.DefaultWebSecurityManager; |
|||
import org.apache.shiro.web.servlet.SimpleCookie; |
|||
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; |
|||
import org.crazycake.shiro.RedisCacheManager; |
|||
import org.crazycake.shiro.RedisManager; |
|||
import org.crazycake.shiro.RedisSessionDAO; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.context.annotation.Configuration; |
|||
|
|||
import javax.servlet.Filter; |
|||
import java.util.ArrayList; |
|||
import java.util.Collection; |
|||
import java.util.LinkedHashMap; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* shiro 配置核心类 |
|||
* |
|||
* @author zhoujl |
|||
* @since 2018-07-05 |
|||
*/ |
|||
@Slf4j |
|||
@Configuration |
|||
public class ShiroConfig { |
|||
|
|||
@Value("${spring.redis.host}") |
|||
private String host; |
|||
@Value("${spring.redis.port}") |
|||
private int port; |
|||
@Value("${spring.redis.timeout}") |
|||
private int timeout; |
|||
|
|||
/** |
|||
* cacheManager 缓存 redis实现 |
|||
* 使用的是shiro-redis开源插件 |
|||
*/ |
|||
private RedisCacheManager cacheManager() { |
|||
RedisCacheManager redisCacheManager = new RedisCacheManager(); |
|||
redisCacheManager.setRedisManager(redisManager()); |
|||
final String CACHE_KEY = "shiro:cache:"; |
|||
redisCacheManager.setKeyPrefix(CACHE_KEY); |
|||
// 配置缓存的话要求放在session里面的实体类必须有个id标识
|
|||
redisCacheManager.setPrincipalIdFieldName("id"); |
|||
return redisCacheManager; |
|||
} |
|||
|
|||
/** |
|||
* 配置shiro redisManager |
|||
* 使用的是shiro-redis开源插件 |
|||
*/ |
|||
private RedisManager redisManager() { |
|||
RedisManager redisManager = new RedisManager(); |
|||
redisManager.setHost(host + ":" + port); |
|||
redisManager.setTimeout(timeout); |
|||
return redisManager; |
|||
} |
|||
|
|||
/** |
|||
* RedisSessionDAO shiro sessionDao层的实现 通过redis |
|||
* 使用的是shiro-redis开源插件 |
|||
*/ |
|||
@Bean |
|||
public RedisSessionDAO redisSessionDAO() { |
|||
RedisSessionDAO redisSessionDAO = new RedisSessionDAO(); |
|||
redisSessionDAO.setRedisManager(redisManager()); |
|||
redisSessionDAO.setSessionIdGenerator(sessionIdGenerator()); |
|||
String SESSION_KEY = "shiro:session:"; |
|||
redisSessionDAO.setKeyPrefix(SESSION_KEY); |
|||
int EXPIRE = 1800; |
|||
redisSessionDAO.setExpire(EXPIRE); |
|||
return redisSessionDAO; |
|||
} |
|||
|
|||
/** |
|||
* SessionID生成器 |
|||
*/ |
|||
@Bean |
|||
public ShiroSessionIdGenerator sessionIdGenerator(){ |
|||
return new ShiroSessionIdGenerator(); |
|||
} |
|||
|
|||
/** |
|||
* 配置保存sessionId的cookie |
|||
*/ |
|||
@Bean("sessionIdCookie") |
|||
public SimpleCookie sessionIdCookie(){ |
|||
//这个参数是cookie的名称
|
|||
SimpleCookie simpleCookie = new SimpleCookie("sid"); |
|||
//setcookie的httponly属性如果设为true的话,会增加对xss防护的安全系数
|
|||
simpleCookie.setHttpOnly(true); |
|||
simpleCookie.setPath("/"); |
|||
//maxAge=-1表示浏览器关闭时失效此Cookie
|
|||
simpleCookie.setMaxAge(-1); |
|||
return simpleCookie; |
|||
} |
|||
|
|||
/** |
|||
* 配置session监听 |
|||
*/ |
|||
@Bean("sessionListener") |
|||
public ShiroSessionListener sessionListener(){ |
|||
return new ShiroSessionListener(); |
|||
} |
|||
|
|||
/** |
|||
* Session Manager |
|||
* 使用的是shiro-redis开源插件 |
|||
*/ |
|||
@Bean |
|||
public DefaultWebSessionManager sessionManager() { |
|||
DefaultWebSessionManager webSessionManager = new DefaultWebSessionManager(); |
|||
Collection<SessionListener> listeners = new ArrayList<>(); |
|||
// 配置监听
|
|||
listeners.add(sessionListener()); |
|||
webSessionManager.setSessionListeners(listeners); |
|||
webSessionManager.setSessionIdCookie(sessionIdCookie()); |
|||
webSessionManager.setSessionDAO(redisSessionDAO()); |
|||
// 全局会话超时时间(单位毫秒)
|
|||
webSessionManager.setGlobalSessionTimeout(30 * 60 * 1000); |
|||
// 是否开启删除无效的session对象 默认为true
|
|||
webSessionManager.setDeleteInvalidSessions(true); |
|||
// 是否开启定时调度器进行检测过期session 默认为true
|
|||
webSessionManager.setSessionValidationSchedulerEnabled(true); |
|||
// 设置session失效的扫描时间, 清理用户直接关闭浏览器造成的孤立会话 默认为 1个小时
|
|||
webSessionManager.setSessionValidationInterval(60 * 1000); |
|||
// 取消url 后面的 JSESSIONID
|
|||
webSessionManager.setSessionIdUrlRewritingEnabled(false); |
|||
return webSessionManager; |
|||
} |
|||
|
|||
@Bean("shiroFilter") |
|||
public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) { |
|||
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); |
|||
shiroFilterFactoryBean.setSecurityManager(securityManager); |
|||
// 拦截器.
|
|||
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>(); |
|||
// 配置不会被拦截的链接 顺序判断
|
|||
// <!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边 -->:这是一个坑呢,一不小心代码就不好使了;
|
|||
// 配置swagger访问路径 加载顺序不可改变
|
|||
// <!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->
|
|||
filterChainDefinitionMap.put("/user/login", "anon"); |
|||
filterChainDefinitionMap.put("/**", "user"); |
|||
// 自定义拦截器
|
|||
Map<String, Filter> filtersMap = new LinkedHashMap<>(); |
|||
filtersMap.put("user", new AjaxPermissionsAuthorizationFilter()); |
|||
shiroFilterFactoryBean.setFilters(filtersMap); |
|||
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); |
|||
return shiroFilterFactoryBean; |
|||
} |
|||
|
|||
/** |
|||
* 注入 securityManager |
|||
*/ |
|||
@Bean(name = "securityManager") |
|||
public SecurityManager securityManager() { |
|||
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); |
|||
// 设置realm.
|
|||
securityManager.setRealm(myShiroRealm()); |
|||
// 自定义缓存实现 使用redis
|
|||
securityManager.setCacheManager(cacheManager()); |
|||
// 自定义session管理 使用redis
|
|||
securityManager.setSessionManager(sessionManager()); |
|||
return securityManager; |
|||
} |
|||
|
|||
/** |
|||
* 身份验证器 |
|||
*/ |
|||
@Bean |
|||
public MyShiroRealm myShiroRealm() { |
|||
return new MyShiroRealm(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,33 @@ |
|||
package com.stone.conf.shiro; |
|||
|
|||
import org.apache.shiro.session.Session; |
|||
import org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator; |
|||
import org.apache.shiro.session.mgt.eis.SessionIdGenerator; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* 自定义SessionId生成器 |
|||
* |
|||
* @author zhoujl |
|||
* @date 2019-09-16 |
|||
*/ |
|||
public class ShiroSessionIdGenerator implements SessionIdGenerator { |
|||
|
|||
@Value("${projectName}") |
|||
private String projectName; |
|||
|
|||
/** |
|||
* 实现sessionId生成 |
|||
* |
|||
* @param session session对象 |
|||
* @return id |
|||
*/ |
|||
@Override |
|||
public Serializable generateId(Session session) { |
|||
Serializable sessionId = new JavaUuidSessionIdGenerator().generateId(session); |
|||
return String.format(projectName + "_login_token_%s", sessionId); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,38 @@ |
|||
package com.stone.controller; |
|||
|
|||
import com.stone.model.vo.PageVO; |
|||
import com.stone.service.CategoryService; |
|||
import io.swagger.annotations.Api; |
|||
import io.swagger.annotations.ApiOperation; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
import javax.annotation.Resource; |
|||
|
|||
/** |
|||
* 检验类别接口 |
|||
* |
|||
* @author zhoujl |
|||
* @date 2019-03-25 |
|||
*/ |
|||
@RestController |
|||
@RequestMapping("/category") |
|||
@Api(tags = "检验类别接口") |
|||
public class CategoryController { |
|||
|
|||
@Resource |
|||
private CategoryService categoryService; |
|||
|
|||
/** |
|||
* 查询检验类别列表 |
|||
* |
|||
* @return 检验类别分页信息 |
|||
*/ |
|||
@GetMapping("/pull") |
|||
@ApiOperation(value = "查询检验类别列表", response = PageVO.class, notes = "根据条件查询检验类别列表并进行分页", httpMethod = "GET") |
|||
public PageVO pull() { |
|||
return categoryService.pull(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,46 @@ |
|||
package com.stone.controller; |
|||
|
|||
import com.stone.base.BaseController; |
|||
import com.stone.base.BaseService; |
|||
import com.stone.model.vo.PageVO; |
|||
import com.stone.service.DownloadService; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.ResponseBody; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
import javax.annotation.Resource; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@RequestMapping("/download") |
|||
@RestController |
|||
public class DownloadController extends BaseController { |
|||
|
|||
@Resource |
|||
private DownloadService downloadService; |
|||
|
|||
/** |
|||
* 获取service |
|||
* |
|||
* @return |
|||
*/ |
|||
@Override |
|||
public BaseService getService() { |
|||
return downloadService; |
|||
} |
|||
|
|||
@GetMapping("/pullSeniorPath") |
|||
@ResponseBody |
|||
public PageVO pullSeniorPath(String id, String type) { |
|||
return downloadService.pullSeniorPath(id, type); |
|||
} |
|||
|
|||
@GetMapping("/pullIntermediatePath") |
|||
@ResponseBody |
|||
public PageVO pullIntermediatePath(String id, String type) { |
|||
return downloadService.pullIntermediatePath(id, type); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,49 @@ |
|||
package com.stone.controller; |
|||
|
|||
import com.stone.base.BaseController; |
|||
import com.stone.base.BaseService; |
|||
import com.stone.model.vo.PageVO; |
|||
import com.stone.service.SearchService; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
import javax.annotation.Resource; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@RequestMapping("/search") |
|||
@RestController |
|||
public class SearchController extends BaseController { |
|||
|
|||
@Resource |
|||
private SearchService searchService; |
|||
|
|||
/** |
|||
* 获取service |
|||
* |
|||
* @return |
|||
*/ |
|||
@Override |
|||
public BaseService getService() { |
|||
return searchService; |
|||
} |
|||
|
|||
@GetMapping("/intermediate") |
|||
@ResponseBody |
|||
public PageVO pullIntermediate(String id) { |
|||
return searchService.pullIntermediate(id); |
|||
} |
|||
|
|||
@GetMapping("/senior") |
|||
@ResponseBody |
|||
public PageVO pullSenior(@RequestParam(name = "id") String id) { |
|||
return searchService.pullSenior(id); |
|||
} |
|||
|
|||
@GetMapping("/progress") |
|||
@ResponseBody |
|||
public PageVO pullProgress(@RequestParam(name = "id") String id, @RequestParam(name = "bianhao") String bianhao) { |
|||
return searchService.pullProgress(id, bianhao); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,41 @@ |
|||
package com.stone.controller; |
|||
|
|||
import com.stone.base.BaseController; |
|||
import com.stone.base.BaseService; |
|||
import com.stone.model.dto.UserDTO; |
|||
import com.stone.model.po.bjd.BjdSenior; |
|||
import com.stone.model.vo.PageVO; |
|||
import com.stone.service.UserService; |
|||
import io.swagger.annotations.Api; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
import javax.annotation.Resource; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@Api(value = "企业用户") |
|||
@RequestMapping("/user") |
|||
@RestController |
|||
public class UserController extends BaseController<BjdSenior, Integer> { |
|||
|
|||
@Resource |
|||
private UserService userService; |
|||
|
|||
/** |
|||
* 获取service |
|||
* |
|||
* @return |
|||
*/ |
|||
@Override |
|||
public BaseService<BjdSenior, Integer> getService() { |
|||
return userService; |
|||
} |
|||
|
|||
@PostMapping("/login") |
|||
@ResponseBody |
|||
public PageVO login(@RequestBody UserDTO userDTO) { |
|||
return userService.login(userDTO); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,11 @@ |
|||
package com.stone.mapper.intermediate; |
|||
|
|||
import com.stone.base.BaseMapper; |
|||
import com.stone.model.po.bjd.BjdIntermediate; |
|||
import com.stone.model.po.bjd.BjdSenior; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public interface BjdIntermediateMapper extends BaseMapper<BjdIntermediate> { |
|||
} |
@ -0,0 +1,11 @@ |
|||
package com.stone.mapper.intermediate; |
|||
|
|||
import com.stone.base.BaseMapper; |
|||
import com.stone.model.po.bjd.BjdIntermediate; |
|||
import com.stone.model.po.bjd.HzdIntermediate; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public interface HzdIntermediateMapper extends BaseMapper<HzdIntermediate> { |
|||
} |
@ -0,0 +1,11 @@ |
|||
package com.stone.mapper.intermediate; |
|||
|
|||
import com.stone.base.BaseMapper; |
|||
import com.stone.model.po.renwu.RenwuIntermediate; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public interface RenwuIntermediateMapper extends BaseMapper<RenwuIntermediate> { |
|||
|
|||
} |
@ -0,0 +1,11 @@ |
|||
package com.stone.mapper.intermediate; |
|||
|
|||
import com.stone.base.BaseMapper; |
|||
import com.stone.model.po.report.Report; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public interface ReportIntermediateMapper extends BaseMapper<Report> { |
|||
|
|||
} |
@ -0,0 +1,11 @@ |
|||
package com.stone.mapper.intermediate; |
|||
|
|||
import com.stone.base.BaseMapper; |
|||
import com.stone.model.po.ysjl.YsjlIntermediate; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public interface YsjlIntermediateMapper extends BaseMapper<YsjlIntermediate> { |
|||
|
|||
} |
@ -0,0 +1,10 @@ |
|||
package com.stone.mapper.senior; |
|||
|
|||
import com.stone.base.BaseMapper; |
|||
import com.stone.model.po.bjd.BjdSenior; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public interface BjdSeniorMapper extends BaseMapper<BjdSenior> { |
|||
} |
@ -0,0 +1,10 @@ |
|||
package com.stone.mapper.senior; |
|||
|
|||
import com.stone.base.BaseMapper; |
|||
import com.stone.model.po.dic.Category; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public interface CategoryMapper extends BaseMapper<Category> { |
|||
} |
@ -0,0 +1,11 @@ |
|||
package com.stone.mapper.senior; |
|||
|
|||
import com.stone.base.BaseMapper; |
|||
import com.stone.model.po.renwu.RenwuSenior; |
|||
import com.stone.model.po.ysjl.YsjlSenior; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public interface RenwuSeniorMapper extends BaseMapper<RenwuSenior> { |
|||
} |
@ -0,0 +1,10 @@ |
|||
package com.stone.mapper.senior; |
|||
|
|||
import com.stone.base.BaseMapper; |
|||
import com.stone.model.po.template.Template; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public interface TemplateMapper extends BaseMapper<Template> { |
|||
} |
@ -0,0 +1,11 @@ |
|||
package com.stone.mapper.senior; |
|||
|
|||
import com.stone.base.BaseMapper; |
|||
import com.stone.model.po.ysjl.YsjlSenior; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public interface YsjlSeniorMapper extends BaseMapper<YsjlSenior> { |
|||
|
|||
} |
@ -0,0 +1,17 @@ |
|||
package com.stone.model.dto; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import lombok.Data; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@ApiModel("用户登录验证传输对象") |
|||
@Data |
|||
public class UserDTO { |
|||
|
|||
private String username; |
|||
|
|||
private String password; |
|||
|
|||
} |
@ -0,0 +1,39 @@ |
|||
package com.stone.model.po.bjd; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Builder; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import javax.persistence.Id; |
|||
import javax.persistence.Table; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@AllArgsConstructor |
|||
@NoArgsConstructor |
|||
@Builder |
|||
@Data |
|||
@Table(name = "biz_bjd") |
|||
@ApiModel(description = "16版报检单对象") |
|||
public class BjdIntermediate { |
|||
|
|||
@Id |
|||
private String annalid; |
|||
|
|||
@ApiModelProperty("编号") |
|||
private String bianhao; |
|||
|
|||
@ApiModelProperty("使用单位") |
|||
private String shiyongdanwei; |
|||
|
|||
@ApiModelProperty("报检状态:0:新建、1:已办结、2:补正通知、3:不予受理、4:异常退回、5:撤检") |
|||
private String bjstate; |
|||
|
|||
@ApiModelProperty("作废状态") |
|||
private Boolean zfstate; |
|||
|
|||
} |
@ -0,0 +1,53 @@ |
|||
package com.stone.model.po.bjd; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.*; |
|||
|
|||
import javax.persistence.*; |
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* 企业用户 |
|||
* @author zichen |
|||
*/ |
|||
@AllArgsConstructor |
|||
@NoArgsConstructor |
|||
@Builder |
|||
@Data |
|||
@Table(name = "biz_bjd") |
|||
@ApiModel(description = "18版用户对象") |
|||
public class BjdSenior implements Serializable { |
|||
|
|||
@Id |
|||
@ApiModelProperty(value = "主键") |
|||
private Integer id; |
|||
|
|||
@ApiModelProperty(value = "报检单编号") |
|||
private String serialNumber; |
|||
|
|||
@ApiModelProperty(value = "外网查询密码") |
|||
private String wwcxmima; |
|||
|
|||
@ApiModelProperty("使用单位") |
|||
private String shiyongdanwei; |
|||
|
|||
@ApiModelProperty("设备种类代码") |
|||
private String shebeizhongleidaima; |
|||
|
|||
/** |
|||
* 0: 新建/预审 |
|||
* 1: 待审核 |
|||
* 2: 审核通过 |
|||
* 3:不予受理 |
|||
* 4:补证通知 |
|||
* 5: 异常收回 |
|||
* 6:异常退回 |
|||
*/ |
|||
@ApiModelProperty(value = "报检状态") |
|||
private String bjState; |
|||
|
|||
@ApiModelProperty(value = "作废状态") |
|||
private Boolean zfState; |
|||
|
|||
} |
@ -0,0 +1,39 @@ |
|||
package com.stone.model.po.bjd; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Builder; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import javax.persistence.Id; |
|||
import javax.persistence.Table; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@AllArgsConstructor |
|||
@NoArgsConstructor |
|||
@Builder |
|||
@Data |
|||
@Table(name = "biz_hzd") |
|||
@ApiModel(description = "16版用户对象") |
|||
public class HzdIntermediate { |
|||
|
|||
@Id |
|||
private String annalid; |
|||
|
|||
@ApiModelProperty("报检单_ID") |
|||
private String bjdId; |
|||
|
|||
@ApiModelProperty("编号") |
|||
private String bianhao; |
|||
|
|||
@ApiModelProperty("外网查询密码") |
|||
private String wwcxmima; |
|||
|
|||
@ApiModelProperty("作废状态") |
|||
private Boolean zfstate; |
|||
|
|||
} |
@ -0,0 +1,40 @@ |
|||
package com.stone.model.po.dic; |
|||
|
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
|
|||
import javax.persistence.*; |
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* 检验类别 |
|||
* @author zichen |
|||
*/ |
|||
@Data |
|||
@Table(name = "sys_category") |
|||
public class Category implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
@Id |
|||
@GeneratedValue(strategy = GenerationType.IDENTITY) |
|||
@ApiModelProperty(value = "主键") |
|||
private Integer id; |
|||
|
|||
@ApiModelProperty(value = "检验类别名称") |
|||
private String name; |
|||
|
|||
@ApiModelProperty(value = "检验类别代码") |
|||
private String code; |
|||
|
|||
@ApiModelProperty(value = "设备种类 (以逗号分隔)") |
|||
private String species; |
|||
|
|||
@Column(name = "parent_id") |
|||
@ApiModelProperty(value = "父类主键") |
|||
private Byte parentId; |
|||
|
|||
@ApiModelProperty(value = "排序") |
|||
private Byte sort; |
|||
|
|||
} |
@ -0,0 +1,65 @@ |
|||
package com.stone.model.po.renwu; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Builder; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import javax.persistence.*; |
|||
import java.time.LocalDate; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@AllArgsConstructor |
|||
@NoArgsConstructor |
|||
@Builder |
|||
@Data |
|||
@Table(name = "biz_renwu") |
|||
@ApiModel(description = "任务") |
|||
public class RenwuIntermediate { |
|||
|
|||
@Id |
|||
@ApiModelProperty(value = "主键") |
|||
private Integer annalid; |
|||
|
|||
@ApiModelProperty(value = "检验类别") |
|||
private String renwuId; |
|||
|
|||
@ApiModelProperty(value = "检验类别") |
|||
private String jianyanleibie; |
|||
|
|||
@ApiModelProperty(value = "注册代码") |
|||
private String zhucedaima; |
|||
|
|||
@ApiModelProperty(value = "产品编号") |
|||
private String chanpinbianhao; |
|||
|
|||
@ApiModelProperty(value = "使用登记编号") |
|||
private String shiyongdengjibianhao; |
|||
|
|||
@ApiModelProperty(value = "区划名称") |
|||
private String quhuamingcheng; |
|||
|
|||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd") |
|||
@ApiModelProperty(value = "受理日期") |
|||
private LocalDate shouliriqi; |
|||
|
|||
@ApiModelProperty(value = "任务状态:0代办 1已约 2已办 3异常退回 4任务终止 5任务撤检") |
|||
private String rwstate; |
|||
|
|||
@ApiModelProperty(value = "分配状态") |
|||
private Boolean fpstate; |
|||
|
|||
@ApiModelProperty(value = "交费状态") |
|||
private Boolean jfstate; |
|||
|
|||
@ApiModelProperty(value = "作废状态") |
|||
private Boolean zfstate; |
|||
|
|||
} |
@ -0,0 +1,81 @@ |
|||
package com.stone.model.po.renwu; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Builder; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import javax.persistence.*; |
|||
import java.time.LocalDate; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@AllArgsConstructor |
|||
@NoArgsConstructor |
|||
@Builder |
|||
@Data |
|||
@Table(name = "biz_renwu") |
|||
@ApiModel(description = "任务") |
|||
public class RenwuSenior { |
|||
|
|||
@Id |
|||
@ApiModelProperty(value = "主键") |
|||
private Integer id; |
|||
|
|||
@Column(name = "id_2016") |
|||
private Integer id16; |
|||
|
|||
@ApiModelProperty(value = "报检单主键") |
|||
@Column(name = "bjd_id") |
|||
private Integer bjdId; |
|||
|
|||
@ApiModelProperty(value = "检验类别") |
|||
private String jianyanleibie; |
|||
|
|||
@ApiModelProperty(value = "注册代码") |
|||
private String zhucedaima; |
|||
|
|||
@ApiModelProperty(value = "产品编号") |
|||
private String chanpinbianhao; |
|||
|
|||
@ApiModelProperty(value = "使用登记编号") |
|||
private String shiyongdengjibianhao; |
|||
|
|||
@ApiModelProperty(value = "区划名称") |
|||
private String quhuamingcheng; |
|||
|
|||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd") |
|||
@ApiModelProperty(value = "受理日期") |
|||
private LocalDate shouliriqi; |
|||
|
|||
@ApiModelProperty(value = "任务状态") |
|||
@Column(name = "rw_state") |
|||
private String rwState; |
|||
|
|||
@ApiModelProperty(value = "分配状态") |
|||
@Column(name = "fp_state") |
|||
private Boolean fpState; |
|||
|
|||
@Column(name = "jf_state") |
|||
@ApiModelProperty(value = "交费状态") |
|||
private Boolean jfState; |
|||
|
|||
/** |
|||
* 0:待补交 |
|||
* 1:已补交 |
|||
* */ |
|||
@Column(name = "bj_state") |
|||
@ApiModelProperty(value = "补交状态") |
|||
private Boolean bjState; |
|||
|
|||
@Column(name = "zf_state") |
|||
@ApiModelProperty(value = "作废状态") |
|||
private Boolean zfState; |
|||
|
|||
} |
@ -0,0 +1,63 @@ |
|||
package com.stone.model.po.report; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Builder; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import javax.persistence.Column; |
|||
import javax.persistence.Id; |
|||
import javax.persistence.Table; |
|||
import java.time.LocalDate; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@AllArgsConstructor |
|||
@NoArgsConstructor |
|||
@Builder |
|||
@Data |
|||
@Table(name = "biz_report") |
|||
@ApiModel(description = "检验报告") |
|||
public class Report { |
|||
|
|||
@Id |
|||
private String annalid; |
|||
|
|||
private String ysjlId; |
|||
|
|||
private String renwuId; |
|||
|
|||
private String baogaobianhao; |
|||
|
|||
private String jianyanleibie; |
|||
|
|||
private String zhucedaima; |
|||
|
|||
private String shiyongdengjibianhao; |
|||
|
|||
private String chanpinbianhao; |
|||
|
|||
private String shebeizhongleidaima; |
|||
|
|||
private LocalDate jianyanriqi; |
|||
|
|||
private LocalDate jianyanjieshuriqi; |
|||
|
|||
private LocalDate shenpiriqi; |
|||
|
|||
private Integer bglx; |
|||
|
|||
private Integer flowstatus; |
|||
|
|||
private Boolean zfstate; |
|||
|
|||
@Column(name = "gdState") |
|||
private String gdState; |
|||
|
|||
@ApiModelProperty(value = "电子印章") |
|||
private Boolean signState; |
|||
|
|||
} |
@ -0,0 +1,26 @@ |
|||
package com.stone.model.po.template; |
|||
|
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
|
|||
import javax.persistence.*; |
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* 模板 |
|||
* @author zichen |
|||
*/ |
|||
@Data |
|||
@Table(name = "flow_template") |
|||
public class Template implements Serializable { |
|||
|
|||
@Id |
|||
@GeneratedValue(strategy = GenerationType.IDENTITY) |
|||
@ApiModelProperty(value = "主键") |
|||
private Integer id; |
|||
|
|||
@Column(name = "temp_name") |
|||
@ApiModelProperty(value = "模板名称") |
|||
private String tempName; |
|||
|
|||
} |
@ -0,0 +1,49 @@ |
|||
package com.stone.model.po.ysjl; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Builder; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import javax.persistence.Id; |
|||
import javax.persistence.Table; |
|||
import java.time.LocalDate; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@AllArgsConstructor |
|||
@NoArgsConstructor |
|||
@Builder |
|||
@Data |
|||
@Table(name = "biz_ysjl") |
|||
@ApiModel(description = "原始记录") |
|||
public class YsjlIntermediate { |
|||
|
|||
@Id |
|||
private String annalid; |
|||
|
|||
private String renwuId; |
|||
|
|||
private String jilubianhao; |
|||
|
|||
private String jianyanleibie; |
|||
|
|||
private String zhucedaima; |
|||
|
|||
private String shiyongdengjibianhao; |
|||
|
|||
private String chanpinbianhao; |
|||
|
|||
private LocalDate jianyanriqi; |
|||
|
|||
private LocalDate jianyanjieshuriqi; |
|||
|
|||
@ApiModelProperty(value = "原始记录状态:0待办 1已办") |
|||
private String jlstate; |
|||
|
|||
private Boolean zfstate; |
|||
|
|||
} |
@ -0,0 +1,112 @@ |
|||
package com.stone.model.po.ysjl; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Builder; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import javax.persistence.*; |
|||
import java.time.LocalDate; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@AllArgsConstructor |
|||
@NoArgsConstructor |
|||
@Builder |
|||
@Data |
|||
@Table(name = "biz_ysjl") |
|||
@ApiModel(description = "原始记录/检验报告") |
|||
public class YsjlSenior { |
|||
|
|||
@Id |
|||
@GeneratedValue(strategy = GenerationType.IDENTITY) |
|||
@ApiModelProperty(value = "报告表主键") |
|||
private Integer id; |
|||
|
|||
@ApiModelProperty(value = "任务主键") |
|||
private Integer renwuId; |
|||
|
|||
@ApiModelProperty(value = "模板主键") |
|||
private Integer modelId; |
|||
|
|||
@ApiModelProperty(value = "创建时间") |
|||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd") |
|||
@Column(name = "create_time") |
|||
private LocalDate createTime; |
|||
|
|||
@ApiModelProperty(value = "设备种类代码") |
|||
private String shebeizhongleidaima; |
|||
|
|||
@ApiModelProperty(value = "记录编号") |
|||
private String jilubianhao; |
|||
|
|||
@ApiModelProperty(value = "报告编号") |
|||
private String baogaobianhao; |
|||
|
|||
@ApiModelProperty(value = "注册代码") |
|||
private String zhucedaima; |
|||
|
|||
@ApiModelProperty(value = "使用登记证编号") |
|||
private String shiyongdengjibianhao; |
|||
|
|||
@ApiModelProperty(value = "产品编号/出厂编号/管道编号/锅炉使用编号") |
|||
private String chanpinbianhao; |
|||
|
|||
@ApiModelProperty(value = "报告类型") |
|||
private Integer bglx; |
|||
|
|||
@ApiModelProperty(value = "作废状态") |
|||
private Boolean zfState; |
|||
|
|||
@ApiModelProperty(value = "内部类别") |
|||
private String neibuleibie; |
|||
|
|||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd") |
|||
@ApiModelProperty(value = "检验日期/检验结束日期") |
|||
private LocalDate jianyanjieshuriqi; |
|||
|
|||
/** |
|||
* ysjl:数据是原始记录 |
|||
* bggl:数据是报告 |
|||
*/ |
|||
@ApiModelProperty(value = "记录所处的状态") |
|||
@Column(name = "cj_state") |
|||
private String cjState; |
|||
|
|||
/** |
|||
* null 原始记录待办 |
|||
* 1 起草报告 |
|||
* 2 审核报告 |
|||
* 3 审批报告 |
|||
* 4 办结报告 |
|||
*/ |
|||
@ApiModelProperty(value = "报告状态") |
|||
private Integer flowstatus; |
|||
|
|||
@ApiModelProperty(value = "当前报告的处理人") |
|||
private String renlingren; |
|||
|
|||
@Column(name = "guidang_state") |
|||
@ApiModelProperty(value = "归档状态") |
|||
private Boolean guidangState; |
|||
|
|||
@Column(name = "fafang_state") |
|||
@ApiModelProperty(value = "发放状态") |
|||
private Boolean fafangState; |
|||
|
|||
@Column(name = "generate_pdf_state") |
|||
@ApiModelProperty(value = "生成PDF状态 true-办结已生成PDF false/null-办结未生成PDF") |
|||
private Boolean generatePdfState; |
|||
|
|||
@Column(name = "jf_state") |
|||
@ApiModelProperty(value = "交费状态") |
|||
private Boolean jfState; |
|||
|
|||
} |
@ -0,0 +1,43 @@ |
|||
package com.stone.model.vo; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Builder; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@ApiModel(description = "VO") |
|||
@Data |
|||
@Builder |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public class PageVO<T> { |
|||
|
|||
@ApiModelProperty(value = "数据") |
|||
private T data; |
|||
|
|||
@ApiModelProperty(value = "列表数据") |
|||
private List<T> list; |
|||
|
|||
@ApiModelProperty(value = "总行数") |
|||
private Long total; |
|||
|
|||
@ApiModelProperty(value = "请求状态") |
|||
private String statusCode; |
|||
|
|||
@ApiModelProperty(value = "提示") |
|||
private String tip; |
|||
|
|||
@ApiModelProperty(value = "版本:16、18") |
|||
private String version; |
|||
|
|||
@ApiModelProperty(value = "token") |
|||
private String token; |
|||
|
|||
} |
@ -0,0 +1,46 @@ |
|||
package com.stone.model.vo; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Builder; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@ApiModel(description = "VO") |
|||
@Data |
|||
@Builder |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public class SearchSeniorVO { |
|||
|
|||
private String id; |
|||
|
|||
private String baogaobinahao; |
|||
|
|||
private String jianyanleibie; |
|||
|
|||
private String shiyongdanwei; |
|||
|
|||
private String zhucedaima; |
|||
|
|||
private String chanpinbianhao; |
|||
|
|||
private String shiyongdengjibianhao; |
|||
|
|||
private String quhuamingcheng; |
|||
|
|||
private String shouliriqi; |
|||
|
|||
private String jianyanriqi; |
|||
|
|||
@ApiModelProperty(value = "环节:bjd>renwu>ysjl>report") |
|||
private String link; |
|||
|
|||
@ApiModelProperty(value = "当对应环节下的状态") |
|||
private String status; |
|||
|
|||
} |
@ -0,0 +1,14 @@ |
|||
package com.stone.service; |
|||
|
|||
import com.stone.base.BaseService; |
|||
import com.stone.model.vo.PageVO; |
|||
|
|||
public interface CategoryService extends BaseService { |
|||
|
|||
/** |
|||
* 获取检验类别列表 |
|||
* @return |
|||
*/ |
|||
PageVO pull(); |
|||
|
|||
} |
@ -0,0 +1,26 @@ |
|||
package com.stone.service; |
|||
|
|||
import com.stone.base.BaseService; |
|||
import com.stone.model.vo.PageVO; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public interface DownloadService extends BaseService { |
|||
|
|||
/** |
|||
* 获取18版下载地址 |
|||
* @param id 原始记录主键 |
|||
* @param type 类型:JYBG:报告、HGZ:合格证 |
|||
* @return |
|||
*/ |
|||
PageVO pullSeniorPath(String id, String type); |
|||
|
|||
/** |
|||
* 获取16版下载地址 |
|||
* @param id 检验报告主键 |
|||
* @param type 类型:JYBG:报告、HGZ:合格证 |
|||
* @return |
|||
*/ |
|||
PageVO pullIntermediatePath(String id, String type); |
|||
} |
@ -0,0 +1,32 @@ |
|||
package com.stone.service; |
|||
|
|||
import com.stone.base.BaseService; |
|||
import com.stone.model.vo.PageVO; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public interface SearchService extends BaseService { |
|||
|
|||
/** |
|||
* 16版拉取设备进度信息 |
|||
* @param id 报检单ID |
|||
* @return |
|||
*/ |
|||
PageVO pullIntermediate(String id); |
|||
|
|||
/** |
|||
* 18版拉取设备进度信息 |
|||
* @param id 报检单ID |
|||
* @return |
|||
*/ |
|||
PageVO pullSenior(String id); |
|||
|
|||
/** |
|||
* 根据编号查询报检单,然后根据设备种类选择查询进度的方式,返回当前进度 |
|||
* @param id |
|||
* @param bianhao |
|||
* @return |
|||
*/ |
|||
PageVO pullProgress(String id, String bianhao); |
|||
} |
@ -0,0 +1,20 @@ |
|||
package com.stone.service; |
|||
|
|||
import com.stone.base.BaseService; |
|||
import com.stone.model.dto.UserDTO; |
|||
import com.stone.model.po.bjd.BjdSenior; |
|||
import com.stone.model.vo.PageVO; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
public interface UserService extends BaseService<BjdSenior, Integer> { |
|||
|
|||
/** |
|||
* 用户登录验证 |
|||
* @param userDTO |
|||
* @return |
|||
*/ |
|||
PageVO login(UserDTO userDTO); |
|||
|
|||
} |
@ -0,0 +1,37 @@ |
|||
package com.stone.service.impl; |
|||
|
|||
import com.stone.base.BaseMapper; |
|||
import com.stone.mapper.senior.CategoryMapper; |
|||
import com.stone.model.vo.PageVO; |
|||
import com.stone.service.CategoryService; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@Service |
|||
public class CategoryServiceImpl implements CategoryService { |
|||
|
|||
@Resource |
|||
private CategoryMapper categoryMapper; |
|||
|
|||
@Override |
|||
public BaseMapper getRepository() { |
|||
return categoryMapper; |
|||
} |
|||
|
|||
/** |
|||
* 获取检验类别列表 |
|||
* |
|||
* @return |
|||
*/ |
|||
@Override |
|||
public PageVO pull() { |
|||
List list = categoryMapper.selectAll(); |
|||
return PageVO.builder().list(list).build(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,112 @@ |
|||
package com.stone.service.impl; |
|||
|
|||
import cn.hutool.core.util.ObjectUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.stone.base.BaseMapper; |
|||
import com.stone.conf.enums.EquipmentCodeEnum; |
|||
import com.stone.conf.exception.BusinessException; |
|||
import com.stone.mapper.intermediate.RenwuIntermediateMapper; |
|||
import com.stone.mapper.intermediate.ReportIntermediateMapper; |
|||
import com.stone.mapper.senior.TemplateMapper; |
|||
import com.stone.mapper.senior.YsjlSeniorMapper; |
|||
import com.stone.model.po.renwu.RenwuIntermediate; |
|||
import com.stone.model.po.report.Report; |
|||
import com.stone.model.po.ysjl.YsjlSenior; |
|||
import com.stone.model.vo.PageVO; |
|||
import com.stone.service.DownloadService; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
import javax.servlet.http.HttpServletRequest; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@Service |
|||
public class DownloadServiceImpl implements DownloadService { |
|||
|
|||
@Resource |
|||
private YsjlSeniorMapper ysjlSeniorMapper; |
|||
|
|||
@Resource |
|||
private TemplateMapper templateMapper; |
|||
|
|||
@Resource |
|||
private ReportIntermediateMapper reportIntermediateMapper; |
|||
|
|||
@Resource |
|||
private RenwuIntermediateMapper renwuIntermediateMapper; |
|||
|
|||
@Resource |
|||
private HttpServletRequest request; |
|||
|
|||
@Value("${server.servlet.context-path}") |
|||
private String contextPath; |
|||
|
|||
@Override |
|||
public BaseMapper getRepository() { |
|||
return null; |
|||
} |
|||
|
|||
/** |
|||
* 获取18版下载地址 |
|||
* 报告打印路径示例:http://192.168.1.130:9093/DYBGManager/JNJY18/pdf/JYBG/2000/2020/3/RD(2020)-0153(6459)压力容器定期检验报告.pdf
|
|||
* 合格证打印路径示例:http://192.168.1.130:9093/DYBGManager/JNJY18/pdf/HGZ/2000/2020/3/RD(2020)-0114(6370)压力容器打印合格证.pdf
|
|||
* @param id 原始记录主键 |
|||
* @param type 类型:JYBG:报告、HGZ:合格证 |
|||
* @return |
|||
*/ |
|||
@Override |
|||
public PageVO pullSeniorPath(String id, String type) { |
|||
YsjlSenior ysjlSenior = ysjlSeniorMapper.selectByPrimaryKey(id); |
|||
// 0. 判断是否已办结
|
|||
if (ObjectUtil.isNotNull(ysjlSenior.getFlowstatus()) && ysjlSenior.getFlowstatus() > 3) { |
|||
throw new BusinessException("报告流程在检验结束时才可以进行打印!"); |
|||
} |
|||
// 1. 判断是否交费
|
|||
// 需要判断补交状态吗?任务里有个补交状态
|
|||
if (!ysjlSenior.getJfState()) { |
|||
throw new BusinessException("交费后才能打印!"); |
|||
} |
|||
// 2. 获取打印路径
|
|||
String tempName = ""; |
|||
if (StrUtil.equals(type, "JYBG")) { |
|||
tempName = templateMapper.selectByPrimaryKey(ysjlSenior.getModelId()).getTempName().replace("记录", "报告"); |
|||
} else { |
|||
tempName = EquipmentCodeEnum.valueOf(ysjlSenior.getShebeizhongleidaima()).getName() + "打印合格证"; |
|||
} |
|||
return PageVO.builder().data(request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + contextPath + "/JNJY18/pdf/" + type + "/" |
|||
+ ysjlSenior.getShebeizhongleidaima() + "/" + ysjlSenior.getCreateTime().getYear() + "/" + ysjlSenior.getCreateTime().getMonthValue() |
|||
+ "/" + ysjlSenior.getBaogaobianhao() + "(" + ysjlSenior.getId() + ")" + tempName + ".pdf").build(); |
|||
} |
|||
|
|||
/** |
|||
* 获取16版下载地址 |
|||
* |
|||
* @param id 检验报告主键 |
|||
* @param type 类型:JYBG:报告、HGZ:合格证 |
|||
* @return |
|||
*/ |
|||
@Override |
|||
public PageVO pullIntermediatePath(String id, String type) { |
|||
Report report = reportIntermediateMapper.selectByPrimaryKey(id); |
|||
if (ObjectUtil.isNotNull(report.getFlowstatus()) && report.getFlowstatus() > 3) { |
|||
throw new BusinessException("报告流程在检验结束时才可以进行打印!"); |
|||
} |
|||
RenwuIntermediate renwuIntermediate = RenwuIntermediate.builder().renwuId(report.getRenwuId()).build(); |
|||
renwuIntermediate = renwuIntermediateMapper.selectOne(renwuIntermediate); |
|||
// 1. 判断是否交费
|
|||
// 需要判断补交状态吗?
|
|||
/*if (!renwuIntermediate.getJfstate()) { |
|||
throw new BusinessException("交费后才能打印!"); |
|||
}*/ |
|||
// 2. 获取打印路径
|
|||
String path = ""; |
|||
return PageVO.builder().data(request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + contextPath + "/JNJY16/pdf/" |
|||
+ report.getShenpiriqi().getYear() + "/" + report.getShebeizhongleidaima() + "/" + type + "/" + (StrUtil.equals(report.getJianyanleibie(), "定期检验") ? |
|||
"dqjy" : "jdjy") + "/" + (StrUtil.equals(type, "HGZ") ? "hgz" : report.getShenpiriqi().getMonthValue()) + "/" + report.getBaogaobianhao() + "-" |
|||
+ report.getAnnalid() + (StrUtil.equals(type, "HGZ") ? "-hgz" : "") + ".pdf").build(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,253 @@ |
|||
package com.stone.service.impl; |
|||
|
|||
import cn.hutool.core.util.ObjectUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.stone.base.BaseMapper; |
|||
import com.stone.conf.enums.EquipmentCodeEnum; |
|||
import com.stone.conf.enums.LinkConstants; |
|||
import com.stone.conf.enums.VersionConstants; |
|||
import com.stone.mapper.intermediate.RenwuIntermediateMapper; |
|||
import com.stone.mapper.intermediate.ReportIntermediateMapper; |
|||
import com.stone.mapper.intermediate.YsjlIntermediateMapper; |
|||
import com.stone.mapper.senior.BjdSeniorMapper; |
|||
import com.stone.mapper.senior.RenwuSeniorMapper; |
|||
import com.stone.mapper.senior.YsjlSeniorMapper; |
|||
import com.stone.model.po.bjd.BjdSenior; |
|||
import com.stone.model.po.renwu.RenwuIntermediate; |
|||
import com.stone.model.po.renwu.RenwuSenior; |
|||
import com.stone.model.po.report.Report; |
|||
import com.stone.model.po.ysjl.YsjlIntermediate; |
|||
import com.stone.model.po.ysjl.YsjlSenior; |
|||
import com.stone.model.vo.PageVO; |
|||
import com.stone.model.vo.SearchSeniorVO; |
|||
import com.stone.service.SearchService; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
import java.util.concurrent.atomic.AtomicReference; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@Service |
|||
public class SearchServiceImpl implements SearchService { |
|||
|
|||
@Resource |
|||
private BjdSeniorMapper bjdSeniorMapper; |
|||
|
|||
@Resource |
|||
private RenwuSeniorMapper renwuSeniorMapper; |
|||
|
|||
@Resource |
|||
private YsjlSeniorMapper ysjlSeniorMapper; |
|||
|
|||
@Resource |
|||
private YsjlIntermediateMapper ysjlIntermediateMapper; |
|||
|
|||
@Resource |
|||
private ReportIntermediateMapper reportIntermediateMapper; |
|||
|
|||
@Resource |
|||
private RenwuIntermediateMapper renwuIntermediateMapper; |
|||
|
|||
@Override |
|||
public BaseMapper getRepository() { |
|||
return null; |
|||
} |
|||
|
|||
/** |
|||
* 16版拉取设备进度信息 |
|||
* |
|||
* @param id 报检单ID |
|||
* @return |
|||
*/ |
|||
@Override |
|||
public PageVO pullIntermediate(String id) { |
|||
return pullIntermediate(bjdSeniorMapper.selectByPrimaryKey(id)); |
|||
} |
|||
|
|||
public PageVO pullIntermediate(BjdSenior bjdSenior) { |
|||
List<Object> list = new ArrayList<>(); |
|||
AtomicReference<String> link = new AtomicReference<>(); |
|||
AtomicReference<String> status = new AtomicReference<>(); |
|||
if (ObjectUtil.isNotNull(bjdSenior)) { |
|||
if (!StrUtil.equals(bjdSenior.getBjState(), "2")) { |
|||
// 报检
|
|||
link.set(LinkConstants.BJ); |
|||
status.set(bjdSenior.getBjState()); |
|||
} |
|||
List<RenwuSenior> renwuSeniors = renwuSeniorMapper.select(RenwuSenior.builder().bjdId(bjdSenior.getId()).zfState(false).build()); |
|||
if (renwuSeniors.size() != 0) { |
|||
renwuSeniors.forEach(renwu -> { |
|||
SearchSeniorVO searchSeniorVO = SearchSeniorVO.builder() |
|||
.link(link.get()) |
|||
.status(status.get()) |
|||
.zhucedaima(renwu.getZhucedaima()) |
|||
.jianyanleibie(renwu.getJianyanleibie()) |
|||
.chanpinbianhao(renwu.getChanpinbianhao()) |
|||
.quhuamingcheng(renwu.getQuhuamingcheng()) |
|||
.shiyongdanwei(bjdSenior.getShiyongdanwei()) |
|||
.shiyongdengjibianhao(renwu.getShiyongdengjibianhao()) |
|||
.shouliriqi(renwu.getShouliriqi().toString()) |
|||
.build(); |
|||
if (StrUtil.isEmpty(link.get())) { |
|||
if (renwu.getFpState()) { |
|||
// 已分配
|
|||
searchSeniorVO.setLink(LinkConstants.ALLOT_RENWU); |
|||
searchSeniorVO.setStatus(renwu.getRwState()); |
|||
RenwuIntermediate renwuIntermediate = renwuIntermediateMapper.selectByPrimaryKey(renwu.getId16()); |
|||
if (ObjectUtil.isNotNull(renwuIntermediate)) { |
|||
YsjlIntermediate ysjlIntermediate = YsjlIntermediate.builder().renwuId(String.valueOf(renwuIntermediate.getRenwuId())).zfstate(false).build(); |
|||
ysjlIntermediate = ysjlIntermediateMapper.selectOne(ysjlIntermediate); |
|||
if (ObjectUtil.isNotNull(ysjlIntermediate)) { |
|||
searchSeniorVO.setZhucedaima(ysjlIntermediate.getZhucedaima()); |
|||
searchSeniorVO.setJianyanleibie(ysjlIntermediate.getJianyanleibie()); |
|||
searchSeniorVO.setChanpinbianhao(ysjlIntermediate.getChanpinbianhao()); |
|||
searchSeniorVO.setShiyongdengjibianhao(ysjlIntermediate.getShiyongdengjibianhao()); |
|||
searchSeniorVO.setJianyanriqi(ObjectUtil.isNotNull(ysjlIntermediate.getJianyanjieshuriqi()) ? |
|||
ysjlIntermediate.getJianyanjieshuriqi().toString() : ysjlIntermediate.getJianyanriqi().toString()); |
|||
if (StrUtil.equals(ysjlIntermediate.getJlstate(), "0") || StrUtil.isEmpty(ysjlIntermediate.getJlstate())) { |
|||
// 待办原始记录
|
|||
searchSeniorVO.setLink(LinkConstants.YSJL); |
|||
searchSeniorVO.setStatus("0"); |
|||
searchSeniorVO.setBaogaobinahao(ysjlIntermediate.getJilubianhao()); |
|||
} else { |
|||
// 检验报告
|
|||
Report report = Report.builder().ysjlId(ysjlIntermediate.getAnnalid()).bglx(1).zfstate(false).build(); |
|||
report = reportIntermediateMapper.selectOne(report); |
|||
if (ObjectUtil.isNotNull(report)) { |
|||
searchSeniorVO.setLink(LinkConstants.REPORT); |
|||
searchSeniorVO.setStatus(String.valueOf(report.getFlowstatus())); |
|||
searchSeniorVO.setId(report.getAnnalid()); |
|||
searchSeniorVO.setBaogaobinahao(report.getBaogaobianhao()); |
|||
} |
|||
} |
|||
} else { |
|||
// 如果没有出具原始记录,直接出具检验报告
|
|||
Report report = Report.builder().renwuId(renwuIntermediate.getRenwuId()).bglx(1).zfstate(false).build(); |
|||
report = reportIntermediateMapper.selectOne(report); |
|||
if (ObjectUtil.isNotNull(report)) { |
|||
searchSeniorVO.setLink(LinkConstants.REPORT); |
|||
searchSeniorVO.setStatus(String.valueOf(report.getFlowstatus())); |
|||
searchSeniorVO.setId(report.getAnnalid()); |
|||
searchSeniorVO.setBaogaobinahao(report.getBaogaobianhao()); |
|||
searchSeniorVO.setZhucedaima(report.getZhucedaima()); |
|||
searchSeniorVO.setJianyanleibie(report.getJianyanleibie()); |
|||
searchSeniorVO.setChanpinbianhao(report.getChanpinbianhao()); |
|||
searchSeniorVO.setShiyongdengjibianhao(report.getShiyongdengjibianhao()); |
|||
searchSeniorVO.setJianyanriqi(ObjectUtil.isNotNull(report.getJianyanjieshuriqi()) ? |
|||
report.getJianyanjieshuriqi().toString() : report.getJianyanriqi().toString()); |
|||
} |
|||
} |
|||
} |
|||
} else { |
|||
// 待分配
|
|||
searchSeniorVO.setLink(LinkConstants.RENWU); |
|||
searchSeniorVO.setStatus("0"); |
|||
} |
|||
} |
|||
list.add(searchSeniorVO); |
|||
}); |
|||
} |
|||
} |
|||
return PageVO.builder().list(list).version(VersionConstants.Intermediate).build(); |
|||
} |
|||
|
|||
/** |
|||
* 18版拉取设备进度信息 |
|||
* |
|||
* @param id 报检单ID |
|||
* @return |
|||
*/ |
|||
@Override |
|||
public PageVO<Object> pullSenior(String id) { |
|||
BjdSenior bjdSenior = bjdSeniorMapper.selectByPrimaryKey(id); |
|||
return pullSenior(bjdSenior); |
|||
} |
|||
|
|||
public PageVO<Object> pullSenior(BjdSenior bjdSenior) { |
|||
List<Object> list = new ArrayList<>(); |
|||
AtomicReference<String> link = new AtomicReference<>(); |
|||
AtomicReference<String> status = new AtomicReference<>(); |
|||
// 报检单状态 0: 新建/预审、1: 待审核 2: 审核通过 3:不予受理 4:补证通知 5: 异常收回 6:异常退回
|
|||
if (ObjectUtil.isNotNull(bjdSenior)) { |
|||
if (!StrUtil.equals(bjdSenior.getBjState(), "2")) { |
|||
// 报检
|
|||
link.set(LinkConstants.BJ); |
|||
status.set(bjdSenior.getBjState()); |
|||
} |
|||
List<RenwuSenior> renwuSeniors = renwuSeniorMapper.select(RenwuSenior.builder().bjdId(bjdSenior.getId()).zfState(false).build()); |
|||
if (renwuSeniors.size() != 0) { |
|||
renwuSeniors.forEach(renwu -> { |
|||
SearchSeniorVO searchSeniorVO = SearchSeniorVO.builder() |
|||
.link(link.get()) |
|||
.status(status.get()) |
|||
.zhucedaima(renwu.getZhucedaima()) |
|||
.jianyanleibie(renwu.getJianyanleibie()) |
|||
.chanpinbianhao(renwu.getChanpinbianhao()) |
|||
.quhuamingcheng(renwu.getQuhuamingcheng()) |
|||
.shiyongdanwei(bjdSenior.getShiyongdanwei()) |
|||
.shiyongdengjibianhao(renwu.getShiyongdengjibianhao()) |
|||
.shouliriqi(renwu.getShouliriqi().toString()) |
|||
.build(); |
|||
if (StrUtil.isEmpty(link.get())) { |
|||
if (renwu.getFpState()) { |
|||
// 已分配
|
|||
searchSeniorVO.setLink(LinkConstants.ALLOT_RENWU); |
|||
searchSeniorVO.setStatus(renwu.getRwState()); |
|||
YsjlSenior ysjlSenior = YsjlSenior.builder().renwuId(renwu.getId()).zfState(false).bglx(1).build(); |
|||
ysjlSenior = ysjlSeniorMapper.selectOne(ysjlSenior); |
|||
if (ObjectUtil.isNotNull(ysjlSenior)) { |
|||
if (StrUtil.equals(ysjlSenior.getCjState(), "ysjl")) { |
|||
// 待办原始记录
|
|||
searchSeniorVO.setLink(LinkConstants.YSJL); |
|||
searchSeniorVO.setStatus("0"); |
|||
searchSeniorVO.setBaogaobinahao(ysjlSenior.getJilubianhao()); |
|||
} else { |
|||
// 检验报告
|
|||
searchSeniorVO.setLink(LinkConstants.REPORT); |
|||
searchSeniorVO.setStatus(String.valueOf(ysjlSenior.getFlowstatus())); |
|||
searchSeniorVO.setId(String.valueOf(ysjlSenior.getId())); |
|||
searchSeniorVO.setBaogaobinahao(ysjlSenior.getBaogaobianhao()); |
|||
} |
|||
searchSeniorVO.setZhucedaima(ysjlSenior.getZhucedaima()); |
|||
searchSeniorVO.setJianyanleibie(ysjlSenior.getNeibuleibie()); |
|||
searchSeniorVO.setChanpinbianhao(ysjlSenior.getChanpinbianhao()); |
|||
searchSeniorVO.setShiyongdengjibianhao(ysjlSenior.getShiyongdengjibianhao()); |
|||
searchSeniorVO.setJianyanriqi(ysjlSenior.getJianyanjieshuriqi().toString()); |
|||
} |
|||
} else { |
|||
// 待分配
|
|||
searchSeniorVO.setLink(LinkConstants.RENWU); |
|||
searchSeniorVO.setStatus("0"); |
|||
} |
|||
} |
|||
list.add(searchSeniorVO); |
|||
}); |
|||
} |
|||
} |
|||
return PageVO.builder().list(list).version(VersionConstants.SENIOR).build(); |
|||
} |
|||
|
|||
/** |
|||
* 根据编号查询报检单,然后根据设备种类选择查询进度的方式,返回当前进度 |
|||
* |
|||
* @param id |
|||
* @param bianhao |
|||
* @return |
|||
*/ |
|||
@Override |
|||
public PageVO pullProgress(String id, String bianhao) { |
|||
BjdSenior bjdSenior = BjdSenior.builder().id(Integer.valueOf(id)).serialNumber(bianhao).zfState(false).build(); |
|||
bjdSenior = bjdSeniorMapper.selectOne(bjdSenior); |
|||
String sbzldm = bjdSenior.getShebeizhongleidaima(); |
|||
if (StrUtil.equals(sbzldm, EquipmentCodeEnum.DT.getCode()) || StrUtil.equals(sbzldm, EquipmentCodeEnum.QZJ.getCode()) || StrUtil.equals(sbzldm, EquipmentCodeEnum.CC.getCode())) { |
|||
return pullIntermediate(bjdSenior); |
|||
} else { |
|||
return pullSenior(bjdSenior); |
|||
} |
|||
} |
|||
|
|||
} |
@ -0,0 +1,62 @@ |
|||
package com.stone.service.impl; |
|||
|
|||
import cn.hutool.core.util.ObjectUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.stone.base.BaseMapper; |
|||
import com.stone.conf.enums.EquipmentCodeEnum; |
|||
import com.stone.conf.enums.VersionConstants; |
|||
import com.stone.conf.exception.BusinessException; |
|||
import com.stone.mapper.senior.BjdSeniorMapper; |
|||
import com.stone.model.dto.UserDTO; |
|||
import com.stone.model.po.bjd.BjdSenior; |
|||
import com.stone.model.vo.PageVO; |
|||
import com.stone.service.UserService; |
|||
import org.apache.shiro.SecurityUtils; |
|||
import org.apache.shiro.authc.UsernamePasswordToken; |
|||
import org.apache.shiro.subject.Subject; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
|
|||
/** |
|||
* @author zichen |
|||
*/ |
|||
@Service |
|||
public class UserServiceImpl implements UserService { |
|||
|
|||
@Resource |
|||
private BjdSeniorMapper bjdSeniorMapper; |
|||
|
|||
@Override |
|||
public BaseMapper<BjdSenior> getRepository() { |
|||
return bjdSeniorMapper; |
|||
} |
|||
|
|||
/** |
|||
* 用户登录验证 |
|||
* |
|||
* @param userDTO |
|||
* @return |
|||
*/ |
|||
@Override |
|||
public PageVO login(UserDTO userDTO) { |
|||
Subject currentUser = SecurityUtils.getSubject(); |
|||
BjdSenior bjdSenior = getRepository().selectOne(BjdSenior.builder().serialNumber(userDTO.getUsername()).zfState(false).build()); |
|||
if (ObjectUtil.isNotNull(bjdSenior)) { |
|||
if (StrUtil.equals(bjdSenior.getWwcxmima(), userDTO.getPassword())) { |
|||
String version = VersionConstants.SENIOR; |
|||
if (StrUtil.equals(bjdSenior.getShebeizhongleidaima(), EquipmentCodeEnum.DT.getCode()) || StrUtil.equals(bjdSenior.getShebeizhongleidaima(), EquipmentCodeEnum.QZJ.getCode()) |
|||
|| StrUtil.equals(bjdSenior.getShebeizhongleidaima(), EquipmentCodeEnum.CC.getCode())) { |
|||
version = VersionConstants.Intermediate; |
|||
} |
|||
UsernamePasswordToken token = new UsernamePasswordToken(bjdSenior.getSerialNumber(), bjdSenior.getWwcxmima()); |
|||
currentUser.login(token); |
|||
return PageVO.builder().data(bjdSenior).version(version).token(String.valueOf(currentUser.getSession().getId())).build(); |
|||
} else { |
|||
throw new BusinessException("密码不正确!"); |
|||
} |
|||
} else { |
|||
throw new BusinessException("回执单账号不存在!"); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,55 @@ |
|||
package com.stone.util; |
|||
|
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.context.annotation.Configuration; |
|||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; |
|||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; |
|||
import springfox.documentation.builders.ApiInfoBuilder; |
|||
import springfox.documentation.builders.PathSelectors; |
|||
import springfox.documentation.builders.RequestHandlerSelectors; |
|||
import springfox.documentation.service.ApiInfo; |
|||
import springfox.documentation.spi.DocumentationType; |
|||
import springfox.documentation.spring.web.plugins.Docket; |
|||
import springfox.documentation.swagger2.annotations.EnableSwagger2; |
|||
|
|||
/** |
|||
* Swagger核心配置类 |
|||
*/ |
|||
@Configuration |
|||
@EnableSwagger2 |
|||
public class Swagger implements WebMvcConfigurer { |
|||
|
|||
@Value("${swagger.enable}") |
|||
private boolean enableSwagger; |
|||
|
|||
@Override |
|||
public void addResourceHandlers(ResourceHandlerRegistry registry) { |
|||
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); |
|||
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); |
|||
} |
|||
|
|||
@Bean |
|||
public Docket createRestApi() { |
|||
return new Docket(DocumentationType.SWAGGER_2) |
|||
.apiInfo(apiInfo()) |
|||
.enable(enableSwagger) |
|||
.select() |
|||
// 指定controller存放的目录路径
|
|||
.apis(RequestHandlerSelectors.basePackage("com.stone.controller")) |
|||
.paths(PathSelectors.any()) |
|||
.build(); |
|||
} |
|||
|
|||
private ApiInfo apiInfo() { |
|||
return new ApiInfoBuilder() |
|||
// 文档标题
|
|||
.title("明安接口文档") |
|||
// 文档描述
|
|||
.description("https://github.com/SuperZhouDaLu") |
|||
.termsOfServiceUrl("https://github.com/SuperZhouDaLu") |
|||
.version("v1.0") |
|||
.build(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,127 @@ |
|||
package com.stone.util.common; |
|||
|
|||
import cn.hutool.core.date.DateUtil; |
|||
import cn.hutool.core.util.ObjectUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.stone.conf.enums.MagicValueConstants; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
|
|||
import javax.persistence.Column; |
|||
import java.lang.annotation.Annotation; |
|||
import java.lang.reflect.Field; |
|||
import java.lang.reflect.InvocationTargetException; |
|||
import java.lang.reflect.Method; |
|||
import java.util.Arrays; |
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* 复制对象工具类 |
|||
* 利用反射复制对象属性 |
|||
* @author zichen |
|||
*/ |
|||
public class AttributeReflectUtil { |
|||
|
|||
/** |
|||
* 反射obj对象 字段的 注解 与 jObj 对象的key进行比对,然后将其值写入字段 |
|||
* @param jObj {注解的值: 字段的值, ...} |
|||
* @param obj 映射对象 |
|||
* @return 映射完值的obj对象 |
|||
*/ |
|||
public static Object convertDataByApiModelProperty(JSONObject jObj, Object obj){ |
|||
if (ObjectUtil.isNull(jObj) || ObjectUtil.isNull(obj)) { |
|||
return null; |
|||
} |
|||
Class cls = obj.getClass(); |
|||
for (Field field : cls.getDeclaredFields()) { |
|||
if (field.getName().toLowerCase().contains("id")) { |
|||
continue; |
|||
} |
|||
ApiModelProperty annotation = field.getAnnotation(ApiModelProperty.class); |
|||
String value = jObj.getString(annotation.value()); |
|||
if (StrUtil.isEmpty(value)) { |
|||
continue; |
|||
} |
|||
boolean access = field.isAccessible(); |
|||
field.setAccessible(true); |
|||
try { |
|||
switch (field.getGenericType().toString()) { |
|||
case "class java.lang.String": |
|||
field.set(obj, value); |
|||
break; |
|||
case "class java.util.Date": |
|||
field.set(obj, DateUtil.parse(value, MagicValueConstants.DATE_FORMAT)); |
|||
break; |
|||
default: |
|||
break; |
|||
|
|||
} |
|||
} catch (IllegalAccessException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
field.setAccessible(access); |
|||
} |
|||
return obj; |
|||
} |
|||
|
|||
/** |
|||
* 根据result字段的Column注解将source里面的值映射到result字段里 |
|||
* @param source 源对象 |
|||
* @param result 结果对象 |
|||
* @return 处理后的结果对象 |
|||
*/ |
|||
public static Object convertDataByAnnotation(Object source, Object result, Class annotationClass, String annotationAttribute) { |
|||
if (ObjectUtil.isNull(source) || ObjectUtil.isNull(result)) { |
|||
return null; |
|||
} |
|||
Class sourceCls = source.getClass(); |
|||
Class resultCls = result.getClass(); |
|||
for (Field resultField : resultCls.getDeclaredFields()) { |
|||
boolean access = resultField.isAccessible(); |
|||
resultField.setAccessible(true); |
|||
try { |
|||
String resultFieldVal = (String) invokeAnnotationAttribute(resultField, annotationClass, annotationAttribute); |
|||
assert resultFieldVal != null; |
|||
Field sourceField = sourceCls.getDeclaredField(resultFieldVal); |
|||
boolean sourceAccess = sourceField.isAccessible(); |
|||
sourceField.setAccessible(true); |
|||
switch (sourceField.getGenericType().toString()) { |
|||
case "class java.lang.String": |
|||
resultField.set(result, sourceField.get(source)); |
|||
break; |
|||
case "class java.util.Date": |
|||
resultField.set(result, DateUtil.format((Date) sourceField.get(source), MagicValueConstants.DATE_FORMAT)); |
|||
break; |
|||
default: |
|||
break; |
|||
} |
|||
sourceField.setAccessible(sourceAccess); |
|||
} catch (NullPointerException | NoSuchFieldException | IllegalAccessException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
resultField.setAccessible(access); |
|||
} |
|||
return result; |
|||
} |
|||
|
|||
/** |
|||
* 获取字段的注解中的值 |
|||
* @param field 字段 |
|||
* @param annotationClass 注解class |
|||
* @param annotationAttribute 注解方法名 |
|||
* @return 字段的注解中的值 |
|||
*/ |
|||
private static Object invokeAnnotationAttribute(Field field, Class annotationClass, String annotationAttribute) { |
|||
try { |
|||
Annotation annotation = field.getAnnotation(annotationClass); |
|||
if (ObjectUtil.isNotNull(annotation)) { |
|||
Method method = annotation.getClass().getDeclaredMethod(annotationAttribute); |
|||
return method.invoke(annotation); |
|||
} |
|||
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,112 @@ |
|||
package com.stone.util.common; |
|||
|
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.stone.conf.enums.Constants; |
|||
import com.stone.conf.enums.ErrorEnum; |
|||
import com.stone.conf.exception.CommonJsonException; |
|||
|
|||
import javax.servlet.http.HttpServletRequest; |
|||
import java.util.Enumeration; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 后台接口json工具类 |
|||
*/ |
|||
public class ReturnJSONUtils { |
|||
|
|||
/** |
|||
* 返回一个returnData为空对象的成功消息的json |
|||
*/ |
|||
public static JSONObject successJson() { |
|||
return successJson(new JSONObject()); |
|||
} |
|||
|
|||
/** |
|||
* 返回一个返回码为100的json |
|||
*/ |
|||
public static JSONObject successJson(Object returnData) { |
|||
return new JSONObject() |
|||
.fluentPut("returnCode", Constants.SUCCESS_CODE) |
|||
.fluentPut("returnMsg", Constants.SUCCESS_MSG) |
|||
.fluentPut("returnData", returnData); |
|||
} |
|||
|
|||
/** |
|||
* 返回错误信息JSON |
|||
*/ |
|||
public static JSONObject errorJson(ErrorEnum errorEnum) { |
|||
return new JSONObject() |
|||
.fluentPut("returnCode", errorEnum.getErrorCode()) |
|||
.fluentPut("returnMsg", errorEnum.getErrorMsg()) |
|||
.fluentPut("returnData", new JSONObject()); |
|||
} |
|||
|
|||
/** |
|||
* 查询分页结果后的封装工具方法 |
|||
* |
|||
* @param list 查询分页对象list |
|||
*/ |
|||
public static JSONObject successPage(List<?> list) { |
|||
return successJson().fluentPut("returnData", new JSONObject().fluentPut("list", list)); |
|||
} |
|||
|
|||
/** |
|||
* 查询分页结果后的封装工具方法 |
|||
* |
|||
* @param list 查询分页对象list |
|||
* @param totalCount 查询出记录的总条数 |
|||
*/ |
|||
public static JSONObject successPage(List<?> list, Long totalCount) { |
|||
return successJson().fluentPut("returnData", new JSONObject().fluentPut("list", list).fluentPut("totalCount", totalCount)); |
|||
} |
|||
|
|||
/** |
|||
* 将request参数值转为json |
|||
*/ |
|||
public static JSONObject request2Json(HttpServletRequest request) { |
|||
JSONObject requestJson = new JSONObject(); |
|||
Enumeration paramNames = request.getParameterNames(); |
|||
while (paramNames.hasMoreElements()) { |
|||
String paramName = (String) paramNames.nextElement(); |
|||
String[] pv = request.getParameterValues(paramName); |
|||
StringBuilder sb = new StringBuilder(); |
|||
for (int i = 0; i < pv.length; i++) { |
|||
if (pv[i].length() > 0) { |
|||
if (i > 0) { |
|||
sb.append(","); |
|||
} |
|||
sb.append(pv[i]); |
|||
} |
|||
} |
|||
requestJson.put(paramName, sb.toString()); |
|||
} |
|||
return requestJson; |
|||
} |
|||
|
|||
/** |
|||
* 验证是否含有全部必填字段 |
|||
*/ |
|||
public static void hasAllRequired(final JSONObject jsonObject, String requiredColumns) { |
|||
if (!StrUtil.isEmpty(requiredColumns)) { |
|||
//验证字段非空
|
|||
String[] columns = requiredColumns.trim().split(","); |
|||
StringBuilder missCol = new StringBuilder(); |
|||
for (String column : columns) { |
|||
Object val = jsonObject.get(column.trim()); |
|||
if (StrUtil.isEmpty((String) val)) { |
|||
missCol.append(column).append(" "); |
|||
} |
|||
} |
|||
if (!StrUtil.isEmpty(missCol.toString())) { |
|||
jsonObject.clear(); |
|||
throw new CommonJsonException(jsonObject |
|||
.fluentPut("returnCode", ErrorEnum.E_90003.getErrorCode()) |
|||
.fluentPut("returnMsg", "缺少必填参数:" + missCol.toString().trim()) |
|||
.fluentPut("returnData", new JSONObject())); |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
} |
@ -0,0 +1,127 @@ |
|||
env: dev |
|||
projectName: JNJY |
|||
# 层级目录 【环境集群-地市-环境-与环境相关字段】 |
|||
envs: |
|||
frontAllIp: '*' # 开发环境允许所有ip访问 |
|||
showSwagger: true # 开发环境可展示swagger文档 |
|||
hideSwagger: false # 正式环境可隐藏swagger文档 |
|||
senior: # 18版 |
|||
prod: # 正式环境 |
|||
ip: ${envs.frontAllIp} |
|||
swagger: ${envs.hideSwagger} |
|||
url: jdbc:mysql://172.18.223.67:3306/jinan_front?useSSL=FALSE&serverTimezone=Asia/Shanghai |
|||
username: tejianxiangmu |
|||
password: Mingantejian2018 |
|||
dev: # 开发环境 |
|||
ip: ${envs.frontAllIp} |
|||
swagger: ${envs.showSwagger} |
|||
url: jdbc:mysql://114.215.66.31:3309/wangchaotest?useSSL=FALSE&serverTimezone=Asia/Shanghai |
|||
username: tejianxiangmu |
|||
password: MingAnTeJian2019 |
|||
test: |
|||
ip: ${envs.frontAllIp} |
|||
swagger: ${envs.showSwagger} |
|||
url: jdbc:mysql://127.0.0.1:3309/wangchaotest?useSSL=FALSE&serverTimezone=Asia/Shanghai |
|||
username: root |
|||
password: root2008 |
|||
intermediate: # 16版 |
|||
prod: # 正式环境 |
|||
ip: ${envs.frontAllIp} |
|||
swagger: ${envs.hideSwagger} |
|||
url: jdbc:mysql://172.18.223.67:3306/jinan_jianyan?useSSL=FALSE&serverTimezone=Asia/Shanghai |
|||
username: tejianxiangmu |
|||
password: Mingantejian2018 |
|||
dev: # 开发环境 |
|||
ip: ${envs.frontAllIp} |
|||
swagger: ${envs.showSwagger} |
|||
url: jdbc:mysql://114.215.66.31:3309/jinan_jianyan?useSSL=FALSE&serverTimezone=Asia/Shanghai |
|||
username: tejianxiangmu |
|||
password: MingAnTeJian2019 |
|||
test: |
|||
ip: ${envs.frontAllIp} |
|||
swagger: ${envs.showSwagger} |
|||
url: jdbc:mysql://127.0.0.1:3309/jinan_jianyan?useSSL=FALSE&serverTimezone=Asia/Shanghai |
|||
username: root |
|||
password: root2008 |
|||
|
|||
|
|||
#端口号 |
|||
server: |
|||
#开发环境 |
|||
port: 9094 |
|||
#生产环境 |
|||
#port: 8080 |
|||
servlet: |
|||
context-path: /DYBGManager |
|||
session: |
|||
timeout: 30M |
|||
|
|||
#日志等级 |
|||
logging: |
|||
level: |
|||
BJD: DEBUG |
|||
com.stone.mapper: DEBUG |
|||
|
|||
#swagger配置 |
|||
swagger: |
|||
#开发环境 |
|||
enable: true |
|||
#生产环境 |
|||
#enable: false |
|||
|
|||
#前台ip地址 |
|||
front: |
|||
#开发环境 |
|||
ip: '*' |
|||
#生产环境 |
|||
#ip: http://127.0.0.1:8080 |
|||
projectName: JNJY |
|||
|
|||
spring: |
|||
datasource: |
|||
# 18数据源配置 |
|||
senior: |
|||
url: ${envs.senior.${env}.url} |
|||
username: ${envs.senior.${env}.username} |
|||
password: ${envs.senior.${env}.password} |
|||
type: com.alibaba.druid.pool.DruidDataSource |
|||
# 16数据源配置 |
|||
intermediate: |
|||
# # 测试环境 |
|||
url: ${envs.intermediate.${env}.url} |
|||
username: ${envs.intermediate.${env}.username} |
|||
password: ${envs.intermediate.${env}.password} |
|||
type: com.alibaba.druid.pool.DruidDataSource |
|||
#redis配置 |
|||
redis: |
|||
host: localhost |
|||
port: 6379 |
|||
jedis: |
|||
pool: |
|||
max-idle: 8 |
|||
min-idle: 0 |
|||
max-active: 8 |
|||
max-wait: -1 |
|||
timeout: 0 |
|||
jmx: |
|||
default-domain: DYBGManager |
|||
|
|||
#mybatis扫描路径 |
|||
mybatis: |
|||
type-aliases-package: com.stone.model |
|||
mapper-locations: classpath:mapper/*.xml |
|||
|
|||
#通用mapper |
|||
mapper: |
|||
mappers: |
|||
- com.stone.base.BaseMapper |
|||
not-empty: false |
|||
identity: MYSQL |
|||
before: true |
|||
|
|||
#分页mapper |
|||
pagehelper: |
|||
helperDialect: mysql |
|||
reasonable: true |
|||
supportMethodsArguments: true |
|||
params: count=countSql |
@ -0,0 +1,14 @@ |
|||
${AnsiColor.BRIGHT_YELLOW} |
|||
╭───────────────╮ ╭───────────────╮ |
|||
│ ┃ │ ┃ |
|||
│ ${AnsiColor.RED}┅┅┅┅┅┅╮ ${AnsiColor.BRIGHT_YELLOW}┃ │ ${AnsiColor.RED}╭┅┅┅┅┅┅ ${AnsiColor.BRIGHT_YELLOW}┃ |
|||
│ ${AnsiColor.RED} ╱ ${AnsiColor.BRIGHT_YELLOW}┃ │ ${AnsiColor.RED}┇ ${AnsiColor.BRIGHT_YELLOW}┃ |
|||
│ ${AnsiColor.RED} ╱ ${AnsiColor.BRIGHT_YELLOW}┃ │ ${AnsiColor.RED}┇ ${AnsiColor.BRIGHT_YELLOW}┃ |
|||
│ ${AnsiColor.RED} ╱ ${AnsiColor.BRIGHT_YELLOW}┃ │ ${AnsiColor.RED}┇ ${AnsiColor.BRIGHT_YELLOW}┃ |
|||
│ ${AnsiColor.RED} ╱ ${AnsiColor.BRIGHT_YELLOW}┃ │ ${AnsiColor.RED}┇ ${AnsiColor.BRIGHT_YELLOW}┃ |
|||
│ ${AnsiColor.RED} ╱ ${AnsiColor.BRIGHT_YELLOW}┃ │ ${AnsiColor.RED}┇ ${AnsiColor.BRIGHT_YELLOW}┃ |
|||
│ ${AnsiColor.RED}╰┅┅┅┅┅┅ ${AnsiColor.BRIGHT_YELLOW}┃ │ ${AnsiColor.RED}╰┅┅┅┅┅┅ ${AnsiColor.BRIGHT_YELLOW}┃ |
|||
│ ┃ │ ┃ |
|||
╰━━━━━━━━━━━━━━━╯ ╰━━━━━━━━━━━━━━━╯ |
|||
${AnsiColor.BRIGHT_BLUE} |
|||
紫宸启动专用 |
@ -0,0 +1,29 @@ |
|||
package com.stone.test; |
|||
|
|||
import com.stone.Application; |
|||
import org.junit.Test; |
|||
import org.junit.runner.RunWith; |
|||
import org.springframework.boot.test.context.SpringBootTest; |
|||
import org.springframework.context.annotation.Import; |
|||
import org.springframework.test.context.junit4.SpringRunner; |
|||
|
|||
import javax.annotation.Resource; |
|||
import javax.servlet.http.HttpServletRequest; |
|||
import javax.servlet.http.HttpServletResponse; |
|||
|
|||
@RunWith(SpringRunner.class) |
|||
@SpringBootTest |
|||
@Import(Application.class) |
|||
public class CountryServiceTest { |
|||
|
|||
@Resource |
|||
private HttpServletResponse response; |
|||
|
|||
@Resource |
|||
private HttpServletRequest request; |
|||
|
|||
@Test |
|||
public void test() { |
|||
} |
|||
|
|||
} |
Loading…
Reference in new issue