Initial commit

精简
master
颜超 2 years ago committed by stackoverflow
commit 764413a6cd

37
.gitignore vendored

@ -0,0 +1,37 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
logs/
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
*.iml
web/web.iml

Binary file not shown.

@ -0,0 +1,18 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar

@ -0,0 +1,179 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
</facet>
<facet type="web" name="Web">
<configuration>
<webroots />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.5.6" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.6" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.14.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.14.1" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.32" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.28" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.5.6" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.5.6" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.5.6" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.5.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.4.7" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:2.4.7" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.19.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.7.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.7.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.7.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.7.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.7.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.9.0" level="project" />
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.22" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.22" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:3.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.9.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.3.12" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.8.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.7" level="project" />
<orderEntry type="library" name="Maven: com.spring4all:swagger-spring-boot-starter:1.9.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.12.5" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:2.9.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.5.6" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.12.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.12.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.12.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.54" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.54" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.3.12" level="project" />
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:6.1.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.4.11" level="project" />
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.22" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.83" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.5" level="project" />
<orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.54" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.2.0.Final" level="project" />
<orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.2.Final" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:easyexcel:2.1.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
<orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" />
<orderEntry type="library" name="Maven: cglib:cglib:3.1" level="project" />
<orderEntry type="library" name="Maven: org.ow2.asm:asm:4.2" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.32" level="project" />
<orderEntry type="library" name="Maven: org.ehcache:ehcache:3.9.7" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.7.11" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.5.6" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-core:1.1.0" level="project" />
<orderEntry type="library" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-base:1.1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-weekend:1.1.4.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.0" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.27" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.10" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.10" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.10" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:1.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.2.10" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.1.8" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:1.2" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.7" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:4.9.3" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okio:okio:2.8.0" level="project" />
<orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.5.31" level="project" />
<orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.5.31" level="project" />
<orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
<orderEntry type="library" name="Maven: redis.clients:jedis:2.9.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.9.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.4.6" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.9.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
<orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
<orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.3" level="project" />
<orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
</component>
</module>

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>parent</artifactId>
<groupId>com.imitate</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>common</name>
<description>common</description>
<packaging>jar</packaging>
<dependencies>
<!-- 配置文件联想提示 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
</dependencies>
</project>

@ -0,0 +1,65 @@
package com.imitate.common.advisor;
import com.imitate.common.enums.ErrorCodeEnum;
import com.imitate.common.exception.BusinessException;
import com.imitate.common.util.R;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.validation.ConstraintViolationException;
/**
* @author yanchao
*/
@RestControllerAdvice
public class DefaultControllerAdvisor {
private static final Logger logger = LoggerFactory.getLogger(DefaultControllerAdvisor.class);
@ExceptionHandler(Exception.class)
public R processException(Exception e) {
logger.error(e.getMessage(), e);
return R.error(ErrorCodeEnum.EXCEPTION.getValue(), ErrorCodeEnum.EXCEPTION.getDescription());
}
@ExceptionHandler(BusinessException.class)
public R processException(BusinessException e) {
logger.error(e.getMessage(), e);
return R.error(e.getErrCode(), e.getMessage());
}
@ExceptionHandler(MissingServletRequestParameterException.class)
public R processMissingServletRequestParameterException(MissingServletRequestParameterException e) {
logger.error(e.getMessage(), e);
return R.error(ErrorCodeEnum.MVC_BIND_EXCEPTION.getValue(), ErrorCodeEnum.MVC_BIND_EXCEPTION.getDescription());
}
@ExceptionHandler(ConstraintViolationException.class)
public R processConstraintViolationException(ConstraintViolationException e) {
logger.error(e.getMessage(), e);
return R.error(ErrorCodeEnum.INVALID_ARG_EXCEPTION.getValue(),
ErrorCodeEnum.INVALID_ARG_EXCEPTION.getDescription());
}
@ExceptionHandler(BindException.class)
public R processBindException(BindException e) {
logger.error(e.getMessage(), e);
return R.error(ErrorCodeEnum.BIND_EXCEPTION.getValue(), ErrorCodeEnum.BIND_EXCEPTION.getDescription());
}
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
@ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
public R processHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
logger.error(e.getMessage(), e);
return R.error(ErrorCodeEnum.METHOD_NOT_ALLOWED_EXCEPTION.getValue(),
ErrorCodeEnum.METHOD_NOT_ALLOWED_EXCEPTION.getDescription());
}
}

@ -0,0 +1,19 @@
package com.imitate.common.annotation;
import java.lang.annotation.*;
/**
*
*
* @author jshixiong
*/
@Inherited
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DoSysLog {
/**
*
*/
boolean isLog() default false;
}

@ -0,0 +1,61 @@
package com.imitate.common.bean;
import com.imitate.common.constant.ApiResultCsts;
public class ApiResult<T> {
private int code = ApiResultCsts.CODE_SUCCESS;
private String msg;
private T data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public ApiResult() {
}
public ApiResult(int code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public static <T> ApiResult<T> successResult(T data) {
return successResult("success", data);
}
public static <T> ApiResult<T> successResult(String msg, T data) {
return new ApiResult<>(0, msg, data);
}
public static <T> ApiResult<T> failResult(int code, String msg, T data) {
return new ApiResult<>(code, msg, data);
}
public static <T> ApiResult<T> failResult(int code, String msg) {
return new ApiResult<>(code, msg, null);
}
}

@ -0,0 +1,44 @@
/**
* : BeanFactory.java
* : </>
* : <>
* @author liliy
* : <>
* 2017613
* <>
*/
package com.imitate.common.bean;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* <> <>
*
* @author liliy
* @version [2017613]
* @see [/]
* @since [/]
*/
@Component
public class BeanFactory implements ApplicationContextAware {
private static ApplicationContext ctx = null;
public static Object getObejct(String name) {
return ctx.getBean(name);
}
public static <T> T getObejct(Class<T> requiredType) {
return ctx.getBean(requiredType);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
BeanFactory.ctx = applicationContext;
}
}

@ -0,0 +1,53 @@
package com.imitate.common.bean;
import com.github.pagehelper.Page;
import java.util.List;
public class BridgePage<T> {
private List<T> data;
private Integer pageNum;
private Integer pageSize;
private Long total;
public BridgePage(Page<T> page) {
this.data = page.getResult();
this.pageNum = page.getPageNum();
this.pageSize = page.getPageSize();
this.total = page.getTotal();
}
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
public Integer getPageNum() {
return pageNum;
}
public void setPageNum(Integer pageNum) {
this.pageNum = pageNum;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Long getTotal() {
return total;
}
public void setTotal(Long total) {
this.total = total;
}
}

@ -0,0 +1,49 @@
package com.imitate.common.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* shell
*
* @author
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ShellResult {
/**
* 退
*/
private Integer exitStatus;
/**
*
*/
private String out;
public enum ExitStatus {
/**
*
*/
SUCCESS(0),
/**
*
*/
TIMEOUT(124),
/**
*
*/
FAIL(-1);
private int code;
ExitStatus(int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
}

@ -0,0 +1,146 @@
package com.imitate.common.config;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
@Configuration
public class DateConfig {
/** 默认日期时间格式 */
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/** 默认日期格式 */
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
/** 默认时间格式 */
public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
/**
* LocalDateRequestParamPathVariable
*/
@Bean
public Converter<String, LocalDate> localDateConverter() {
return new Converter<String, LocalDate>() {
@Override
public LocalDate convert(String source) {
return LocalDate.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT));
}
};
}
/**
* LocalDateTimeRequestParamPathVariable
*/
@Bean
public Converter<String, LocalDateTime> localDateTimeConverter() {
return new Converter<String, LocalDateTime>() {
@Override
public LocalDateTime convert(String source) {
return LocalDateTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT));
}
};
}
/**
* LocalTimeRequestParamPathVariable
*/
@Bean
public Converter<String, LocalTime> localTimeConverter() {
return new Converter<String, LocalTime>() {
@Override
public LocalTime convert(String source) {
return LocalTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT));
}
};
}
/**
* DateRequestParamPathVariable
*/
@Bean
public Converter<String, Date> dateConverter() {
return new Converter<String, Date>() {
@Override
public Date convert(String source) {
SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
try {
return format.parse(source);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
};
}
/**
* JsonPostjsonjson
*/
@Bean("objectMapper")
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
// LocalDateTime系列序列化和反序列化模块继承自jsr310我们在这里修改了日期格式
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class,
new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
javaTimeModule.addSerializer(LocalDate.class,
new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
javaTimeModule.addSerializer(LocalTime.class,
new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
javaTimeModule.addDeserializer(LocalDateTime.class,
new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
javaTimeModule.addDeserializer(LocalDate.class,
new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
javaTimeModule.addDeserializer(LocalTime.class,
new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
// Date序列化和反序列化
javaTimeModule.addSerializer(Date.class, new JsonSerializer<Date>() {
@Override
public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
throws IOException {
SimpleDateFormat formatter = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
String formattedDate = formatter.format(date);
jsonGenerator.writeString(formattedDate);
}
});
javaTimeModule.addDeserializer(Date.class, new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
throws IOException, JsonProcessingException {
SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
String date = jsonParser.getText();
try {
return format.parse(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
});
objectMapper.registerModule(javaTimeModule);
return objectMapper;
}
}

@ -0,0 +1,36 @@
package com.imitate.common.config;
import com.imitate.common.util.RedisPool;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
@Component
public class InitListener implements ApplicationListener<ApplicationReadyEvent> {
private static final Logger log = LoggerFactory.getLogger(InitListener.class);
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
String active = System.getProperty("spring.profiles.active");
// 本地不初始化这些信息
Jedis jedis = null;
try {
if (!StringUtils.equals(active, "local")) {
// 初始化redis
jedis = RedisPool.getJedis();
}
} catch (Exception e) {
log.error("项目启动失败", e);
if ("jedisPool初始化错误".equals(e.getMessage())) {
Runtime.getRuntime().exit(-1);
}
} finally {
RedisPool.returnResource(jedis);
}
}
}

@ -0,0 +1,20 @@
package com.imitate.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
@Order(1)
@Configuration
public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer listenerContainer(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}

@ -0,0 +1,38 @@
package com.imitate.common.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.util.List;
/**
*
* @author yanchao
*/
@Configuration
@Order(1)
@Slf4j
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
log.debug("【配置argumentResolver】ok");
}
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedHeaders("Content-Type", "x-requested-with", "X-Custom-Header")
.allowedOriginPatterns("*")
.allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
.allowCredentials(true)
.maxAge(3600);
}
}

@ -0,0 +1,7 @@
package com.imitate.common.constant;
public interface ApiResultCsts {
int CODE_SUCCESS = 0;
int CODE_FAIL = -1;
}

@ -0,0 +1,55 @@
package com.imitate.common.enums;
/**
* 01
*
* @author
*/
public enum CommonStateEnum {
/**
*
*/
FALSE(0, false),
/**
*
*/
TRUE(1, true);
int value;
boolean booleanValue;
CommonStateEnum(int value, boolean booleanValue) {
this.value = value;
this.booleanValue = booleanValue;
}
public int getValue() {
return value;
}
public boolean getBooleanValue() {
return booleanValue;
}
/**
* bool
*
* @param value bool
* @return 10
*/
public static CommonStateEnum fromBoolean(Boolean value) {
return value == null ? FALSE : value ? TRUE : FALSE;
}
/**
*
*
* @param value
* @return 10
*/
public static CommonStateEnum fromInteger(Integer value) {
return value == null || value == FALSE.getValue() ? FALSE : TRUE;
}
}

@ -0,0 +1,56 @@
package com.imitate.common.enums;
import java.util.Arrays;
/**
*
*
* @author yanchao
*/
public enum ErrorCodeEnum {
SUCCESS("000000", "成功"),
INVALID_ARG_EXCEPTION("000001", "参数验证异常"),
BIND_EXCEPTION("000007", "参数绑定异常"),
MVC_BIND_EXCEPTION("000014", "请求参数绑定异常"),
METHOD_NOT_ALLOWED_EXCEPTION("000008", "请求方式异常"),
EXCEPTION("999999", "系统异常"),
DATAFLOW_EXCEPTION("000010", "默认数据异常"),
BUSINESS_EXCEPTION("000011", "默认业务异常"),
LOGIN_EXPIRE_TIME("000013", "登录已过期,请重新登录"),
USER_LOGIN_DISABLE("000014", "账号已经锁定,请联系管理员"),
NO_AUTH("000012", "未认证登录状态"),
AFTERMATH_EXP("000013", "评测线程出错,善后处理发生异常"),
GIT_FAIL("000014", "获取git凭证失败: "),
GIT_CREDENTIAL_FAIL("000015", "设置git凭证失败:"),
CLONE_FAIL("100001", "克隆失败"),
EVALUATION_SHELL_FAIL("100002", "生成评测脚本失败"),
WRITE_FILE_CODE_FAIL("100003", "写代码文件失败"),
UPDATE_VERSION_REPOSITORY_FAIL("100004", "更新版本库失败"),
SYNC_CLUSTER_VERSION_REPOSITORY_FAIL("100005", "远程集群版本库同步失败"),
PUSH_FAIL("100006", "push版本库失败"),
JUPYTER_ADD_OR_COMMIT_FAIL("100007", "Jupyter添加提交失败"),
VERSION_REPOSITORY_NOT_EXIST("10000", "主机名不存在");
String value;
String description;
ErrorCodeEnum(String value, String description) {
this.value = value;
this.description = description;
}
public String getValue() {
return value;
}
public String getDescription() {
return description;
}
public static ErrorCodeEnum getByDescription(String description) {
return Arrays.stream(values()).filter(errorCodeEnum -> errorCodeEnum.getDescription().equals(description))
.findFirst().orElse(null);
}
}

@ -0,0 +1,33 @@
package com.imitate.common.exception;
import com.imitate.common.enums.ErrorCodeEnum;
/**
*
*
* @author yanchao
*/
public class BusinessException extends RuntimeException {
/**
*
*/
private String errCode = ErrorCodeEnum.DATAFLOW_EXCEPTION.getValue();
public BusinessException(ErrorCodeEnum errorCodeEnum) {
super(errorCodeEnum.getDescription());
setErrCode(errorCodeEnum.getValue());
}
public BusinessException(String code, String msg) {
super(msg);
setErrCode(code);
}
public void setErrCode(String errCode) {
this.errCode = errCode;
}
public String getErrCode() {
return errCode;
}
}

@ -0,0 +1,34 @@
package com.imitate.common.util;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
* DO
* @author yanchao
*/
@Data
@EqualsAndHashCode(callSuper = false)
public abstract class AbstractDO implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
private LocalDateTime updateTime;
}

@ -0,0 +1,91 @@
package com.imitate.common.util;
import org.apache.commons.codec.binary.Base64;
import org.springframework.util.StringUtils;
import java.nio.charset.StandardCharsets;
/**
* Created by guange on 23/02/2017.
*/
public final class Base64Util {
/**
* base64
*
* @param code
* @return
*/
public static String encode(String code) {
byte[] encode = Base64.encodeBase64URLSafe(code.getBytes(StandardCharsets.UTF_8));
return new String(encode, StandardCharsets.UTF_8);
}
public static byte[] encodeBytes(byte[] codes) {
return Base64.encodeBase64(codes);
}
/**
* base64
*
* @param code
* @return
*/
public static String decode(String code) {
byte[] decode = Base64.decodeBase64(code);
return new String(decode, StandardCharsets.UTF_8);
}
/**
* base64URL safeURL safe
*
* @param code
* @return
*/
public static String reencode(String code) {
String str = decode(code).replace("\u0000", "");
//str = str.replace("\n", "\r\n");
str = replaceLineFeed(str);
return encode(str);
}
private static String replaceLineFeed(String str) {
StringBuilder sb = new StringBuilder();
char[] cs = str.toCharArray();
int len = cs.length;
for (int i = 0; i < len; i++) {
char c = cs[i];
if (c == '\n') {
if (i == 0) {
sb.append('\r').append(c);
} else {
char pre = cs[i - 1];
if (pre == '\r') {
sb.append(c);
} else {
sb.append('\r').append(c);
}
}
} else {
sb.append(c);
}
}
return sb.toString();
}
/**
*
*
* @param code
* @return
*/
public static String encodeNoSafe(String code) {
if (StringUtils.isEmpty(code)) {
code = " ";
}
byte[] encode = Base64.encodeBase64(code.getBytes(StandardCharsets.UTF_8));
return new String(encode, StandardCharsets.UTF_8);
}
}

@ -0,0 +1,13 @@
package com.imitate.common.util;
import com.imitate.common.util.AbstractDO;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
/**
* mapper
* @author yanchao
*/
public interface BaseMapper<T extends AbstractDO> extends Mapper<T>, MySqlMapper<T> {
// 特别注意,该接口不能被扫描到,否则会出错
}

@ -0,0 +1,52 @@
package com.imitate.common.util;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
*
* @author yanchao
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BasePageCondition implements Serializable {
private static final long serialVersionUID = 1L;
public final static int DEFAULT_PAGE_SIZE = 10;
private Integer pageNumber;
private Integer pageSize;
private Integer pageStart;
private String orderField;
private String orderDirection;
private String keywords;
public BasePageCondition(){
this.pageNumber = 1;
this.pageSize = 0;
this.pageStart = 0;
}
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startDate;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endDate;
public int getPageSize() {
return pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
}
public int getPageStart() {
return pageNumber > 0 ? (pageNumber - 1) * getPageSize() :0;
}
}

@ -0,0 +1,34 @@
package com.imitate.common.util;
import com.imitate.common.enums.ErrorCodeEnum;
import com.imitate.common.exception.BusinessException;
import com.imitate.common.util.R;
import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import java.util.List;
/**
* @author yanchao
*/
public class BasicController {
public R actionResultWithBindingResult(ErrorCodeEnum errorCodeEnum, BindingResult bindingResult){
String errMsg = getBindingResultErrors(bindingResult);
if(StringUtils.isBlank(errMsg)){
return R.error(errorCodeEnum.getDescription());
}
throw new BusinessException(errorCodeEnum.getValue(),errorCodeEnum.getDescription() + "," + errMsg);
}
public String getBindingResultErrors(BindingResult bindingResult){
if (null == bindingResult || !bindingResult.hasErrors()) {
return null;
}
StringBuilder errorStrBuilder = new StringBuilder();
List<ObjectError> errorList = bindingResult.getAllErrors();
for (ObjectError error : errorList) {
errorStrBuilder.append(error.getDefaultMessage()).append(";");
}
return StringUtils.removeEnd(errorStrBuilder.toString(), ";");
}
}

@ -0,0 +1,43 @@
package com.imitate.common.util;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.sql.*;
/**
* Connection
* @author yanchao
*/
public class DBHelper {
private static Logger logger = LogManager.getLogger();
/**
* Connection
* oracle.jdbc.driver.OracleDriver
* com.mysql.jdbc.Driver
* com.microsoft.sqlserver.jdbc.SQLServerDriver
* com.pivotal.jdbc.GreenplumDriver
* org.apache.hadoop.hive.jdbc.HiveDriver
* @return
*/
public static Connection intiConnection(String jdbcdriver,String jdbcurl, String username, String password, boolean autoCommit) {
Connection conn = null;
try {
Class.forName(jdbcdriver);
// 连接数据库
conn = DriverManager.getConnection(jdbcurl, username, password);
conn.setAutoCommit(autoCommit);
} catch (Exception e) {
// 连接失败
logger.error("intiConnection test 连接失败",e);
return null;
}
return conn;
}
}

@ -0,0 +1,113 @@
package com.imitate.common.util;
import org.springframework.util.FileCopyUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLConnection;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
*
* @author yanchao
*/
public class FileDownloadUtil {
/**
*
* @param file
* @param response
* @throws IOException
*/
public static void fileDownload(File file, HttpServletResponse response) throws IOException {
if (file.exists()) {
String mimeType = URLConnection.guessContentTypeFromName(file.getName());
if (mimeType == null) {
mimeType = "application/octet-stream";
}
response.setContentType(mimeType);
response.setHeader("Content-Disposition", String.format("inline; filename=\"" + file.getName() + "\""));
response.setContentLength((int) file.length());
InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
FileCopyUtils.copy(inputStream, response.getOutputStream());
}
}
/**
* classpath
* @param resourceDirPath
* @param createFileName
* @throws IOException
*/
public static File createFile(String resourceDirPath,String createFileName) throws IOException {
File tmpFile = new File(resourceDirPath + File.separator + createFileName);
if (tmpFile.exists()) {
tmpFile.delete();
}
tmpFile.createNewFile();
return tmpFile;
}
/**
* files,
* @param files
* @param zipTmpFile
*/
public static void zipFile(List<File> files, File zipTmpFile) throws IOException {
// 创建文件输出流
FileOutputStream fous = new FileOutputStream(zipTmpFile);
ZipOutputStream zipOutputStream = new ZipOutputStream(fous);
int size = files.size();
for (int i = 0; i < size; i++) {
File file = files.get(i);
zipFile(file, zipOutputStream);
}
zipOutputStream.close();
fous.close();
}
/**
*
* @param inputFile
* @param ouputStream
*/
private static void zipFile(File inputFile, ZipOutputStream ouputStream) {
try {
if (inputFile.exists()) {
if (inputFile.isFile()) {
FileInputStream IN = new FileInputStream(inputFile);
BufferedInputStream bins = new BufferedInputStream(IN, 512);
ZipEntry entry = new ZipEntry(inputFile.getName());
ouputStream.putNextEntry(entry);
int nNumber;
byte[] buffer = new byte[512];
while ((nNumber = bins.read(buffer)) != -1) {
ouputStream.write(buffer, 0, nNumber);
}
bins.close();
IN.close();
} else {
try {
File[] files = inputFile.listFiles();
for (int i = 0; i < files.length; i++) {
zipFile(files[i], ouputStream);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

@ -0,0 +1,29 @@
package com.imitate.common.util;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/**
* http
* @author
*/
public class HttpContextUtils {
public static HttpServletRequest getHttpServletRequest() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
}
public static String getDomain(){
HttpServletRequest request = getHttpServletRequest();
StringBuffer url = request.getRequestURL();
return url.delete(url.length() - request.getRequestURI().length(), url.length()).toString();
}
public static String getOrigin(){
HttpServletRequest request = getHttpServletRequest();
return request.getHeader("Origin");
}
}

@ -0,0 +1,50 @@
package com.imitate.common.util;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
/**
* IP
* @author
*/
public class IpUtil {
private static Logger logger = LoggerFactory.getLogger(IpUtil.class);
private static final String UNKNOWN = "unknown";
/**
* IP
*
* 使Nginx request.getRemoteAddr()IP
* 使X-Forwarded-ForIPX-Forwarded-ForunknownIPIP
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = null;
try {
ip = request.getHeader("x-forwarded-for");
if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
} catch (Exception e) {
logger.error("IPUtils ERROR ", e);
}
return ip;
}
}

@ -0,0 +1,635 @@
package com.imitate.common.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Response;
import redis.clients.jedis.Transaction;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Created by zzx on 17/10/24.
*/
public final class JedisUtil {
private static final Logger log = LoggerFactory.getLogger(JedisUtil.class);
/**
* key
*/
public static Set<String> keys(String pattern) {
Jedis jedis = null;
Set<String> set = null;
try {
jedis = RedisPool.getJedis();
set = jedis.keys(pattern);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return set;
}
/**
* zset
*/
public static int zlen(String key) {
Jedis jedis = null;
int len = 0;
try {
jedis = RedisPool.getJedis();
len = jedis.zcard(key).intValue();
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return len;
}
/**
* zset
*/
public static double zrank(String key, String value) {
Jedis jedis = null;
double rank = Double.MIN_VALUE;
try {
jedis = RedisPool.getJedis();
if (jedis.zcard(key) == 0) {
return rank;
}
rank = jedis.zrank(key, value);
} catch (Exception e) {
rank = Double.MAX_VALUE;
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return rank;
}
/**
* zsetzsetnull
*/
public static String zpop(String key) {
Jedis jedis = null;
String element = null;
try {
jedis = RedisPool.getJedis();
if (jedis.zcard(key) != 0) {
element = jedis.zrange(key, 0, 0).iterator().next();
jedis.zrem(key, element);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return element;
}
/**
* zsetzsetzadd(key, 1, value)
*/
public static void zpush(String key, String value) {
Jedis jedis = null;
try {
jedis = RedisPool.getJedis();
if (jedis.zcard(key) == 0) {
jedis.zadd(key, 1, value);
} else {
String lastElement = jedis.zrange(key, -1, -1).iterator().next();
double lastScore = jedis.zscore(key, lastElement);
jedis.zadd(key, lastScore + 1, value);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
}
/**
* zsetscore1
*
* zsetzadd(key, 1, value)
*/
public static void zup(String key, String value) {
Jedis jedis = null;
try {
jedis = RedisPool.getJedis();
jedis.zincrby(key, 1, value);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
}
/**
* zsetscore1
*
* 1
*/
public static void zdown(String key, String value) {
Jedis jedis = null;
try {
jedis = RedisPool.getJedis();
jedis.zincrby(key, -1, value);
if (jedis.zscore(key, value) < 1) {
jedis.zrem(key, value);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
}
/**
* keyvaluefalse
*/
public static boolean zhas(String key, String value) {
Jedis jedis = null;
boolean has = true;
try {
jedis = RedisPool.getJedis();
has = jedis.zscore(key, value) != null;
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return has;
}
/**
* hashset
*/
public static void hset(String key, String field, String value) {
Jedis jedis = null;
try {
jedis = RedisPool.getJedis();
jedis.hset(key, field, value);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
}
/**
* set
*/
public static void psetex(String key, String value, Long expireTime) {
Jedis jedis = null;
try {
jedis = RedisPool.getJedis();
jedis.psetex(key, expireTime, value);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
}
/**
* key
* @param key
* @param value
*/
public static void setnx(String key,String value){
Jedis jedis = null;
try {
jedis = RedisPool.getJedis();
jedis.setnx(key, value);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
}
public static void lock(String key, String value, int second){
Jedis jedis = RedisPool.getJedis();
try {
doLock(key,value,second,jedis);
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
RedisPool.returnResource(jedis);
}
}
private static void doLock(String key,String value, long second, Jedis jedis) throws InterruptedException {
if(jedis.get(key) == null) {
String result = jedis.set(key, value, "NX", "EX", second);
if ("OK".equals(result)) {
} else {
Thread.sleep(50);
doLock(key, value, second, jedis);
}
}else{
Thread.sleep(50);
doLock(key, value, second, jedis);
}
}
public static boolean unlock(String key, String value){
Jedis jedis = null;
try {
jedis = RedisPool.getJedis();
String result = jedis.get(key);
if(value.equals(result)){
jedis.del(key);
return true;
}
return false;
} catch (Exception e) {
log.error(e.getMessage(), e);
return false;
} finally {
RedisPool.returnResource(jedis);
}
}
/**
* key
*/
public static boolean exists(String key) {
Jedis jedis = null;
Boolean exists = Boolean.FALSE;
try {
jedis = RedisPool.getJedis();
exists = jedis.exists(key);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return exists;
}
/**
* hashfield
*/
public static String hget(String key, String field) {
Jedis jedis = null;
String value = null;
try {
jedis = RedisPool.getJedis();
value = jedis.hget(key, field);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return value;
}
/**
* hash
*/
public static Map<String, String> hgetAll(String key) {
Jedis jedis = null;
Map<String, String> value = null;
try {
jedis = RedisPool.getJedis();
value = jedis.hgetAll(key);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return value;
}
/**
* hashfield
*/
public static void hdel(String key, String field) {
Jedis jedis = null;
try {
jedis = RedisPool.getJedis();
jedis.hdel(key, field);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
}
/**
* list,list
* @param key
* @return
*/
public static Long llen(String key) {
Jedis jedis = null;
Long value=0L;
try {
jedis = RedisPool.getJedis();
value=jedis.llen(key);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return value;
}
/**
* list
* index0
* index (out of range) nil
* @param key
* @param index
* @return
*/
public static String lindex(String key,int index){
Jedis jedis = RedisPool.getJedis();
String result = jedis.lindex(key,index);
RedisPool.returnResource(jedis);
return result;
}
/**
* List
* ltrim
* startend0list
* @param key
* @return
*/
public static String clearList(String key){
Jedis jedis = RedisPool.getJedis();
String result = jedis.ltrim(key,0,0);
jedis.lpop(key);
RedisPool.returnResource(jedis);
return result;
}
/**
* list,list
* @param timeout blpopnull
* @param key
* @return
*/
public static String blpop(int timeout,String key) {
Jedis jedis = null;
List<String> value=null;
try {
jedis = RedisPool.getJedis();
value=jedis.blpop(timeout,key);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return value==null? null:value.get(0);
}
/**
* list,list
* @param key
* @param value
* @return
*/
public static Long rpush(String key,String value) {
Jedis jedis = null;
Long success=0L;
try {
jedis = RedisPool.getJedis();
success=jedis.rpush(key,value);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return success;
}
/**
* list,list
* @param key
* @param count
* @param value
* @return
*/
public static Long lrem(String key,Long count,String value) {
Jedis jedis = null;
Long success=0L;
try {
jedis = RedisPool.getJedis();
success=jedis.lrem(key,count,value);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return success;
}
/**
* set
*/
public static void sadd(String key, String val) {
Jedis jedis = null;
try {
jedis = RedisPool.getJedis();
jedis.sadd(key, val);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
}
/**
* set
*/
public static Set<String> smembers(String key) {
Jedis jedis = null;
try {
jedis = RedisPool.getJedis();
return jedis.smembers(key);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return new HashSet<>(2);
}
/**
* set
*/
public static void srem(String key, String val) {
Jedis jedis = null;
try {
jedis = RedisPool.getJedis();
jedis.srem(key, val);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
}
/**
* String: set
*/
public static void set(String key, String value) {
Jedis jedis = null;
try {
jedis = RedisPool.getJedis();
jedis.set(key, value);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
}
/**
* String: set
*/
public static void set(String key, String value,long second) {
Jedis jedis = null;
try {
jedis = RedisPool.getJedis();
jedis.set(key,value,"nx", "ex", second);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
}
/**
* String: get
*/
public static String get(String key) {
Jedis jedis = null;
String value = null;
try {
jedis = RedisPool.getJedis();
value = jedis.get(key);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return value;
}
/**
* String: delete
*/
public static void del(String key) {
Jedis jedis = null;
try {
jedis = RedisPool.getJedis();
jedis.del(key);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
}
/**
*
* @param key
* @param increment
* @return
*/
public static Long incrBy(String key, long increment) {
Jedis jedis = null;
Long value = null;
try {
jedis = RedisPool.getJedis();
value = jedis.incrBy(key, increment);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return value;
}
/**
* key
* @param key
* @param increment
* @return
*/
public static Long expire(String key, int increment) {
Jedis jedis = null;
Long value = null;
try {
jedis = RedisPool.getJedis();
value = jedis.expire(key, increment);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return value;
}
/**
* -1 key -2
* @param key
* @return
*/
public static Long ttl(String key) {
Jedis jedis = null;
Long value = null;
try {
jedis = RedisPool.getJedis();
value = jedis.ttl(key);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
RedisPool.returnResource(jedis);
}
return value;
}
public static long incrByExpire(String key, long increment, int seconds) {
Jedis jedis = null;
Transaction multi = null;
Response<Long> value = null;
try {
jedis = RedisPool.getJedis();
multi = jedis.multi();
value = multi.incrBy(key, increment);
multi.expire(key, seconds);
multi.exec();
} catch (Exception e) {
log.error(e.getMessage(), e);
if (multi != null) {
multi.discard();
}
} finally {
RedisPool.returnResource(jedis);
}
return value == null ? 0 : value.get();
}
}

@ -0,0 +1,49 @@
/*******************************************************************************
case_consumer * Copyright (c) 2005, 2014 springside.github.io
*
* Licensed under the Apache License, Version 2.0 (the "License");
*******************************************************************************/
package com.imitate.common.util;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
/**
*
* @author mumu
*
*/
public final class JsonUtils {
private static ObjectMapper mapper = new ObjectMapper();
public static String toJson(Object object) {
try {
return mapper.writeValueAsString(object);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static <T> T toBean(String content, Class<T> clazz) {
try {
return mapper.readValue(content, clazz);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static <T> T toBean(String content, TypeReference<T> valueTypeRef) {
try {
return mapper.readValue(content, valueTypeRef);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}

@ -0,0 +1,51 @@
package com.imitate.common.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.security.MessageDigest;
/**
* MD5
*/
public final class MD5Util {
private static final Logger log = LoggerFactory.getLogger(MD5Util.class);
/**
* md5
*
* @param input
* @return
*/
public static String toMd5(String input) {
try {
MessageDigest md5 = MessageDigest.getInstance("md5");
md5.update(input.getBytes());
return byteToString(md5.digest());
} catch (Exception e) {
log.error("计算container信息md5出错", e);
}
return null;
}
/**
*
*
* @param byteValue
* @return
*/
private static String byteToString(byte[] byteValue) {
StringBuilder sb = new StringBuilder();
int len = byteValue.length;
for (int i = 0; i < len; i++) {
byte b = byteValue[i];
String hex = Integer.toHexString(0xFF & b);
if (hex.length() == 1) {
sb.append("0");
}
sb.append(hex);
}
return sb.subSequence(8, 24).toString();
}
}

@ -0,0 +1,313 @@
package com.imitate.common.util;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.type.TypeReference;
import com.imitate.common.constant.ApiResultCsts;
import com.imitate.common.bean.ApiResult;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.net.ssl.*;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
/**
* okhttp3
* @author
*/
public class OKHttp3Utils3 {
private static final Logger log = LoggerFactory.getLogger(OKHttp3Utils3.class);
public static int DEFAULT_TIME_OUT = 10;
/**
* http1.1 线 tcp
* thread1Wclose_wait6k
*/
private static final OkHttpClient OK_HTTP_CLIENT = new OkHttpClient.Builder()
.connectionPool(new ConnectionPool(50, 5, TimeUnit.MINUTES))
.connectTimeout(10, TimeUnit.SECONDS).readTimeout(10, TimeUnit.SECONDS).writeTimeout(10, TimeUnit.SECONDS).build();
private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
/**
* timeout
*/
public static ConcurrentHashMap<Integer, OkHttpClient> cacheClients = new ConcurrentHashMap();
public static OkHttpClient getHttpClient(int timeout) {
if (timeout == 0 || DEFAULT_TIME_OUT == timeout) {
return OK_HTTP_CLIENT;
} else {
OkHttpClient okHttpClient = cacheClients.get(timeout);
if (okHttpClient == null) {
return syncCreateClient(timeout);
}
return okHttpClient;
}
}
private static synchronized OkHttpClient syncCreateClient(int timeout) {
OkHttpClient okHttpClient;
okHttpClient = cacheClients.get(timeout);
if (okHttpClient != null) {
return okHttpClient;
}
okHttpClient = new OkHttpClient.Builder().connectTimeout(timeout, TimeUnit.SECONDS).readTimeout(timeout, TimeUnit.SECONDS).writeTimeout(timeout, TimeUnit.SECONDS).build();
cacheClients.put(timeout, okHttpClient);
return okHttpClient;
}
/**
* GET
*
* @param url
* @return Optional<String>
*/
public static String get(String url, int timeout){
try {
Request request = new Request.Builder().url(url)
.build();
return getHttpClient(timeout).newCall(request).execute().body().string();
}catch (Exception e){
}
return null;
}
/**
* get
*/
public static String get(String url, int timeout,String authorization) {
try {
Request request = new Request.Builder().header("Authorization",authorization).url(url)
.build();
return getUnsafeOkHttpClient().newCall(request).execute().body().string();
}catch (Exception e){
}
return null;
}
/**
* delete
*/
public static String delete(String url,Map<String,Object> param, int timeout, String authorization){
try {
FormBody.Builder builder = new FormBody.Builder();
for(String key : param.keySet()){
builder.add(key, (String) param.get(key));
}
RequestBody body = builder.build();
Request request = new Request.Builder().header("Authorization",authorization).url(url).delete(body)
.build();
return getUnsafeOkHttpClient().newCall(request).execute().body().string();
}catch (Exception e){
}
return null;
}
/**
* post
*/
public static String sendPost(String url, Map<String,Object> param,String authorization) {
long start = System.currentTimeMillis();
try {
FormBody.Builder builder = new FormBody.Builder();
for(String key : param.keySet()){
builder.add(key, (String) param.get(key));
}
RequestBody body = builder.build();
Request okRequest = new Request.Builder()
.header("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
.addHeader("Authorization",authorization)
.url(url).post(body).build();
return getUnsafeOkHttpClient().newCall(okRequest).execute().body().string();
} catch (Exception e) {
e.printStackTrace();
} finally {
log.info("request url {} ,total time {} ms", url, (System.currentTimeMillis() - start));
}
return null;
}
/**
* post form
* @param url
* @param param
* @return
*/
public static ApiResult<Object> sendPost(String url, Map<String,Object> param) {
long start = System.currentTimeMillis();
try {
FormBody.Builder builder = new FormBody.Builder();
for(String key : param.keySet()){
builder.add(key, (String) param.get(key));
}
RequestBody body = builder.build();
Request okRequest = new Request.Builder().header("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8").url(url).post(body).build();
return getApiResult(getHttpClient(0).newCall(okRequest).execute().body().string());
} catch (Exception e) {
} finally {
log.info("request url {} ,total time {} ms", url, (System.currentTimeMillis() - start));
}
return null;
}
public static String requestPost(String url, Map<String,Object> param) {
long start = System.currentTimeMillis();
try {
FormBody.Builder builder = new FormBody.Builder();
for(String key : param.keySet()){
builder.add(key, (String) param.get(key));
}
RequestBody body = builder.build();
Request okRequest = new Request.Builder().header("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8").url(url).post(body).build();
String s = getUnsafeOkHttpClient().newCall(okRequest).execute().body().string();
log.info("请求自动登陆接口返回值:{}",s);
return s;
} catch (Exception e) {
e.printStackTrace();
} finally {
log.info("request url {} ,total time {} ms", url, (System.currentTimeMillis() - start));
}
return null;
}
/**
* POSTjson
*
* @param url
* @param jsonObject
* @return Optional<String>
*/
public static void sendPost(String url, JSONObject jsonObject) {
long start = System.currentTimeMillis();
try {
RequestBody body = RequestBody.create(JSON, jsonObject.toJSONString());
Request request = new Request.Builder().header("Content-Type","application/json").url(url).post(body).build();
Call call = getHttpClient(15000).newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//异步请求失败之后的回调
log.error("异步发送请求失败,url:{},json:{}",url,jsonObject.toJSONString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//异步请求成功之后的回调
log.info("异步发送请求成功,url:{},json:{}",url,jsonObject.toJSONString());
response.close();
}
});
} catch (Exception e) {
throw e;
} finally {
log.info("request url {} ,total time {} ms", url, (System.currentTimeMillis() - start));
}
}
/**
* post json
* @param url
* @param jsonStr
* @return
*/
public static ApiResult<Object> sendPost(String url, String jsonStr) {
long start = System.currentTimeMillis();
try {
RequestBody body = RequestBody.create(JSON, jsonStr);
Request okRequest = new Request.Builder().header("Content-Type","application/json").url(url).post(body).build();
return getApiResult(getHttpClient(0).newCall(okRequest).execute().body().string());
} catch (Exception e) {
} finally {
log.info("request url {} ,total time {} ms", url, (System.currentTimeMillis() - start));
}
return null;
}
private static ApiResult<Object> getApiResult(String resultStr) {
ApiResult<Object> result = new ApiResult<>();
try {
log.debug("同步发送 POST 请求,返回结果: {}", resultStr);
result = JsonUtils.toBean(resultStr, new TypeReference<ApiResult<Object>>() {});
}catch (Exception e){
result.setCode(ApiResultCsts.CODE_FAIL);
log.error("同步发送 POST 请求,返回结果异常: {}", e);
}
return result;
}
/**
* okHttp3
* @return
*/
public static OkHttpClient getUnsafeOkHttpClient() {
try {
final TrustManager[] trustAllCerts =new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {
}
@Override
public java.security.cert.X509Certificate[]getAcceptedIssuers() {
return new java.security.cert.X509Certificate[]{};
}
}
};
final SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
OkHttpClient.Builder builder =new OkHttpClient.Builder();
builder.sslSocketFactory(sslSocketFactory,(X509TrustManager)trustAllCerts[0]);
builder.hostnameVerifier(new HostnameVerifier() {
// 可以将不需要忽略的域名放入数组,也可为空(忽略所有证书)
String[] arr =new String[]{};
@Override
public boolean verify(String hostname, SSLSession session) {
return !Arrays.asList(arr).contains(hostname);
}
});
return builder.build();
}catch (Exception e) {
throw new RuntimeException(e);
}
}
}

@ -0,0 +1,82 @@
package com.imitate.common.util;
import com.alibaba.fastjson.JSONArray;
import com.imitate.common.enums.ErrorCodeEnum;
import org.apache.http.HttpStatus;
import java.util.HashMap;
import java.util.Map;
/**
*
* @author yanchao
*/
public class R extends HashMap<String,Object> {
@Override
public Object get(Object key) {
return this.get(key);
}
public R(){
put("result","success");
put("errorCode", ErrorCodeEnum.SUCCESS.getValue());
put("errorMsg","");
put("data",new JSONArray());
}
public static R error(){
return error(HttpStatus.SC_INTERNAL_SERVER_ERROR,"未知异常,请联系管理员");
}
public static R error(String msg){
return error(HttpStatus.SC_INTERNAL_SERVER_ERROR,msg);
}
public static R error(int code, String msg){
R r = new R();
r.put("result","fail");
r.put("errorCode",code);
r.put("errorMsg",msg);
return r;
}
public static R error(String code, String msg){
R r = new R();
r.put("result","fail");
r.put("errorCode",code);
r.put("errorMsg",msg);
return r;
}
public static R ok(String msg){
R r = new R();
r.put("errorMsg",msg);
return r;
}
public static R ok(Map<String,Object> map){
R r = new R();
r.putAll(map);
return r;
}
public static R ok(){
return new R();
}
@Override
public R put(String key, Object value){
super.put(key,value);
return this;
}
public R setData(Object data) {
if(data == null || data == ""){
put("data",new JSONArray());
}else{
JSONArray rst = new JSONArray();
rst.add(data);
put("data",rst);
}
return this;
}
}

@ -0,0 +1,74 @@
package com.imitate.common.util;
import com.imitate.common.bean.BeanFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.env.Environment;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.exceptions.JedisException;
public final class RedisPool {
private static final Logger log = LoggerFactory.getLogger(RedisPool.class);
// 可用连接实例的最大数目默认为8
// 如果赋值为-1则表示不限制如果pool已经分配了maxActive个jedis实例则此时pool的状态为exhausted(耗尽)
private static Integer MAX_TOTAL = 1024;
// 控制一个pool最多有多少个状态为idle(空闲)的jedis实例默认值是8
private static Integer MAX_IDLE = 200;
// 等待可用连接的最大时间,单位是毫秒,默认值为-1表示永不超时。
// 如果超过等待时间则直接抛出JedisConnectionException
private static Integer MAX_WAIT_MILLIS = 10000;
private static Integer TIMEOUT = 10000;
// 在borrow(用)一个jedis实例时是否提前进行validate(验证)操作;
// 如果为true则得到的jedis实例均是可用的
private static Boolean TEST_ON_BORROW = true;
private static JedisPool jedisPool = null;
private synchronized static void initJedisPool() {
if (jedisPool == null) {
try {
Environment env = BeanFactory.getObejct(Environment.class);
String ADDR = env.getProperty("spring.redis.host");
int PORT = Integer.parseInt(env.getProperty("spring.redis.port"));
String AUTH = env.getProperty("spring.redis.password");
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(MAX_TOTAL);
config.setMaxIdle(MAX_IDLE);
config.setMaxWaitMillis(MAX_WAIT_MILLIS);
config.setTestOnBorrow(TEST_ON_BORROW);
log.info("开始reids初始化...");
jedisPool = "".equals(AUTH) ? new JedisPool(config, ADDR, PORT, TIMEOUT)
: new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH);
log.info("测试jedisPool 信息:{}", jedisPool.getResource().toString());
} catch (Exception e) {
throw new RuntimeException("jedisPool初始化错误", e);
}
}
}
/**
* Jedis
*
* @return
*/
public static Jedis getJedis() {
if (jedisPool == null) {
initJedisPool();
}
return jedisPool.getResource();
}
public static void returnResource(final Jedis jedis) {
if (jedis != null) {
// jedis.close()取代jedisPool.returnResource(jedis)方法将3.0版本开始
try {
jedis.close();
} catch (JedisException e) {
log.error(e.getMessage(), e);
}
}
}
}

@ -0,0 +1,12 @@
package com.imitate.common.util;
public interface ShellExeCallBack<T> {
/**
*
* @param line
* @param param
* @return CallBack
*/
boolean processLine(String line, T param);
}

@ -0,0 +1,179 @@
package com.imitate.common.util;
import com.imitate.common.bean.ShellResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/**
* @author guange
* @date 26/02/2017
*/
public final class ShellUtil {
private static final Logger logger = LoggerFactory.getLogger(ShellUtil.class);
/**
* shell
*/
public static String execute(String command) {
return executeAndGetExitStatus(command).getOut();
}
/**
* shell退 retryTimes
*/
public static ShellResult executeAndGetExitStatus(String command, int retryTimes) {
ShellResult result = new ShellResult();
for (int i = 0; i < retryTimes; i++) {
result = executeAndGetExitStatus(command);
if (result.getExitStatus() != 0) {
logger.info("执行shell错误, 再次执行 command: {}, result: {}, times: {}", command, result, i);
} else {
break;
}
}
return result;
}
/**
* 退
*/
public static ShellResult executeAndGetExitStatus(String command) {
ShellResult result = new ShellResult();
StringBuilder out = new StringBuilder();
Integer exitStatus = -1;
ProcessBuilder pb = new ProcessBuilder("/bin/sh", "-c", command);
pb.redirectErrorStream(true);
try {
Process process = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
out.append(line);
out.append(System.getProperty("line.separator"));
}
exitStatus = process.waitFor();
} catch (Exception e) {
logger.error("执行shell出错, command:{}", command, e);
}
result.setOut(out.toString().trim());
result.setExitStatus(exitStatus);
logger.debug("execute shell command: {}, out: {}, status: {}", command, out, exitStatus);
return result;
}
/**
* 退
*/
public static <T> ShellResult executeAndGetExitStatus(String command, ShellExeCallBack<T> callBack, T param) {
ShellResult result = new ShellResult();
StringBuilder out = new StringBuilder();
Integer exitStatus = -1;
ProcessBuilder pb = new ProcessBuilder("/bin/sh", "-c", command);
pb.redirectErrorStream(true);
try {
Process process = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
// 分布输出信息固定为一行,若需要处理多行信息从历史commit"评测分布输出多行处理版本提交"找回
boolean processed = callBack.processLine(line, param);
if (processed) {
continue;
}
logger.debug("executeAndGetExitStatus line: {}", line); // TODO 此处稳定后去除
out.append(line);
out.append(System.getProperty("line.separator"));
}
exitStatus = process.waitFor();
} catch (Exception e) {
logger.error("执行shell出错, command:{}", command, e);
}
result.setOut(out.toString().trim());
result.setExitStatus(exitStatus);
return result;
}
/**
* shell
* @param cmd
* @param callBack
* @param param
* @param <T>
* @return
*/
public static <T> ShellResult executeAndGetErrorStatus(String cmd,ShellExeCallBack<T> callBack, T param) {
ShellResult result = new ShellResult();
StringBuffer sb = new StringBuffer();
Integer exitStatus = -1;
try {
Process ps = Runtime.getRuntime().exec(cmd);
//获取执行正确结果
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
// 分布输出信息固定为一行,若需要处理多行信息从历史commit"评测分布输出多行处理版本提交"找回
boolean processed = callBack.processLine(line, param);
if (processed) {
continue;
}
sb.append(line).append(System.getProperty("line.separator"));
}
exitStatus = ps.waitFor();
}catch (Exception e) {
logger.error("执行shell出错, command:{}", cmd, e);
}
result.setOut(sb.toString().trim());
result.setExitStatus(exitStatus);
return result;
}
/**
* shell
* @param cmd
* @param <T>
* @return
*/
public static <T> ShellResult executeAndGetErrorStatus(String cmd) {
ShellResult result = new ShellResult();
StringBuffer sb = new StringBuffer();
Integer exitStatus = -1;
try {
Process ps = Runtime.getRuntime().exec(cmd);
//获取执行正确结果
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append(System.getProperty("line.separator"));
}
exitStatus = ps.waitFor();
}catch (Exception e) {
logger.error("执行shell出错, command:{}", cmd, e);
}
result.setOut(sb.toString().trim());
result.setExitStatus(exitStatus);
return result;
}
}

@ -0,0 +1,140 @@
package com.imitate.common.util;
import lombok.extern.slf4j.Slf4j;
import java.security.MessageDigest;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
/**
*
* @author yanchao
*/
@Slf4j
public class SignUtil {
private static final String hexDigits[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
private final static String randomBaseStr = "abcdefghijklmnopqrstuvwxyz0123456789";
// 自定义,签名私钥的key ,web端提供
private static String SIGN_KEY = "sk";
// 自定义,签名私钥的value需web 端提供
private static String SIGN_VALUE = "9NMU8ushmFu8SN1EKHOhvo9jmv1qp0";
private static String CHARSET_NAME = "UTF-8";
//签名key
private static final String SIGN = "sign";
public static String signMap(Map<String, String[]> map) {
StringBuilder param = new StringBuilder();
Iterator<Map.Entry<String, String[]>> entries = map.entrySet().iterator();
//TreeMap自动按字母排序
Map<String, String[]> params = new TreeMap<>();
while (entries.hasNext()) {
Map.Entry<String, String[]> entry = entries.next();
String key = entry.getKey();
String[] values = entry.getValue();
if (values == null) {
entries.remove();
}
if (SIGN.equals(key)) {
continue;
}
params.put(key, values);
}
Iterator<Map.Entry<String, String[]>> entries2 = params.entrySet().iterator();
int i = 0;
while (entries2.hasNext()) {
Map.Entry<String, String[]> entry = entries2.next();
String key = entry.getKey();
String[] values = entry.getValue();
if (values.length == 1) {
if(i == 0){
param.append(key).append("=").append(values[0]);
}else{
param.append("&").append(key).append("=").append(values[0]);
}
}
i++;
}
//添加私钥
param.append("&").append(SIGN_KEY).append("=").append(SIGN_VALUE);
log.debug("最终签名认证字符串:{}",param.toString());
return MD5Encode(param.toString(), CHARSET_NAME);
}
public static String signMap(String path, Map<String, String> map) {
StringBuilder param = new StringBuilder();
Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
//TreeMap自动按字母排序
Map<String, String> params = new TreeMap<>();
while (entries.hasNext()) {
Map.Entry<String, String> entry = entries.next();
String key = entry.getKey();
String values = String.valueOf(entry.getValue());
if (values == null) {
entries.remove();
}
if (SIGN.equals(key)) {
continue;
}
params.put(key, values);
}
Iterator<Map.Entry<String, String>> entries2 = params.entrySet().iterator();
int i = 0;
while (entries2.hasNext()) {
Map.Entry<String, String> entry = entries2.next();
String key = entry.getKey();
String values = entry.getValue();
if (values != null) {
if(i == 0){
param.append(key).append("=").append(values);
}else{
param.append("&").append(key).append("=").append(values);
}
}
i++;
}
//添加私钥
param.append("&").append(SIGN_KEY).append("=").append(SIGN_VALUE);
log.debug("最终签名认证字符串:{}",param.toString());
return MD5Encode(param.toString(), CHARSET_NAME);
}
private static String byteArrayToHexString(byte b[]) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++)
resultSb.append(byteToHexString(b[i]));
return resultSb.toString();
}
private static String byteToHexString(byte b) {
int n = b;
if (n < 0) {
n += 256;
}
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
public static String MD5Encode(String origin, String charsetname) {
String resultString = null;
try {
resultString = new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
if (charsetname == null || "".equals(charsetname)) {
resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
} else {
resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
}
} catch (Exception exception) {
}
assert resultString != null;
return resultString.toUpperCase();
}
}

@ -0,0 +1,109 @@
package com.imitate.common.util;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.io.IOUtils;
import org.springframework.http.MediaType;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
/**
* @author jshixiong
*/
public class SimpleFileUtils {
public static MultipartFile getMultipartFile(File file) {
FileItem item = new DiskFileItemFactory().createItem("file"
, MediaType.MULTIPART_FORM_DATA_VALUE
, true
, file.getName());
try (InputStream input = new FileInputStream(file);
OutputStream os = item.getOutputStream()) {
// 流转移
IOUtils.copy(input, os);
} catch (Exception e) {
throw new IllegalArgumentException("Invalid file: " + e, e);
}
return new CommonsMultipartFile(item);
}
/**
*
* @param file
* @return fileContent
*/
public static String fileToString(MultipartFile file){
String fileContent = "";
try {
InputStream inputStream = file.getInputStream();
fileContent = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
return fileContent;
}
/**
*
* @param file
* @return fileContent
*/
public static String fileToString(File file){
String fileContent = "";
try {
InputStream inputStream = new FileInputStream(file);
fileContent = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
return fileContent;
}
/**
*
* @param response HttpServletResponse
* @param context
* @param fileName
*/
public static void stringToFileExport(HttpServletResponse response, String context, String fileName){
response.setContentType("text/plain");
try {
fileName = URLEncoder.encode(fileName, "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
response.setHeader("Content-Disposition","attachment; filename=" + fileName);
BufferedOutputStream buff = null;
StringBuffer write = new StringBuffer();
ServletOutputStream outSos = null;
try {
outSos = response.getOutputStream();
buff = new BufferedOutputStream(outSos);
//把内容写入文件
write.append(context);
buff.write(write.toString().getBytes(StandardCharsets.UTF_8));
buff.flush();
buff.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (buff!=null){
buff.close();
}
if (outSos!=null){
outSos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

@ -0,0 +1,49 @@
package com.imitate.common.util;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
/**
* @author yanchao
*/
public class SymmetricCryptoUtil {
/**
* 16
*/
private static final String ENCODE_KEY = "1234567812345678";
private static final String IV_KEY = "0000000000000000";
public static String encryptFromString(String data, Mode mode, Padding padding) {
AES aes;
if (Mode.CBC == mode) {
aes = new AES(mode, padding,
new SecretKeySpec(ENCODE_KEY.getBytes(), "AES"),
new IvParameterSpec(IV_KEY.getBytes()));
} else {
aes = new AES(mode, padding,
new SecretKeySpec(ENCODE_KEY.getBytes(), "AES"));
}
return aes.encryptBase64(data, StandardCharsets.UTF_8);
}
public static String decryptFromString(String data, Mode mode, Padding padding) {
AES aes;
if (Mode.CBC == mode) {
aes = new AES(mode, padding,
new SecretKeySpec(ENCODE_KEY.getBytes(), "AES"),
new IvParameterSpec(IV_KEY.getBytes()));
} else {
aes = new AES(mode, padding,
new SecretKeySpec(ENCODE_KEY.getBytes(), "AES"));
}
byte[] decryptDataBase64 = aes.decrypt(data);
return new String(decryptDataBase64, StandardCharsets.UTF_8);
}
}

@ -0,0 +1,166 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.5.6" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.6" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.14.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.14.1" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.32" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.28" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.5.6" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.5.6" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.5.6" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.5.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.4.7" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:2.4.7" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.19.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.7.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.7.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.7.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.7.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.7.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.9.0" level="project" />
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.22" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.22" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:3.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.9.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.3.12" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.8.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.7" level="project" />
<orderEntry type="library" name="Maven: com.spring4all:swagger-spring-boot-starter:1.9.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.12.5" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:2.9.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.5.6" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.12.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.12.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.12.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.54" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.54" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.3.12" level="project" />
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:6.1.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.4.11" level="project" />
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.22" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.83" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.5" level="project" />
<orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.54" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.2.0.Final" level="project" />
<orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.2.Final" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:easyexcel:2.1.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
<orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" />
<orderEntry type="library" name="Maven: cglib:cglib:3.1" level="project" />
<orderEntry type="library" name="Maven: org.ow2.asm:asm:4.2" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.32" level="project" />
<orderEntry type="library" name="Maven: org.ehcache:ehcache:3.9.7" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.7.11" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.5.6" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-core:1.1.0" level="project" />
<orderEntry type="library" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-base:1.1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-weekend:1.1.4.2" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.0" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.0" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.27" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.10" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.10" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.10" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:1.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.2.10" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.1.8" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:1.2" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.7" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:4.9.3" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okio:okio:2.8.0" level="project" />
<orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.5.31" level="project" />
<orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.5.31" level="project" />
<orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
<orderEntry type="library" name="Maven: redis.clients:jedis:2.9.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.9.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.4.6" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.9.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
<orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
<orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.3" level="project" />
<orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
</component>
</module>

@ -0,0 +1,275 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.imitate</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>parent</name>
<description>parent</description>
<packaging>pom</packaging>
<properties>
<java.version>1.8</java.version>
<fastjson.version>1.2.83</fastjson.version>
<httpcore.version>4.4.5</httpcore.version>
<javax.validation.version>2.0.1.Final</javax.validation.version>
<!--通用Mapper与SpringBoot整合依赖-->
<mapper.version>2.1.0</mapper.version>
<!--com.github.pagehelper 基于AOP的分页插件 -->
<pagehelper.version>1.2.10</pagehelper.version>
<!--阿里druid连接池-->
<druid.version>1.1.10</druid.version>
<!--超级开发工具 hutool -->
<hutool.version>5.7.11</hutool.version>
<!-- EasyExcel -->
<esayexcel.version>2.1.6</esayexcel.version>
<commons-lang3-version>3.12.0</commons-lang3-version>
<gson.version>2.9.0</gson.version>
<commons-io.version>2.7</commons-io.version>
<commons-net.version>3.6</commons-net.version>
<commons-text.version>1.9</commons-text.version>
<kubernetes-client.version>5.11.2</kubernetes-client.version>
<jedis.version>2.9.0</jedis.version>
<swagger2.version>1.9.0.RELEASE</swagger2.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>${swagger2.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>${httpcore.version}</version>
</dependency>
<!-- 入参 参数校验工具 -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${javax.validation.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${esayexcel.version}</version>
</dependency>
<!-- hutool工具集 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
<scope>compile</scope>
</dependency>
<!--持久层框架通用mapper 即 tk.mybatis-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${mapper.version}</version>
<exclusions>
<!-- 排除掉springboot内置的org.mybatis -->
<exclusion>
<artifactId>mybatis-spring-boot-starter</artifactId>
<groupId>org.mybatis.spring.boot</groupId>
</exclusion>
<exclusion>
<artifactId>log4j-api</artifactId>
<groupId>org.apache.logging.log4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--druid依赖添加-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!--springboot 集成Mybatis所需jar配置 end -->
<!--底层基于AOP的pagehelper分页组件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3-version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.3</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.4.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.imitate.web.WebApplication</mainClass>
<classifier>execute</classifier>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<verbose>false</verbose>
<fork>true</fork>
<compilerVersion>1.8</compilerVersion>
<source>${java.version}</source>
<target>${java.version}</target>
<optimize>false</optimize>
<encoding>UTF8</encoding>
</configuration>
</plugin>
<!--跳过测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<!--将java包下这两种格式文件让maven在编译过程中携带过去 -->
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.py</include>
<include>**/*.sh</include>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<finalName>imitate-${project.version}</finalName>
</build>
</project>

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.imitate</groupId>
<artifactId>imitsys</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>imitsys</name>
<description>imitsys</description>
<packaging>pom</packaging>
<modules>
<module>parent</module>
<module>common</module>
<module>web</module>
</modules>
</project>

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>parent</artifactId>
<groupId>com.imitate</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>web</name>
<description>web</description>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.imitate</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

@ -0,0 +1,16 @@
package com.imitate.web;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;
import tk.mybatis.spring.annotation.MapperScan;
@MapperScan(basePackages = { "com.imitate.web.persistence.mapper" })
@ComponentScans(value = { @ComponentScan("com.imitate.common") })
@SpringBootApplication
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}

@ -0,0 +1,183 @@
package com.imitate.web.aspect;
import com.alibaba.fastjson.JSONObject;
import com.imitate.common.annotation.DoSysLog;
import com.imitate.common.util.HttpContextUtils;
import com.imitate.common.util.IpUtil;
import com.imitate.web.persistence.beans.SysLog;
import com.imitate.web.persistence.mapper.SysLogMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.stereotype.Component;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.Method;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
/**
* controller
*
* @author
*/
@Component
@Aspect
@Slf4j
public class ParamsOutAspect implements Ordered {
@Autowired
private SysLogMapper sysLogMapper;
@Pointcut("@annotation(com.imitate.common.annotation.DoSysLog)")
public void controllerLogPointCut() {
}
@Around("controllerLogPointCut()")
public Object doRecoveryActions(ProceedingJoinPoint joinPoint) throws Throwable {
DoSysLog annotation = AnnotationUtils.getAnnotation(
((MethodSignature) joinPoint.getSignature()).getMethod(),
DoSysLog.class);
//获取注解传递的参数
boolean value = annotation.isLog();
if (!value){
return joinPoint.proceed();
}
SysLog sysLog = new SysLog();
Instant startTime = Instant.now();
Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
RequestMapping methodMapping = method.getAnnotation(RequestMapping.class);
if (methodMapping != null) {
sysLog.setMethodPath(methodMapping.path()[0]);
if (methodMapping.method().length > 0) {
sysLog.setHttpType(methodMapping.method()[0].name());
} else {
sysLog.setHttpType("GET");
}
}
ApiOperation methodApiOperation = method.getAnnotation(ApiOperation.class);
if (methodApiOperation != null) {
sysLog.setOperation(methodApiOperation.value());
}
//请求的方法名
String className = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
sysLog.setMethod(className + "." + methodName + "()");
Class<?> clazz = Class.forName(className);
RequestMapping clazzReqMapping = clazz.getAnnotation(RequestMapping.class);
if (clazzReqMapping != null && clazzReqMapping.value().length > 0) {
sysLog.setClassPath(clazzReqMapping.value()[0]);
}
Api clazzApi = clazz.getAnnotation(Api.class);
if (clazzApi != null) {
sysLog.setModuleName(clazzApi.value());
}
String[] params = ((MethodSignature) joinPoint.getSignature()).getParameterNames();
Object[] args = joinPoint.getArgs();
//取入参
Map<String, Object> paramsMap = new HashMap<>();
if (params != null) {
for (int i = 0; i < params.length; i++) {
if ((!(args[i] instanceof BindingResult) &&!(args[i] instanceof HttpServletRequest) && !(args[i] instanceof HttpServletResponse)) && !(args[i] instanceof MultipartFile) && !(args[i] instanceof MultipartFile[])) {
paramsMap.put(params[i], args[i]);
}
}
}
sysLog.setParams(JSONObject.toJSONString(paramsMap));
Object proceed = joinPoint.proceed();
//记录耗时
int cost = Duration.between(startTime, Instant.now()).getNano() / 1000000;
sysLog.setTime(cost);
sysLog.setCreateTime(LocalDateTime.now());
sysLog.setUpdateTime(LocalDateTime.now());
//获取request
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
//设置IP地址
String ip = IpUtil.getIpAddr(request);
if ("0:0:0:0:0:0:0:1".equalsIgnoreCase(ip)) {
sysLog.setIp("localhost");
} else {
sysLog.setIp(ip);
}
//设置返回结果
sysLog.setResult(null==proceed?null:proceed.toString());
// String remoteHost = request.getRemoteHost();
// if (!"127.0.0.1".equals(remoteHost) && !"系统健康检测".equals(sysLog.getOperation())) {
// //异步发消息写redis
//
// }
//主日志数据存储
sysLogMapper.insertSelective(sysLog);
return proceed;
}
/**
* e.printStackTrace() String
* @param e
* Throwable
* @return e.printStackTrace()
*/
public static String getStackTraceInfo(Throwable e) {
StringWriter sw = null;
PrintWriter pw = null;
try {
sw = new StringWriter();
pw = new PrintWriter(sw);
e.printStackTrace(pw);//将出错的栈信息输出到printWriter中
pw.flush();
sw.flush();
return sw.toString();
} catch (Exception ex) {
return "printStackTrace()转换错误";
} finally {
if (sw != null) {
try {
sw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
if (pw != null) {
pw.close();
}
}
}
@Override
public int getOrder() {
return 1;
}
}

@ -0,0 +1,107 @@
package com.imitate.web.init;
import cn.hutool.core.util.XmlUtil;
import com.alibaba.excel.EasyExcel;
import com.imitate.common.util.SimpleFileUtils;
import com.imitate.web.persistence.beans.DeviceType;
import com.imitate.web.persistence.beans.Producer;
import com.imitate.web.persistence.mapper.DeviceTypeMapper;
import com.imitate.web.persistence.mapper.ProducerMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.annotation.PostConstruct;
import java.io.File;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
* @author jshixiong
*/
@Slf4j
@Component
public class Runner{
@Autowired
private DeviceTypeMapper deviceTypeMapper;
@Autowired
private ProducerMapper producerMapper;
@Value("${imitate.init.path}")
private String initPath;
@Value("${imitate.init.xlsx}")
private String initExcelName;
@Value("${imitate.init.xml}")
private String initXmlName;
@PostConstruct
public void init(){
log.info("-------init db from excel or xml--------");
File file = new File(initPath+ File.separator +initExcelName);
if (!file.exists()){
file = new File(initPath+ File.separator +initXmlName);
if (!file.exists()){
log.error("-------init db failed : no such file---"+file.getPath());
}else {
try {
String xmlData = SimpleFileUtils.fileToString(file);
Document document= XmlUtil.parseXml(xmlData);
//获得XML文档根节点
Element rootElement= XmlUtil.getRootElement(document);
//解析厂商数据
Element producerInfoElement = XmlUtil.getElement(rootElement, "producer-info");
List<Element> producerElements = XmlUtil.getElements(producerInfoElement, "producer");
List<Producer> producerList = new ArrayList<>();
for (Element producerElement : producerElements){
Producer producer = new Producer();
producer.setName(producerElement.getAttribute("name"));
producer.setAddress(producerElement.getAttribute("address"));
producer.setProducerNumber(producerElement.getAttribute("producerNumber"));
producer.setContacts1(producerElement.getAttribute("contacts1"));
producer.setTel1(producerElement.getAttribute("tel1"));
producer.setPhone1(producerElement.getAttribute("phone1"));
producer.setCreateTime(LocalDateTime.now());
producerList.add(producer);
}
producerMapper.insertList(producerList);
//解析设备类型数据
Element deviceTypeInfoElement = XmlUtil.getElement(rootElement, "device-type-info");
List<Element> deviceTypeElements = XmlUtil.getElements(deviceTypeInfoElement, "device-type");
List<DeviceType> deviceTypeList = new ArrayList<>();
for (Element deviceTypeElement : deviceTypeElements){
DeviceType deviceType = new DeviceType();
deviceType.setName(deviceTypeElement.getAttribute("name"));
deviceType.setTypeNumber(deviceTypeElement.getAttribute("typeNumber"));
deviceType.setPattern(deviceTypeElement.getAttribute("pattern"));
deviceType.setSecretLevel(deviceTypeElement.getAttribute("secretLevel"));
deviceType.setManagementLevel(deviceTypeElement.getAttribute("managementLevel"));
deviceType.setCreateTime(LocalDateTime.now());
deviceTypeList.add(deviceType);
}
deviceTypeMapper.insertList(deviceTypeList);
}catch (Exception e){
log.error("-------init db failed : init error-------");
}
}
}else {
try{
List<DeviceType> deviceTypeList = EasyExcel.read(file, DeviceType.class,null)
.sheet(5).headRowNumber(2).doReadSync();
List<Producer> producerList = EasyExcel.read(file, Producer.class,null)
.sheet(4).headRowNumber(2).doReadSync();
deviceTypeMapper.insertList(deviceTypeList);
producerMapper.insertList(producerList);
}catch (Exception e){
log.error("-------init db failed : init error-------");
}
}
}
}

@ -0,0 +1,190 @@
package com.imitate.web.module.simulation.controller;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.imitate.common.annotation.DoSysLog;
import com.imitate.common.enums.ErrorCodeEnum;
import com.imitate.common.util.BasicController;
import com.imitate.common.util.SimpleFileUtils;
import com.imitate.common.util.R;
import com.imitate.web.module.simulation.service.DataTerminalService;
import com.imitate.web.params.DataTerminalParam;
import com.imitate.web.persistence.beans.DataTerminal;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-28
*/
@Slf4j
@Api(value = "数据中心控制器", hidden = true)
@RestController
@RequestMapping("/dataCenter")
public class DataCenterController extends BasicController {
@Autowired
private DataTerminalService dataTerminalService;
/**
* ID
* @param dataTerminalParam DataTerminal
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "注册或修改数据中心服务器", httpMethod = "POST")
@RequestMapping(path = "/editOrAdd",method = RequestMethod.POST)
public R editOrAddDataCenter(@RequestBody @Valid DataTerminalParam dataTerminalParam, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return actionResultWithBindingResult(ErrorCodeEnum.BIND_EXCEPTION,bindingResult);
}
log.info("[start]注册或修改数据中心服务器,param:{}",dataTerminalParam);
dataTerminalParam.setType("1");
if (dataTerminalService.updateOrAdd(dataTerminalParam.getDataTerminal())>0){
log.info("[end]注册或修改数据中心服务器");
return R.ok().setData(dataTerminalParam.getDataTerminal());
}else {
log.info("[end]注册或修改数据中心服务器,失败");
return R.error();
}
}
/**
* ID
* @param id ID
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "删除数据中心服务器", httpMethod = "POST")
@RequestMapping(path = "/delete/{id}",method = RequestMethod.POST)
public R delete(@PathVariable("id") Long id){
log.info("[start]删除数据中心服务器,id:{}",id);
DataTerminal dataTerminal = dataTerminalService.getById(id);
if (dataTerminalService.deleteById(id)>0){
log.info("[end]删除数据中心服务器,return:{}",dataTerminal);
return R.ok().setData(dataTerminal);
}else {
log.info("[end]删除数据中心服务器,失败");
return R.error();
}
}
/**
* id
* @param id ID
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "查看数据中心服务器", httpMethod = "GET")
@RequestMapping(path = "/getById/{id}",method = RequestMethod.GET)
public R getById(@PathVariable(name = "id") Long id){
log.info("[start]查看数据中心服务器,id:{}",id);
DataTerminal byId = dataTerminalService.getById(id);
log.info("[end]查看数据中心服务器return:{}",byId);
return R.ok().setData(byId);
}
/**
*
* @param param
* @return R
*/
@ApiOperation(value = "分页查看数据中心服务器", httpMethod = "GET")
@RequestMapping(path = "/page",method = RequestMethod.GET)
public R pageDevice(DataTerminalParam param){
log.info("[start]分页查看数据中心服务器,param:{}",param);
param.setType("1");
PageInfo<DataTerminal> page = dataTerminalService.page(param);
log.info("[end]分页查看数据中心服务器return:{}",page);
return R.ok().setData(page);
}
/**
*
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "数据中心服务器导出初装资源", httpMethod = "GET")
@RequestMapping(path = "/resourceExport/{id}",method = RequestMethod.GET)
public void resourceExport(@PathVariable("id") Long id,HttpServletResponse response){
log.info("[start]数据中心服务器导出初装资源,id:{}",id);
String resourceJson = dataTerminalService.resourceExport(id);
SimpleFileUtils.stringToFileExport(response,resourceJson,"数据中心服务器初装资源.txt");
log.info("[end]数据中心服务器导出初装资源内容return:{}",resourceJson);
}
/**
*
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "开始数据中心服务器开通", httpMethod = "POST")
@RequestMapping(path = "/startOpen",method = RequestMethod.POST)
public R startOpen(){
log.info("[start]开始数据中心服务器开通");
log.info("[end]开始数据中心服务器开通");
return R.ok();
}
/**
* 宿
* @param hostFlag 宿
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "数据中心服务器设置宿主机标识", httpMethod = "POST")
@RequestMapping(path = "/setHostFlag",method = RequestMethod.POST)
public R setHostFlag(String hostFlag){
log.info("[start]数据中心服务器设置宿主机标识");
log.info("[end]数据中心服务器设置宿主机标识");
return R.ok().setData(hostFlag);
}
/**
*
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "数据中心服务器注入初装资源", httpMethod = "POST")
@RequestMapping(path = "/resourceImport",method = RequestMethod.POST)
public R resourceImport(@RequestParam("file") MultipartFile file){
log.info("[start]数据中心服务器注入初装资源");
String fileContent = SimpleFileUtils.fileToString(file);
DataTerminal dataTerminal;
try {
dataTerminal = JSONObject.parseObject(fileContent, DataTerminal.class);
}catch (Exception e){
log.info("[end]数据中心服务器注入初装资源,fileContent:{}",fileContent);
return R.error("文件内容错误");
}
if (!"1".equals(dataTerminal.getType()) || null == dataTerminal.getId() || null == dataTerminalService.getById(dataTerminal.getId())){
log.info("[end]数据中心服务器注入初装资源,fileContent:{}",fileContent);
return R.error("文件内容错误,error type or id");
}
dataTerminal = dataTerminalService.openTerminal(dataTerminal);
log.info("[end]数据中心服务器注入初装资源,return:{}",dataTerminal);
return R.ok().setData(dataTerminal);
}
@ApiOperation(value = "数据中心服务器查询是否开通", httpMethod = "GET")
@RequestMapping(path = "/isOpen",method = RequestMethod.GET)
public R isDataCenterOpen(){
log.info("[start]数据中心服务器查询是否开通");
Boolean openFlag = dataTerminalService.isTerminalOpen("1");
log.info("[end]数据中心服务器查询是否开通,return:{}",openFlag);
return R.ok().setData(openFlag);
}
}

@ -0,0 +1,266 @@
package com.imitate.web.module.simulation.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.imitate.common.annotation.DoSysLog;
import com.imitate.common.enums.ErrorCodeEnum;
import com.imitate.common.util.BasicController;
import com.imitate.common.util.R;
import com.imitate.web.params.DeviceParam;
import com.imitate.web.persistence.beans.Device;
import com.imitate.web.module.simulation.service.DeviceService;
import com.imitate.web.params.DeviceListParam;
import com.imitate.web.vo.DeviceByTypeVO;
import com.imitate.web.vo.DeviceVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-14
*/
@Slf4j
@Api(value = "模拟设备控制器", hidden = true)
@RestController
@RequestMapping("/device")
public class DeviceController extends BasicController {
@Autowired
private DeviceService deviceService;
/**
* ID
* @param deviceParam Device
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "新增或修改设备", httpMethod = "POST")
@RequestMapping(path = "/editOrAdd",method = RequestMethod.POST)
public R editOrAddDevice(@RequestBody @Valid DeviceParam deviceParam, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return actionResultWithBindingResult(ErrorCodeEnum.BIND_EXCEPTION,bindingResult);
}
log.info("[start]新增或修改设备,param:{}",deviceParam);
int i = deviceService.updateOrAddDevice(deviceParam.getDevice());
if (i == -1){
log.info("[end]新增或修改设备,失败,设备编号重复");
return R.error("编号重复");
}else if (i>0){
log.info("[end]新增或修改设备");
return R.ok().setData(deviceParam.getDevice());
}else {
log.info("[end]新增或修改设备,失败");
return R.error();
}
}
/**
* ID
* @param id ID
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "删除设备", httpMethod = "POST")
@RequestMapping(path = "/delete/{id}",method = RequestMethod.POST)
public R deleteDevice(@PathVariable("id") Long id){
log.info("[start]删除设备id:{}",id);
Device device = deviceService.getById(id);
if (deviceService.deleteDeviceById(id)>0){
log.info("[end]删除设备return:{}",device);
return R.ok().setData(device);
}else {
log.info("[end]删除设备,失败");
return R.error();
}
}
/**
*
* @param deviceList
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "批量删除设备", httpMethod = "POST")
@RequestMapping(path = "/deleteByList",method = RequestMethod.POST)
public R deleteByList(@RequestBody List<Device> deviceList){
log.info("[start]批量删除设备deviceList:{}",deviceList);
if (deviceService.deleteByList(deviceList)>0){
log.info("[end]批量删除设备");
return R.ok();
}else {
log.info("[end]批量删除设备,失败");
return R.error();
}
}
/**
* id
* @param id ID
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "查看设备", httpMethod = "GET")
@RequestMapping(path = "/getById/{id}",method = RequestMethod.GET)
public R getById(@PathVariable("id") Long id){
log.info("[start]查看设备id:{}",id);
Device byId = deviceService.getById(id);
log.info("[end]查看设备return:{}",byId);
return R.ok().setData(byId);
}
/**
*
* @return R
*/
@ApiOperation(value = "分类型查看设备列表", httpMethod = "GET")
@RequestMapping(path = "/listByType",method = RequestMethod.GET)
public R listDeviceByType(){
log.info("[start]分类型查看设备列表");
List<DeviceByTypeVO> list = deviceService.listDeviceByType();
log.info("[end]分类型查看设备列表return:{}",list);
return R.ok().setData(list);
}
/**
*
* @param param
* @return R
*/
@ApiOperation(value = "查看设备列表", httpMethod = "GET")
@RequestMapping(path = "/list",method = RequestMethod.GET)
public R listDevice(DeviceListParam param){
log.info("[start]查看设备列表");
List<Device> list = deviceService.list(param);
log.info("[end]查看设备列表return:{}",list);
return R.ok().setData(list);
}
/**
*
* @param param
* @return R
*/
@ApiOperation(value = "分页查看设备", httpMethod = "GET")
@RequestMapping(path = "/page",method = RequestMethod.GET)
public R pageDevice(DeviceListParam param){
log.info("[start]分页查看设备param:{}",param);
PageInfo<Device> page = deviceService.pageDevice(param);
log.info("[end]分页查看设备return:{}",page);
return R.ok().setData(page);
}
/**
*
* @param param DeviceListParam
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "设备初装", httpMethod = "POST")
@RequestMapping(path = "/configureDevice",method = RequestMethod.POST)
public R configureDevice(@RequestBody DeviceListParam param){
log.info("[start]设备初装param:{}",param);
if (deviceService.configureDevice(param)>0){
log.info("[end]设备初装");
return R.ok().setData(param.getDeviceList());
}else {
log.info("[end]设备初装,失败");
return R.error();
}
}
/**
* excel
* @param file excel
* @return R
* @throws IOException IOException
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "批量导入设备", httpMethod = "POST")
@RequestMapping(path = "/import",method = RequestMethod.POST)
public R importList(@RequestParam("file") MultipartFile file) throws IOException {
log.info("[start]批量导入设备");
List<DeviceVO> list = EasyExcel.read(file.getInputStream(), DeviceVO.class,null)
.sheet(0).doReadSync();
List<Device> deviceList = deviceService.addExcelList(list);
log.info("[end]批量导入设备");
return R.ok().setData(deviceList);
}
/**
*
* @param deviceParamList
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "批量新增设备", httpMethod = "POST")
@RequestMapping(path = "/addList",method = RequestMethod.POST)
public R importList(@RequestBody @Valid List<DeviceParam> deviceParamList, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return actionResultWithBindingResult(ErrorCodeEnum.BIND_EXCEPTION,bindingResult);
}
log.info("[start]批量新增设备");
int lc = deviceService.addList(deviceParamList);
if (lc == -1){
log.info("[end]批量新增设备,失败,有重复设备编号");
return R.error("有重复设备编号!");
}
if (lc>0){
log.info("[end]批量新增设备");
return R.ok();
}else {
log.info("[end]批量新增设备,失败");
return R.error();
}
}
/**
*
* @param response response
* @throws Exception Exception
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "导出设备新增模板", httpMethod = "GET")
@RequestMapping(path = "/model",method = RequestMethod.GET)
public void outModel(HttpServletResponse response) throws Exception {
log.info("[start]导出设备新增模板");
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("model", "UTF-8");
response.setHeader("Content-Disposition","attachment;filename="+fileName+".xlsx");
EasyExcel.write(response.getOutputStream(), DeviceVO.class).head(DeviceVO.class)
.sheet("模板").doWrite(new ArrayList<DeviceVO>());
log.info("[end]导出设备新增模板");
}
/**
* 仿
* @param u3dType 123
*/
@ApiOperation(value = "获取仿真图默认设备", httpMethod = "GET")
@RequestMapping(path = "/u3dDevice/{u3dType}",method = RequestMethod.GET)
public R u3dDevice(@PathVariable("u3dType") Integer u3dType){
log.info("[start]获取仿真图默认设备,u3dType={}",u3dType);
JSONObject jsonObject = deviceService.u3dDevice(u3dType);
log.info("[end]获取仿真图默认设备,return:{}",jsonObject);
return R.ok().setData(jsonObject);
}
}

@ -0,0 +1,106 @@
package com.imitate.web.module.simulation.controller;
import com.github.pagehelper.PageInfo;
import com.imitate.common.annotation.DoSysLog;
import com.imitate.common.enums.ErrorCodeEnum;
import com.imitate.common.util.BasicController;
import com.imitate.common.util.R;
import com.imitate.web.module.simulation.service.DeviceDistributionService;
import com.imitate.web.params.DistributionListParam;
import com.imitate.web.params.DistributionParam;
import com.imitate.web.persistence.beans.DeviceDistribution;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* <p>
* /
* </p>
*
* @author jshixiong
* @since 2022-08-02
*/
@Slf4j
@Api(value = "设备配发/调拨单控制器", hidden = true)
@RestController
@RequestMapping("/deviceDistribution")
public class DeviceDistributionController extends BasicController {
@Autowired
private DeviceDistributionService distributionService;
/**
* /
* @param param DistributionListParam
* @return R
*/
@ApiOperation(value = "分页查看配发/调拨单", httpMethod = "GET")
@RequestMapping(path = "/page",method = RequestMethod.GET)
public R page(DistributionListParam param){
log.info("[start]分页查看配发/调拨单param:{}",param);
PageInfo<DeviceDistribution> page = distributionService.page(param);
log.info("[end]分页查看配发/调拨单return:{}",page);
return R.ok().setData(page);
}
/**
* /
* @param param DistributionParam
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "新增或修改配发/调拨单", httpMethod = "POST")
@RequestMapping(path = "/editOrAdd",method = RequestMethod.POST)
public R editOrAdd(@RequestBody @Valid DistributionParam param, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return actionResultWithBindingResult(ErrorCodeEnum.BIND_EXCEPTION,bindingResult);
}
log.info("[start]新增或修改配发/调拨单param:{}",param);
int lc = distributionService.editOrAdd(param);
if (lc>0){
log.info("[end]新增或修改配发/调拨单");
return R.ok().setData(param.getDeviceDistribution());
}else {
log.info("[end]新增或修改配发/调拨单,失败");
return R.error();
}
}
/**
* /
* @param id ID
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "查看配发/调拨单详情", httpMethod = "GET")
@RequestMapping(path = "/getById/{id}",method = RequestMethod.GET)
public R getById(@PathVariable("id") Long id){
log.info("[start]查看配发/调拨单详情id:{}",id);
DeviceDistribution byId = distributionService.getById(id);
log.info("[end]查看配发/调拨单详情return:{}",byId);
return R.ok().setData(byId);
}
/**
* /
* @param id ID
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "删除配发/调拨单", httpMethod = "POST")
@RequestMapping(path = "/delete/{id}",method = RequestMethod.POST)
public R deleteById(@PathVariable("id") Long id){
log.info("[start]删除配发/调拨单id:{}",id);
DeviceDistribution distribution = distributionService.deleteById(id);
log.info("[end]删除配发/调拨单return:{}",distribution);
return R.ok().setData(distribution);
}
}

@ -0,0 +1,189 @@
package com.imitate.web.module.simulation.controller;
import com.alibaba.excel.EasyExcel;
import com.github.pagehelper.PageInfo;
import com.imitate.common.annotation.DoSysLog;
import com.imitate.common.enums.ErrorCodeEnum;
import com.imitate.common.util.BasicController;
import com.imitate.common.util.R;
import com.imitate.web.module.simulation.service.DeviceTypeService;
import com.imitate.web.params.DeviceTypeParam;
import com.imitate.web.persistence.beans.DeviceType;
import com.imitate.web.vo.DeviceTypeVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-25
*/
@Slf4j
@Api(value = "设备类型控制器", hidden = true)
@RestController
@RequestMapping("/deviceType")
public class DeviceTypeController extends BasicController {
@Autowired
private DeviceTypeService deviceTypeService;
/**
* id
* @param id ID
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "查看设备类型", httpMethod = "GET")
@RequestMapping(path = "/getById/{id}",method = RequestMethod.GET)
public R getById(@PathVariable("id") Long id){
log.info("[start]查看设备类型id:{}",id);
DeviceType byId = deviceTypeService.getById(id);
log.info("[end]查看设备类型return:{}",byId);
return R.ok().setData(byId);
}
/**
* ID
* @param id ID
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "删除设备类型", httpMethod = "POST")
@RequestMapping(path = "/delete/{id}",method = RequestMethod.POST)
public R deleteById(@PathVariable("id") Long id){
log.info("[start]删除设备类型id:{}",id);
DeviceType deviceType = deviceTypeService.getById(id);
if (deviceTypeService.deleteById(id)>0){
log.info("[end]删除设备类型return:{}",deviceType);
return R.ok().setData(deviceType);
}else {
log.info("[end]删除设备类型,失败");
return R.error();
}
}
@DoSysLog(isLog = true)
@ApiOperation(value = "批量删除设备类型", httpMethod = "POST")
@RequestMapping(path = "/deleteByList",method = RequestMethod.POST)
public R deleteByList(@RequestBody List<DeviceType> deviceTypeList){
log.info("[start]批量删除设备类型params:{}",deviceTypeList);
if (deviceTypeService.deleteByTypeList(deviceTypeList)>0){
log.info("[end]批量删除设备类型");
return R.ok();
}else {
log.info("[end]批量删除设备类型,失败");
return R.error();
}
}
/**
* ID
* @param deviceTypeParam deviceTypeParam
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "新增或修改设备类型", httpMethod = "POST")
@RequestMapping(path = "/editOrAdd",method = RequestMethod.POST)
public R updateOrAddType(@RequestBody @Valid DeviceTypeParam deviceTypeParam, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return actionResultWithBindingResult(ErrorCodeEnum.BIND_EXCEPTION,bindingResult);
}
log.info("[start]新增或修改设备类型param:{}",deviceTypeParam);
int i = deviceTypeService.updateOrAddProducer(deviceTypeParam);
if (i == -1){
log.info("[end]新增或修改设备类型,代号重复");
return R.error("代号重复");
}else if (i>0){
log.info("[end]新增或修改设备类型");
return R.ok().setData(deviceTypeParam);
}else {
log.info("[end]新增或修改设备类型,失败");
return R.error();
}
}
/**
*
* @param typeParamList
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "批量新增设备类型", httpMethod = "POST")
@RequestMapping(path = "/addList",method = RequestMethod.POST)
public R addByList(@RequestBody @Valid List<DeviceTypeParam> typeParamList, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return actionResultWithBindingResult(ErrorCodeEnum.BIND_EXCEPTION,bindingResult);
}
log.info("[start]批量新增设备类型");
int lc = deviceTypeService.addByList(typeParamList);
if (lc < typeParamList.size()){
log.info("[end]批量新增设备类型,部分有重复设备编号");
return R.ok("部分新增成功,有重复编号!");
}
if (lc>0){
log.info("[end]批量新增设备类型");
return R.ok("新增成功!");
}else {
log.info("[end]批量新增设备类型,失败");
return R.error();
}
}
/**
*
* @return R
*/
@ApiOperation(value = "查看设备类型列表", httpMethod = "GET")
@RequestMapping(path = "/list",method = RequestMethod.GET)
public R list(){
log.info("[start]查看设备类型列表");
List<DeviceType> list = deviceTypeService.list();
log.info("[end]查看设备类型列表return:{}",list);
return R.ok().setData(list);
}
/**
*
* @param param keywords
* @return R
*/
@ApiOperation(value = "查看设备类型分页", httpMethod = "GET")
@RequestMapping(path = "/page",method = RequestMethod.GET)
public R page(DeviceTypeParam param){
log.info("[start]查看设备类型分页,keywords:{}",param.getKeywords());
PageInfo<DeviceType> page = deviceTypeService.page(param);
log.info("[end]查看设备类型分页return:{}",page);
return R.ok().setData(page);
}
/**
*
* @param file
* @return R
* @throws IOException IOException
*/
@ApiOperation(value = "读取设备类型参数", httpMethod = "POST")
@RequestMapping(path = "/read",method = RequestMethod.POST)
public R importType(@RequestParam("file") MultipartFile file) throws IOException{
//TODO:暂时为excel文件导入后续可能需改成导入xml文件并解析
log.info("[start]读取设备类型参数");
List<DeviceTypeVO> list = EasyExcel.read(file.getInputStream(), DeviceTypeVO.class,null)
.sheet(0).doReadSync();
log.info("[end]读取设备类型参数,return:{}",list);
return R.ok().setData(list);
}
}

@ -0,0 +1,187 @@
package com.imitate.web.module.simulation.controller;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.imitate.common.annotation.DoSysLog;
import com.imitate.common.enums.ErrorCodeEnum;
import com.imitate.common.util.BasicController;
import com.imitate.common.util.R;
import com.imitate.common.util.SimpleFileUtils;
import com.imitate.web.module.simulation.service.DataTerminalService;
import com.imitate.web.params.DataTerminalParam;
import com.imitate.web.persistence.beans.DataTerminal;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
/**
*
*
* @author jshixiong
* @since 2022-07-28
*/
@Slf4j
@Api(value = "本地管理终端控制器", hidden = true)
@RestController
@RequestMapping("/localManager")
public class LocalManagerController extends BasicController {
@Autowired
private DataTerminalService dataTerminalService;
/**
* ID
* @param dataTerminalParam DataTerminal
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "注册或修改本地管理终端", httpMethod = "POST")
@RequestMapping(path = "/editOrAdd",method = RequestMethod.POST)
public R editOrAddDataCenter(@RequestBody @Valid DataTerminalParam dataTerminalParam, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return actionResultWithBindingResult(ErrorCodeEnum.BIND_EXCEPTION,bindingResult);
}
log.info("[start]注册或修改本地管理终端,param:{}",dataTerminalParam);
dataTerminalParam.setType("2");
if (dataTerminalService.updateOrAdd(dataTerminalParam.getDataTerminal())>0){
log.info("[end]注册或修改本地管理终端");
return R.ok().setData(dataTerminalParam.getDataTerminal());
}else {
log.info("[end]注册或修改本地管理终端,失败");
return R.error();
}
}
/**
* ID
* @param id ID
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "删除本地管理终端", httpMethod = "POST")
@RequestMapping(path = "/delete/{id}",method = RequestMethod.POST)
public R delete(@PathVariable("id") Long id){
log.info("[start]删除本地管理终端,id:{}",id);
DataTerminal dataTerminal = dataTerminalService.getById(id);
if (dataTerminalService.deleteById(id)>0){
log.info("[end]删除本地管理终端,return:{}",dataTerminal);
return R.ok().setData(dataTerminal);
}else {
log.info("[end]删除本地管理终端,失败");
return R.error();
}
}
/**
* id
* @param id ID
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "查看本地管理终端", httpMethod = "GET")
@RequestMapping(path = "/getById/{id}",method = RequestMethod.GET)
public R getById(@PathVariable("id") Long id){
log.info("[start]查看本地管理终端,id:{}",id);
DataTerminal byId = dataTerminalService.getById(id);
log.info("[end]查看本地管理终端return:{}",byId);
return R.ok().setData(byId);
}
/**
*
* @param param
* @return R
*/
@ApiOperation(value = "分页查看本地管理终端", httpMethod = "GET")
@RequestMapping(path = "/page",method = RequestMethod.GET)
public R pageDevice(DataTerminalParam param){
log.info("[start]分页查看本地管理终端,param:{}",param);
param.setType("2");
PageInfo<DataTerminal> page = dataTerminalService.page(param);
log.info("[end]分页查看本地管理终端return:{}",page);
return R.ok().setData(page);
}
/**
*
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "本地管理终端导出初装资源", httpMethod = "GET")
@RequestMapping(path = "/resourceExport/{id}",method = RequestMethod.GET)
public void resourceExport(@PathVariable("id") Long id,HttpServletResponse response){
log.info("[start]本地管理终端导出初装资源,id:{}",id);
String resourceJson = dataTerminalService.resourceExport(id);
SimpleFileUtils.stringToFileExport(response,resourceJson,"本地管理终端初装资源.txt");
log.info("[end]本地管理终端导出初装资源内容return:{}",resourceJson);
}
/**
*
* @param terminalType
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "开始本地管理终端开通", httpMethod = "POST")
@RequestMapping(path = "/startOpen",method = RequestMethod.POST)
public R startOpen(String terminalType){
log.info("[start]开始本地管理终端开通");
log.info("[end]开始本地管理终端开通");
return R.ok().setData(terminalType);
}
/**
* 宿
* @param hostFlag 宿
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "本地管理终端设置宿主机标识", httpMethod = "POST")
@RequestMapping(path = "/setHostFlag",method = RequestMethod.POST)
public R setHostFlag(String hostFlag){
log.info("[start]本地管理终端设置宿主机标识");
log.info("[end]本地管理终端设置宿主机标识");
return R.ok().setData(hostFlag);
}
/**
*
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "本地管理终端注入初装资源", httpMethod = "POST")
@RequestMapping(path = "/resourceImport",method = RequestMethod.POST)
public R resourceImport(@RequestParam("file") MultipartFile file){
log.info("[start]本地管理终端注入初装资源");
String fileContent = SimpleFileUtils.fileToString(file);
DataTerminal dataTerminal;
try {
dataTerminal = JSONObject.parseObject(fileContent, DataTerminal.class);
}catch (Exception e){
log.info("[end]本地管理终端注入初装资源,fileContent:{}",fileContent);
return R.error("文件内容错误");
}
if (!"2".equals(dataTerminal.getType()) || null == dataTerminal.getId() || null == dataTerminalService.getById(dataTerminal.getId())){
log.info("[end]本地管理终端注入初装资源,fileContent:{}",fileContent);
return R.error("文件内容错误,error type or id");
}
dataTerminal = dataTerminalService.openTerminal(dataTerminal);
log.info("[end]本地管理终端注入初装资源,return:{}",dataTerminal);
return R.ok().setData(dataTerminal);
}
@ApiOperation(value = "本地管理终端查询是否开通", httpMethod = "GET")
@RequestMapping(path = "/isOpen",method = RequestMethod.GET)
public R isLocalManagerOpen(){
log.info("[start]本地管理终端查询是否开通");
Boolean openFlag = dataTerminalService.isTerminalOpen("2");
log.info("[end]本地管理终端查询是否开通,return:{}",openFlag);
return R.ok().setData(openFlag);
}
}

@ -0,0 +1,129 @@
package com.imitate.web.module.simulation.controller;
import com.github.pagehelper.PageInfo;
import com.imitate.common.annotation.DoSysLog;
import com.imitate.common.enums.ErrorCodeEnum;
import com.imitate.common.util.BasicController;
import com.imitate.common.util.R;
import com.imitate.web.params.ProducerParam;
import com.imitate.web.persistence.beans.Producer;
import com.imitate.web.module.simulation.service.ProducerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-14
*/
@Slf4j
@Api(value = "生产厂商控制器", hidden = true)
@RestController
@RequestMapping("/producer")
public class ProducerController extends BasicController {
@Autowired
private ProducerService producerService;
/**
* id
* @param id ID
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "查看生产厂商", httpMethod = "GET")
@RequestMapping(path = "/getById/{id}",method = RequestMethod.GET)
public R getById(@PathVariable("id") Long id){
log.info("[start]查看生产厂商id:{}",id);
Producer byId = producerService.getById(id);
log.info("[end]查看生产厂商return:{}",byId);
return R.ok().setData(byId);
}
/**
* ID
* @param producerParam Producer
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "新增或修改生产厂商", httpMethod = "POST")
@RequestMapping(path = "/editOrAdd",method = RequestMethod.POST)
public R updateOrAddProducer(@RequestBody @Valid ProducerParam producerParam, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return actionResultWithBindingResult(ErrorCodeEnum.BIND_EXCEPTION,bindingResult);
}
log.info("[start]新增或修改生产厂商param:{}",producerParam);
if (producerService.updateOrAddProducer(producerParam.getProducer())<=0){
log.info("[end]新增或修改生产厂商,失败");
return R.error();
}else {
log.info("[end]新增或修改生产厂商");
return R.ok().setData(producerParam);
}
}
/**
* ID
* @param id ID
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "删除生产厂商", httpMethod = "POST")
@RequestMapping(path = "/delete/{id}",method = RequestMethod.POST)
public R deleteProducer(@PathVariable("id") Long id){
log.info("[start]删除生产厂商id:{}",id);
Producer producer = producerService.getById(id);
int flag = producerService.deleteProducerById(id);
if (flag>0){
log.info("[end]删除生产厂商return:{}",producer);
return R.ok().setData(producer);
}else if (flag==-1){
log.info("[end]删除生产厂商,厂商正被设备使用");
return R.error("厂商正被设备使用!");
}else {
log.info("[end]删除生产厂商,失败");
return R.error();
}
}
/**
*
* @return R
*/
@ApiOperation(value = "查看厂商列表", httpMethod = "GET")
@RequestMapping(path = "/list",method = RequestMethod.GET)
public R listProducer(){
log.info("[start]查看厂商列表");
List<Producer> list = producerService.listProducer();
log.info("[end]查看厂商列表return:{}",list);
return R.ok().setData(list);
}
/**
*
* @param pageNumber
* @param pageSize
* @return R
*/
@ApiOperation(value = "分页查看厂商", httpMethod = "GET")
@RequestMapping(path = "/page",method = RequestMethod.GET)
public R pageProducer(@Param("pageNum") Integer pageNumber, @Param("pageSize") Integer pageSize){
log.info("[start]分页查看厂商pageNumber:{};pageSize:{}",pageNumber,pageSize);
PageInfo<Producer> page = producerService.pageProducer(pageNumber, pageSize);
log.info("[start]分页查看厂商return:{}",page);
return R.ok().setData(page);
}
}

@ -0,0 +1,169 @@
package com.imitate.web.module.simulation.controller;
import com.imitate.common.annotation.DoSysLog;
import com.imitate.common.enums.ErrorCodeEnum;
import com.imitate.common.util.BasicController;
import com.imitate.common.util.R;
import com.imitate.web.module.simulation.service.ResourceService;
import com.imitate.web.module.simulation.service.SecretKeyService;
import com.imitate.web.params.CertificateOpenParam;
import com.imitate.web.params.DatabaseTestConnectionParam;
import com.imitate.web.params.ResourceOpenParam;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.*;
/**
*
* @author yanchao
*/
@Slf4j
@Api(value = "资源管理系统开通", hidden = true)
@RestController
@RequestMapping("/resource")
public class ResourceController extends BasicController {
@Autowired
private ResourceService resourceService;
@Autowired
private SecretKeyService secretKeyService;
@DoSysLog(isLog = true)
@ApiOperation(value = "点击开通资源管理系统", httpMethod = "POST")
@RequestMapping(path = "/clickOpenResource",method = RequestMethod.POST)
public R clickOpenResource(){
return R.ok();
}
@ApiOperation(value = "获取资源管理终端开通状态",httpMethod = "GET")
@RequestMapping(path = "/getResourceStatus",method = RequestMethod.GET)
public R getResourceStatus(){
log.info("[start]获取资源管理终端开通状态");
Map<String,Integer> resultMap = resourceService.queryResourceStatus();
log.info("[end]获取资源管理终端开通状态,return:{}",resultMap);
return R.ok().setData(resultMap);
}
@DoSysLog(isLog = true)
@ApiOperation(value = "立即开通资源管理系统")
@RequestMapping(path = "/openResourceNow",method = RequestMethod.POST)
public R openResourceNow(@RequestBody @Validated ResourceOpenParam param, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return actionResultWithBindingResult(ErrorCodeEnum.BIND_EXCEPTION,bindingResult);
}
log.info("[start]立即开通资源管理系统,param:{}",param);
Boolean r = resourceService.open(param);
if(!r){
return R.error("开通资源管理系统失败,预制资源验证失败!");
}
//初始化资源
List<String> fileList = new ArrayList<>();
fileList.add(ResourceService.BASE_PATH + param.getFile1());
fileList.add(ResourceService.BASE_PATH + param.getFile2());
fileList.add(ResourceService.BASE_PATH + param.getFile3());
fileList.add(ResourceService.BASE_PATH + param.getFile4());
log.info("初始化密钥资源fileList:{}",fileList);
String[] msg = secretKeyService.resourceSecretKey(fileList);
log.info("[end]立即开通资源管理系统");
return R.ok().setData(msg);
}
@DoSysLog(isLog = true)
@ApiOperation(value = "点击开通证书管理系统", httpMethod = "POST")
@RequestMapping(path = "/openCertSystem",method = RequestMethod.POST)
public R openCertSystem(){
return R.ok();
}
@DoSysLog(isLog = true)
@ApiOperation(value = "立即开通证书管理系统")
@RequestMapping(path = "/openCertNow",method = RequestMethod.POST)
public R openCertNow(@RequestBody @Validated CertificateOpenParam param,BindingResult bindingResult){
if(bindingResult.hasErrors()){
return actionResultWithBindingResult(ErrorCodeEnum.BIND_EXCEPTION,bindingResult);
}
log.info("[start]立即开通证书管理系统,param:{}",param);
Boolean rst = resourceService.openCert(param);
if(!rst){
return R.error("开通证书管理系统失败,导入证书验证失败!");
}
log.info("[end]立即开通证书管理系统");
return R.ok();
}
@DoSysLog(isLog = true)
@ApiOperation(value = "双证书文件下载")
@RequestMapping(path = "/downloadCertFile",method = RequestMethod.GET)
public void downloadCertFile(HttpServletResponse response){
resourceService.generateCertDownload(response);
}
@DoSysLog(isLog = true)
@ApiOperation(value = "获取颁发机构证书信息")
@RequestMapping(path = "/getCertInfomation",method = RequestMethod.GET)
public R getCertInfomation(){
List<String> rst = resourceService.getCertInfo();
if(rst == null || rst.size() == 0){
return R.error("证书信息校验失败,不合法的证书文件,请下载证书后重试!");
}
return R.ok().setData(rst);
}
@DoSysLog(isLog = true)
@ApiOperation(value = "多文件上传,导入签发机构证书和系统产生的预制资源")
@RequestMapping(path = "/importFiles",method = RequestMethod.POST)
public R importFiles(MultipartFile[] files,@RequestParam(required = false,defaultValue = "/upload") String resourceDir){
log.info("[start]多文件上传,导入签发机构证书和系统产生的预制资源,param:{}", (Object) files);
List<String> rstList = new ArrayList<>();
rstList = resourceService.uploadFiles(files,resourceDir);
log.info("[end]多文件上传,导入签发机构证书和系统产生的预制资源,return:{}", rstList);
return R.ok().setData(rstList);
}
@DoSysLog(isLog = true)
@ApiOperation(value = "数据库测试连接")
@RequestMapping(path = "/dbTestConnection",method = RequestMethod.POST)
public R dbTestConnection(@RequestBody @Validated DatabaseTestConnectionParam param,BindingResult bindingResult){
if(bindingResult.hasErrors()){
return actionResultWithBindingResult(ErrorCodeEnum.BIND_EXCEPTION,bindingResult);
}
log.info("[start]数据库测试连接,param:{}", param);
Boolean isConn = resourceService.testConnection(param);
Map<String,Boolean> map = new HashMap<>();
map.put("isConn",Boolean.TRUE);
if(!isConn){
map.put("isConn",Boolean.FALSE);
return R.ok().setData(map);
}
log.info("[end]数据库测试连接,return:{}", Boolean.TRUE);
return R.ok().setData(map);
}
}

@ -0,0 +1,129 @@
package com.imitate.web.module.simulation.controller;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.utils.StringUtils;
import com.imitate.common.annotation.DoSysLog;
import com.imitate.common.enums.ErrorCodeEnum;
import com.imitate.common.util.BasicController;
import com.imitate.common.util.R;
import com.imitate.common.util.SimpleFileUtils;
import com.imitate.web.module.simulation.enums.SecretKeyTypeEnum;
import com.imitate.web.params.SecretKeyParam;
import com.imitate.web.persistence.beans.SecretKey;
import com.imitate.web.module.simulation.service.SecretKeyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.EnumSet;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-14
*/
@Slf4j
@Api(value = "密钥存储表控制器", hidden = true)
@RestController
@RequestMapping("/secretKey")
public class SecretKeyController extends BasicController {
@Autowired
private SecretKeyService secretKeyService;
/**
*
* @param param SecretKeyParam
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "资源加密", httpMethod = "GET")
@RequestMapping(path = "/encryption",method = RequestMethod.GET)
public void resourceEncryption(SecretKeyParam param, HttpServletResponse response){
log.info("[start]资源加密param:{}",param);
String encryption = secretKeyService.resourceEncryption(param);
if (StringUtils.isEmpty(encryption)){
log.info("[end]资源加密失败return:{}",encryption);
}
String fileName = "";
EnumSet<SecretKeyTypeEnum> secretSet = EnumSet.allOf(SecretKeyTypeEnum.class);
for (SecretKeyTypeEnum e: secretSet) {
if(e.getValue().equals(param.getType())){
fileName = e.getDescription() + ".txt";
}
}
SimpleFileUtils.stringToFileExport(response,encryption, fileName);
log.info("[end]资源加密return:{}",encryption);
}
@DoSysLog(isLog = true)
@ApiOperation(value = "加密资源导入", httpMethod = "POST")
@RequestMapping(path = "/resourceImport/{inType}",method = RequestMethod.POST)
public R addKeyList(@RequestParam("file") MultipartFile file,@PathVariable("inType") String inType){
log.info("[start]加密资源导入");
String fileToString = SimpleFileUtils.fileToString(file);
SecretKey secretKey = JSONObject.parseObject(fileToString, SecretKey.class);
int i = secretKeyService.addEncryptionKeyList(secretKey, inType);
if (i == -2){
log.info("[end]加密资源导入,失败,资源文件与类型不匹配");
return R.error("资源文件与类型不匹配!");
}else if (i>0){
log.info("[end]加密资源导入return:{}",fileToString);
return R.ok().setData(fileToString);
}else {
log.info("[end]加密资源导入失败return:{}",fileToString);
return R.error("无对应类型长度/算法:"+fileToString);
}
}
/**
*
* @param type
* @return R
*/
@ApiOperation(value = "查看密钥统计数据", httpMethod = "GET")
@RequestMapping(path = "/statistics",method = RequestMethod.GET)
public R selectStatisticsByType(String type){
log.info("[start]查看密钥统计数据param:{}",type);
List<SecretKey> list = secretKeyService.selectStatisticsByType(type);
log.info("[start]查看密钥统计数据return:{}",list);
return R.ok().setData(list);
}
/**
*
* @param secretKeyParam SecretKey
* @return R
*/
@DoSysLog(isLog = true)
@ApiOperation(value = "推送密钥", httpMethod = "POST")
@RequestMapping(path = "/pushKey",method = RequestMethod.POST)
public R pushByLengthAndType(@RequestBody @Valid SecretKeyParam secretKeyParam,BindingResult bindingResult ){
if(bindingResult.hasErrors()){
return actionResultWithBindingResult(ErrorCodeEnum.BIND_EXCEPTION,bindingResult);
}
log.info("[start]推送密钥param:{}",secretKeyParam);
if(secretKeyService.pushByLengthAndType(secretKeyParam.getSecretKey())>0){
log.info("[start]推送密钥");
return R.ok().setData(secretKeyParam);
}else {
log.info("[start]推送密钥,失败,请检查密钥数量及类型");
return R.error("请检查密钥数量");
}
}
}

@ -0,0 +1,42 @@
package com.imitate.web.module.simulation.controller;
import com.imitate.common.util.R;
import com.imitate.web.module.simulation.service.SysDictService;
import com.imitate.web.vo.DeviceManagerInitVO;
import com.imitate.web.vo.DeviceResourceInitVO;
import com.imitate.web.vo.DeviceSoftwareInitVO;
import com.imitate.web.vo.LocalManagerInitVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* Controller
*
* @author jshixiong
*/
@Slf4j
@Api(value = "下拉列表字典值控制器", hidden = true)
@RestController
@RequestMapping("/sysDict")
public class SysDictController {
@Autowired
private SysDictService sysDictService;
@ApiOperation(value = "模训系统Dict", httpMethod = "GET")
@RequestMapping(path = "/all",method = RequestMethod.GET)
public R allDict(){
log.info("[start]获取模训系统Dict");
List<Object> res = sysDictService.getAllDict();
log.info("[end]获取模训系统Dict");
return R.ok().setData(res);
}
}

@ -0,0 +1,63 @@
package com.imitate.web.module.simulation.controller;
import com.imitate.common.enums.ErrorCodeEnum;
import com.imitate.common.util.BasicController;
import com.imitate.common.util.R;
import com.imitate.web.module.simulation.service.SysLogService;
import com.imitate.web.persistence.beans.SysLog;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-28
*/
@Slf4j
@Api(value = "日志控制器", hidden = true)
@RestController
@RequestMapping("/sysLog")
public class SysLogController extends BasicController {
@Autowired
private SysLogService sysLogService;
/**
* ID
* @param id ID
* @return R
*/
@ApiOperation(value = "根据ID获取日志", httpMethod = "GET")
@RequestMapping(path = "/getById/{id}",method = RequestMethod.GET)
public R getLogById(@PathVariable("id") Long id){
log.info("[start]根据ID获取日志id:{}",id);
SysLog byId = sysLogService.getById(id);
log.info("[end]根据ID获取日志return:{}",byId);
return R.ok().setData(byId);
}
/**
*
* @param operation
* @return R
*/
@ApiOperation(value = "根据操作名获取日志列表", httpMethod = "GET")
@RequestMapping(path = "/listByOperation",method = RequestMethod.GET)
public R listByOperation(@RequestParam("operation") String operation){
log.info("[start]根据操作名获取日志列表param:{}",operation);
List<SysLog> list = sysLogService.list(operation);
log.info("[end]根据操作名获取日志列表return:{}",list);
return R.ok().setData(list);
}
}

@ -0,0 +1,23 @@
package com.imitate.web.module.simulation.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
*
* @author jshixiong
*/
@AllArgsConstructor
@Getter
public enum SecretKeyTypeEnum {
PREFORMED_RESOURCE("1","预制资源加密"),
PUBLIC_KEY("2","公钥编制"),
ALGORITHM_PARAMETERS("3","算法参数加密"),
ALGORITHM_LOGIC("4","算法逻辑加密"),
SOFTWARE("5","软件加密");
private String value;
private String description;
}

@ -0,0 +1,79 @@
package com.imitate.web.module.simulation.service;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.utils.StringUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.imitate.common.util.SimpleFileUtils;
import com.imitate.web.params.DataTerminalParam;
import com.imitate.web.persistence.beans.DataTerminal;
import com.imitate.web.persistence.mapper.DataTerminalMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.time.LocalDateTime;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-28
*/
@Service
public class DataTerminalService {
@Autowired
private DataTerminalMapper dataTerminalMapper;
public DataTerminal getById(Long id){
return dataTerminalMapper.getById(id);
}
public int updateOrAdd(DataTerminal dataTerminal){
LocalDateTime now = LocalDateTime.now();
if (null == dataTerminal.getId()){
if(StringUtils.isEmpty(dataTerminal.getName())){
dataTerminal.setName("终端/服务器"+ DateUtil.format(now,"yyyyMMddHHmmss"));
}
dataTerminal.setCreateTime(now);
return dataTerminalMapper.insertSelective(dataTerminal);
}else {
dataTerminal.setUpdateTime(now);
return dataTerminalMapper.updateByPrimaryKeySelective(dataTerminal);
}
}
public int deleteById(Long id){
return dataTerminalMapper.deleteByPrimaryKey(id);
}
public PageInfo<DataTerminal> page(DataTerminalParam param){
PageHelper.startPage(param.getPageNumber(), param.getPageSize());
List<DataTerminal> deviceList = dataTerminalMapper.selectAllPro(param.getType());
PageInfo<DataTerminal> page = new PageInfo<>(deviceList);
return page;
}
public String resourceExport(Long id){
DataTerminal dataTerminal = dataTerminalMapper.getById(id);
return JSONObject.toJSONString(dataTerminal);
}
public Boolean isTerminalOpen(String type){
if (null!=dataTerminalMapper.getTerminalOpen(type)){
return Boolean.TRUE;
}
return Boolean.FALSE;
}
public DataTerminal openTerminal(DataTerminal dataTerminal){
dataTerminal.setStatus(Boolean.TRUE);
dataTerminalMapper.updateByPrimaryKeySelective(dataTerminal);
return dataTerminal;
}
}

@ -0,0 +1,88 @@
package com.imitate.web.module.simulation.service;
import cn.hutool.core.date.DateUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.imitate.web.params.DistributionListParam;
import com.imitate.web.params.DistributionParam;
import com.imitate.web.persistence.beans.Device;
import com.imitate.web.persistence.beans.DeviceDistribution;
import com.imitate.web.persistence.mapper.DeviceDistributionMapper;
import com.imitate.web.persistence.mapper.DeviceMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
/**
* <p>
* /
* </p>
*
* @author jshixiong
* @since 2022-08-02
*/
@Service
public class DeviceDistributionService {
@Autowired
private DeviceDistributionMapper deviceDistributionMapper;
@Autowired
private DeviceMapper deviceMapper;
public PageInfo<DeviceDistribution> page(DistributionListParam param){
PageHelper.startPage(param.getPageNumber(), param.getPageSize());
List<DeviceDistribution> list = deviceDistributionMapper.selectAllPro(param);
list.forEach(e->{
e.setDeviceCount(e.getDeviceList().size());
});
return new PageInfo<>(list);
}
@Transactional(rollbackFor = Exception.class)
public int editOrAdd(DistributionParam param){
LocalDateTime now = LocalDateTime.now();
int lc;
if (null == param.getId()){
param.setBeginTime(now);
param.setCreateTime(now);
param.setEndTime(now.plusDays(30*3));
param.setStatus("1");
param.setNumber("CK"+ DateUtil.format(now,"yyyyMMddHHmmss"));
lc = deviceDistributionMapper.insertSelective(param.getDeviceDistribution());
param.setDeviceCount(param.getDeviceList().size());
param.getDeviceList().forEach(e->{
e.setUpdateTime(now);
e.setDistributionId(param.getId());
deviceMapper.updateByPrimaryKeySelective(e);
});
}else {
param.setUpdateTime(now);
lc = deviceDistributionMapper.updateByPrimaryKeySelective(param.getDeviceDistribution());
deviceMapper.updateDistributionId(param.getId());
param.getDeviceList().forEach(e->{
e.setUpdateTime(now);
e.setDistributionId(param.getId());
deviceMapper.updateByPrimaryKeySelective(e);
});
}
return lc;
}
public DeviceDistribution getById(Long id){
return deviceDistributionMapper.getById(id);
}
@Transactional(rollbackFor = Exception.class)
public DeviceDistribution deleteById(Long id){
DeviceDistribution byId = deviceDistributionMapper.getById(id);
//删除配发单
deviceDistributionMapper.deleteByPrimaryKey(id);
//将配发设备还原,解除配发
deviceMapper.updateDistributionId(id);
return byId;
}
}

@ -0,0 +1,188 @@
package com.imitate.web.module.simulation.service;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.utils.StringUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.imitate.web.params.DeviceParam;
import com.imitate.web.persistence.beans.DeviceType;
import com.imitate.web.persistence.mapper.DeviceTypeMapper;
import com.imitate.web.persistence.mapper.ProducerMapper;
import com.imitate.web.persistence.beans.Device;
import com.imitate.web.persistence.mapper.DeviceMapper;
import com.imitate.web.persistence.beans.Producer;
import com.imitate.web.params.DeviceListParam;
import com.imitate.web.vo.DeviceByTypeVO;
import com.imitate.web.vo.DeviceVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-14
*/
@Service
public class DeviceService{
@Autowired
private DeviceMapper deviceMapper;
@Autowired
private ProducerMapper producerMapper;
@Autowired
private DeviceTypeMapper deviceTypeMapper;
public Device getById(Long id){
return deviceMapper.getById(id);
}
public int updateOrAddDevice(Device device){
LocalDateTime now = LocalDateTime.now();
Example example = new Example(Device.class);
example.createCriteria().andEqualTo("deviceId",device.getDeviceId());
Device oneByExample = deviceMapper.selectOneByExample(example);
if (null == device.getId()){
if (null!=oneByExample){
return -1;
}
if(StringUtils.isEmpty(device.getName())){
device.setName("设备"+ DateUtil.format(now,"yyyyMMddHHmmss"));
}
device.setAddTime(now);
device.setCreateTime(now);
return deviceMapper.insertSelective(device);
}else {
if (null!=oneByExample && !device.getId().equals(oneByExample.getId())){
return -1;
}
device.setUpdateTime(now);
return deviceMapper.updateByPrimaryKeySelective(device);
}
}
public int deleteDeviceById(Long id){
return deviceMapper.deleteByPrimaryKey(id);
}
public List<Device> listDevice(DeviceListParam param){
return deviceMapper.selectAllPro(param);
}
public List<DeviceByTypeVO> listDeviceByType(){
List<Device> deviceList = deviceMapper.selectDeviceByType();
List<DeviceByTypeVO> deviceByTypeVOList = new ArrayList<>();
deviceList.forEach(e->{
DeviceByTypeVO deviceByTypeVO = new DeviceByTypeVO();
deviceByTypeVO.setType(e.getType());
deviceByTypeVO.setDeviceList(e.getDeviceList());
deviceByTypeVOList.add(deviceByTypeVO);
});
return deviceByTypeVOList;
}
public List<Device> listByType(String type){
Example example = new Example(Device.class);
example.createCriteria().andEqualTo("type",type);
return deviceMapper.selectByExample(example);
}
public List<Device> list(DeviceListParam param){
return deviceMapper.selectAllPro(param);
}
public PageInfo<Device> pageDevice(DeviceListParam param){
PageHelper.startPage(param.getPageNumber(), param.getPageSize());
List<Device> deviceList = deviceMapper.selectAllPro(param);
return new PageInfo<>(deviceList);
}
public List<Device> addExcelList(List<DeviceVO> deviceVOList){
if (null==deviceVOList || deviceVOList.size()<=0){
return null;
}
//将厂商列转为map
List<Producer> producerList = producerMapper.selectAll();
Map<String, Long> producerMaps = producerList.stream()
.collect(Collectors.toMap(Producer::getName, Producer::getId, (key1, key2) -> key2));
//将设备类型转化为map
List<DeviceType> typeList = deviceTypeMapper.selectAll();
Map<String, Long> typeMaps = typeList.stream()
.collect(Collectors.toMap(DeviceType::getName, DeviceType::getId, (key1, key2) -> key2));
//复制参数
LocalDateTime now = LocalDateTime.now();
List<Device> deviceList = new ArrayList<>();
for (DeviceVO vo : deviceVOList) {
//判断是否已存在编号
Example example = new Example(Device.class);
example.createCriteria().andEqualTo("deviceId",vo.getDeviceId());
if (null!=deviceMapper.selectOneByExample(example)){
continue;
}
Device device = new Device();
BeanUtils.copyProperties(vo,device);
device.setAddTime(now);
device.setCreateTime(now);
device.setType(typeMaps.getOrDefault(vo.getTypeName(),0L));
device.setProducerId(producerMaps.getOrDefault(vo.getProducerName(),0L));
deviceList.add(device);
}
deviceMapper.insertList(deviceList);
return deviceList;
}
public int addList(List<DeviceParam> deviceParamList){
List<Device> deviceList = deviceParamList.stream().map(DeviceParam::getDevice).collect(Collectors.toList());
for (DeviceParam e : deviceParamList){
Example example = new Example(Device.class);
example.createCriteria().andEqualTo("deviceId",e.getDeviceId());
if (null!=deviceMapper.selectOneByExample(example)){
return -1;
}
e.setAddTime(LocalDateTime.now());
e.setStatus("0");
e.setDistributionId(0L);
};
return deviceMapper.insertList(deviceList);
}
@Transactional(rollbackFor = Exception.class)
public int configureDevice(DeviceListParam param){
List<Device> deviceList = param.getDeviceList();
deviceList.forEach(e-> deviceMapper.updateByPrimaryKeySelective(e));
return 1;
}
@Transactional(rollbackFor = Exception.class)
public int deleteByList(List<Device> deviceList){
deviceList.forEach(d-> deviceMapper.deleteByPrimaryKey(d.getId()));
return 1;
}
public JSONObject u3dDevice(Integer u3dType){
String res = "";
//注意id为负数且id和deviceId不能重复
if (1 == u3dType){
res = "{\"list\":[{\"id\":-10,\"name\":\"注入器1\",\"u3dType\":1,\"deviceId\":\"202209071223\"},{\"id\":-11,\"name\":\"注入器2\",\"u3dType\":1,\"deviceId\":\"202209071224\"}]}";
}else if (2 == u3dType){
res = "{\"list\":[{\"id\":-20,\"name\":\"开机棒1\",\"u3dType\":2,\"deviceId\":\"202209072223\"},{\"id\":-21,\"name\":\"开机棒2\",\"u3dType\":2,\"deviceId\":\"202209072224\"}]}";
}else if (3 == u3dType){
res = "{\"list\":[{\"id\":-30,\"name\":\"授启棒1\",\"u3dType\":3,\"deviceId\":\"202209073223\"},{\"id\":-31,\"name\":\"授启棒2\",\"u3dType\":3,\"deviceId\":\"202209073224\"}]}";
}
return JSONObject.parseObject(res);
}
}

@ -0,0 +1,16 @@
package com.imitate.web.module.simulation.service;
import org.springframework.stereotype.Service;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-25
*/
@Service
public class DeviceTypeProducerService {
}

@ -0,0 +1,130 @@
package com.imitate.web.module.simulation.service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.imitate.web.persistence.mapper.DeviceTypeMapper;
import com.imitate.web.persistence.mapper.DeviceTypeProducerMapper;
import com.imitate.web.persistence.beans.DeviceType;
import com.imitate.web.persistence.beans.DeviceTypeProducer;
import com.imitate.web.params.DeviceTypeParam;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-25
*/
@Service
public class DeviceTypeService {
@Autowired
private DeviceTypeMapper deviceTypeMapper;
@Autowired
private DeviceTypeProducerMapper typeProducerMapper;
public DeviceType getById(Long id){
return deviceTypeMapper.getById(id);
}
@Transactional(rollbackFor = Exception.class)
public int deleteById(Long id){
//删除所有 类型-厂商 中间表
typeProducerMapper.deleteByTypeId(id);
return deviceTypeMapper.deleteByPrimaryKey(id);
}
@Transactional(rollbackFor = Exception.class)
public int deleteByTypeList(List<DeviceType> deviceTypeList){
deviceTypeList.forEach(deviceType -> {
typeProducerMapper.deleteByTypeId(deviceType.getId());
deviceTypeMapper.deleteByPrimaryKey(deviceType.getId());
});
return 1;
}
@Transactional(rollbackFor = Exception.class)
public int updateOrAddProducer(DeviceTypeParam deviceTypeParam){
LocalDateTime now = LocalDateTime.now();
DeviceType deviceType = new DeviceType();
BeanUtils.copyProperties(deviceTypeParam,deviceType);
List<DeviceTypeProducer> typeProducerList = new ArrayList<>();
Example example = new Example(DeviceType.class);
example.createCriteria().andEqualTo("typeNumber",deviceTypeParam.getTypeNumber());
DeviceType oneByExample = deviceTypeMapper.selectOneByExample(example);
if (deviceTypeParam.getId() == null){
if (null!=oneByExample){
return -1;
}
//新增设备类型
deviceType.setCreateTime(now);
int i = deviceTypeMapper.insertSelective(deviceType);
if (null == deviceTypeParam.getProducerIdList() || i<0){
return i;
}
//批量新增 设备类型-厂商 中间表
deviceTypeParam.getProducerIdList().forEach(pid->{
DeviceTypeProducer deviceTypeProducer = new DeviceTypeProducer();
deviceTypeProducer.setTypeId(deviceType.getId());
deviceTypeProducer.setProducerId(pid);
deviceTypeProducer.setCreateTime(now);
typeProducerList.add(deviceTypeProducer);
});
typeProducerMapper.insertList(typeProducerList);
return i;
}else {
if (null!=oneByExample && !deviceTypeParam.getId().equals(oneByExample.getId())){
return -1;
}
//先删除所有该设备类型与厂商的中间表,再新增。
typeProducerMapper.deleteByTypeId(deviceType.getId());
if (null != deviceTypeParam.getProducerIdList()){
//批量新增 设备类型-厂商 中间表
deviceTypeParam.getProducerIdList().forEach(pid->{
DeviceTypeProducer deviceTypeProducer = new DeviceTypeProducer();
deviceTypeProducer.setTypeId(deviceType.getId());
deviceTypeProducer.setProducerId(pid);
deviceTypeProducer.setCreateTime(now);
typeProducerList.add(deviceTypeProducer);
});
typeProducerMapper.insertList(typeProducerList);
}
deviceType.setUpdateTime(now);
return deviceTypeMapper.updateByPrimaryKeySelective(deviceType);
}
}
@Transactional(rollbackFor = Exception.class)
public int addByList(List<DeviceTypeParam> typeParamList){
int sum = 0;
for (DeviceTypeParam param : typeParamList){
int i = updateOrAddProducer(param);
sum+=i;
}
return sum;
}
public List<DeviceType> list(){
return deviceTypeMapper.selectAll();
}
public PageInfo<DeviceType> page(DeviceTypeParam param){
PageHelper.startPage(param.getPageNumber(), param.getPageSize());
List<DeviceType> typeList = deviceTypeMapper.selectByKey(param);
return new PageInfo<>(typeList);
}
}

@ -0,0 +1,62 @@
package com.imitate.web.module.simulation.service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.imitate.web.persistence.mapper.DeviceMapper;
import com.imitate.web.persistence.beans.Producer;
import com.imitate.web.persistence.mapper.ProducerMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-14
*/
@Service
public class ProducerService {
@Autowired
private ProducerMapper producerMapper;
@Autowired
private DeviceMapper deviceMapper;
public Producer getById(Long id){
return producerMapper.selectByPrimaryKey(id);
}
public int updateOrAddProducer(Producer producer){
LocalDateTime now = LocalDateTime.now();
if (producer.getId() == null){
producer.setCreateTime(now);
return producerMapper.insertSelective(producer);
}else {
producer.setUpdateTime(now);
return producerMapper.updateByPrimaryKey(producer);
}
}
public int deleteProducerById(Long id){
if (deviceMapper.selectCountById(id)>0){
return -1;
}
return producerMapper.deleteByPrimaryKey(id);
}
public List<Producer> listProducer(){
return producerMapper.selectAll();
}
public PageInfo<Producer> pageProducer(Integer pageNum, Integer pageSize){
PageHelper.startPage(pageNum, pageSize);
List<Producer> producerList = producerMapper.selectAll();
PageInfo<Producer> page = new PageInfo<>(producerList);
return page;
}
}

@ -0,0 +1,335 @@
package com.imitate.web.module.simulation.service;
import cn.hutool.core.io.file.FileReader;
import cn.hutool.core.io.file.FileWriter;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import com.imitate.common.util.DBHelper;
import com.imitate.common.util.FileDownloadUtil;
import com.imitate.common.util.SymmetricCryptoUtil;
import com.imitate.web.params.CertificateOpenParam;
import com.imitate.web.params.DatabaseTestConnectionParam;
import com.imitate.web.params.ResourceOpenParam;
import com.imitate.web.persistence.beans.Certificate;
import com.imitate.web.persistence.beans.Resource;
import com.imitate.web.persistence.mapper.CertificateMapper;
import com.imitate.web.persistence.mapper.ResourceMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
*
* @author yanchao
*/
@Service
@Slf4j
public class ResourceService {
public static final String BASE_PATH = "/data/ww/imitate-system";
private static final String CERT_PATH1 = BASE_PATH + "/cert/1.req";
private static final String CERT_PATH2 = BASE_PATH + "/cert/2.req";
@Autowired
private ResourceMapper resourceMapper;
@Autowired
private CertificateMapper certificateMapper;
@Autowired
private ResourceLoader resourceLoader;
/**
*
* @return
*/
public Map<String, Integer> queryResourceStatus() {
Map<String, Integer> map = new HashMap<>(2);
Resource resource = resourceMapper.selectRecentResource();
map.put("resource",0);
map.put("cert",0);
if(resource != null && resource.getStatus()){
map.put("resource",1);
}
Certificate certificate = certificateMapper.selectRecentCertificate();
if(certificate != null && certificate.getStatus()){
map.put("cert",1);
}
return map;
}
/**
*
* @param param
* @return
*/
@Transactional(rollbackFor = Exception.class)
public Boolean open(ResourceOpenParam param) {
Resource resource = param.getResource();
//先清空
resourceMapper.truncateTable();
int i = resourceMapper.insertSelective(resource);
//TODO: 预制资源检测方法,暂时未实现
if(i > 0){
resource.setStatus(Boolean.TRUE);
resourceMapper.updateByPrimaryKeySelective(resource);
return Boolean.TRUE;
}
return Boolean.FALSE;
}
/**
*
* @param param
* @return
*/
@Transactional(rollbackFor = Exception.class)
public Boolean openCert(CertificateOpenParam param) {
Certificate certificate = param.getCertificate();
//先清空
certificateMapper.truncateTable();
int i = certificateMapper.insertSelective(certificate);
//双证书校验检测
if(!verificationCert()){
log.error("校验证书文件失败!");
return Boolean.FALSE;
}
if(i > 0){
certificate.setStatus(Boolean.TRUE);
certificateMapper.updateByPrimaryKeySelective(certificate);
return Boolean.TRUE;
}
return Boolean.FALSE;
}
/**
*
*/
private void downloadCertFiles(HttpServletResponse response) {
List<File> fileList = new ArrayList<>(2);
fileList.add(new File(CERT_PATH1));
fileList.add(new File(CERT_PATH2));
downloadCerts(fileList,"cert.zip",response);
}
/**
* ZIP
* @param fileList
* @param response
*/
private void downloadCerts(List<File> fileList,String outZipName, HttpServletResponse response) {
try{
List<File> files = new ArrayList<>();
for(File item: fileList){
if (item.exists()) {
files.add(item);
}
}
//创建压缩文
File zipTmpFile = FileDownloadUtil.createFile(BASE_PATH,outZipName);
response.reset();
//证书文件打包
FileDownloadUtil.zipFile(files, zipTmpFile);
//下载压缩文件
FileDownloadUtil.fileDownload(zipTmpFile,response);
}catch (IOException e){
e.printStackTrace();
}
}
/**
* ,
* @return
*/
private void generateCertContent(){
String t1 = String.format("ECCE%s\n", RandomUtil.randomNumbers(3));
String v1 = String.format("CN=%sCA,O=一级,C=cn\n",IdUtil.simpleUUID().substring(0,6).toUpperCase(Locale.ROOT));
String v2 = IdUtil.simpleUUID().substring(0,30).toUpperCase(Locale.ROOT) + "\n";
String v3 = String.format("CN=%s设备CA,O=一级,O=zoning,C=cn\n",IdUtil.simpleUUID().substring(0,6).toUpperCase(Locale.ROOT));
String v4 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "\n";
String v5 = LocalDateTime.now().plusYears(15).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "\n";
String t2 = String.format("ECCE%s\n", RandomUtil.randomNumbers(3));
String v6 = String.format("CN=%sCA,0=一级,C=cn\n",IdUtil.simpleUUID().substring(0,6).toUpperCase(Locale.ROOT));
String v7 = IdUtil.simpleUUID().substring(0,31).toUpperCase(Locale.ROOT) + "\n";
String v8 = String.format("CN=%s设备CA,O=一级,O=zoning,C=cn\n",IdUtil.simpleUUID().substring(0,6).toUpperCase(Locale.ROOT));
String v9 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "\n";
String v10 = LocalDateTime.now().plusYears(10).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "\n";
String[] ctx1 = new String[]{t1,v1,v2,v3,v4,v5};
String[] ctx2 = new String[]{t2,v6,v7,v8,v9,v10};
StringBuilder sb1 = new StringBuilder();
int i;
for(i = 0; i < ctx1.length; i++){
sb1.append(ctx1[i]);
}
StringBuilder sb2 = new StringBuilder();
for(i = 0; i < ctx2.length; i++){
sb2.append(ctx2[i]);
}
//加密
String hex1 = SymmetricCryptoUtil.encryptFromString(sb1.toString(), Mode.CBC, Padding.ZeroPadding);
String hex2 = SymmetricCryptoUtil.encryptFromString(sb2.toString(), Mode.CBC, Padding.ZeroPadding);
//存储文件
FileWriter writer = new FileWriter(CERT_PATH1);
writer.write(hex1);
writer = new FileWriter(CERT_PATH2);
writer.write(hex2);
}
/**
*
* @param response
*/
public void generateCertDownload(HttpServletResponse response) {
//Step1 : 生成证书内容,并写入文件
generateCertContent();
//Step2: 打包下载证书文件
downloadCertFiles(response);
}
/**
*
* @return
*/
public List<String> getCertInfo() {
List<String> rstList = new ArrayList<>();
//step1 : 校验上传文件与源证书文件是否相同
if(!verificationCert()){
log.error("校验证书文件失败!");
return null;
}
//step2: 若相同则解析源文件证书,并返回
FileReader fileReader1 = new FileReader(CERT_PATH1);
FileReader fileReader2 = new FileReader(CERT_PATH2);
String result1 = SymmetricCryptoUtil.decryptFromString(fileReader1.readString(), Mode.CBC, Padding.ZeroPadding);
String result2 = SymmetricCryptoUtil.decryptFromString(fileReader2.readString(), Mode.CBC, Padding.ZeroPadding);
String[] arr1 = result1.split("\n");
String[] arr2 = result2.split("\n");
int i;
for(i = 0; i < arr1.length; i++){
rstList.add(arr1[i]);
}
for(i = 0; i < arr2.length; i++){
rstList.add(arr2[i]);
}
return rstList;
}
/**
*
* @return
*/
private boolean verificationCert() {
File file1 = new File(CERT_PATH1);
File file2 = new File(CERT_PATH2);
if(file1.exists() && file2.exists()){
String filePath1 = BASE_PATH + File.separator + "upload" + File.separator + "1.req";
String filePath2 = BASE_PATH + File.separator + "upload" + File.separator + "2.req";
FileReader fileReader1 = new FileReader(filePath1);
FileReader fileReader2 = new FileReader(filePath2);
FileReader fileReader3 = new FileReader(file1);
FileReader fileReader4 = new FileReader(file2);
if(fileReader1.readString().equals(fileReader3.readString()) && fileReader2.readString().equals(fileReader4.readString())){
return Boolean.TRUE;
}
}else{
log.error("upload目录不存在上传的证书文件");
}
return Boolean.FALSE;
}
/**
*
* @param files
* @return
*/
public List<String> uploadFiles(MultipartFile[] files,String resourceDir) {
List<String> listPath = new ArrayList<>();
try{
//获得路径
String path = BASE_PATH + File.separator + resourceDir;
//创建文件夹
File fold = new File(path);
while (!fold.exists()){
fold.mkdirs();
}
int i = 1;
for (MultipartFile file : files) {
String oldname = file.getOriginalFilename();
//新文件名 固定写死 文件名从1开始递增
assert oldname != null;
String rename = String.format("%s%s", i,oldname.substring(oldname.lastIndexOf(".")));
file.transferTo(new File(fold,rename));
listPath.add(resourceDir + File.separator + rename);
i++;
}
}catch (IOException e){
e.printStackTrace();
}
return listPath;
}
/**
*
* @param param
* @return
*/
public Boolean testConnection(DatabaseTestConnectionParam param) {
Connection conn = null;
String jdbcurl = "";
if("ORACEL".equals(param.getDbType().toUpperCase(Locale.ROOT))){
jdbcurl = String.format("jdbc:oracle:thin:@%s:%s:%s",param.getDbIp(),param.getDbPort(),param.getDbName());
}else if("MYSQL".equals(param.getDbType().toUpperCase(Locale.ROOT))){
jdbcurl = String.format("jdbc:mysql://%s:%s/%s?useUnicode=true&characterEncoding=utf-8",param.getDbIp(),param.getDbPort(),param.getDbName());
}else if("SQLSERVER".equals(param.getDbType().toUpperCase(Locale.ROOT))){
jdbcurl = String.format("jdbc:sqlserver://%s:%s;DatabaseName=%s",param.getDbIp(),param.getDbPort(),param.getDbName());
}else{
log.info("不存在的数据库类型,dbType:{}",param.getDbType());
return Boolean.FALSE;
}
conn = DBHelper.intiConnection(param.getDbDrive(),jdbcurl,param.getDbUser(),param.getDbPasswd(),Boolean.TRUE);
return conn == null ? Boolean.FALSE : Boolean.TRUE;
}
}

@ -0,0 +1,126 @@
package com.imitate.web.module.simulation.service;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.utils.StringUtils;
import com.imitate.common.util.SimpleFileUtils;
import com.imitate.web.params.SecretKeyParam;
import com.imitate.web.persistence.beans.SecretKey;
import com.imitate.web.module.simulation.enums.SecretKeyTypeEnum;
import com.imitate.web.persistence.mapper.SecretKeyMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.time.LocalDateTime;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-14
*/
@Service
public class SecretKeyService{
@Autowired
private SecretKeyMapper secretKeyMapper;
public String[] resourceSecretKey(List<String> fileList){
//删除所有数据
secretKeyMapper.deleteAll();
String[] msg = {"","","",""};
for (int i = 0; i < fileList.size(); i++){
String f = fileList.get(i);
if (!StringUtils.isEmpty(f)){
try {
File file = new File(f);
String fileToString = SimpleFileUtils.fileToString(SimpleFileUtils.getMultipartFile(file));
SecretKey secretKey = JSONObject.parseObject(fileToString, SecretKey.class);
if (addEncryptionKeyList(secretKey,secretKey.getType())<0){
msg[i] = f+"资源文件"+(i+1)+"内容格式错误!";
}
}catch (IllegalArgumentException e){
msg[i] = f+"系统找不到指定的文件"+(i+1)+"!";
}catch (Exception e){
msg[i] = f+"资源文件"+(i+1)+"内容格式错误!";
}
}
}
fileList.forEach(f->{
});
return msg;
}
public int addEncryptionKeyList(SecretKey secretKey,String inType){
int lc = -1;
if (!inType.equals(secretKey.getType())){
return -2;
}
if (SecretKeyTypeEnum.PUBLIC_KEY.getValue().equals(secretKey.getType())){
//如果是公钥类型,必须有算法类型参数
if (StringUtils.isEmpty(secretKey.getAlgorithm())){
return lc;
}
secretKey.setLength(null);
lc = secretKeyMapper.updateByAlgorithmAndType(secretKey);
if (lc<=0){
secretKey.setCreateTime(LocalDateTime.now());
lc = secretKeyMapper.insertSelective(secretKey);
}
}else {
//如果是其他类型,必须有长度参数
if (null == secretKey.getLength()){
return lc;
}
secretKey.setAlgorithm(null);
lc = secretKeyMapper.updateByLengthAndType(secretKey);
if (lc<=0){
secretKey.setCreateTime(LocalDateTime.now());
lc = secretKeyMapper.insertSelective(secretKey);
}
}
return lc;
}
public List<SecretKey> selectStatisticsByType(String type){
return secretKeyMapper.selectStatisticsByType(type);
}
public int pushByLengthAndType(SecretKey secretKey){
if(SecretKeyTypeEnum.PUBLIC_KEY.getValue().equals(secretKey.getType())){
//如果是公钥类型,必须有算法类型参数
if (StringUtils.isEmpty(secretKey.getAlgorithm())){
return -1;
}
secretKey.setLength(null);
}else{
//如果是其他类型,必须有长度参数
if (null == secretKey.getLength()){
return -1;
}
secretKey.setAlgorithm(null);
}
return secretKeyMapper.pushByLengthAndType(secretKey);
}
public String resourceEncryption(SecretKeyParam param){
SecretKey secretKey = param.getSecretKey();
if(SecretKeyTypeEnum.PUBLIC_KEY.getValue().equals(secretKey.getType())){
//如果是公钥类型,必须有算法类型参数
if (StringUtils.isEmpty(secretKey.getAlgorithm())){
return "";
}
}else{
//如果是其他类型,必须有长度参数
if (null == secretKey.getLength()){
return "";
}
}
return JSONObject.toJSONString(secretKey);
}
}

@ -0,0 +1,253 @@
package com.imitate.web.module.simulation.service;
import cn.hutool.core.util.XmlUtil;
import com.alibaba.excel.EasyExcel;
import com.imitate.common.util.SimpleFileUtils;
import com.imitate.web.vo.DeviceManagerInitVO;
import com.imitate.web.vo.DeviceResourceInitVO;
import com.imitate.web.vo.DeviceSoftwareInitVO;
import com.imitate.web.vo.LocalManagerInitVO;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author jshixiong
*/
@Service
public class SysDictService {
@Value("${imitate.init.path}")
private String initPath;
@Value("${imitate.init.xlsx}")
private String initExcelName;
@Value("${imitate.init.xml}")
private String initXmlName;
public List<Object> getAllDict(){
File file = new File(initPath+ File.separator +initExcelName);
if (!file.exists()){
file = new File(initPath+ File.separator +initXmlName);
if (!file.exists()){
return null;
}else {
//解析xml
String xmlData = SimpleFileUtils.fileToString(file);
Document document= XmlUtil.parseXml(xmlData);
//获得XML文档根节点
Element rootElement= XmlUtil.getRootElement(document);
DeviceSoftwareInitVO resList1 = resourceDictXml(rootElement);
DeviceManagerInitVO resList2 = dataDictXml(rootElement);
LocalManagerInitVO resList3 = localManagerDictXml(rootElement);
List<Object> res = new ArrayList<>();
res.add(resList1);
res.add(resList2);
res.add(resList3);
return res;
}
}else {
//解析Excel
DeviceSoftwareInitVO resList1 = resourceDictExcel(file);
DeviceManagerInitVO resList2 = dataDictExcel(file);
LocalManagerInitVO resList3 = localManagerDictExcel(file);
// DeviceResourceInitVO resList4 = configureDeviceExcel(file);
List<Object> res = new ArrayList<>();
res.add(resList1);
res.add(resList2);
res.add(resList3);
// res.add(resList4);
return res;
}
}
private DeviceSoftwareInitVO resourceDictExcel(File file){
List<DeviceSoftwareInitVO> list = EasyExcel.read(file, DeviceSoftwareInitVO.class,null)
.sheet(0).headRowNumber(2).doReadSync();
DeviceSoftwareInitVO resList = new DeviceSoftwareInitVO();
//选择单位
List<String> firstUnitList = list.stream()
.map(DeviceSoftwareInitVO::getFirstUnit)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
//选择保障单位
List<String> supportUnitList = list.stream()
.map(DeviceSoftwareInitVO::getSupportUnit)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
//选择管理节点
List<String> managerNodeList = list.stream()
.map(DeviceSoftwareInitVO::getManagerNode)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
//数据库类型
List<String> dbTypeList = list.stream()
.map(DeviceSoftwareInitVO::getDbType)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
resList.setDbTypeList(firstUnitList);
resList.setSupportUnitList(supportUnitList);
resList.setManagerNodeList(managerNodeList);
resList.setDbTypeList(dbTypeList);
return resList;
}
private DeviceSoftwareInitVO resourceDictXml(Element rootElement){
Element softwareElement = XmlUtil.getElement(rootElement, "device-manager-software");
DeviceSoftwareInitVO resList = new DeviceSoftwareInitVO(true);
NodeList firstUnitNodes = XmlUtil.getElement(softwareElement, "firstUnit").getElementsByTagName("lt");
for (int i = 0; i <firstUnitNodes.getLength() ; i++) {
//标签的文本
resList.getFirstUnitList().add(firstUnitNodes.item(i).getTextContent());
}
NodeList supportUnitNodes = XmlUtil.getElement(softwareElement, "supportUnit").getElementsByTagName("lt");
for (int i = 0; i <supportUnitNodes.getLength() ; i++) {
//标签的文本
resList.getSupportUnitList().add(supportUnitNodes.item(i).getTextContent());
}
NodeList managerNodeNodes = XmlUtil.getElement(softwareElement, "managerNode").getElementsByTagName("lt");
for (int i = 0; i <managerNodeNodes.getLength() ; i++) {
//标签的文本
resList.getManagerNodeList().add(managerNodeNodes.item(i).getTextContent());
}
NodeList dbTypeNodes = XmlUtil.getElement(softwareElement, "dbType").getElementsByTagName("lt");
for (int i = 0; i <dbTypeNodes.getLength() ; i++) {
//标签的文本
resList.getDbTypeList().add(dbTypeNodes.item(i).getTextContent());
}
return resList;
}
private DeviceManagerInitVO dataDictExcel(File file){
List<DeviceManagerInitVO> list = EasyExcel.read(file, DeviceManagerInitVO.class,null)
.sheet(1).headRowNumber(2).doReadSync();
DeviceManagerInitVO resList = new DeviceManagerInitVO();
//密钥长度
List<String> keyLengthList = list.stream()
.map(DeviceManagerInitVO::getKeyLength)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
//算法类型
List<String> algorithmList = list.stream()
.map(DeviceManagerInitVO::getAlgorithm)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
resList.setKeyLengthList(keyLengthList);
resList.setAlgorithmList(algorithmList);
return resList;
}
private DeviceManagerInitVO dataDictXml(Element rootElement){
Element terminalElement = XmlUtil.getElement(rootElement, "device-manager-terminal");
DeviceManagerInitVO resList = new DeviceManagerInitVO(true);
NodeList keyLengthNodes = XmlUtil.getElement(terminalElement, "keyLength").getElementsByTagName("lt");
for (int i = 0; i <keyLengthNodes.getLength() ; i++) {
//标签的文本
resList.getKeyLengthList().add(keyLengthNodes.item(i).getTextContent());
}
NodeList algorithmNodes = XmlUtil.getElement(terminalElement, "algorithm").getElementsByTagName("lt");
for (int i = 0; i <algorithmNodes.getLength() ; i++) {
//标签的文本
resList.getAlgorithmList().add(algorithmNodes.item(i).getTextContent());
}
return resList;
}
private LocalManagerInitVO localManagerDictExcel(File file){
List<LocalManagerInitVO> list = EasyExcel.read(file, LocalManagerInitVO.class,null)
.sheet(2).headRowNumber(2).doReadSync();
LocalManagerInitVO resList = new LocalManagerInitVO();
//配发节点
List<String> distributionNodeList = list.stream()
.map(LocalManagerInitVO::getDistributionNode)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
//配发状态
List<String> distributionStatusList = list.stream()
.map(LocalManagerInitVO::getDistributionStatus)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
//密钥长度
List<String> keyLengthList = list.stream()
.map(LocalManagerInitVO::getKeyLength)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
//密钥发送节点
List<String> keyNodeList = list.stream()
.map(LocalManagerInitVO::getKeyNode)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
resList.setDistributionNodeList(distributionNodeList);
resList.setDistributionStatusList(distributionStatusList);
resList.setKeyLengthList(keyLengthList);
resList.setKeyNodeList(keyNodeList);
return resList;
}
private LocalManagerInitVO localManagerDictXml(Element rootElement){
Element localElement = XmlUtil.getElement(rootElement, "local-manager-terminal");
LocalManagerInitVO resList = new LocalManagerInitVO(true);
NodeList distributionNodeNodes = XmlUtil.getElement(localElement, "distributionNode").getElementsByTagName("lt");
for (int i = 0; i <distributionNodeNodes.getLength() ; i++) {
//标签的文本
resList.getDistributionNodeList().add(distributionNodeNodes.item(i).getTextContent());
}
NodeList keyLengthNodes = XmlUtil.getElement(localElement, "keyLength").getElementsByTagName("lt");
for (int i = 0; i <keyLengthNodes.getLength() ; i++) {
//标签的文本
resList.getKeyLengthList().add(keyLengthNodes.item(i).getTextContent());
}
NodeList keyNodeNodes = XmlUtil.getElement(localElement, "keyNode").getElementsByTagName("lt");
for (int i = 0; i <keyNodeNodes.getLength() ; i++) {
//标签的文本
resList.getKeyNodeList().add(keyNodeNodes.item(i).getTextContent());
}
return resList;
}
private DeviceResourceInitVO configureDeviceExcel(File file){
List<DeviceResourceInitVO> list = EasyExcel.read(file, DeviceResourceInitVO.class,null)
.sheet(3).headRowNumber(2).doReadSync();
DeviceResourceInitVO resList = new DeviceResourceInitVO();
//状态
List<String> resourceStatusList = list.stream()
.map(DeviceResourceInitVO::getResourceStatus)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
resList.setResourceStatusList(resourceStatusList);
return resList;
}
}

@ -0,0 +1,32 @@
package com.imitate.web.module.simulation.service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.imitate.web.persistence.beans.SysLog;
import com.imitate.web.persistence.mapper.SysLogMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class SysLogService {
@Autowired
private SysLogMapper sysLogMapper;
public SysLog getById(Long id){
return sysLogMapper.selectByPrimaryKey(id);
}
public List<SysLog> list(String operation){
return sysLogMapper.selectAllByOperation(operation);
}
public PageInfo<SysLog> page(Integer pageNum,Integer pageSize){
PageHelper.startPage(pageNum, pageSize);
List<SysLog> logList = sysLogMapper.selectAll();
PageInfo<SysLog> page = new PageInfo<>(logList);
return page;
}
}

@ -0,0 +1,27 @@
package com.imitate.web.params;
import com.imitate.web.persistence.beans.Certificate;
import lombok.Data;
import lombok.experimental.Delegate;
import javax.validation.Valid;
import java.io.Serializable;
/**
*
* @author yanchao
*/
@Data
public class CertificateOpenParam implements Serializable {
@Valid
@Delegate
private Certificate certificate;
{
certificate = new Certificate();
}
}

@ -0,0 +1,25 @@
package com.imitate.web.params;
import com.imitate.common.util.BasePageCondition;
import com.imitate.web.persistence.beans.DataTerminal;
import lombok.Data;
import lombok.experimental.Delegate;
import javax.validation.Valid;
import java.io.Serializable;
/**
* @author jshixiong
*/
@Data
public class DataTerminalParam extends BasePageCondition implements Serializable {
@Valid
@Delegate
private DataTerminal dataTerminal;
{
dataTerminal = new DataTerminal();
}
}

@ -0,0 +1,29 @@
package com.imitate.web.params;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
*
* @author yanchao
*/
@Data
public class DatabaseTestConnectionParam implements Serializable {
@NotBlank(message = "数据库类型不能为空,类型MYSQLORACLESQLSEVER")
private String dbType;
@NotBlank(message = "数据库驱动不能为空")
private String dbDrive;
@NotBlank(message = "数据库ip不能为空")
private String dbIp;
@NotBlank(message = "数据库端口不能为空")
private String dbPort;
@NotBlank(message = "数据库名称不能为空")
private String dbName;
@NotBlank(message = "数据库用户名不能为空")
private String dbUser;
@NotBlank(message = "数据库密码不能为空")
private String dbPasswd;
}

@ -0,0 +1,23 @@
package com.imitate.web.params;
import com.imitate.common.util.BasePageCondition;
import com.imitate.web.persistence.beans.Device;
import lombok.Data;
import lombok.experimental.Delegate;
import javax.validation.Valid;
import java.io.Serializable;
/**
* @author jshixiong
*/
@Data
public class DeviceListParam extends BasePageCondition implements Serializable {
@Delegate
private Device device;
{
device = new Device();
}
}

@ -0,0 +1,23 @@
package com.imitate.web.params;
import com.imitate.web.persistence.beans.Device;
import lombok.Data;
import lombok.experimental.Delegate;
import javax.validation.Valid;
import java.io.Serializable;
/**
* @author jshixiong
*/
@Data
public class DeviceParam implements Serializable {
@Valid
@Delegate
private Device device;
{
device = new Device();
}
}

@ -0,0 +1,27 @@
package com.imitate.web.params;
import com.imitate.common.util.BasePageCondition;
import com.imitate.web.persistence.beans.DeviceType;
import lombok.Data;
import lombok.experimental.Delegate;
import javax.validation.Valid;
import java.io.Serializable;
import java.util.List;
/**
* @author jshixiong
*/
@Data
public class DeviceTypeParam extends BasePageCondition implements Serializable {
@Valid
@Delegate
private DeviceType deviceType;
{
deviceType = new DeviceType();
}
private List<Long> producerIdList;
}

@ -0,0 +1,21 @@
package com.imitate.web.params;
import com.imitate.common.util.BasePageCondition;
import com.imitate.web.persistence.beans.DeviceDistribution;
import lombok.Data;
import lombok.experimental.Delegate;
import java.io.Serializable;
/**
* @author jshixiong
*/
@Data
public class DistributionListParam extends BasePageCondition implements Serializable {
@Delegate
private DeviceDistribution deviceDistribution;
{
deviceDistribution = new DeviceDistribution();
}
}

@ -0,0 +1,22 @@
package com.imitate.web.params;
import com.imitate.web.persistence.beans.DeviceDistribution;
import lombok.Data;
import lombok.experimental.Delegate;
import javax.validation.Valid;
import java.io.Serializable;
/**
* @author jshixiong
*/
@Data
public class DistributionParam implements Serializable {
@Valid
@Delegate
private DeviceDistribution deviceDistribution;
{
deviceDistribution = new DeviceDistribution();
}
}

@ -0,0 +1,23 @@
package com.imitate.web.params;
import com.imitate.web.persistence.beans.Producer;
import lombok.Data;
import lombok.experimental.Delegate;
import javax.validation.Valid;
import java.io.Serializable;
/**
* @author jshixiong
*/
@Data
public class ProducerParam implements Serializable {
@Valid
@Delegate
private Producer producer;
{
producer = new Producer();
}
}

@ -0,0 +1,27 @@
package com.imitate.web.params;
import com.imitate.web.persistence.beans.Resource;
import lombok.Data;
import lombok.experimental.Delegate;
import javax.validation.Valid;
import java.io.Serializable;
/**
*
* @author yanchao
*/
@Data
public class ResourceOpenParam implements Serializable {
@Valid
@Delegate
private Resource resource;
{
resource = new Resource();
}
}

@ -0,0 +1,23 @@
package com.imitate.web.params;
import com.imitate.web.persistence.beans.SecretKey;
import lombok.Data;
import lombok.experimental.Delegate;
import javax.validation.Valid;
import java.io.Serializable;
/**
* @author jshixiong
*/
@Data
public class SecretKeyParam implements Serializable {
@Valid
@Delegate
private SecretKey secretKey;
{
secretKey = new SecretKey();
}
}

@ -0,0 +1,93 @@
package com.imitate.web.persistence.beans;
import com.imitate.common.util.AbstractDO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Table;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
*
* @author yanchao
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Table(name = "certificate")
public class Certificate extends AbstractDO {
@Column(name = "status")
private Boolean status;
@NotBlank(message = "单位不能为空")
@Column(name = "company")
private String company;
@NotBlank(message = "数据库类型不能为空")
@Column(name = "db_type")
private String dbType;
@NotBlank(message = "数据库驱动不能为空")
@Column(name = "db_drive")
private String dbDrive;
@NotBlank(message = "数据库ip不能为空")
@Column(name = "db_ip")
private String dbIp;
@NotBlank(message = "数据库端口不能为空")
@Column(name = "db_port")
private String dbPort;
@NotBlank(message = "数据库名称不能为空")
@Column(name = "db_name")
private String dbName;
@NotBlank(message = "数据库密码不能为空")
@Column(name = "db_passwd")
private String dbPasswd;
@Column(name = "db_is_conn")
private Boolean dbIsConn;
@NotBlank(message = "目标服务器地址不能为空")
@Column(name = "target_ip")
private String targetIp;
@NotBlank(message = "目标服务器端口不能为空")
@Column(name = "target_port")
private String targetPort;
@NotBlank(message = "用户dn不能为空")
@Column(name = "target_userdn")
private String targetUserdn;
@NotBlank(message = "用户口令不能为空")
@Column(name = "target_passwd")
private String targetPasswd;
@NotBlank(message = "用户证书发布配置文件路径不能为空")
@Column(name = "cert_url")
private String certUrl;
@NotNull(message = "CRL发布点中的证书数量")
@Column(name = "cert_num")
private Integer certNum;
@NotNull(message = "CRL发布周期")
@Column(name = "cert_cycle")
private Integer certCycle;
@NotBlank(message = "导入证书文件1不能为空")
@Column(name = "import_cert_file1")
private String importCertFile1;
@NotBlank(message = "导入证书文件2不能为空")
@Column(name = "import_cert_file2")
private String importCertFile2;
}

@ -0,0 +1,73 @@
package com.imitate.web.persistence.beans;
import com.imitate.common.util.AbstractDO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-28
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Table(name = "data_terminal")
public class DataTerminal extends AbstractDO {
/**
*
*/
@Column(name = "name")
private String name;
/**
* 12
*/
@Column(name = "type")
private String type;
/**
*
*/
@Column(name = "number")
@NotBlank(message = "编号不能为空")
private String number;
/**
* ID
*/
@Column(name = "producer_id")
@NotNull(message = "生产厂商ID不能为空")
private Long producerId;
/**
*
*/
@Column(name = "manager_num")
private String managerNum;
/**
*
*/
@Column(name = "physics_num")
private String physicsNum;
/**
*
*/
@Column(name = "status")
private Boolean status;
@Transient
private Producer producer;
}

@ -0,0 +1,83 @@
package com.imitate.web.persistence.beans;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.imitate.common.util.AbstractDO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-14
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Table(name = "device")
public class Device extends AbstractDO{
/**
*
*/
@NotBlank(message = "设备编号不能为空")
@Column(name = "device_id")
private String deviceId;
/**
*
*/
@Column(name = "name")
private String name;
/**
*
*/
@NotNull(message = "设备型号不能为空")
@Column(name = "type")
private Long type;
/**
* id
*/
@NotNull(message = "生产厂商id不能为空")
@Column(name = "producer_id")
private Long producerId;
/**
*
*/
@Column(name = "status")
private String status;
/**
* ID0
*/
@Column(name = "distribution_id")
private Long distributionId;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
@Column(name = "add_time")
private LocalDateTime addTime;
@Transient
private Producer producer;
@Transient
private DeviceType deviceType;
@Transient
private List<Device> deviceList;
}

@ -0,0 +1,92 @@
package com.imitate.web.persistence.beans;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.imitate.common.util.AbstractDO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
import java.util.List;
/**
* <p>
* /
* </p>
*
* @author jshixiong
* @since 2022-08-02
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Table(name = "device_distribution")
public class DeviceDistribution extends AbstractDO {
/**
* ;12
*/
@NotBlank(message = "类型不能为空")
@Column(name = "type")
private String type;
/**
*
*/
@Column(name = "status")
private String status;
/**
*
*/
@Column(name = "number")
private String number;
/**
*
*/
@Column(name = "basis")
private String basis;
/**
*
*/
@Column(name = "user_name")
private String userName;
/**
*
*/
@Column(name = "phone")
private String phone;
/**
*
*/
@NotBlank(message = "发往节点不能为空")
@Column(name = "send_node")
private String sendNode;
/**
*
*/
@Column(name = "begin_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
private LocalDateTime beginTime;
/**
*
*/
@Column(name = "end_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
private LocalDateTime endTime;
@Transient
private List<Device> deviceList;
@Transient
private Integer deviceCount;
}

@ -0,0 +1,71 @@
package com.imitate.web.persistence.beans;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.imitate.common.util.AbstractDO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotBlank;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-25
*/
@Data
@ExcelIgnoreUnannotated
@EqualsAndHashCode(callSuper = false)
@Table(name = "device_type")
public class DeviceType extends AbstractDO {
/**
*
*/
@ExcelProperty(value = "装备名称")
@NotBlank(message = "设备型号名称不能为空")
@Column(name = "name")
private String name;
/**
*
*/
@ExcelProperty(value = "装备代号")
@NotBlank(message = "设备型号编号不能为空")
@Column(name = "type_number")
private String typeNumber;
/**
*
*/
@ExcelProperty(value = "工作模式")
@NotBlank(message = "工作模式不能为空")
@Column(name = "pattern")
private String pattern;
/**
*
*/
@ExcelProperty(value = "装备密级")
@NotBlank(message = "密级不能为空")
@Column(name = "secret_level")
private String secretLevel;
/**
*
*/
@ExcelProperty(value = "管理层级")
@NotBlank(message = "管理等级不能为空")
@Column(name = "management_level")
private String managementLevel;
@Transient
private List<Producer> producerList;
}

@ -0,0 +1,35 @@
package com.imitate.web.persistence.beans;
import com.imitate.common.util.AbstractDO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Table;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-25
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Table(name = "device_type_producer")
public class DeviceTypeProducer extends AbstractDO {
/**
* ID
*/
@Column(name = "type_id")
private Long typeId;
/**
* ID
*/
@Column(name = "producer_id")
private Long producerId;
}

@ -0,0 +1,116 @@
package com.imitate.web.persistence.beans;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.imitate.common.util.AbstractDO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Table;
import javax.validation.constraints.NotBlank;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-14
*/
@Data
@ExcelIgnoreUnannotated
@EqualsAndHashCode(callSuper = false)
@Table(name = "producer")
public class Producer extends AbstractDO {
/**
*
*/
@ExcelProperty(value = "厂商全名")
@NotBlank(message = "厂商名称不能为空")
@Column(name = "name")
private String name;
/**
*
*/
@ExcelProperty(value = "厂商代号")
@NotBlank(message = "厂商编号不能为空")
@Column(name = "producer_number")
private String producerNumber;
/**
*
*/
@Column(name = "simple_name")
private String simpleName;
/**
*
*/
@ExcelProperty(value = "厂商地址")
@NotBlank(message = "地址不能为空")
@Column(name = "address")
private String address;
/**
* 1
*/
@ExcelProperty(value = "联系人姓名")
@NotBlank(message = "联系人姓名1不能为空")
@Column(name = "contacts1")
private String contacts1;
/**
* 1
*/
@ExcelProperty(value = "联系人手机")
@NotBlank(message = "联系手机1不能为空")
@Column(name = "phone1")
private String phone1;
/**
* 1
*/
@ExcelProperty(value = "联系人电话")
@NotBlank(message = "联系电话1不能为空")
@Column(name = "tel1")
private String tel1;
/**
* 1
*/
@Column(name = "email1")
private String email1;
/**
* 2
*/
@Column(name = "contacts2")
private String contacts2;
/**
* 2
*/
@Column(name = "phone2")
private String phone2;
/**
* 2
*/
@Column(name = "tel2")
private String tel2;
/**
* 2
*/
@Column(name = "email2")
private String email2;
/**
*
*/
@Column(name = "remarks")
private String remarks;
}

@ -0,0 +1,64 @@
package com.imitate.web.persistence.beans;
import com.imitate.common.util.AbstractDO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Table;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
*
* @author yanchao
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Table(name = "resource")
public class Resource extends AbstractDO {
@Column(name = "status")
private Boolean status;
@NotBlank(message = "数据库用户名不能为空")
@Column(name = "db_user")
private String dbUser;
@NotBlank(message = "数据库密码不能为空")
@Column(name = "db_passwd")
private String dbPasswd;
@NotBlank(message = "数据库服务器ip地址不能为空")
@Column(name = "db_server_ip")
private String dbServerIp;
@NotNull(message = "type类型不能为空")
@Column(name = "type")
private Byte type;
@NotBlank(message = "数据中心名称不能为空")
@Column(name = "data_name")
private String dataName;
@NotBlank(message = "管理节点名称不能为空")
@Column(name = "node_name")
private String nodeName;
@NotBlank(message = "设备出厂编号不能为空")
@Column(name = "device_no")
private String deviceNo;
@NotBlank(message = "保障单位不能为空")
@Column(name = "support_unit")
private String supportUnit;
@NotBlank(message = "管理节点不能为空")
@Column(name = "manager_node")
private String managerNode;
@NotBlank(message = "导入文件1不能为空")
@Column(name = "file1")
private String file1;
@NotBlank(message = "导入文件2不能为空")
@Column(name = "file2")
private String file2;
@NotBlank(message = "导入文件3不能为空")
@Column(name = "file3")
private String file3;
@NotBlank(message = "导入文件4不能为空")
@Column(name = "file4")
private String file4;
}

@ -0,0 +1,58 @@
package com.imitate.web.persistence.beans;
import com.imitate.common.util.AbstractDO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author jshixiong
* @since 2022-07-14
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Table(name = "secret_key")
public class SecretKey extends AbstractDO {
/**
* 5
*/
@NotBlank(message = "类型ID不能为空")
@Column(name = "type")
private String type;
/**
*
*/
@Column(name = "length")
private Integer length;
/**
*
*/
@NotNull(message = "密钥数量不可为空")
@Column(name = "count")
private Integer count;
/**
* ;1.ECC359;2.ECC281
*/
@Column(name = "algorithm")
private String algorithm;
@Transient
private String pushNode;
@Transient
private List<String> fileNameList;
}

@ -0,0 +1,86 @@
package com.imitate.web.persistence.beans;
import com.imitate.common.util.AbstractDO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Table;
import java.time.LocalDateTime;
/**
*
* @author
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Table(name = "sys_log")
public class SysLog extends AbstractDO {
/**
*
*/
@Column(name = "operation")
private String operation;
/**
*
*/
@Column(name = "module_name")
private String moduleName;
/**
*
*/
@Column(name = "method")
private String method;
/**
*
*/
@Column(name = "params")
private String params;
/**
* ()
*/
@Column(name = "time")
private Integer time;
/**
* IP
*/
@Column(name = "ip")
private String ip;
/**
*
*/
@Column(name = "method_path")
private String methodPath;
/**
*
*/
@Column(name = "class_path")
private String classPath;
/**
* GETPOST
*/
@Column(name = "http_type")
private String httpType;
/**
*
*/
@Column(name = "result")
private String result;
}

@ -0,0 +1,21 @@
package com.imitate.web.persistence.mapper;
import com.imitate.common.util.BaseMapper;
import com.imitate.web.persistence.beans.Certificate;
import com.imitate.web.persistence.beans.Resource;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
*
* @author yanchao
*/
@Mapper
@Repository
public interface CertificateMapper extends BaseMapper<Certificate> {
Certificate selectRecentCertificate();
void truncateTable();
}

@ -0,0 +1,43 @@
package com.imitate.web.persistence.mapper;
import com.imitate.common.util.BaseMapper;
import com.imitate.web.persistence.beans.DataTerminal;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* Mapper
* </p>
*
* @author jshixiong
* @since 2022-07-28
*/
@Mapper
@Repository
public interface DataTerminalMapper extends BaseMapper<DataTerminal> {
/**
*
* @param type
* @return List
*/
List<DataTerminal> selectAllPro(@Param("type") String type);
/**
* ID
* @param id ID
* @return DataTerminal
*/
DataTerminal getById(Long id);
/**
*
* @param type
* @return DataTerminal
*/
DataTerminal getTerminalOpen(@Param("type") String type);
}

@ -0,0 +1,37 @@
package com.imitate.web.persistence.mapper;
import com.imitate.common.util.BaseMapper;
import com.imitate.web.params.DistributionListParam;
import com.imitate.web.persistence.beans.DeviceDistribution;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* / Mapper
* </p>
*
* @author jshixiong
* @since 2022-08-02
*/
@Mapper
@Repository
public interface DeviceDistributionMapper extends BaseMapper<DeviceDistribution> {
/**
*
* @param param DistributionListParam
* @return List
*/
List<DeviceDistribution> selectAllPro(@Param("param") DistributionListParam param);
/**
* id
* @param id ID
* @return DeviceDistribution
*/
DeviceDistribution getById(Long id);
}

@ -0,0 +1,58 @@
package com.imitate.web.persistence.mapper;
import com.imitate.common.util.BaseMapper;
import com.imitate.web.persistence.beans.Device;
import com.imitate.web.params.DeviceListParam;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* Mapper
* </p>
*
* @author jshixiong
* @since 2022-07-14
*/
@Mapper
@Repository
public interface DeviceMapper extends BaseMapper<Device> {
/**
*
* @param param
* @return List
*/
List<Device> selectAllPro(@Param("param") DeviceListParam param);
/**
*
* @return List
*/
List<Device> selectDeviceByType();
/**
* id
* @param id ID
* @return Device
*/
Device getById(Long id);
/**
* 使ID
* @param producerId ID
* @return Integer
*/
Integer selectCountById(Long producerId);
/**
*
* @param distributionId ID
* @return int
*/
int updateDistributionId (Long distributionId);
}

@ -0,0 +1,37 @@
package com.imitate.web.persistence.mapper;
import com.imitate.common.util.BaseMapper;
import com.imitate.web.params.DeviceTypeParam;
import com.imitate.web.persistence.beans.DeviceType;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* Mapper
* </p>
*
* @author jshixiong
* @since 2022-07-25
*/
@Mapper
@Repository
public interface DeviceTypeMapper extends BaseMapper<DeviceType> {
/**
* ID
* @param id ID
* @return DeviceType
*/
DeviceType getById(Long id);
/**
*
* @param param DeviceTypeParam
* @return List
*/
List<DeviceType> selectByKey(@Param("param") DeviceTypeParam param);
}

@ -0,0 +1,26 @@
package com.imitate.web.persistence.mapper;
import com.imitate.common.util.BaseMapper;
import com.imitate.web.persistence.beans.DeviceTypeProducer;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* <p>
* Mapper
* </p>
*
* @author jshixiong
* @since 2022-07-25
*/
@Mapper
@Repository
public interface DeviceTypeProducerMapper extends BaseMapper<DeviceTypeProducer> {
/**
* typeId -
* @param id ID
* @return int
*/
int deleteByTypeId(Long id);
}

@ -0,0 +1,21 @@
package com.imitate.web.persistence.mapper;
import com.imitate.common.util.BaseMapper;
import com.imitate.web.persistence.beans.Producer;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* <p>
* Mapper
* </p>
*
* @author jshixiong
* @since 2022-07-14
*/
@Mapper
@Repository
public interface ProducerMapper extends BaseMapper<Producer> {
}

@ -0,0 +1,17 @@
package com.imitate.web.persistence.mapper;
import com.imitate.common.util.BaseMapper;
import com.imitate.web.persistence.beans.Resource;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface ResourceMapper extends BaseMapper<Resource> {
Resource selectRecentResource();
void truncateTable();
}

@ -0,0 +1,63 @@
package com.imitate.web.persistence.mapper;
import com.imitate.common.util.BaseMapper;
import com.imitate.web.persistence.beans.SecretKey;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* Mapper
* </p>
*
* @author jshixiong
* @since 2022-07-14
*/
@Mapper
@Repository
public interface SecretKeyMapper extends BaseMapper<SecretKey> {
/**
*
* @param secretKey
* @return SecretKey
*/
SecretKey selectByLengthAndType(SecretKey secretKey);
/**
*
* @param secretKey
* @return int
*/
int updateByLengthAndType(SecretKey secretKey);
/**
*
* @param secretKey
* @return int
*/
int updateByAlgorithmAndType(SecretKey secretKey);
/**
*
* @param type
* @return List
*/
List<SecretKey> selectStatisticsByType(String type);
/**
*
* @param secretKey
* @return int
*/
int pushByLengthAndType(SecretKey secretKey);
/**
*
* @return int
*/
int deleteAll();
}

@ -0,0 +1,20 @@
package com.imitate.web.persistence.mapper;
import com.imitate.common.util.BaseMapper;
import com.imitate.web.persistence.beans.SysLog;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface SysLogMapper extends BaseMapper<SysLog> {
/**
*
* @param operation
* @return List
*/
List<SysLog> selectAllByOperation(@Param("operation") String operation);
}

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

Loading…
Cancel
Save