commit:添加多对多关联中间表更新支持,功能位于 班级管理 -> 课程 -> 编辑课程顺序

This commit is contained in:
Jerry
2020-09-27 22:22:59 +08:00
parent 295d466207
commit 307588694e
495 changed files with 7134 additions and 1183 deletions

View File

@@ -0,0 +1,216 @@
<?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" />
<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-web:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.25" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.10.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.31" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.31" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.31" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.18.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:28.2-android" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
<orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
<orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
<orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.4" level="project" />
<orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.9" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.13" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.3" level="project" />
<orderEntry type="library" name="Maven: joda-time:joda-time:2.10.5" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-csv:1.8" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.1.5" level="project" />
<orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.9.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.10.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.10.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.10.2" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.70" level="project" />
<orderEntry type="library" name="Maven: com.github.ben-manes.caffeine:caffeine:2.8.1" level="project" />
<orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.1.0" level="project" />
<orderEntry type="library" name="Maven: cn.jimmyshi:bean-query:1.1.5" level="project" />
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-all:1.3" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.3" level="project" />
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.30" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:4.1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:4.1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:3.1.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.19" level="project" />
<orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.06" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.19" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.22" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.22" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-starter:2.1.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.4.RELEASE" 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.5" 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.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-weekend:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.13" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.1" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.1" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.2.13" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.1.11" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:2.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-freemarker:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.29" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:4.0.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-log4j2:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-slf4j-impl:2.12.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.12.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-core:2.12.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-jul:2.12.1" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-actuator:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator-autoconfigure:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.micrometer:micrometer-core:1.3.5" level="project" />
<orderEntry type="library" name="Maven: org.hdrhistogram:HdrHistogram:2.1.11" level="project" />
<orderEntry type="library" name="Maven: org.latencyutils:LatencyUtils:2.0.3" level="project" />
<orderEntry type="library" name="Maven: de.codecentric:spring-boot-admin-starter-client:2.2.3" level="project" />
<orderEntry type="library" name="Maven: de.codecentric:spring-boot-admin-client:2.2.3" level="project" />
<orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:2.2.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.alibaba.spring:spring-context-support:1.0.6" level="project" />
<orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-client:1.2.1" level="project" />
<orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-common:1.2.1" level="project" />
<orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-api:1.2.1" level="project" />
<orderEntry type="library" name="Maven: io.prometheus:simpleclient:0.5.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-commons:2.2.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:5.2.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-context:2.2.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:2.2.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:2.2.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.59" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.59" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-openfeign-core:2.2.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form-spring:3.8.0" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.8.0" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-core:10.7.4" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-slf4j:10.7.4" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-hystrix:10.7.4" level="project" />
<orderEntry type="library" name="Maven: com.netflix.archaius:archaius-core:0.7.6" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-httpclient:10.7.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.11" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-hystrix:2.2.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-hystrix:2.2.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-ribbon:2.2.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-archaius:2.2.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-archaius:2.2.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: commons-configuration:commons-configuration:1.8" level="project" />
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
<orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-core:1.5.18" level="project" />
<orderEntry type="library" name="Maven: io.reactivex:rxjava:1.3.8" level="project" />
<orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-serialization:1.5.18" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: com.fasterxml.jackson.module:jackson-module-afterburner:2.10.2" level="project" />
<orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-metrics-event-stream:1.5.18" level="project" />
<orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-javanica:1.5.18" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
<orderEntry type="library" name="Maven: io.reactivex:rxjava-reactive-streams:1.2.1" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.3.1.Final" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.mapstruct:mapstruct-processor:1.3.1.Final" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.12" level="project" />
<orderEntry type="library" name="Maven: org.apache.curator:curator-recipes:4.3.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.curator:curator-framework:4.0.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.curator:curator-client:4.0.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.zookeeper:zookeeper:3.5.3-beta" level="project" />
<orderEntry type="library" name="Maven: commons-cli:commons-cli:1.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.kafka:kafka-clients:2.4.0" level="project" />
<orderEntry type="library" name="Maven: com.github.luben:zstd-jni:1.4.3-1" level="project" />
<orderEntry type="library" name="Maven: org.lz4:lz4-java:1.6.0" level="project" />
<orderEntry type="library" name="Maven: org.xerial.snappy:snappy-java:1.1.7.3" level="project" />
<orderEntry type="library" name="Maven: org.scala-lang:scala-library:2.12.10" level="project" />
<orderEntry type="library" name="Maven: com.lmax:disruptor:3.4.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.2.5.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.2.5.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.2.5.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.2" 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.junit.jupiter:junit-jupiter:5.5.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.5.2" 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.5.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.5.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.5.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.vintage:junit-vintage-engine:5.5.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.junit.platform:junit-platform-engine:1.5.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.1.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.13.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.1.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.10.8" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.8" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" 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" name="Maven: org.springframework:spring-core:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.4.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.2.4.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.6.3" level="project" />
</component>
</module>

View File

@@ -106,15 +106,5 @@
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>${redisson.version}</version>
</dependency>
</dependencies>
</project>

View File

@@ -11,8 +11,8 @@ import java.util.Date;
/**
* Controller的环绕拦截类。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@ControllerAdvice
public class MyControllerAdvice {

View File

@@ -21,8 +21,8 @@ import java.util.concurrent.TimeoutException;
* 业务层的异常处理类这里只是给出最通用的Exception的捕捉今后可以根据业务需要
* 用不同的函数,处理不同类型的异常。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Slf4j
@RestControllerAdvice("com.orange.demo")

View File

@@ -5,8 +5,8 @@ import java.lang.annotation.*;
/**
* 主要用于标记逻辑删除字段。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@@ -5,8 +5,8 @@ import java.lang.annotation.*;
/**
* 主要用于标记更新字段。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@@ -5,8 +5,8 @@ import java.lang.annotation.*;
/**
* 主要用于标记Service所依赖的数据源类型。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)

View File

@@ -8,8 +8,8 @@ import java.lang.annotation.Target;
/**
* 标记Controller中的方法参数参数解析器会根据该注解将请求中的JSON数据映射到参数中的绑定字段。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)

View File

@@ -5,8 +5,8 @@ import java.lang.annotation.*;
/**
* 主要用于标记无需Token验证的接口
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)

View File

@@ -5,8 +5,8 @@ import java.lang.annotation.*;
/**
* 标识Model和常量字典之间的关联关系。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)

View File

@@ -7,8 +7,8 @@ import java.lang.annotation.*;
/**
* 标识Model之间的字典关联关系。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)

View File

@@ -5,8 +5,8 @@ import java.lang.annotation.*;
/**
* 标注多对多的Model关系。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)

View File

@@ -7,8 +7,8 @@ import java.lang.annotation.*;
/**
* 主要用于多对多的Model关系。标注通过从表关联字段或者关联表关联字段计算主表聚合计算字段的规则。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)

View File

@@ -7,8 +7,8 @@ import java.lang.annotation.*;
/**
* 主要用于一对多的Model关系。标注通过从表关联字段计算主表聚合计算字段的规则。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)

View File

@@ -7,8 +7,8 @@ import java.lang.annotation.*;
/**
* 标识Model之间的一对一关联关系。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)

View File

@@ -26,8 +26,8 @@ import java.util.List;
/**
* 记录接口的链路traceId、请求参数、应答数据、错误信息和调用时长。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Aspect
@Component

View File

@@ -13,8 +13,8 @@ import java.util.Set;
*
* @param <D> 主DomainDto域数据对象类型。
* @param <K> 主键类型。
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public interface BaseClient<D, K> {

View File

@@ -32,8 +32,8 @@ import java.util.stream.Collectors;
* @param <M> 主Model实体对象类型。
* @param <D> 主DomainDto域对象类型。
* @param <K> 主键类型。
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Slf4j
public abstract class BaseController<M, D, K> {

View File

@@ -13,8 +13,8 @@ import java.util.Map;
* 数据访问对象的基类。
*
* @param <M> 主Model实体对象。
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@RegisterMapper
public interface BaseDaoMapper<M> extends Mapper<M>, InsertListMapper<M> {

View File

@@ -11,8 +11,8 @@ import java.util.stream.Collectors;
*
* @param <D> Domain域对象类型。
* @param <M> Model实体对象类型。
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public interface BaseModelMapper<D, M> {

View File

@@ -7,8 +7,8 @@ import java.util.List;
* 由于没有实际的数据转换,因此同时保证了代码统一和执行效率。
*
* @param <M> 数据类型。
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class DummyModelMapper<M> implements BaseModelMapper<M, M> {

View File

@@ -16,8 +16,8 @@ import java.util.List;
* @param <M> Model实体对象的类型。
* @param <D> Model对应的DomainDto域对象类型。
* @param <K> Model对象主键的类型。
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Slf4j
public abstract class BaseDictService<M, D, K> extends BaseService<M, D, K> {

View File

@@ -39,8 +39,8 @@ import static java.util.stream.Collectors.*;
* @param <M> Model对象的类型。
* @param <D> Model对应的Dto对象类型。
* @param <K> Model对象主键的类型。
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Slf4j
public abstract class BaseService<M, D, K> {

View File

@@ -1,83 +0,0 @@
package com.orange.demo.common.core.cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.cache.support.SimpleCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
/**
* 使用Caffeine作为本地缓存库。
*
* @author Orange Team
* @date 2020-08-08
*/
@Configuration
@EnableCaching
public class CacheConfig {
private static final int DEFAULT_MAXSIZE = 10000;
private static final int DEFAULT_TTL = 3600;
/**
* 定义cache名称、超时时长秒、最大个数。
* 每个cache缺省3600秒过期最大个数1000。
*/
public enum CacheEnum {
/**
* 缺省全局缓存(时间是24小时)。
*/
GLOBAL_CACHE(86400, 20000);
CacheEnum() {
}
CacheEnum(int ttl, int maxSize) {
this.ttl = ttl;
this.maxSize = maxSize;
}
/**
* 缓存的最大数量。
*/
private int maxSize = DEFAULT_MAXSIZE;
/**
* 缓存的时长(单位:秒)
*/
private int ttl = DEFAULT_TTL;
public int getMaxSize() {
return maxSize;
}
public int getTtl() {
return ttl;
}
}
/**
* 个性化配置缓存。
*/
@Bean
public CacheManager cacheManager() {
SimpleCacheManager manager = new SimpleCacheManager();
//把各个cache注册到cacheManager中CaffeineCache实现了org.springframework.cache.Cache接口
ArrayList<CaffeineCache> caches = new ArrayList<>();
for (CacheEnum c : CacheEnum.values()) {
caches.add(new CaffeineCache(c.name(),
Caffeine.newBuilder().recordStats()
.expireAfterAccess(c.getTtl(), TimeUnit.SECONDS)
.maximumSize(c.getMaxSize())
.build())
);
}
manager.setCaches(caches);
return manager;
}
}

View File

@@ -8,8 +8,8 @@ import java.util.Set;
*
* @param <K> 字典表主键类型。
* @param <V> 字典表对象类型。
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public interface DictionaryCache<K, V> {

View File

@@ -8,8 +8,8 @@ import java.util.function.Function;
*
* @param <K> 字典表主键类型。
* @param <V> 字典表对象类型。
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class MapDictionaryCache<K, V> implements DictionaryCache<K, V> {

View File

@@ -11,8 +11,8 @@ import java.util.function.Function;
*
* @param <K> 字典表主键类型。
* @param <V> 字典表对象类型。
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class MapTreeDictionaryCache<K, V> extends MapDictionaryCache<K, V> {

View File

@@ -20,8 +20,8 @@ import java.util.List;
/**
* 所有的项目拦截器、参数解析器、消息对象转换器都在这里集中配置。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Configuration
public class CommonWebMvcConfig implements WebMvcConfigurer {

View File

@@ -7,8 +7,8 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
/**
* 目前用于用户密码加密UAA接入应用客户端的client_secret加密。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Configuration
public class EncryptConfig {

View File

@@ -10,8 +10,8 @@ import org.springframework.context.annotation.Configuration;
/**
* FeignClient的配置对象。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Configuration
public class FeignConfig implements RequestInterceptor {

View File

@@ -23,8 +23,8 @@ import java.util.List;
/**
* RestTemplate连接池配置对象。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Configuration
public class RestTemplateConfig {

View File

@@ -9,8 +9,8 @@ import org.springframework.context.annotation.Configuration;
/**
* tomcat配置对象。当前配置禁用了PUT和DELETE方法防止渗透攻击。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Configuration
public class TomcatConfig {

View File

@@ -3,8 +3,8 @@ package com.orange.demo.common.core.constant;
/**
* 在跨服务调用时,需要传递的聚合分类常量对象。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public final class AggregationKind {

View File

@@ -6,8 +6,8 @@ import java.util.Map;
/**
* 聚合计算的常量类型对象。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public final class AggregationType {

View File

@@ -3,8 +3,8 @@ package com.orange.demo.common.core.constant;
/**
* 应用程序的常量声明对象。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public final class ApplicationConstant {

View File

@@ -3,8 +3,8 @@ package com.orange.demo.common.core.constant;
/**
* 返回应答中的错误代码和错误信息。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public enum ErrorCodeEnum {

View File

@@ -3,8 +3,8 @@ package com.orange.demo.common.core.constant;
/**
* 数据记录逻辑删除标记常量。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public final class GlobalDeletedFlag {

View File

@@ -3,8 +3,8 @@ package com.orange.demo.common.core.exception;
/**
* 数据验证失败的自定义异常。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class DataValidationException extends RuntimeException {

View File

@@ -6,8 +6,8 @@ import lombok.EqualsAndHashCode;
/**
* 无效的类对象字段的自定义异常。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Data
@EqualsAndHashCode(callSuper = true)

View File

@@ -6,8 +6,8 @@ import lombok.EqualsAndHashCode;
/**
* 无效的实体对象字段的自定义异常。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Data
@EqualsAndHashCode(callSuper = true)

View File

@@ -6,8 +6,8 @@ import lombok.EqualsAndHashCode;
/**
* 无效的实体对象的自定义异常。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Data
@EqualsAndHashCode(callSuper = true)

View File

@@ -4,8 +4,8 @@ package com.orange.demo.common.core.exception;
* 自定义的运行时异常,在需要抛出运行时异常时,可使用该异常。
* NOTE主要是为了避免SonarQube进行代码质量扫描时给出警告。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class MyRuntimeException extends RuntimeException {

View File

@@ -3,8 +3,8 @@ package com.orange.demo.common.core.exception;
/**
* 没有数据被修改的自定义异常。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class NoDataAffectException extends RuntimeException {

View File

@@ -3,8 +3,8 @@ package com.orange.demo.common.core.exception;
/**
* 没有数据访问权限的自定义异常。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class NoDataPermException extends RuntimeException {

View File

@@ -3,8 +3,8 @@ package com.orange.demo.common.core.exception;
/**
* Redis缓存访问失败。比如获取分布式数据锁超时、等待线程中断等。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class RedisCacheAccessException extends RuntimeException {

View File

@@ -3,8 +3,8 @@ package com.orange.demo.common.core.exception;
/**
* 关联远程服务数据失败的自定义异常。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class RemoteDataBuildException extends RuntimeException {

View File

@@ -28,8 +28,8 @@ import java.util.*;
* 1、单个字符串等包装类型都要写一个对象才可以用@RequestBody接收
* 2、多个对象需要封装到一个对象里才可以用@RequestBody接收。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver {

View File

@@ -10,8 +10,8 @@ import java.util.Map;
/**
* 应用程序启动后的事件监听对象。主要负责加载Model之间的字典关联和一对一关联所对应的Service结构关系。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Component
public class LoadCachedDataListener implements ApplicationListener<ApplicationReadyEvent> {

View File

@@ -10,8 +10,8 @@ import java.util.Map;
/**
* 应用程序启动后的事件监听对象。主要负责加载Model之间的字典关联和一对一关联所对应的Service结构关系。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Component
public class LoadServiceRelationListener implements ApplicationListener<ApplicationReadyEvent> {

View File

@@ -7,8 +7,8 @@ import lombok.Data;
* 接口数据验证结果对象。主要是Service类使用。
* 同时为了提升效率减少查询次数可以根据具体的需求将部分验证关联对象存入data字段以供Controller使用。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Data
public class CallResult {

View File

@@ -3,8 +3,8 @@ package com.orange.demo.common.core.object;
/**
* 哑元对象,主要用于注解中的缺省对象占位符。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public final class DummyClass {

View File

@@ -9,8 +9,8 @@ import java.util.Set;
/**
* 分组聚合查询参数。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Data
public class MyAggregationParam {

View File

@@ -6,8 +6,8 @@ import lombok.Data;
/**
* Mybatis Mapper.xml中所需的分组条件对象。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Data
@AllArgsConstructor

View File

@@ -19,8 +19,8 @@ import java.util.List;
/**
* 查询分组参数请求对象。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@EqualsAndHashCode(callSuper = true)
@Slf4j

View File

@@ -17,8 +17,8 @@ import java.util.*;
/**
* Controller参数中的排序请求对象。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@EqualsAndHashCode(callSuper = true)
@Slf4j

View File

@@ -5,8 +5,8 @@ import lombok.Getter;
/**
* Controller参数中的分页请求对象
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Getter
public class MyPageParam {

View File

@@ -8,8 +8,8 @@ import java.util.*;
/**
* 查询参数。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Data
public class MyQueryParam {

View File

@@ -7,8 +7,8 @@ import lombok.Data;
* 实体对象数据组装参数构建器。
* BaseService中的实体对象数据组装函数会根据该参数对象进行数据组装。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Data
@Builder

View File

@@ -15,8 +15,8 @@ import java.util.List;
/**
* Where中的条件语句。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Slf4j
@Data

View File

@@ -6,8 +6,8 @@ import lombok.Data;
/**
* 接口返回对象
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Data
public class ResponseResult<T> {

View File

@@ -15,8 +15,8 @@ import java.nio.charset.StandardCharsets;
/**
* 基于Jwt用于前后端传递的令牌对象。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Data
@ToString

View File

@@ -3,8 +3,8 @@ package com.orange.demo.common.core.object;
/**
* 二元组对象。主要用于可以一次返回多个结果的场景,同时还能避免强制转换。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class Tuple2<T1, T2> {

View File

@@ -10,8 +10,8 @@ import java.lang.reflect.Field;
/**
* 获取JDK动态代理/CGLIB代理对象代理的目标对象的工具类。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Slf4j
public class AopTargetUtil {

View File

@@ -9,8 +9,8 @@ import org.springframework.stereotype.Component;
/**
* Spring 系统启动应用感知对象主要用于获取Spring Bean的上下文对象后续的代码中可以直接查找系统中加载的Bean对象。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Component
public class ApplicationContextHolder implements ApplicationContextAware {

View File

@@ -9,8 +9,8 @@ import javax.servlet.http.HttpServletResponse;
/**
* 获取Servlet HttpRequest和HttpResponse的工具类。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class ContextUtil {

View File

@@ -22,8 +22,8 @@ import java.util.*;
/**
* 导出工具类目前支持xlsx和csv两种类型。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Slf4j
public class ExportUtil {

View File

@@ -21,8 +21,8 @@ import java.util.stream.Collectors;
/**
* 导入工具类目前支持xlsx和csv两种类型。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Slf4j
public class ImportUtil {

View File

@@ -16,8 +16,8 @@ import java.util.List;
/**
* Ip工具类。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Slf4j
public class IpUtil {

View File

@@ -11,8 +11,8 @@ import java.util.Map;
/**
* 基于JWT的Token生成工具类
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Slf4j
public class JwtUtil {

View File

@@ -5,8 +5,8 @@ package com.orange.demo.common.core.util;
* 主要目标是,尽量保证日志输出的统一性,同时也可以有效减少与日志信息相关的常量字符串,
* 提高代码的规范度和可维护性。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class LogMessageUtil {

View File

@@ -15,8 +15,8 @@ import java.util.UUID;
/**
* 脚手架中常用的基本工具方法集合,一般而言工程内部使用的方法。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class MyCommonUtil {

View File

@@ -15,8 +15,8 @@ import static org.joda.time.PeriodType.days;
/**
* 日期工具类主要封装了部分joda-time中的方法让很多代码一行完成同时统一了日期到字符串的pattern格式。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class MyDateUtil {

View File

@@ -2,6 +2,7 @@ package com.orange.demo.common.core.util;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ReflectUtil;
import com.orange.demo.common.core.annotation.RelationConstDict;
import com.orange.demo.common.core.annotation.RelationDict;
import com.orange.demo.common.core.annotation.RelationOneToOne;
import com.orange.demo.common.core.exception.MyRuntimeException;
@@ -24,8 +25,8 @@ import java.util.stream.Collectors;
/**
* 负责Model数据操作、类型转换和关系关联等行为的工具类。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Slf4j
public class MyModelUtil {
@@ -184,13 +185,49 @@ public class MyModelUtil {
}
/**
* 在当前Service的主Model类型中根据thisRelationField字段的RelationDict注解参数将被关联对象thatModel中的数据,
* 主Model类型中遍历所有包含RelationConstDict注解的字段并将关联的静态字典中的数据,
* 填充到thisModel对象的被注解字段中。
*
* @param thisClazz 主对象的Class对象。
* @param thisModel 主对象。
* @param <T> 主表对象类型。
*/
@SuppressWarnings("unchecked")
public static <T> void makeConstDictRelation(Class<T> thisClazz, T thisModel) {
if (thisModel == null) {
return;
}
Field[] fields = ReflectUtil.getFields(thisClazz);
for (Field field : fields) {
// 这里不做任何空值判断,从而让配置错误在调试期间即可抛出
Field thisTargetField = ReflectUtil.getField(thisClazz, field.getName());
RelationConstDict r = thisTargetField.getAnnotation(RelationConstDict.class);
if (r == null) {
continue;
}
Field dictMapField = ReflectUtil.getField(r.constantDictClass(), "DICT_MAP");
Map<Object, String> dictMap = (Map<Object, String>) ReflectUtil.getFieldValue(thisClazz, dictMapField);
Object id = ReflectUtil.getFieldValue(thisModel, r.masterIdField());
if (id != null) {
String name = dictMap.get(id);
if (name != null) {
Map<String, Object> m = new HashMap<>(2);
m.put("id", id);
m.put("name", name);
ReflectUtil.setFieldValue(thisModel, thisTargetField, m);
}
}
}
}
/**
* 在主Model类型中根据thisRelationField字段的RelationDict注解参数将被关联对象thatModel中的数据
* 关联到thisModel对象的thisRelationField字段中。
*
* @param thisClazz 主对象的Class对象。
* @param thisModel 主对象。
* @param thatModel 字典关联对象。
* @param thisRelationField 关联对象中保存被关联对象的字段名称。
* @param thisRelationField 主表对象中保存被关联对象的字段名称。
* @param <T> 主表对象类型。
* @param <R> 从表对象类型。
*/
@@ -212,13 +249,13 @@ public class MyModelUtil {
}
/**
* 在当前Service的主Model类型中根据thisRelationField字段的RelationDict注解参数将被关联对象集合thatModelList中的数据
* 在主Model类型中根据thisRelationField字段的RelationDict注解参数将被关联对象集合thatModelList中的数据
* 逐个关联到thisModelList每一个元素的thisRelationField字段中。
*
* @param thisClazz 主对象的Class对象。
* @param thisModelList 主对象列表。
* @param thatModelList 字典关联对象列表集合。
* @param thisRelationField 关联对象中保存被关联对象的字段名称。
* @param thisRelationField 主表对象中保存被关联对象的字段名称。
* @param <T> 主表对象类型。
* @param <R> 从表对象类型。
*/
@@ -255,14 +292,14 @@ public class MyModelUtil {
}
/**
* 在当前Service的主Model类型中根据thisRelationField字段的RelationDict注解参数将被关联对象集合thatModelMap中的数据
* 在主Model类型中根据thisRelationField字段的RelationDict注解参数将被关联对象集合thatModelMap中的数据
* 逐个关联到thisModelList每一个元素的thisRelationField字段中。
* 该函数之所以使用Map主要出于性能优化考虑在连续使用thatModelMap进行关联时有效的避免了从多次从List转换到Map的过程。
*
* @param thisClazz 主对象的Class对象。
* @param thisModelList 主对象列表。
* @param thatMadelMap 字典关联对象映射集合。
* @param thisRelationField 关联对象中保存被关联对象的字段名称。
* @param thisRelationField 主表对象中保存被关联对象的字段名称。
* @param <T> 主表对象类型。
* @param <R> 从表对象类型。
*/
@@ -293,13 +330,13 @@ public class MyModelUtil {
}
/**
* 在当前Service的主Model类型中根据thisRelationField字段的RelationOneToOne注解参数将被关联对象列表thatModelList中的数据
* 在主Model类型中根据thisRelationField字段的RelationOneToOne注解参数将被关联对象列表thatModelList中的数据
* 逐个关联到thisModelList每一个元素的thisRelationField字段中。
*
* @param thisClazz 主对象的Class对象。
* @param thisModelList 主对象列表。
* @param thatModelList 一对一关联对象列表。
* @param thisRelationField 关联对象中保存被关联对象的字段名称。
* @param thisRelationField 主表对象中保存被关联对象的字段名称。
* @param <T> 主表对象类型。
* @param <R> 从表对象类型。
*/

View File

@@ -12,8 +12,8 @@ import java.util.List;
/**
* 生成带有分页信息的数据列表
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class MyPageUtil {

View File

@@ -3,8 +3,8 @@ package com.orange.demo.common.core.util;
/**
* Redis 键生成工具类。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class RedisKeyUtil {

View File

@@ -14,8 +14,8 @@ import java.util.Map;
/**
* Java RSA 加密工具类。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class RsaUtil {

View File

@@ -14,8 +14,8 @@ import java.util.function.Function;
* @param <T> 对象类型。
* @param <K> 节点之间关联键的类型。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Data
public class TreeNode<T, K> {

View File

@@ -23,8 +23,8 @@ import java.util.Objects;
/**
* 上传或下载附件文件的工具类。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Slf4j
public class UpDownloadUtil {
@@ -87,9 +87,10 @@ public class UpDownloadUtil {
* @param uploadFile Http请求中上传的文件对象。
* @param asImage 是否为图片对象。图片是无需权限验证的,因此和附件存放在不同的子目录。
* @param response Http 应答对象。
* @return 存储在本地上传文件名。
* @throws IOException 文件操作错误。
*/
public static void doUpload(
public static String doUpload(
String rootBaseDir,
String serviceContextPath,
String modelName,
@@ -102,7 +103,7 @@ public class UpDownloadUtil {
if (Objects.isNull(uploadFile) || uploadFile.isEmpty() || MyCommonUtil.isBlankOrNull(fieldName)) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
out.print(JSON.toJSONString(ResponseResult.error(ErrorCodeEnum.INVALID_UPLOAD_FILE_ARGUMENT)));
return;
return null;
}
StringBuilder uploadPathBuilder = new StringBuilder(128);
uploadPathBuilder.append(rootBaseDir).append("/");
@@ -137,11 +138,12 @@ public class UpDownloadUtil {
log.error("Failed to write uploaded file [" + uploadFile.getOriginalFilename() + " ].", e);
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
out.print(JSON.toJSONString(ResponseResult.error(ErrorCodeEnum.INVALID_UPLOAD_FILE_IOERROR)));
return;
return null;
}
out.print(JSON.toJSONString(ResponseResult.success(fileInfo)));
out.flush();
out.close();
return fileInfo.filename;
}
/**

View File

@@ -3,8 +3,8 @@ package com.orange.demo.common.core.validator;
/**
* 数据增加的验证分组。通常用于数据新增场景。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public interface AddGroup {
}

View File

@@ -10,8 +10,8 @@ import java.lang.annotation.Target;
/**
* 定义在Model对象中标注字段值引用自指定的常量字典和ConstDictRefValidator对象配合完成数据验证。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@@ -9,8 +9,8 @@ import java.lang.reflect.Method;
/**
* 数据字段自定义验证用于验证Model中字符串字段的最大长度和最小长度。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class ConstDictValidator implements ConstraintValidator<ConstDictRef, Object> {

View File

@@ -10,8 +10,8 @@ import java.lang.annotation.Target;
/**
* 定义在Model或Dto对象中UTF-8编码的字符串字段长度的上限和下限和TextLengthValidator对象配合完成数据验证。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@@ -8,8 +8,8 @@ import javax.validation.ConstraintValidatorContext;
/**
* 数据字段自定义验证用于验证Model中UTF-8编码的字符串字段的最大长度和最小长度。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public class TextLengthValidator implements ConstraintValidator<TextLength, String> {

View File

@@ -3,8 +3,8 @@ package com.orange.demo.common.core.validator;
/**
* 数据修改的验证分组。通常用于数据更新的场景。
*
* @author Orange Team
* @date 2020-08-08
* @author Jerry
* @date 2020-09-27
*/
public interface UpdateGroup {