瀏覽代碼

init

private_deployment
xhxu 2 年之前
當前提交
ee3082482a
共有 100 個文件被更改,包括 3667 次插入0 次删除
  1. +8
    -0
      .idea/.gitignore
  2. +1
    -0
      .idea/.name
  3. +37
    -0
      .idea/compiler.xml
  4. +14
    -0
      .idea/encodings.xml
  5. +35
    -0
      .idea/jarRepositories.xml
  6. +17
    -0
      .idea/misc.xml
  7. +7
    -0
      .idea/vcs.xml
  8. +295
    -0
      mallink.iml
  9. +662
    -0
      suimang-mybatis/src/main/java/com/iformall/plugin/autoTenantId/MultiTenancy.java
  10. +26
    -0
      suimang-mybatis/src/main/java/com/iformall/plugin/autoTenantId/TenantInfo.java
  11. +41
    -0
      suimang-mybatis/src/main/java/com/iformall/plugin/entity/ChainValue.java
  12. +30
    -0
      suimang-mybatis/src/main/java/com/iformall/plugin/entity/ChainValueHelper.java
  13. +16
    -0
      suimang-mybatis/src/main/java/com/iformall/plugin/shard/annotation/IgnoreSharding.java
  14. +27
    -0
      suimang-mybatis/src/main/java/com/iformall/plugin/shard/impl/EnumShardingRule.java
  15. +29
    -0
      suimang-mybatis/src/main/java/com/iformall/plugin/shard/impl/ShardingRuleExcuter.java
  16. +38
    -0
      suimang-mybatis/src/main/java/com/iformall/plugin/shard/impl/ShardingSphere.java
  17. +33
    -0
      suimang-mybatis/src/main/java/com/iformall/plugin/shard/impl/ShardingTableExcuter.java
  18. +32
    -0
      suimang-mybatis/src/main/java/com/iformall/plugin/shard/impl/rule/ShardingRuleDefaultService.java
  19. +6
    -0
      suimang-mybatis/src/main/java/com/iformall/plugin/shard/impl/rule/ShardingRuleService.java
  20. +301
    -0
      suimang-mybatis/src/main/java/com/iformall/plugin/shard/plugin/ShardingSpherePlugin.java
  21. 二進制
      suimang-mybatis/target/classes/com/iformall/plugin/MyBatisItercepters.class
  22. 二進制
      suimang-mybatis/target/classes/com/iformall/plugin/MyBatisPlus.class
  23. 二進制
      suimang-mybatis/target/classes/com/iformall/plugin/autoTenantId/MultiTenancy.class
  24. 二進制
      suimang-mybatis/target/classes/com/iformall/plugin/autoTenantId/TenantInfo.class
  25. 二進制
      suimang-mybatis/target/classes/com/iformall/plugin/entity/ChainValue.class
  26. 二進制
      suimang-mybatis/target/classes/com/iformall/plugin/entity/ChainValueHelper.class
  27. 二進制
      suimang-mybatis/target/classes/com/iformall/plugin/shard/annotation/IgnoreSharding.class
  28. 二進制
      suimang-mybatis/target/classes/com/iformall/plugin/shard/impl/EnumShardingRule.class
  29. 二進制
      suimang-mybatis/target/classes/com/iformall/plugin/shard/impl/ShardingRuleExcuter.class
  30. 二進制
      suimang-mybatis/target/classes/com/iformall/plugin/shard/impl/ShardingSphere.class
  31. 二進制
      suimang-mybatis/target/classes/com/iformall/plugin/shard/impl/ShardingTableExcuter.class
  32. 二進制
      suimang-mybatis/target/classes/com/iformall/plugin/shard/impl/rule/ShardingRuleDefaultService.class
  33. 二進制
      suimang-mybatis/target/classes/com/iformall/plugin/shard/impl/rule/ShardingRuleService.class
  34. 二進制
      suimang-mybatis/target/classes/com/iformall/plugin/shard/plugin/ShardingSpherePlugin.class
  35. +5
    -0
      suimang-mybatis/target/maven-archiver/pom.properties
  36. +295
    -0
      suimang.iml
  37. +161
    -0
      suimangCApi/src/main/java/com/iformall/aop/RedisCacheAspect.java
  38. +175
    -0
      suimangCApi/src/main/java/com/iformall/utils/ImgIdeaUtil.java
  39. +14
    -0
      suimangCApi/src/main/java/com/iformall/utils/UrlCheck.java
  40. +68
    -0
      suimangCallback/src/main/java/com/iformall/controller/base/BaseController.java
  41. +32
    -0
      suimangCallback/target/classes/META-INF/spring-configuration-metadata.json
  42. +189
    -0
      suimangCallback/target/classes/application-dev.yml
  43. +148
    -0
      suimangCallback/target/classes/application-prod.yml
  44. +73
    -0
      suimangCallback/target/classes/application.yml
  45. 二進制
      suimangCallback/target/classes/com/iformall/CallbackApplication.class
  46. 二進制
      suimangCallback/target/classes/com/iformall/annotation/SystemControllerLog.class
  47. 二進制
      suimangCallback/target/classes/com/iformall/annotation/SystemServiceLog.class
  48. 二進制
      suimangCallback/target/classes/com/iformall/config/AwsProperty.class
  49. 二進制
      suimangCallback/target/classes/com/iformall/config/MyBatisConfiguration.class
  50. 二進制
      suimangCallback/target/classes/com/iformall/config/MyExecutorConfig.class
  51. 二進制
      suimangCallback/target/classes/com/iformall/config/RedisConfig.class
  52. 二進制
      suimangCallback/target/classes/com/iformall/config/RestFilter.class
  53. 二進制
      suimangCallback/target/classes/com/iformall/config/RestTemplateConfig.class
  54. 二進制
      suimangCallback/target/classes/com/iformall/config/ShiroConfig.class
  55. 二進制
      suimangCallback/target/classes/com/iformall/config/ShiroLoginFilter.class
  56. 二進制
      suimangCallback/target/classes/com/iformall/config/WebConfig.class
  57. 二進制
      suimangCallback/target/classes/com/iformall/controller/HomeController.class
  58. 二進制
      suimangCallback/target/classes/com/iformall/controller/base/BaseController$1.class
  59. 二進制
      suimangCallback/target/classes/com/iformall/controller/base/BaseController.class
  60. 二進制
      suimangCallback/target/classes/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper$1.class
  61. 二進制
      suimangCallback/target/classes/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.class
  62. 二進制
      suimangCallback/target/classes/com/iformall/interceptor/HttpServletRequestWrapperFilter.class
  63. 二進制
      suimangCallback/target/classes/com/iformall/interceptor/RequestInterceptor$1.class
  64. 二進制
      suimangCallback/target/classes/com/iformall/interceptor/RequestInterceptor.class
  65. 二進制
      suimangCallback/target/classes/com/iformall/interceptor/XssHttpServletRequestWrapper.class
  66. 二進制
      suimangCallback/target/classes/com/iformall/shiro/MyRetryLimitCredentialsMatcher.class
  67. 二進制
      suimangCallback/target/classes/com/iformall/shiro/MyShiroRealm.class
  68. 二進制
      suimangCallback/target/classes/com/iformall/shiro/PasswordHelper.class
  69. 二進制
      suimangCallback/target/classes/com/iformall/shiro/ShiroService.class
  70. 二進制
      suimangCallback/target/classes/com/iformall/shiro/UserSession.class
  71. 二進制
      suimangCallback/target/classes/com/iformall/shiro/UseriFormallToken.class
  72. 二進制
      suimangCallback/target/classes/com/iformall/utils/AlipayMsgPage.class
  73. 二進制
      suimangCallback/target/classes/com/iformall/utils/ReportResult.class
  74. 二進制
      suimangCallback/target/classes/com/iformall/utils/UrlCheck.class
  75. +100
    -0
      suimangCallback/target/classes/logback-spring.xml
  76. +3
    -0
      suimangCallback/target/maven-archiver/pom.properties
  77. +31
    -0
      suimangCallback/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
  78. +27
    -0
      suimangCallback/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
  79. +79
    -0
      suimangMQConsumer/src/main/java/com/iformall/mq/impl/AliyunRocketMqConsumer.java
  80. +61
    -0
      suimangMQConsumer/src/main/java/com/iformall/mq/impl/RabbitMqConsumer.java
  81. +19
    -0
      suimangMQConsumer/src/main/java/com/iformall/mq/impl/RocketMqConsumer.java
  82. +32
    -0
      suimangMQConsumer/target/classes/META-INF/spring-configuration-metadata.json
  83. +183
    -0
      suimangMQConsumer/target/classes/application-dev.yml
  84. +143
    -0
      suimangMQConsumer/target/classes/application-prod.yml
  85. +71
    -0
      suimangMQConsumer/target/classes/application.yml
  86. 二進制
      suimangMQConsumer/target/classes/com/iformall/ConsumerApplication.class
  87. 二進制
      suimangMQConsumer/target/classes/com/iformall/config/AwsProperty.class
  88. 二進制
      suimangMQConsumer/target/classes/com/iformall/config/MyBatisConfiguration.class
  89. 二進制
      suimangMQConsumer/target/classes/com/iformall/config/RedisConfig.class
  90. 二進制
      suimangMQConsumer/target/classes/com/iformall/config/RestFilter.class
  91. 二進制
      suimangMQConsumer/target/classes/com/iformall/config/RestTemplateConfig.class
  92. 二進制
      suimangMQConsumer/target/classes/com/iformall/config/WebConfig.class
  93. 二進制
      suimangMQConsumer/target/classes/com/iformall/controller/HomeController.class
  94. 二進制
      suimangMQConsumer/target/classes/com/iformall/mq/MqBaseConsumer.class
  95. 二進制
      suimangMQConsumer/target/classes/com/iformall/mq/impl/AliyunRocketMqConsumer$1.class
  96. 二進制
      suimangMQConsumer/target/classes/com/iformall/mq/impl/AliyunRocketMqConsumer.class
  97. 二進制
      suimangMQConsumer/target/classes/com/iformall/mq/impl/RabbitMqConsumer.class
  98. 二進制
      suimangMQConsumer/target/classes/com/iformall/mq/impl/RocketMqConsumer.class
  99. +100
    -0
      suimangMQConsumer/target/classes/logback-spring.xml
  100. +3
    -0
      suimangMQConsumer/target/maven-archiver/pom.properties

+ 8
- 0
.idea/.gitignore 查看文件

@@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/

+ 1
- 0
.idea/.name 查看文件

@@ -0,0 +1 @@
mallink

+ 37
- 0
.idea/compiler.xml 查看文件

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="suimangOcr" />
<module name="suimangSchedule" />
<module name="suimangService" />
<module name="mallinkBApi" />
<module name="mallinkAdmin" />
<module name="mallinkService" />
<module name="suimangCApi" />
<module name="suimangAdmin" />
<module name="suimangMQConsumer" />
<module name="suimangCallback" />
<module name="suimangVideo" />
<module name="mallinkCApi" />
<module name="suimang-mybatis" />
</profile>
</annotationProcessing>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="suimangAdmin" options="-parameters" />
<module name="suimangCApi" options="-parameters" />
<module name="suimangCallback" options="-parameters" />
<module name="suimangMQConsumer" options="-parameters" />
<module name="suimangOcr" options="-parameters" />
<module name="suimangSchedule" options="-parameters" />
<module name="suimangService" options="-parameters" />
<module name="suimangVideo" options="-parameters" />
</option>
</component>
</project>

+ 14
- 0
.idea/encodings.xml 查看文件

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/suimangAdmin/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/suimangCApi/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/suimangCallback/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/suimangMQConsumer/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/suimangOcr/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/suimangSchedule/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/suimangService/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/suimangVideo/src/main/java" charset="UTF-8" />
</component>
</project>

+ 35
- 0
.idea/jarRepositories.xml 查看文件

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="aliyun-spring" />
<option name="name" value="aliyun-spring" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
<remote-repository>
<option name="id" value="aliyun-public" />
<option name="name" value="aliyun-public" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
<remote-repository>
<option name="id" value="sonatype-nexus-staging" />
<option name="name" value="Sonatype Nexus Staging" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
</component>
</project>

+ 17
- 0
.idea/misc.xml 查看文件

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="jdk1.8.0_144" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

+ 7
- 0
.idea/vcs.xml 查看文件

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

+ 295
- 0
mallink.iml 查看文件

@@ -0,0 +1,295 @@
<?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$/../suimangProject/target/classes" />
<output-test url="file://$MODULE_DIR$/../suimangProject/target/test-classes" />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/../suimangProject/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-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.15.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.15.0" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
<orderEntry type="library" scope="RUNTIME" 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-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.springframework:spring-web: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-expression:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-undertow:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.undertow:undertow-core:2.0.29.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.xnio:xnio-api:3.3.8.Final" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.jboss.xnio:xnio-nio:3.3.8.Final" level="project" />
<orderEntry type="library" name="Maven: io.undertow:undertow-servlet:2.0.29.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.2.Final" level="project" />
<orderEntry type="library" name="Maven: io.undertow:undertow-websockets-jsr:2.0.29.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.spec.javax.websocket:jboss-websocket-api_1.1_spec:1.1.4.Final" level="project" />
<orderEntry type="library" name="Maven: jakarta.servlet:jakarta.servlet-api:4.0.3" level="project" />
<orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" 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-amqp:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.amqp:spring-rabbit:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.rabbitmq:amqp-client:5.7.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.amqp:spring-amqp:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.4.RELEASE" 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-starter-data-redis:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.2.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.45.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.45.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.45.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.45.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.45.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.45.Final" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.3.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" 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-web-services:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.messaging.saaj:saaj-impl:1.5.1" level="project" />
<orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
<orderEntry type="library" name="Maven: jakarta.xml.soap:jakarta.xml.soap-api:1.4.1" level="project" />
<orderEntry type="library" name="Maven: org.jvnet.mimepull:mimepull:1.9.12" level="project" />
<orderEntry type="library" name="Maven: org.jvnet.staxex:stax-ex:1.8.1" level="project" />
<orderEntry type="library" name="Maven: jakarta.xml.ws:jakarta.xml.ws-api:2.3.2" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: jakarta.jws:jakarta.jws-api:1.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.ws:spring-ws-core:3.0.8.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.ws:spring-xml:3.0.8.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-mail:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.sun.mail:jakarta.mail:1.6.4" level="project" />
<orderEntry type="library" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-spring-boot-starter-process:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-spring-boot-autoconfigure:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-spring-security:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-engine:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-bpmn-converter:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-bpmn-model:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-process-validation:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-image-generator:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-engine-common-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-engine-common:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-variable-service-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-variable-service:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-identitylink-service:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-identitylink-service-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-task-service:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-task-service-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-job-service:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-job-service-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-idm-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-idm-engine:6.4.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.uuid:java-uuid-generator:3.1.5" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-idm-engine-configurator:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-cmmn-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-cmmn-model:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-dmn-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-dmn-model:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-form-model:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-form-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-content-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-email:1.5" level="project" />
<orderEntry type="library" name="Maven: com.sun.mail:javax.mail:1.5.6" level="project" />
<orderEntry type="library" name="Maven: javax.activation:activation:1.1" level="project" />
<orderEntry type="library" name="Maven: joda-time:joda-time:2.10.5" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-spring:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-spring-common:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-job-spring-service:6.4.0" 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-orm:5.2.4.RELEASE" 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" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.19" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.2.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.2.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.2.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.2.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.2.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.4" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.4" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.13" 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: com.alibaba:druid:1.1.22" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support: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-context:5.2.4.RELEASE" 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.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: org.ow2.asm:asm:5.0.4" level="project" />
<orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.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" 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" 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" />
<orderEntry type="library" name="Maven: org.rocketmq.spring.boot:rocketmq-spring-boot-starter:1.0.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-client:4.2.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-common:4.2.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-remoting:4.2.0" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-all:4.1.45.Final" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:26.0-jre" 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-qual:2.5.2" level="project" />
<orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.1.3" level="project" />
<orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.1" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.14" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.68" level="project" />
<orderEntry type="library" name="Maven: org.quartz-scheduler:quartz:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.mchange:mchange-commons-java:0.2.11" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.8.0" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.14" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.14" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.8.0" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-core:2.8.0" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.8.0" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.8.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-swagger-ui:2.8.0" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.8.0" level="project" />
<orderEntry type="library" name="Maven: org.reflections:reflections:0.9.11" level="project" />
<orderEntry type="library" name="Maven: org.javassist:javassist:3.21.0-GA" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.10.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.10.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.10.2" level="project" />
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.10" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-core:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-lang:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-cache:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-hash:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-core:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-cipher:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-core:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-ogdl:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-event:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-spring:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-web:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.crazycake:shiro-redis:3.1.0" level="project" />
<orderEntry type="library" name="Maven: redis.clients:jedis:3.1.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.7.0" level="project" />
<orderEntry type="library" name="Maven: com.puppycrawl.tools:checkstyle:8.3" level="project" />
<orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
<orderEntry type="library" name="Maven: org.antlr:antlr4-runtime:4.7" level="project" />
<orderEntry type="library" name="Maven: commons-cli:commons-cli:1.4" level="project" />
<orderEntry type="library" name="Maven: net.sf.saxon:Saxon-HE:9.8.0-4" level="project" />
<orderEntry type="library" name="Maven: org.jdom:jdom2:2.0.6" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.60" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.60" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
<orderEntry type="library" name="Maven: cn.afterturn:easypoi-spring-boot-starter:4.1.3.A" level="project" />
<orderEntry type="library" name="Maven: cn.afterturn:easypoi-web:4.1.3.A" level="project" />
<orderEntry type="library" name="Maven: cn.afterturn:easypoi-base:4.1.3.A" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi:4.1.1" 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-math3:3.6.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:4.1.1" 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" name="Maven: org.apache.poi:poi-ooxml-schemas:4.1.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:3.1.0" level="project" />
<orderEntry type="library" name="Maven: ognl:ognl:3.2.6" level="project" />
<orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
<orderEntry type="library" name="Maven: cn.afterturn:easypoi-annotation:4.1.3.A" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.13" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.14.0" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okio:okio:1.17.2" level="project" />
<orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.1" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
<orderEntry type="library" name="Maven: com.thoughtworks.xstream:xstream:1.4.10" level="project" />
<orderEntry type="library" name="Maven: xmlpull:xmlpull:1.1.3.1" level="project" />
<orderEntry type="library" name="Maven: xpp3:xpp3_min:1.1.4c" level="project" />
<orderEntry type="library" name="Maven: com.github.binarywang:weixin-java-common:3.7.0.B" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5.11" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.30" level="project" />
<orderEntry type="library" name="Maven: com.github.binarywang:weixin-java-miniapp:3.7.0.B" level="project" />
<orderEntry type="library" name="Maven: com.github.binarywang:weixin-java-mp:3.7.0.B" level="project" />
<orderEntry type="library" name="Maven: com.github.binarywang:weixin-java-pay:3.7.0.B" level="project" />
<orderEntry type="library" name="Maven: com.github.binarywang:qrcode-utils:1.1" level="project" />
<orderEntry type="library" name="Maven: com.google.zxing:core:3.2.1" level="project" />
<orderEntry type="library" name="Maven: org.jodd:jodd-http:5.2.0" level="project" />
<orderEntry type="library" name="Maven: org.jodd:jodd-core:5.2.0" level="project" />
<orderEntry type="library" name="Maven: org.jodd:jodd-util:6.0.0" 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: com.github.binarywang:weixin-java-open:3.7.0.B" level="project" />
<orderEntry type="library" name="Maven: com.github.ulisesbocchio:jasypt-spring-boot:2.1.0" level="project" />
<orderEntry type="library" name="Maven: org.jasypt:jasypt:1.9.2" level="project" />
<orderEntry type="library" name="Maven: com.belerweb:pinyin4j:2.5.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.5.2" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.5" level="project" />
<orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-api:0.33.0" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-util:0.33.0" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-dysmsapi:2.1.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.oss:aliyun-sdk-oss:3.10.2" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.1" level="project" />
<orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.0.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-sts:3.0.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ecs:4.2.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-kms:2.7.0" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.4" level="project" />
<orderEntry type="library" name="Maven: com.twelvemonkeys.imageio:imageio-jpeg:3.6" level="project" />
<orderEntry type="library" name="Maven: com.twelvemonkeys.imageio:imageio-core:3.6" level="project" />
<orderEntry type="library" name="Maven: com.twelvemonkeys.imageio:imageio-metadata:3.6" level="project" />
<orderEntry type="library" name="Maven: com.twelvemonkeys.common:common-lang:3.6" level="project" />
<orderEntry type="library" name="Maven: com.twelvemonkeys.common:common-io:3.6" level="project" />
<orderEntry type="library" name="Maven: com.twelvemonkeys.common:common-image:3.6" level="project" />
</component>
</module>

+ 662
- 0
suimang-mybatis/src/main/java/com/iformall/plugin/autoTenantId/MultiTenancy.java 查看文件

@@ -0,0 +1,662 @@
package com.iformall.plugin.autoTenantId;

import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.Parenthesis;
import net.sf.jsqlparser.expression.StringValue;
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
import net.sf.jsqlparser.expression.operators.relational.ItemsList;
import net.sf.jsqlparser.expression.operators.relational.MultiExpressionList;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.create.table.ColDataType;
import net.sf.jsqlparser.statement.create.table.ColumnDefinition;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import net.sf.jsqlparser.statement.delete.Delete;
import net.sf.jsqlparser.statement.insert.Insert;
import net.sf.jsqlparser.statement.select.*;
import net.sf.jsqlparser.statement.update.Update;
import net.sf.jsqlparser.util.TablesNamesFinder;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ResultHandler;

import com.iformall.plugin.MyBatisPlus;
import com.iformall.plugin.entity.ChainValue;

import java.sql.Connection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

/**
*共享数据库的多租户系统实现
* Created by Stormeye on 2018/10/22.
*/
public class MultiTenancy implements MyBatisPlus {

//获取tenantId的接口
private TenantInfo tenantInfo;
private String tenantIdColumn = "tenant_id";
private String parentTenantIdColumn = "parent_tenant_id";
private String dialect = "mysql";
public TenantInfo getTenantInfo() {
return tenantInfo;
}

public void setTenantInfo(TenantInfo tenantInfo) {
this.tenantInfo = tenantInfo;
}

public String getTenantIdColumn() {
return tenantIdColumn;
}

public void setTenantIdColumn(String tenantIdColumn) {
this.tenantIdColumn = tenantIdColumn;
}

public String getParentTenantIdColumn() {
return parentTenantIdColumn;
}

public void setParentTenantIdColumn(String parentTenantIdColumn) {
this.parentTenantIdColumn = parentTenantIdColumn;
}

public String getDialect() {
return dialect;
}

public void setDialect(String dialect) {
this.dialect = dialect;
}
//属性参数信息
private Properties properties;

public MultiTenancy(){
}

@Override
public Map<String,ChainValue> intercept(Invocation invocation,Map<String,ChainValue> chainMap) throws Throwable {
if (getTenantInfo().getTenantId() != null || getTenantInfo().getParentTenantId() != null) {
// 能从cookie或者session获取到tenantId
//Map<String,Object> resultMap = new HashMap<String,Object>();
//resultMap.put(tenantIdColumn, getTenantInfo().getTenantId());
//resultMap.put(parentTenantIdColumn, getTenantInfo().getParentTenantId());
return mod(invocation);
}
return null;
}

/**
* 更改MappedStatement为新的
* @param invocation
* @throws Throwable
*/
public Map<String,ChainValue> mod(Invocation invocation) throws Throwable {
StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
MetaObject metaStatementHandler = SystemMetaObject.forObject(statementHandler);
Configuration configuration = (Configuration) metaStatementHandler.getValue("delegate.configuration");

MappedStatement ms = (MappedStatement) metaStatementHandler.getValue("delegate.mappedStatement");
if (getTenantInfo().doMappedStatementFIlter(ms))
return null;
SqlCommandType type = ms.getSqlCommandType();

BoundSql boundSql = statementHandler.getBoundSql();

String newSQL = addWhere(boundSql.getSql());
if (newSQL != null) {
metaStatementHandler.setValue("delegate.boundSql.sql", newSQL);
}

Map<String,ChainValue> newchainMap = new HashMap<String,ChainValue>();
ChainValue tenantIdChain = new ChainValue();
tenantIdChain.setColumn(tenantIdColumn);
tenantIdChain.setValue(getTenantInfo().getTenantId());
tenantIdChain.setIgnoreTables(getTenantInfo().filterTables());
newchainMap.put(tenantIdColumn,tenantIdChain);
ChainValue parentTenantIdChain = new ChainValue();
parentTenantIdChain.setColumn(parentTenantIdColumn);
parentTenantIdChain.setValue(getTenantInfo().getParentTenantId());
parentTenantIdChain.setIgnoreTables(getTenantInfo().filterSubTables());
newchainMap.put(parentTenantIdColumn,parentTenantIdChain);
return newchainMap;
}

/**
* 添加租户id条件
* @param sql
* @return
* @throws JSQLParserException
*/
private String addWhere(String sql) throws Exception {
Statement stmt = CCJSqlParserUtil.parse(sql);
if (stmt instanceof Insert) {
return processInsert((Insert) stmt);
}

if (stmt instanceof Delete) {
return processDelete((Delete) stmt);
}

if (stmt instanceof Update) {
return processUpdate(sql, stmt);
}

if (stmt instanceof Select) {
return processSelect(stmt);
}

if (stmt instanceof CreateTable) {
return processCreateTable((CreateTable) stmt);
}
throw new RuntimeException("非法sql语句,请检查"+sql);
}

private String processCreateTable(CreateTable stmt) {
CreateTable createTable = stmt;
ColDataType colDataType = new ColDataType();
colDataType.setDataType("varchar(10)");

// add tenant_id
ColumnDefinition columnDefinition = new ColumnDefinition();
columnDefinition.setColumnName(getTenantIdColumn());
columnDefinition.setColDataType(colDataType);
createTable.getColumnDefinitions().add(columnDefinition);
// add parent_tenant_id
ColumnDefinition subColumnDefinition = new ColumnDefinition();
subColumnDefinition.setColumnName(getParentTenantIdColumn());
subColumnDefinition.setColDataType(colDataType);
createTable.getColumnDefinitions().add(subColumnDefinition);
return createTable.toString();
}

private String processSelect(Statement stmt) throws Exception {
//获得Select对象
Select select = (Select) stmt;
PlainSelect ps = (PlainSelect) select.getSelectBody();
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
List<String> tableList = tablesNamesFinder.getTableList(select);

if (tableList.size() == 0) {
return select.toString();
}
for (String table : tableList) {
if (getTenantInfo().doTableFilter(table))
continue;
if (ps.getWhere() != null) {
AndExpression where = addAndExpression(stmt, table, ps.getWhere());
// form 和 join 中加载的表
if (where != null) {
ps.setWhere(where);
} else {
//子查询中的表
findSubSelect(stmt, ps.getWhere());
}
} else {
String aliasName = getTableAlias(stmt, table);
EqualsTo equalsTo = addEqualsTo(stmt, table, aliasName);
ps.setWhere(equalsTo);
}
}
return select.toString();
}

private String processUpdate(String sql, Statement stmt) throws Exception {
//获得Update对象
Update updateStatement = (Update) stmt;
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
List<String> tableList = tablesNamesFinder.getTableList(stmt);
if (tableList.size() == 0) {
return updateStatement.toString();
}
//获得where条件表达式
Expression where = updateStatement.getWhere();
for (String table: tableList) {
if (getTenantInfo().doTableFilter(table))
continue;
if (where != null) {
AndExpression andE = addAndExpression(stmt, table, updateStatement.getWhere());
if (andE != null) {
updateStatement.setWhere(andE);
}
} else {
throw new Exception("update语句不能没有where条件:" + sql + Arrays.toString(Thread.currentThread().getStackTrace()));
}
}
return updateStatement.toString();
}

private String processDelete(Delete deleteStatement) {
//获得Delete对象
if (getTenantInfo().doTableFilter(deleteStatement.getTable().getName()))
return deleteStatement.toString();
Expression where = deleteStatement.getWhere();
EqualsTo equalsTo = new EqualsTo();
if (getTenantInfo().getTenantId() != null) {
equalsTo.setLeftExpression(new Column(getTenantIdColumn()));
equalsTo.setRightExpression(new StringValue(getTenantInfo().getTenantId()));
}
if (!getTenantInfo().doTableFilterSub(deleteStatement.getTable().getName())) {
if (getTenantInfo().getParentTenantId() != null) {
equalsTo.setLeftExpression(new Column(getParentTenantIdColumn()));
equalsTo.setRightExpression(new StringValue(getTenantInfo().getParentTenantId()));
}
}
if (null != where) {
if (where instanceof OrExpression) {
AndExpression andExpression = new AndExpression(equalsTo, new Parenthesis(where));
deleteStatement.setWhere(andExpression);
} else {
AndExpression andExpression = new AndExpression(equalsTo, where);
deleteStatement.setWhere(andExpression);
}
}
return deleteStatement.toString();
}

/**
* 插入处理
* @param insertStatement
* @return
* @throws Exception
*/
private String processInsert(Insert insertStatement) throws Exception {
// 非tenant表,直接返回
if (getTenantInfo().doTableFilter(insertStatement.getTable().getName())) {
return insertStatement.toString();
}
boolean bExist = insertStatement.getColumns().stream().anyMatch(col -> col.getColumnName().equalsIgnoreCase(getTenantIdColumn()));
if (!bExist) {
if (getTenantInfo().getTenantId() != null) {
insertStatement.getColumns().add(new Column(getTenantIdColumn()));
}
if (!getTenantInfo().doTableFilterSub(insertStatement.getTable().getName())) {
if (getTenantInfo().getParentTenantId() != null) {
insertStatement.getColumns().add(new Column(getParentTenantIdColumn()));
}
}
ItemsList itemsList = insertStatement.getItemsList();
if (itemsList instanceof MultiExpressionList){
((MultiExpressionList) itemsList).getExprList().forEach(el -> {
el.getExpressions().add(new StringValue(getTenantInfo().getTenantId()));
if (!getTenantInfo().doTableFilterSub(insertStatement.getTable().getName())) {
if (getTenantInfo().getParentTenantId() != null) {
el.getExpressions().add(new StringValue(getTenantInfo().getParentTenantId()));
}
}
});
}else {
((ExpressionList) itemsList).getExpressions().add(new StringValue(getTenantInfo().getTenantId()));
if (!getTenantInfo().doTableFilterSub(insertStatement.getTable().getName())) {
if (getTenantInfo().getParentTenantId() != null) {
((ExpressionList) itemsList).getExpressions().add(new StringValue(getTenantInfo().getParentTenantId()));
}
}
}
}
return insertStatement.toString();
}

/**
* 获取配置信息
* {dialect=mysql, tenantInfo=org.xue.test.TenantInfoImpl, tenantIdColumn=tenant_id, parentTenantIdColumn=parent_tenant_id}
* @param properties
*/
public void setProperties(Properties properties) {
this.properties=properties;
try {
Class onwClass=Class.forName(this.properties.getProperty("tenantInfo"));
this.tenantInfo = (TenantInfo)onwClass.newInstance();
this.tenantIdColumn = this.properties.getProperty("tenantIdColumn");
this.parentTenantIdColumn = this.properties.getProperty("parentTenantIdColumn");
this.dialect = this.properties.getProperty("dialect");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}

/**
* 多条件情况下,使用AndExpression给where条件加上tenantid条件
*
* @param table
* @param where
* @return
* @throws Exception
*/
public AndExpression addAndExpression(Statement stmt, String table, Expression where) throws Exception {
String aliasName = getTableAlias(stmt, table);

EqualsTo equalsTo = addEqualsTo(stmt, table, aliasName);
if (equalsTo != null) {
AndExpression right = new AndExpression(equalsTo, where);
if (!getTenantInfo().doTableFilterSub(table)) {
EqualsTo equalsToSub = addEqualsToForParentTenantId(stmt, table, aliasName);
if (equalsToSub != null) {
return new AndExpression(equalsToSub, right);
} else {
return right;
}
} else {
return right;
}
} else {
return null;
}
}

/**
* 创建一个 EqualsTo相同判断 条件
*
* @param stmt 查询对象
* @param table 表名
* @return “A=B” 单个where条件表达式
* @throws Exception
*/
public EqualsTo addEqualsTo(Statement stmt, String table, String aliasName) throws Exception {
if (aliasName != null) {
if (getTenantInfo().getTenantId() != null) {
EqualsTo equalsTo = new EqualsTo();
equalsTo.setLeftExpression(new Column(aliasName + '.' + getTenantIdColumn()));
equalsTo.setRightExpression(new StringValue(getTenantInfo().getTenantId()));
return equalsTo;
}
return null;
} else {
return null;
}
}

/**
* 创建一个 EqualsTo相同判断 条件
*
* @param stmt 查询对象
* @param table 表名
* @return “A=B” 单个where条件表达式
* @throws Exception
*/
public EqualsTo addEqualsToForParentTenantId(Statement stmt, String table, String aliasName) throws Exception {
if (aliasName != null) {
if (getTenantInfo().getParentTenantId() != null) {
EqualsTo equalsTo = new EqualsTo();
equalsTo.setLeftExpression(new Column(aliasName + '.' + getParentTenantIdColumn()));
equalsTo.setRightExpression(new StringValue(getTenantInfo().getParentTenantId()));
return equalsTo;
} else {
return null;
}
} else {
return null;
}
}

/**
* 获取sql送指定表的别名你,没有别名则返回原表名 如果表名不存在返回null
* 【仅查询from和join 不含 IN 子查询中的表 】
*
* @param stmt
* @param tableName
* @return
*/
public String getTableAlias(Statement stmt, String tableName) {
String alias = null;

// 插入不做处理
if (stmt instanceof Insert) {
return tableName;
}

if (stmt instanceof Delete) {
//获得Delete对象
Delete deleteStatement = (Delete) stmt;

if ((deleteStatement.getTable()).getName().equalsIgnoreCase(tableName)) {
alias = deleteStatement.getTable().getAlias() != null ? deleteStatement.getTable().getAlias().getName() : tableName;
}
}

if (stmt instanceof Update) {
//获得Update对象
Update updateStatement = (Update) stmt;

if ((updateStatement.getTables().get(0)).getName().equalsIgnoreCase(tableName)) {
alias = updateStatement.getTables().get(0).getAlias() != null ? updateStatement.getTables().get(0).getAlias().getName() : tableName;
}
}

if (stmt instanceof Select) {
Select select = (Select) stmt;

PlainSelect ps = (PlainSelect) select.getSelectBody();
FromItem item = ps.getFromItem();

// 判断主表的别名
if (item instanceof Table) {
if (((Table) item).getName().equalsIgnoreCase(tableName)) {
alias = item.getAlias() != null ? item.getAlias().getName() : tableName;
}
} else {

}
}
return alias;
}

/**
* 针对子查询中的表别名查询
*
* @param subSelect
* @param tableName
* @return
*/
public String getTableAlias(SubSelect subSelect, String tableName) {
PlainSelect ps = (PlainSelect) subSelect.getSelectBody();
// 判断主表的别名
String alias = null;
FromItem item = ps.getFromItem();
if (item instanceof Table) {
if (((Table) item).getName().equalsIgnoreCase(tableName)){
if (item.getAlias() != null) {
alias = item.getAlias().getName();
} else {
alias = tableName;
}
}
}
return alias;
}

/**
* 递归处理 子查询中的tenantid-where
*
* @param stmt sql查询对象
* @param where 当前sql的where条件 where为AndExpression或OrExpression的实例,解析其中的rightExpression,然后检查leftExpression是否为空,
* 不为空则是AndExpression或OrExpression,再次解析其中的rightExpression
* 注意tenantid-where是加在子查询上的
*/
void findSubSelect(Statement stmt, Expression where) throws Exception {

// and 表达式
if (where instanceof AndExpression) {
AndExpression andExpression = (AndExpression) where;
if (andExpression.getRightExpression() instanceof SubSelect) {
SubSelect subSelect = (SubSelect) andExpression.getRightExpression();
doSelect(stmt, subSelect);
}
if (andExpression.getLeftExpression() != null) {
findSubSelect(stmt, andExpression.getLeftExpression());
}
} else if (where instanceof OrExpression) {
// or表达式
OrExpression orExpression = (OrExpression) where;
if (orExpression.getRightExpression() instanceof SubSelect) {
SubSelect subSelect = (SubSelect) orExpression.getRightExpression();
doSelect(stmt, subSelect);
}
if (orExpression.getLeftExpression() != null) {
findSubSelect(stmt, orExpression.getLeftExpression());
}
}
}

/**
* 处理select 和 subSelect
*
* @param stmt 查询对象
* @param select
* @return
* @throws Exception
*/
Expression doSelect(Statement stmt, Expression select) throws Exception {
PlainSelect ps = null;
boolean hasSubSelect = false;

if (select instanceof SubSelect) {
ps = (PlainSelect) ((SubSelect) select).getSelectBody();
}
if (select instanceof Select) {
ps = (PlainSelect) ((Select) select).getSelectBody();
}

TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
List<String> tableList = tablesNamesFinder.getTableList(select);
if (tableList.size() == 0) {
return select;
}
for (String table : tableList) {
// sql 包含 where 条件的情况 使用 addAndExpression 连接 已有的条件和新条件
if (ps.getWhere() == null) {
AndExpression where = addAndExpression(stmt, table, ps.getWhere());
// form 和 join 中加载的表
if (where != null) {
ps.setWhere(where);
} else {
// 如果在Statement中不存在这个表名,则存在于子查询中
hasSubSelect = true;
}
} else {
// sql 不含 where条件 新建一个EqualsTo设置为where条件
String aliasName = getTableAlias(stmt, table);
EqualsTo equalsTo = addEqualsTo(stmt, table, aliasName);
ps.setWhere(equalsTo);
}
}

if (hasSubSelect) {
//子查询中的表
findSubSelect(stmt, ps.getWhere());
}
return select;
}

private void processSelectBody(SelectBody selectBody) {
if (selectBody instanceof PlainSelect) {
processPlainSelect((PlainSelect) selectBody);
} else if (selectBody instanceof WithItem) {
WithItem withItem = (WithItem) selectBody;
if (withItem.getSelectBody() != null) {
processSelectBody(withItem.getSelectBody());
}
} else {
SetOperationList operationList = (SetOperationList) selectBody;
if (operationList.getOperations() != null && operationList.getSelects().size() > 0) {
List<SelectBody> plainSelects = operationList.getSelects();
for (SelectBody sub: plainSelects) {
processSelectBody(sub);
}
}
if (!orderByHashParameters(operationList.getOrderByElements())) {
operationList.setOrderByElements(null);
}
}
}

private void processPlainSelect(PlainSelect plainSelect) {
if (!orderByHashParameters(plainSelect.getOrderByElements())) {
plainSelect.setOrderByElements(null);
}
if (plainSelect.getFromItem() != null) {
processFromItem(plainSelect.getFromItem());
}
if (plainSelect.getJoins() != null && plainSelect.getJoins().size() > 0) {
List<Join> joins = plainSelect.getJoins();
for (Join join : joins) {
if (join.getRightItem() != null) {
processFromItem(join.getRightItem());
}
}
}
}

public void processFromItem(FromItem fromItem) {
if (fromItem instanceof SubJoin) {
SubJoin subJoin = (SubJoin) fromItem;
if (subJoin.getJoinList() != null) {
for(Join tjoin: subJoin.getJoinList()) {
if (tjoin.getRightItem() != null) {
processFromItem(tjoin.getRightItem());
}
}
}
} else if (fromItem instanceof SubSelect) {
SubSelect subSelect = (SubSelect) fromItem;
if (subSelect.getSelectBody() != null) {
processSelectBody(subSelect.getSelectBody());
}
} else if (fromItem instanceof ValuesList) {

} else if (fromItem instanceof LateralSubSelect) {
LateralSubSelect lateralSubSelect = (LateralSubSelect) fromItem;
if (lateralSubSelect.getSubSelect() != null) {
SubSelect subSelect = (SubSelect) (lateralSubSelect.getSubSelect());
if (subSelect.getSelectBody() != null) {
processSelectBody(subSelect.getSelectBody());
}
}
}
//Table时不用处理
}

public boolean orderByHashParameters(List<OrderByElement> orderByElements) {
if (orderByElements == null) {
return false;
}
for (OrderByElement orderByElement : orderByElements) {
if (orderByElement.toString().toUpperCase().contains("?")) {
return true;
}
}
return false;
}
}

+ 26
- 0
suimang-mybatis/src/main/java/com/iformall/plugin/autoTenantId/TenantInfo.java 查看文件

@@ -0,0 +1,26 @@
package com.iformall.plugin.autoTenantId;

import java.util.List;

import org.apache.ibatis.mapping.MappedStatement;

/**
* 需要实现该接口用于获取租户id
* Created by Stormeye on 2018/10/22.
*/
public interface TenantInfo {

String getTenantId();

String getParentTenantId();

boolean doTableFilter(String tableName);
List<String> filterTables();

boolean doTableFilterSub(String tableName);
List<String> filterSubTables();

boolean doMappedStatementFIlter(MappedStatement ms);
}

+ 41
- 0
suimang-mybatis/src/main/java/com/iformall/plugin/entity/ChainValue.java 查看文件

@@ -0,0 +1,41 @@
package com.iformall.plugin.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* 链里的值
* @author alascor
* {column:"tennat_id", value:"789", ignoreTables:"wx_c_user","wx_c_user_basic_info"...}
*
*/

public class ChainValue implements Serializable{
private static final long serialVersionUID = 6290377774649358950L;
private String column;
private Object value;
private List<String> ignoreTables;
public String getColumn() {
return column;
}
public void setColumn(String column) {
this.column = column;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public List<String> getIgnoreTables() {
return ignoreTables;
}
public void setIgnoreTables(List<String> ignoreTables) {
this.ignoreTables = ignoreTables;
}
}

+ 30
- 0
suimang-mybatis/src/main/java/com/iformall/plugin/entity/ChainValueHelper.java 查看文件

@@ -0,0 +1,30 @@
package com.iformall.plugin.entity;

import java.util.Map;

public class ChainValueHelper {

public static Object getValue(String table,String column,Map<String,ChainValue> parentChainMap) {
if (null != parentChainMap && parentChainMap.containsKey(column)) {
ChainValue chainvalue = parentChainMap.get(column);
if (null != chainvalue) {
if (null != chainvalue.getIgnoreTables()) {
if (!chainvalue.getIgnoreTables().contains(table)) {
Object o = chainvalue.getValue();
if (null != o) {
return o;
}
}
}else {
Object o = chainvalue.getValue();
if (null != o) {
return o;
}
}
}
}
return null;
}
}

+ 16
- 0
suimang-mybatis/src/main/java/com/iformall/plugin/shard/annotation/IgnoreSharding.java 查看文件

@@ -0,0 +1,16 @@
package com.iformall.plugin.shard.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* 在mapper方法上面用
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface IgnoreSharding {
}

+ 27
- 0
suimang-mybatis/src/main/java/com/iformall/plugin/shard/impl/EnumShardingRule.java 查看文件

@@ -0,0 +1,27 @@
package com.iformall.plugin.shard.impl;

public enum EnumShardingRule {

HASH(1,"哈希值分表");

private Integer code;
private String name;
private EnumShardingRule(Integer code, String name) {
this.code = code;
this.name = name;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

+ 29
- 0
suimang-mybatis/src/main/java/com/iformall/plugin/shard/impl/ShardingRuleExcuter.java 查看文件

@@ -0,0 +1,29 @@
package com.iformall.plugin.shard.impl;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import com.alibaba.druid.util.StringUtils;
import com.iformall.plugin.shard.impl.rule.ShardingRuleDefaultService;
import com.iformall.plugin.shard.impl.rule.ShardingRuleService;

public class ShardingRuleExcuter {

private static Map<Integer,ShardingRuleService> serviceMap = null;
private static Map<Integer,ShardingRuleService> getServiceMap() {
if (null == serviceMap) {
serviceMap = new ConcurrentHashMap<Integer, ShardingRuleService>();
serviceMap.put(EnumShardingRule.HASH.getCode(), new ShardingRuleDefaultService());
}
return serviceMap;
}
public static String getTableIndex(Integer rule,Object value,int tableCount) {
String index = getServiceMap().get(rule).getTableIndex(value, tableCount);
if (StringUtils.isEmpty(index)) {
throw new RuntimeException("Sharding Rule["+rule+"] not support. column value:"+value+" tableCount:"+tableCount) ;
}
return index;
}
}

+ 38
- 0
suimang-mybatis/src/main/java/com/iformall/plugin/shard/impl/ShardingSphere.java 查看文件

@@ -0,0 +1,38 @@
package com.iformall.plugin.shard.impl;

public class ShardingSphere {

public static final String TABLE_SUFFIX = "_";
/*表名,不用带下划线**/
private String tableName;
/*分表列名**/
private String column;
/*分表规则**/
private Integer rule;
/*表数量**/
private Integer count;
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getColumn() {
return column;
}
public void setColumn(String column) {
this.column = column;
}
public Integer getRule() {
return rule;
}
public void setRule(Integer rule) {
this.rule = rule;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
}

+ 33
- 0
suimang-mybatis/src/main/java/com/iformall/plugin/shard/impl/ShardingTableExcuter.java 查看文件

@@ -0,0 +1,33 @@
package com.iformall.plugin.shard.impl;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class ShardingTableExcuter {

private static Map<String,ShardingSphere> tableMap = new ConcurrentHashMap<String, ShardingSphere>();
public static Map<String,ShardingSphere> setTableSharding(String table ,ShardingSphere ss) {
tableMap.put(table, ss);
return tableMap;
}
public static ShardingSphere getShardingSphere(String table) {
return tableMap.get(table);
}
public static boolean isShardingTable(String table) {
ShardingSphere ss = getShardingSphere(table);
if (null == ss) {
return false;
}
return true;
}
public static boolean hasShardingConfig() {
if (null == tableMap || tableMap.size() <= 0) {
return false;
}
return true;
}
}

+ 32
- 0
suimang-mybatis/src/main/java/com/iformall/plugin/shard/impl/rule/ShardingRuleDefaultService.java 查看文件

@@ -0,0 +1,32 @@
package com.iformall.plugin.shard.impl.rule;

public class ShardingRuleDefaultService implements ShardingRuleService {

@Override
public String getTableIndex(Object value, int count) {
if (null == value || count <= 0 ) {
return null;
}
int hash = 9999999;
//如果是整数,则直接变为Long,好查询
if (value instanceof String) {
try {
Long lvalue = Long.parseLong((String)value);
hash = getHashCode(lvalue);
}catch(Exception e) {
hash = getHashCode(value);
}
}else {
hash = getHashCode(value);
}
return String.valueOf(hash%count);
}
private int getHashCode(Object value) {
int hash = value.hashCode();
if (hash < 0 ) {
hash = Math.abs(hash);
}
return hash;
}
}

+ 6
- 0
suimang-mybatis/src/main/java/com/iformall/plugin/shard/impl/rule/ShardingRuleService.java 查看文件

@@ -0,0 +1,6 @@
package com.iformall.plugin.shard.impl.rule;

public interface ShardingRuleService {

public String getTableIndex(Object value,int count);
}

+ 301
- 0
suimang-mybatis/src/main/java/com/iformall/plugin/shard/plugin/ShardingSpherePlugin.java 查看文件

@@ -0,0 +1,301 @@
package com.iformall.plugin.shard.plugin;

import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import net.sf.jsqlparser.statement.delete.Delete;
import net.sf.jsqlparser.statement.insert.Insert;
import net.sf.jsqlparser.statement.select.*;
import net.sf.jsqlparser.statement.update.Update;
import net.sf.jsqlparser.util.TablesNamesFinder;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.logging.LogFactory;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.StatementType;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;

import com.alibaba.druid.wall.violation.ErrorCode;
import com.iformall.plugin.MyBatisPlus;
import com.iformall.plugin.entity.ChainValue;
import com.iformall.plugin.entity.ChainValueHelper;
import com.iformall.plugin.shard.annotation.IgnoreSharding;
import com.iformall.plugin.shard.impl.ShardingRuleExcuter;
import com.iformall.plugin.shard.impl.ShardingSphere;
import com.iformall.plugin.shard.impl.ShardingTableExcuter;

import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;

/**
*分表
*/
public class ShardingSpherePlugin implements MyBatisPlus {

public ShardingSpherePlugin(){
}

//属性参数信息
private Properties properties;
private String dialect = "mysql";
private List<ShardingSphere> ShardingSpheres;
public String getDialect() {
return dialect;
}
public void setDialect(String dialect) {
this.dialect = dialect;
}
public List<ShardingSphere> getShardingSpheres() {
return ShardingSpheres;
}
public void setShardingSpheres(List<ShardingSphere> shardingSpheres) {
ShardingSpheres = shardingSpheres;
}

/**
* 获取配置信息
* {dialect=mysql, tenantInfo=org.xue.test.TenantInfoImpl, tenantIdColumn=tenant_id, parentTenantIdColumn=parent_tenant_id}
* @param properties
*/
public void setProperties(Properties properties) {
this.properties=properties;
this.dialect = this.properties.getProperty("dialect");
if (null != this.ShardingSpheres) {
for (ShardingSphere ss : this.ShardingSpheres) {
ShardingTableExcuter.setTableSharding(ss.getTableName(), ss);
}
}
}
public Map<String,ChainValue> intercept(Invocation invocation,Map<String,ChainValue> chainMap) throws Throwable {
if (!ShardingTableExcuter.hasShardingConfig()) {
return null;
}
StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
MetaObject metaStatementHandler = SystemMetaObject.forObject(statementHandler);
MappedStatement ms = (MappedStatement) metaStatementHandler.getValue("delegate.mappedStatement");
if(ms.getStatementType().equals(StatementType.CALLABLE)){
return chainMap;
}

//String id = ms.getId();
//String className = id.substring(0, id.lastIndexOf("."));
//String methodName = id.substring(id.lastIndexOf(".") + 1);
//Class<?> clazz = Class.forName(className);
//Method method = getMethodFromAllParent(clazz, methodName);
//if (method != null) {
// IgnoreSharding ignore = method.getAnnotation(IgnoreSharding.class);
// if (null == ignore) {
Object parameterObject = metaStatementHandler.getValue("delegate.boundSql.parameterObject");
BoundSql boundSql = statementHandler.getBoundSql();
String newSQL = buildTable(boundSql,parameterObject,chainMap);
metaStatementHandler.setValue("delegate.boundSql.sql", newSQL);
// }
//}
//没有添加字段,只是根据字段分表,没有别的需要返回
return chainMap;
}

private String buildTable(BoundSql boundSql,Object parameterObject,Map<String,ChainValue> chainMap) throws JSQLParserException {
String oldSql = boundSql.getSql();
Statement stmt = CCJSqlParserUtil.parse(oldSql);
if (stmt instanceof Insert) {
return buildInsert((Insert) stmt,oldSql,parameterObject,chainMap);
}

if (stmt instanceof Delete) {
return buildDelete((Delete) stmt,oldSql,parameterObject,chainMap);
}

if (stmt instanceof Update) {
return buildUpdate((Update) stmt,oldSql,parameterObject,chainMap);
}

if (stmt instanceof Select) {
return buildSelect((Select) stmt,oldSql,parameterObject,chainMap);
}

if (stmt instanceof CreateTable) {
return oldSql;
}
throw new RuntimeException("非法sql语句,请检查"+oldSql);
}
private String buildInsert(Insert stmt,String oldSql,Object parameterObject,Map<String,ChainValue> chainMap) {
return buildTable(stmt.getTable(), oldSql, parameterObject,chainMap);
}
private String buildDelete(Delete stmt,String oldSql,Object parameterObject,Map<String,ChainValue> chainMap) {
return buildTable(stmt.getTable(), oldSql, parameterObject,chainMap);
}
private String buildUpdate(Update stmt,String oldSql,Object parameterObject,Map<String,ChainValue> chainMap) {
return buildListTables(stmt.getTables(), oldSql, parameterObject,chainMap);
}
private String buildSelect(Select stmt,String oldSql,Object parameterObject,Map<String,ChainValue> chainMap) {
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
List<String> tableList = tablesNamesFinder.getTableList(stmt);
return buildByListTableNames(tableList, oldSql, parameterObject,chainMap);
}
private String buildTable(Table table,String oldSql,Object parameterObject,Map<String,ChainValue> chainMap) {
return buildByTableName(table.getName(), oldSql, parameterObject,chainMap);
}
private String buildByTableName(String table,String oldSql,Object parameterObject,Map<String,ChainValue> chainMap) {
if (!ShardingTableExcuter.isShardingTable(table)) {
return oldSql;
}
String newtable = getShareTable(table,parameterObject,chainMap);
//此处处理前缀相似的表,如wx_c_user, wx_c_user_basic_info, 直接替换wx_c_user会有问题
return oldSql.replaceAll(table+"_", "########").replaceAll(table, newtable).replaceAll("########", table+"_");
}
private String buildListTables(List<Table> tables,String oldSql,Object parameterObject,Map<String,ChainValue> chainMap) {
for (Table t : tables) {
oldSql = buildTable(t,oldSql,parameterObject,chainMap);
}
return oldSql;
}
private String buildByListTableNames(List<String> tables,String oldSql,Object parameterObject,Map<String,ChainValue> chainMap) {
for (String t : tables) {
oldSql = buildByTableName(t,oldSql,parameterObject,chainMap);
}
return oldSql;
}
private String getShareTable(String table,Object parameterObject,Map<String,ChainValue> chainMap) {
ShardingSphere ss = ShardingTableExcuter.getShardingSphere(table);
return ss.getTableName()+ShardingSphere.TABLE_SUFFIX+ShardingRuleExcuter.getTableIndex(ss.getRule(), getValue(table,ss.getColumn(),parameterObject,chainMap), ss.getCount());
}
private Object getValue(String table,String column,Object parameterObject,Map<String,ChainValue> parentChainMap) {
Object ov = ChainValueHelper.getValue(table, column, parentChainMap);
if (null != ov ) {
return ov;
}
if (parameterObject instanceof Map) {
String field = getField(column);
field = field.substring(0,1).toLowerCase()+field.substring(1);
Object o = parameterObject;
if (((Map) parameterObject).containsKey("et")) {
o = ((Map) parameterObject).get("et");
}else if(((Map) parameterObject).containsKey("ew")) {
Object ew = ((Map) parameterObject).get("ew");
if (ew instanceof com.baomidou.mybatisplus.core.conditions.query.QueryWrapper) {
o = ((com.baomidou.mybatisplus.core.conditions.query.QueryWrapper) ew).getEntity();
}
}else if(((Map) parameterObject).containsKey(column)) {
o = ((Map) parameterObject).get(column);
}else if (((Map) parameterObject).containsKey(field)) {
o = ((Map) parameterObject).get(field);
}else {
Map m = (Map) parameterObject;
for (Iterator it = m.keySet().iterator();it.hasNext();) {
Object ito = it.next();
Object value = m.get(ito);
if(isBasicTypeValue(value)) {
if (ito instanceof String) {
String itoStr = (String) ito;
if( itoStr.equals(column) || itoStr.equals(field)) {
return value;
}else {
continue;
}
}else {
continue;
}
}
Object v = getValue(table,column,value,parentChainMap);
if (null != v) {
return v;
}
}
}
return getValue(table,column,o,parentChainMap);
}else if (isBasicTypeValue(parameterObject)) {
return parameterObject;
//认为是实体
}else {
return getEntityValue(column, parameterObject, parentChainMap);
}
}
private String getField(String column) {
if (null == column) {
throw new RuntimeException("table sharinding error column is null");
}
try {
if (column.contains("_") && (!column.endsWith("_")) && (!column.startsWith("_"))) {
String[] field = column.split("_");
String fieldName = "";
if (null != field && field.length > 0) {
for (String f : field) {
fieldName = fieldName + f.substring(0,1).toUpperCase()+f.substring(1);
}
}else {
fieldName = column.substring(0,1).toUpperCase()+column.substring(1);
}
return fieldName;
}else {
return column.substring(0,1).toUpperCase()+column.substring(1);
}
}catch(Exception e) {
throw new RuntimeException(e);
}
}
private boolean isBasicTypeValue(Object parameterObject) {
if( parameterObject instanceof Integer || parameterObject instanceof Long || parameterObject instanceof Short || parameterObject instanceof Float
|| parameterObject instanceof Double || parameterObject instanceof BigDecimal || parameterObject instanceof Character || parameterObject instanceof String
|| parameterObject instanceof Byte || parameterObject instanceof Date || parameterObject instanceof Time || parameterObject instanceof Timestamp ) {
return true;
}
return false;
}
private Object getEntityValue(String column,Object parameterObject,Map<String,ChainValue> chainMap) {
try {
Method method = getMethodFromAllParent(parameterObject.getClass(),"get"+getField(column));
Object o = method.invoke(parameterObject);
return o;
}catch(Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
private Method getMethodFromAllParent(Class<?> currentClazz,String methodName) {
Method method = null;
for(Class<?> clazz = currentClazz ; clazz != Object.class ; clazz = clazz.getSuperclass()) {
try {
method = clazz.getDeclaredMethod(methodName) ;
} catch (Exception e) {
//这里甚么都不要做!并且这里的异常必须这样写,不能抛出去。
//如果这里的异常打印或者往外抛,则就不会执行clazz = clazz.getSuperclass(),最后就不会进入到父类中了
}
}
if (null == method) {
throw new RuntimeException(currentClazz+" has no method:"+methodName+"()");
}
return method;
}
}

二進制
suimang-mybatis/target/classes/com/iformall/plugin/MyBatisItercepters.class 查看文件


二進制
suimang-mybatis/target/classes/com/iformall/plugin/MyBatisPlus.class 查看文件


二進制
suimang-mybatis/target/classes/com/iformall/plugin/autoTenantId/MultiTenancy.class 查看文件


二進制
suimang-mybatis/target/classes/com/iformall/plugin/autoTenantId/TenantInfo.class 查看文件


二進制
suimang-mybatis/target/classes/com/iformall/plugin/entity/ChainValue.class 查看文件


二進制
suimang-mybatis/target/classes/com/iformall/plugin/entity/ChainValueHelper.class 查看文件


二進制
suimang-mybatis/target/classes/com/iformall/plugin/shard/annotation/IgnoreSharding.class 查看文件


二進制
suimang-mybatis/target/classes/com/iformall/plugin/shard/impl/EnumShardingRule.class 查看文件


二進制
suimang-mybatis/target/classes/com/iformall/plugin/shard/impl/ShardingRuleExcuter.class 查看文件


二進制
suimang-mybatis/target/classes/com/iformall/plugin/shard/impl/ShardingSphere.class 查看文件


二進制
suimang-mybatis/target/classes/com/iformall/plugin/shard/impl/ShardingTableExcuter.class 查看文件


二進制
suimang-mybatis/target/classes/com/iformall/plugin/shard/impl/rule/ShardingRuleDefaultService.class 查看文件


二進制
suimang-mybatis/target/classes/com/iformall/plugin/shard/impl/rule/ShardingRuleService.class 查看文件


二進制
suimang-mybatis/target/classes/com/iformall/plugin/shard/plugin/ShardingSpherePlugin.class 查看文件


+ 5
- 0
suimang-mybatis/target/maven-archiver/pom.properties 查看文件

@@ -0,0 +1,5 @@
#Generated by Maven
#Tue Jan 10 23:40:16 CST 2023
version=1.0
groupId=com.iformall
artifactId=suimang-mybatis

+ 295
- 0
suimang.iml 查看文件

@@ -0,0 +1,295 @@
<?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-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-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.15.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.15.0" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
<orderEntry type="library" scope="RUNTIME" 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-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.springframework:spring-web: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-expression:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-undertow:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.undertow:undertow-core:2.0.29.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.xnio:xnio-api:3.3.8.Final" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.jboss.xnio:xnio-nio:3.3.8.Final" level="project" />
<orderEntry type="library" name="Maven: io.undertow:undertow-servlet:2.0.29.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.2.Final" level="project" />
<orderEntry type="library" name="Maven: io.undertow:undertow-websockets-jsr:2.0.29.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.spec.javax.websocket:jboss-websocket-api_1.1_spec:1.1.4.Final" level="project" />
<orderEntry type="library" name="Maven: jakarta.servlet:jakarta.servlet-api:4.0.3" level="project" />
<orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" 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-amqp:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.amqp:spring-rabbit:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.rabbitmq:amqp-client:5.7.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.amqp:spring-amqp:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.4.RELEASE" 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-starter-data-redis:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.2.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.45.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.45.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.45.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.45.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.45.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.45.Final" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.3.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" 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-web-services:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.messaging.saaj:saaj-impl:1.5.1" level="project" />
<orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
<orderEntry type="library" name="Maven: jakarta.xml.soap:jakarta.xml.soap-api:1.4.1" level="project" />
<orderEntry type="library" name="Maven: org.jvnet.mimepull:mimepull:1.9.12" level="project" />
<orderEntry type="library" name="Maven: org.jvnet.staxex:stax-ex:1.8.1" level="project" />
<orderEntry type="library" name="Maven: jakarta.xml.ws:jakarta.xml.ws-api:2.3.2" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: jakarta.jws:jakarta.jws-api:1.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.ws:spring-ws-core:3.0.8.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.ws:spring-xml:3.0.8.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-mail:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.sun.mail:jakarta.mail:1.6.4" level="project" />
<orderEntry type="library" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-spring-boot-starter-process:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-spring-boot-autoconfigure:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-spring-security:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-engine:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-bpmn-converter:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-bpmn-model:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-process-validation:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-image-generator:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-engine-common-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-engine-common:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-variable-service-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-variable-service:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-identitylink-service:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-identitylink-service-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-task-service:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-task-service-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-job-service:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-job-service-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-idm-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-idm-engine:6.4.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.uuid:java-uuid-generator:3.1.5" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-idm-engine-configurator:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-cmmn-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-cmmn-model:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-dmn-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-dmn-model:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-form-model:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-form-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-content-api:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-email:1.5" level="project" />
<orderEntry type="library" name="Maven: com.sun.mail:javax.mail:1.5.6" level="project" />
<orderEntry type="library" name="Maven: javax.activation:activation:1.1" level="project" />
<orderEntry type="library" name="Maven: joda-time:joda-time:2.10.5" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-spring:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-spring-common:6.4.0" level="project" />
<orderEntry type="library" name="Maven: org.flowable:flowable-job-spring-service:6.4.0" 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-orm:5.2.4.RELEASE" 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" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.19" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.2.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.2.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.2.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.2.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.2.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.4" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.4" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.13" 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: com.alibaba:druid:1.1.22" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support: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-context:5.2.4.RELEASE" 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.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: org.ow2.asm:asm:5.0.4" level="project" />
<orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.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" 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" 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" />
<orderEntry type="library" name="Maven: org.rocketmq.spring.boot:rocketmq-spring-boot-starter:1.0.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-client:4.2.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-common:4.2.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-remoting:4.2.0" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-all:4.1.45.Final" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:26.0-jre" 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-qual:2.5.2" level="project" />
<orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.1.3" level="project" />
<orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.1" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.14" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.68" level="project" />
<orderEntry type="library" name="Maven: org.quartz-scheduler:quartz:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.mchange:mchange-commons-java:0.2.11" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.8.0" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.14" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.14" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.8.0" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-core:2.8.0" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.8.0" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.8.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-swagger-ui:2.8.0" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.8.0" level="project" />
<orderEntry type="library" name="Maven: org.reflections:reflections:0.9.11" level="project" />
<orderEntry type="library" name="Maven: org.javassist:javassist:3.21.0-GA" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.10.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.10.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.10.2" level="project" />
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.10" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-core:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-lang:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-cache:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-hash:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-core:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-cipher:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-core:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-ogdl:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-event:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-spring:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-web:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.crazycake:shiro-redis:3.1.0" level="project" />
<orderEntry type="library" name="Maven: redis.clients:jedis:3.1.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.7.0" level="project" />
<orderEntry type="library" name="Maven: com.puppycrawl.tools:checkstyle:8.3" level="project" />
<orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
<orderEntry type="library" name="Maven: org.antlr:antlr4-runtime:4.7" level="project" />
<orderEntry type="library" name="Maven: commons-cli:commons-cli:1.4" level="project" />
<orderEntry type="library" name="Maven: net.sf.saxon:Saxon-HE:9.8.0-4" level="project" />
<orderEntry type="library" name="Maven: org.jdom:jdom2:2.0.6" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.60" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.60" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
<orderEntry type="library" name="Maven: cn.afterturn:easypoi-spring-boot-starter:4.1.3.A" level="project" />
<orderEntry type="library" name="Maven: cn.afterturn:easypoi-web:4.1.3.A" level="project" />
<orderEntry type="library" name="Maven: cn.afterturn:easypoi-base:4.1.3.A" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi:4.1.1" 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-math3:3.6.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:4.1.1" 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" name="Maven: org.apache.poi:poi-ooxml-schemas:4.1.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:3.1.0" level="project" />
<orderEntry type="library" name="Maven: ognl:ognl:3.2.6" level="project" />
<orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
<orderEntry type="library" name="Maven: cn.afterturn:easypoi-annotation:4.1.3.A" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.13" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.14.0" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okio:okio:1.17.2" level="project" />
<orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.1" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
<orderEntry type="library" name="Maven: com.thoughtworks.xstream:xstream:1.4.10" level="project" />
<orderEntry type="library" name="Maven: xmlpull:xmlpull:1.1.3.1" level="project" />
<orderEntry type="library" name="Maven: xpp3:xpp3_min:1.1.4c" level="project" />
<orderEntry type="library" name="Maven: com.github.binarywang:weixin-java-common:3.7.0.B" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5.11" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.30" level="project" />
<orderEntry type="library" name="Maven: com.github.binarywang:weixin-java-miniapp:3.7.0.B" level="project" />
<orderEntry type="library" name="Maven: com.github.binarywang:weixin-java-mp:3.7.0.B" level="project" />
<orderEntry type="library" name="Maven: com.github.binarywang:weixin-java-pay:3.7.0.B" level="project" />
<orderEntry type="library" name="Maven: com.github.binarywang:qrcode-utils:1.1" level="project" />
<orderEntry type="library" name="Maven: com.google.zxing:core:3.2.1" level="project" />
<orderEntry type="library" name="Maven: org.jodd:jodd-http:5.2.0" level="project" />
<orderEntry type="library" name="Maven: org.jodd:jodd-core:5.2.0" level="project" />
<orderEntry type="library" name="Maven: org.jodd:jodd-util:6.0.0" 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: com.github.binarywang:weixin-java-open:3.7.0.B" level="project" />
<orderEntry type="library" name="Maven: com.github.ulisesbocchio:jasypt-spring-boot:2.1.0" level="project" />
<orderEntry type="library" name="Maven: org.jasypt:jasypt:1.9.2" level="project" />
<orderEntry type="library" name="Maven: com.belerweb:pinyin4j:2.5.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.5.2" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.5" level="project" />
<orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-api:0.33.0" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-util:0.33.0" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-dysmsapi:2.1.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.oss:aliyun-sdk-oss:3.10.2" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.1" level="project" />
<orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.0.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-sts:3.0.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ecs:4.2.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-kms:2.7.0" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.4" level="project" />
<orderEntry type="library" name="Maven: com.twelvemonkeys.imageio:imageio-jpeg:3.6" level="project" />
<orderEntry type="library" name="Maven: com.twelvemonkeys.imageio:imageio-core:3.6" level="project" />
<orderEntry type="library" name="Maven: com.twelvemonkeys.imageio:imageio-metadata:3.6" level="project" />
<orderEntry type="library" name="Maven: com.twelvemonkeys.common:common-lang:3.6" level="project" />
<orderEntry type="library" name="Maven: com.twelvemonkeys.common:common-io:3.6" level="project" />
<orderEntry type="library" name="Maven: com.twelvemonkeys.common:common-image:3.6" level="project" />
</component>
</module>

+ 161
- 0
suimangCApi/src/main/java/com/iformall/aop/RedisCacheAspect.java 查看文件

@@ -0,0 +1,161 @@
package com.iformall.aop;


import com.alibaba.fastjson.JSONObject;
import com.iformall.annotation.RedisCache;
import com.iformall.common.ErrorCode;
import com.iformall.domain.po.WxCUser;
import com.iformall.domain.po.base.BaseCUserEntity;
import com.iformall.exception.MallinkException;
import com.iformall.service.CUserTokenService;
import com.iformall.utils.HashUtil;
import com.iformall.utils.RedisLock;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
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.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Objects;

@Slf4j
@Aspect
@Component
public class RedisCacheAspect {

/**
* 参数分隔符 param1|param2|param3
**/
private static final String DELIMITER_PARAMS = "|";

/**
* key 分隔符
*/
private static final String DELIMITER_KEY = ":";

@Autowired
private StringRedisTemplate stringRedisTemplate;

@Autowired
RedisLock redisLock;

@Autowired
private CUserTokenService cUserTokenService;

@Pointcut("@annotation(com.iformall.annotation.RedisCache)")
public void cacheAspect() {
}

@Around("cacheAspect()")
public Object round(ProceedingJoinPoint jp) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 查询token信息
//从header中获取token
String token = request.getHeader("token");
//如果header中不存在token,则从参数中获取token
if (StringUtils.isBlank(token)) {
token = request.getParameter("token");
}
if(StringUtils.isBlank(token) || "null".equals(token) || "undefined".equals(token)){
token="";
//throw new MallinkException(ErrorCode.NET_TOKEN_EMPTY.getCode(),"token为空["+token+"]");
}
log.info("token>>>>>>>>>>>>>>>"+token);
String tenantId;
BaseCUserEntity cUser = null ;
if(StringUtils.isNotBlank(token)) {
cUser = cUserTokenService.getByToken(token);
}
if (Objects.isNull(cUser) || cUser.getExpireTime().getTime() < System.currentTimeMillis()) {
tenantId = "0";
} else {
tenantId = cUser.getTenantId();
}

// 请求参数
Object[] args = jp.getArgs();
// 接口 返回结果
Object result;
String redisKey;

//得到注释的名称
MethodSignature signature = (MethodSignature) jp.getSignature();
//判断tag是否在用户权限中 如果存在加入参数查询
Method method = signature.getMethod();
RedisCache cache = method.getAnnotation(RedisCache.class) ;
if (cache.autoKey()) {
// 构建 redisKey => reqPath:tenantId:md5(param1_param2_param3)
String requestUrl = request.getRequestURI();
// 接口路径 reqPath => /api/xxx
String reqPath = requestUrl.substring(requestUrl.indexOf("/api/"));
if (cache.md5()) {
String md5Before = StringUtils.join(args, DELIMITER_PARAMS);
redisKey = StringUtils.join(reqPath, DELIMITER_KEY, tenantId, DELIMITER_KEY, HashUtil.md5(StringUtils.join(token, md5Before, DELIMITER_PARAMS)));
} else {
redisKey = StringUtils.join(reqPath, DELIMITER_KEY, tenantId, DELIMITER_KEY, StringUtils.join(token,args, DELIMITER_PARAMS));
}
} else {
redisKey = cache.key();
}

// redisKey 不存在,获取接口数据并返回
if (StringUtils.isBlank(redisKey)) {
result = jp.proceed(args);
} else {
ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
String value = valueOperations.get(redisKey);
if (value == null) {
String lockKey = StringUtils.join(redisKey, ":", "lock");
long time = System.currentTimeMillis() + 2000;
String timeStr = String.valueOf(time);
try {
//分布式锁,保证一个线程读DB,其它线程排队
if (redisLock.lock2(lockKey, timeStr)) {
log.debug("CacheAspect 读库中, key:{}: " + lockKey);
result = jp.proceed(args);
String json_data = JSONObject.toJSONString(result);
valueOperations.set(redisKey, json_data, cache.expireTime(), cache.dateUnit());
log.debug("CacheAspect 缓存不存在,获取接口数据并放入缓存,key:{}, expire:{}", redisKey, cache.expireTime());
} else {
log.debug("CacheAspect 读库等待中, key:{}: " + lockKey);
Thread.sleep(2000);
value = valueOperations.get(redisKey);
result = parseCache(jp, redisKey, value);
}
} catch (Throwable throwable) {
log.error("CacheAspect proceed error , Illegal argument: {} in {}.{}()", Arrays.toString(jp.getArgs()),
jp.getSignature().getDeclaringTypeName(), jp.getSignature().getName(), throwable);
throw throwable;
} finally {
redisLock.unlock(lockKey, timeStr);
}
} else {
result = parseCache(jp, redisKey, value);
}
// 计数器
stringRedisTemplate.opsForHash().increment("hotapi", redisKey, 1);
}
return result;
}

private Object parseCache(ProceedingJoinPoint jp, String redisKey, String value) {
if (StringUtils.isBlank(value)) {
log.debug("CacheAspect 缓存不存在,解析缓存数据为空:{},key:{}", value, redisKey);
return null;
}
Class<?> returnType = ((MethodSignature) jp.getSignature()).getReturnType();
log.debug("CacheAspect 缓存存在,解析缓存并返回,key:{}", redisKey);
return JSONObject.parseObject(value, returnType);
}
}

+ 175
- 0
suimangCApi/src/main/java/com/iformall/utils/ImgIdeaUtil.java 查看文件

@@ -0,0 +1,175 @@
package com.iformall.utils;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ResourceUtils;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class ImgIdeaUtil {

private static final Logger logger = LoggerFactory.getLogger(ImgIdeaUtil.class);

//模板图片
private static final String imgTempPath = "imgTemp/gertificate.jpg";
//字体路径
private static final String fontPath = "opt/HWLS.TTF";

/**
* 生成图片证书
* @return
*/
public static byte[] imgGertificate(String name, String englishName, LocalDateTime date){
if(StringUtils.isBlank(name)){
logger.error("名字为空,无法生成证书");
return null;
}
if(name.length() == 2){
name = name.replaceAll("(\\S)", "$0 ");
}
if(StringUtils.isBlank(englishName)){
englishName = getUpEname(name);
}
if(date == null){
date = LocalDateTime.now();
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dMMM yyyy", Locale.UK);
String dateFormat = date.format(formatter);

try {

InputStream backImgUrl = ClassLoader.getSystemResourceAsStream(imgTempPath);
//InputStream backImgUrl = ImgIdeaUtil.class.getClassLoader().getResourceAsStream(imgTempPath);

Font font = Font.createFont(Font.TRUETYPE_FONT, ResourceUtils.getFile("classpath:"+fontPath));
BufferedImage backImg = ImageIO.read(backImgUrl);
Graphics g = backImg.getGraphics();

//图片加中文名
Font fTxtBottomName = font.deriveFont(Font.PLAIN, 170);
//Font fTxtBottomName = new Font("华文隶书", Font.PLAIN, 170);
FontMetrics metricsName = g.getFontMetrics(fTxtBottomName);
int xName = (backImg.getWidth() - metricsName.stringWidth(name)) / 2;
Color myColorTxtBottomName = Color.BLACK; //颜色
g.setColor(myColorTxtBottomName);
g.setFont(fTxtBottomName);
g.drawString(name, xName , 1150);//g.drawString(文字, x 位置, y 位置);

//图片加英文名
Font fTxtBottomEname = font.deriveFont(Font.PLAIN, 120);
//Font fTxtBottomEname = new Font("华文隶书", Font.PLAIN, 120);
FontMetrics metricsEname = g.getFontMetrics(fTxtBottomEname);
int xEname = (backImg.getWidth() - metricsEname.stringWidth(englishName)) / 2;
Color myColorTxtBottomEname = Color.BLACK;
g.setColor(myColorTxtBottomEname);
g.setFont(fTxtBottomEname);
g.drawString(englishName, xEname, 1300);

//图片加日期
Font fTxtBottomDate = font.deriveFont(Font.PLAIN, 90);
//Font fTxtBottomDate = new Font("华文隶书", Font.PLAIN, 90);
Color myColorTxtBottomDate = Color.BLACK;
g.setColor(myColorTxtBottomDate);
g.setFont(fTxtBottomDate);
g.drawString(dateFormat, 440, 2100);

//调这个方法就是开始这个整合 (可以多张图片,多个文字整合成一张图片,只有把他们放在这方法里面就行)
g.dispose();

ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(backImg, "png", out);

return out.toByteArray();
} catch (Exception e) {
e.printStackTrace();
logger.error("生成证书异常", e.getMessage());
}
return null;
}

/**
* //姓、名的第一个字母需要为大写
* @param name
* @return
*/
public static String getUpEname(String name) {
char[] strs = name.toCharArray();
String newname = null;

if (strs.length == 2) {
newname = toUpCase(getEname("" + strs[0])) + " " + toUpCase(getEname("" + strs[1]));
} else if (strs.length == 3){
newname = toUpCase(getEname("" + strs[0])) + " "
+ toUpCase(getEname("" + strs[1] + strs[2]));
}else if (strs.length == 4){
newname = toUpCase(getEname("" + strs[0] + strs[1])) + " "
+ toUpCase(getEname("" + strs[2] + strs[3]));
} else{
newname = toUpCase(getEname(name));
}
return newname;
}


/**
* //将中文转换为英文
* @param name
* @return
*/
public static String getEname(String name){
HanyuPinyinOutputFormat pyFormat = new HanyuPinyinOutputFormat();
pyFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
pyFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
pyFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
String s = "";
try {
s = PinyinHelper.toHanyuPinyinString(name, pyFormat, "");
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
}
return s;
}
/**
* 首字母大写
* @param str
* @return
*/
private static String toUpCase(String str) {
StringBuffer newstr = new StringBuffer();
newstr.append((str.substring(0, 1)).toUpperCase()).append(
str.substring(1, str.length()));
return newstr.toString();
}


// public static void main(String[] args) {
// String serverUploadImgUrl = "C:/Users/xiaohu/Desktop/img"; // 图片保存路径
// try {
// byte[] bytes = imgGertificate("郑方元", null, null);
// ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
// BufferedImage bi1 =ImageIO.read(bais);
//
// ImageIO.write(bi1, "png", new File(serverUploadImgUrl+"/0.png"));
//
// } catch (Exception e) {
// e.printStackTrace();
// }
// System.out.println("结束");
// }
}

+ 14
- 0
suimangCApi/src/main/java/com/iformall/utils/UrlCheck.java 查看文件

@@ -0,0 +1,14 @@
package com.iformall.utils;

/**
* @author gongbiao
*/
public class UrlCheck {

public static boolean checkUrl(String url) {
return url.contains("awsFileUpload")
|| url.contains("awsFilesUpload")
|| url.contains("getCarStopFee");
}

}

+ 68
- 0
suimangCallback/src/main/java/com/iformall/controller/base/BaseController.java 查看文件

@@ -0,0 +1,68 @@
package com.iformall.controller.base;

import com.alibaba.fastjson.JSONObject;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.utils.IPUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

@RestController
public class BaseController {

@InitBinder
public void InitBinder(WebDataBinder dataBinder) {
dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
public void setAsText(String value) {
try {
setValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value));
} catch(ParseException e) {
try {
setValue(new SimpleDateFormat("yyyy-MM-dd ").parse(value));
} catch (ParseException e1) {
setValue(null);
}
}
}

public String getAsText() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) getValue());
}

});
}

public String getIpAddr() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String ipaddress = IPUtil.getIpAddr(request);
return ipaddress;
}

/**
* 根据扩展字段获取tenantId
*/
public String getTenantId(String attach){
if(StringUtils.isNotBlank(attach)){
try{
Map<String,Object> map = JSONObject.parseObject(attach, Map.class);
String tenantId = map.get("tenantId").toString();
if(StringUtils.isNotBlank(tenantId)){
return tenantId;
}
}catch (Exception e){

}
}
return null;
}
}

+ 32
- 0
suimangCallback/target/classes/META-INF/spring-configuration-metadata.json 查看文件

@@ -0,0 +1,32 @@
{
"groups": [
{
"name": "aws",
"type": "com.iformall.config.AwsProperty",
"sourceType": "com.iformall.config.AwsProperty"
}
],
"properties": [
{
"name": "aws.access",
"type": "java.lang.String",
"sourceType": "com.iformall.config.AwsProperty"
},
{
"name": "aws.bucket-name",
"type": "java.lang.String",
"sourceType": "com.iformall.config.AwsProperty"
},
{
"name": "aws.client-region",
"type": "java.lang.String",
"sourceType": "com.iformall.config.AwsProperty"
},
{
"name": "aws.secret",
"type": "java.lang.String",
"sourceType": "com.iformall.config.AwsProperty"
}
],
"hints": []
}

+ 189
- 0
suimangCallback/target/classes/application-dev.yml 查看文件

@@ -0,0 +1,189 @@
spring:
profiles:
#include: aliyunRocketMQ
include: rabbitMQ
# JDBC
datasource:
url: jdbc:mysql://101.200.130.134:3306/malink_suimang?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&useAffectedRows=true
username: root
password: fm2020test
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 28000
minEvictableIdleTimeMillis: 28000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000"
#jackson:
#date-format: yyyy-MM-dd HH:mm:ss
# REDIS
redis:
host: 101.200.130.134
port: 6379
password: iF0rm@2l2ol9
timeout: 3600
expire: 1800 #30分钟
database: 5
defaultExpiration: 2592000 # 默认生命周期30天
jedis:
pool:
max-active: 100
max-idle: 500
max-wait: -1
min-idle: 10

# SMS
aliyun:
sms:
accessKeyId: LTAI4G7ixY4AhvM35F8o3W3V
accessKeySecret: VfWqGb83qIQrS9us45utskl8itd7ry
product: Dysmsapi
domain: dysmsapi.aliyuncs.com
regionId: cn-hangzhou
dateFormat: yyyyMMdd
endpointName: cn-hangzhou

oss:
endpoint: oss-cn-beijing.aliyuncs.com
keyid: LTAI4G7ixY4AhvM35F8o3W3V
keysecret: VfWqGb83qIQrS9us45utskl8itd7ry
bucketname: formall
filehost: malinkcallback
filedomain: https://formall.oss-accelerate.aliyuncs.com

# EMAIL
mail:
host: smtp.exmail.qq.com
username: zhengfangyuan@iformall.com
password: 2hSeppFRaw7KZZyf # 授权密码
properties:
mail:
smtp:
auth: true
starttls:
enable: true
socketFactory:
port: 465
class: javax.net.ssl.SSLSocketFactory
# ROCKETMQ
rocketmq:
nameServer: 127.0.0.1:9876
producer:
retry-times-when-send-async-failed: 0
send-msg-timeout: 300000
compress-msg-body-over-howmuch: 4096
max-message-size: 4194304
retry-another-broker-when-not-store-ok: false
retry-times-when-send-failed: 2
# RABBITMQ
rabbitmq:
host: 101.200.130.134
port: 5672
username: fumao
password: f9l98
publisher-confirms: true
publisher-returns: false
virtual-host: /

aliyunRocketmq:
accessKeyId: "LTAI4G7ixY4AhvM35F8o3W3V"
accessKeySecret: "VfWqGb83qIQrS9us45utskl8itd7ry"
groupId: "GID_P_1"
namesrvAddr: "http://MQ_INST_1796289517488555_Bcqaq2is.cn-beijing.mq-internal.aliyuncs.com:8080"

aws:
clientRegion: cn-northwest-1
bucketName: iformall-net
access: ENC(3gx5ghDFBqGrEhO3Wf8aYmXsnwHO7Cj3HNKJGOeUj0o=)
secret: ENC(HVKIJwCJKVXLlUpGlQPwNqJOlnpxn4xYuy91SH0seTSm2uAttIQHvA49fXWWax90v5wloIk0QuU=)

#wechat:
# web:
# appId: "wxe31beafbfd8295ba"
# secret: "c689fabf3c4c9f5b6424ff2a36a26727"
# url: "https://mall.youlane.cn"
# open:
# componentAppId: "wx897e4673286c915d"
# componentSecret: "cdfdfda65c45689beb6766c4c427eed2"
# componentToken: "formall2018"
# componentAesKey: "htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN"
# redis:
# host: 101.201.103.81
# port: 6379
# password: ENC(xPFDlgd6v8zUhJMbcKc0KmmQiqs9qHtk)
# timeout: 3600
# expire: 1800 #30分钟
# database: 2
# defaultExpiration: 2592000 # 默认生命周期30天
# jedis:
# pool:
# max-active: 100
# max-idle: 500
# max-wait: -1
# min-idle: 10

wechat:
web:
appId: "wx091907dd0bfd3f6b"
secret: "2a2ca10738998b9ef92c1fe8a4d366a6"
url: "https://admintest.malls.iformall.com"
open:
componentAppId: wxdfc8fb4e62d6b52b
componentSecret: 98daa62b316dd6feabaad708327ce233
componentToken: formall2018
componentAesKey: htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN
redis:
host: 101.200.130.134
port: 6379
password: iF0rm@2l2ol9
timeout: 3600
expire: 1800 #30分钟
database: 2
defaultExpiration: 2592000 # 默认生命周期30天
jedis:
pool:
max-active: 100
max-idle: 100
max-wait: -1
min-idle: 10

alipay:
open:
appId: 2021002137663024
appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCUfymV5J73QQMG52PVIGUbowkloYCO4B7TQoKbrTZf2YeYsg/To/o4PiXPMNwEUfEUU8NYQ6WwNhCd2fa1ei8WFXJUf3bfgswtBk1aOmHLeY9yoXFxIKMTQ9RcobnmBzKQZlaAPMTSr7t1QtKZKPuc2gEHGRFYKO/ZuL8gIpnsVidVtmi52yd7hzao/pI3ThLA0lreg4L3rYP5ESQZRytxIPgUQ4KI11pZxFgbe+uy28AGDYIQscSIb+SWOHPYKLvOEqqepIZ8M18w/U0lZzpzepzi/V/llekvXJ6UEf1lzl7x/4UIA3WPN1B40+NzbD/OxEGTuM0UctOG6ZTd4Te9AgMBAAECggEAPYksnHbvARspu/SrRCh2fatkIPn6Ijrxyy3mnch7neCw9i/jqxpqmF/4nxFqO0gRlRDZBHyT7p+Y5zDpsW5+kLI2fJmNkzXKkmXoLBnBaOZo8WHBdtXFfjg/iltig9Y7t+cQtXd5QK2eCwuz5dA75FXa0ywqKdRdAGY0nYZ5LpwrHVU8RXheUDCJyhKNj2+W6lIaSKDxLZU3laO1oBrv1agcy7Crd5E2ndb8O3Enga+z7wSz2h7A1BasC/Yl/Ro0Y21wLCH3s/R6qA0Paq12+WEF+xdodM7SrP43CCTVFGbC1TfEOdanJfixop8QuYsIp7pHrL925+vP4eY9RfckgQKBgQDQqLdpDzzU7Ot/L9Vc/r8d4iwXXbX8+HwVFV4oBuausgFyv8eJJpfrI+IlEoB1ubJcPpJBFqfmeYTW6/v6ioFljJAlWfFvesUVt/HszBMIOsU0Bzt7ex6WlwKOagb0q0ZPA4T0OY0K0lg0loaaaR8ZTr4ivDymaGBtTBYhslpc7QKBgQC2MBznGEc5r2dhyENvdPOR20PnXQcevGnPdqSus8m0VmDcHE72RVcckcZtwczsb3NaLSqmjAcWTn51/VFmlvhB3F34FcFTPZGq6sj7fWK8HuFq7l7mu5OzYuVr73zy9ggsUuaw10IqvvwIVxszNAF0hiRnSGH3z27CoRmz3s+8EQKBgQCK3o7atBJ3X4rIJiypbL4DhIB1uJ+jUjk6yvLUTut+fufp1+tTw0S+cS5UIAEw2Lr1G4u5F/v8rwmTBJG6SC4gSLGyui6uVBYRA1BWmedcxchzfRDAeMt9y9kesUAZ3Fe5xIzbAeZ1ulKMBVZmM+pHrJlsgr0Wv0bV1xqvqITtbQKBgBIsIGXopQoa9dvqBtfyOW1eCprkS5aEQqWf9vM6Ga90QjsSU8n6xqKh48IE57TZtQ7UnIF6TCasc66/MsRh4KdpHLJnMR5lcMc0nhF/wz5ychehaTPol+X3wlyOyc7OPah2KG6ROhdbb3ZBggQMduyxiKYIsUTvmuOtAAxR+DSRAoGADtuDzGQDOJYWiO2uuP6FpA5IJaiwlSfu3xncJVfhO8SVr6VBJFg88igbIB3w6nk/sv7j9VTXqXre9HMvp1flxaaLsdxM4HcTSALS9q6t/ajaveqte6S5kAtWx0WW8C6PtgWXHbxcD7LXARSsKLoEl2JXXyUVS/m2l/RzHBQ8GJI=
appPublicKeyCertPath: /opt/iformall/service/alipay/appCertPublicKey_2021002137663024.crt
alipayCertPath: /opt/iformall/service/alipay/alipayCertPublicKey_RSA2.crt
alipayRootCertPath: /opt/iformall/service/alipay/alipayRootCert.crt
callback: https://callbacktest.malls.iformall.com/api/alipay/notify/callback
video:
aliyun:
accessKeyId: LTAI4G7ixY4AhvM35F8o3W3V
accessKeySecret: VfWqGb83qIQrS9us45utskl8itd7ry
regionId: cn-beijing

jasypt:
encryptor:
password: oRqdnDbK5pj3eMmB

fm:
exception: true
exception_emails: xuxiaohu@iformall.com
deploy: 1
open: true
upload_dir: /home/test/server/uploads/
videoType: aliyun

logging:
level:
com.iformall: debug
path: ./logs/admin

+ 148
- 0
suimangCallback/target/classes/application-prod.yml 查看文件

@@ -0,0 +1,148 @@
spring:
profiles:
include: aliyunRocketMQ
# JDBC
datasource:
url: jdbc:mysql://zc349w82qvn56ftl5e64-rw4rm.rwlb.rds.aliyuncs.com:3306/malink_suimang?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true
username: ENC(nUefcxWYlMS/1cDxikIKwA==)
password: ENC(neToS+hzeFjgSFB/7UEl5qYnW2rUjrPq)
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
filters: stat
maxActive: 200
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 28000
minEvictableIdleTimeMillis: 28000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000"
# REDIS
redis:
host: r-2zeaglwf13qqmnllj5.redis.rds.aliyuncs.com
port: 6379
password: mallone:iF0rm@2l2ol9
timeout: 3600
expire: 1800 #30分钟
database: 1
defaultExpiration: 2592000 # 默认生命周期30天
jedis:
pool:
max-active: 100
max-idle: 20
max-wait: -1
min-idle: 0
# SMS
aliyun:
sms:
accessKeyId: LTAI4G7ixY4AhvM35F8o3W3V
accessKeySecret: VfWqGb83qIQrS9us45utskl8itd7ry
product: Dysmsapi
domain: dysmsapi.aliyuncs.com
regionId: cn-hangzhou
dateFormat: yyyyMMdd
endpointName: cn-hangzhou
oss:
endpoint: oss-cn-beijing.aliyuncs.com
keyid: LTAI4G7ixY4AhvM35F8o3W3V
keysecret: VfWqGb83qIQrS9us45utskl8itd7ry
bucketname: formall
filehost: malinkadmin
filedomain: https://formall.oss-accelerate.aliyuncs.com
# EMAIL
mail:
host: smtp.exmail.qq.com
username: zhengfangyuan@iformall.com
password: 2hSeppFRaw7KZZyf # 授权密码
properties:
mail:
smtp:
auth: true
starttls:
enable: true
socketFactory:
port: 465
class: javax.net.ssl.SSLSocketFactory
# RABBITMQ
rabbitmq:
host: localhost
port: 5672
username: ENC(lRmLd6EzgeY1RT5ktcHv9g==)
password: ENC(gBI8mCjr3OC0v57jcnSb660Ux7mW03K2oePgvohhg7w=)
publisher-confirms: true
publisher-returns: false
virtual-host: /
aliyunRocketmq:
accessKeyId: "LTAI4G7ixY4AhvM35F8o3W3V"
accessKeySecret: "VfWqGb83qIQrS9us45utskl8itd7ry"
groupId: "GID_P_1"
namesrvAddr: "http://MQ_INST_1796289517488555_Bcqaq2is.cn-beijing.mq-internal.aliyuncs.com:8080"
aws:
clientRegion: cn-northwest-1
bucketName: iformall-net
access: ENC(a6SN1sZ1enNL49ypiOXkg/pPPAnZD8H4buQFTTKN08s=)
secret: ENC(5P5ff4bTMJUbXVR4ZsM03UHzOKZ4+Zg5Iutcdkyp/Quny/oXg+A4KpfwEyGarlLu3vQMJahGP5M=)

wechat:
web:
appId: "wx9cc4ca09eb20fe03"
secret: "af1d7f7a1268022a73cb4ce0b9cf0985"
url: "https://admin.malls.iformall.com"
open:
componentAppId: ENC(b3JG0MUZgQfz5Zj+DC2ZM1zDeLOiGTmmeokfe2O8kaM=)
componentSecret: ENC(QVyc4BPGdnSjXGs2ivgpDBE1v8wPWHLLRMYI7Vv8uYwC0SiZHQz0QpyyQV/b48Pb)
componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC)
componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=)
redis:
host: r-2zeaglwf13qqmnllj5.redis.rds.aliyuncs.com
port: 6379
password: mallone:iF0rm@2l2ol9
timeout: 3600
expire: 1800 #30分钟
database: 2
defaultExpiration: 2592000 # 默认生命周期30天
jedis:
pool:
max-active: 100
max-idle: 100
max-wait: -1
min-idle: 10
alipay:
open:
appId: 2021002140616334
appPrivateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCEJmHIlS0luIH7zJRRVlypCcgiSkqpSlnmgyCEM7nu8IerV8Yf7dMBitBklTpJB+4URV1bW+q6Ijzo8RsCyjm1Kx+EFiKf1PiJXlT0h1+bF3fYdDr6r5GK0/TtB8O80p774NcRD3HgbzUS8AEe/GcBvhiXbDRgJh7yAngW9vxl9u1o5UcaxOXVLWDrjlQGF6qyXUlycCNIdPXj3LduP3PBK5daVZwJm33Pr7kmSI0agZvV267HaTpSKaiXI7Zwo+nFMqx9g9kpzmYRfOgHx3DWpQUFI646IB8nEpLpQp3/0eDocuqiHXYgEpLpPoFKoVE228v74YSFh3Y4fFGX+qtjAgMBAAECggEAIJK9Y42xtSyHjaNdo7bf3CK3HAyn3pafFjyYFT4SxJyxNEDMay5Z5nVq7IAD/+BehMycOFqtvveVf+1+NO/XzZo1iH9URYVfRazkz+lWXYopVkdACm6gN1ILeymAy9g2q+s918ywyxteP668+ABK+5j5wsk/F7wNwKVvKGn0yMT7DP0FAL1e0KWndZCZlF79VnFpBLscDJq28GqRzqYop4CWqHHTA6DBvIqkfQV4U3IzqnzOsxNLEMBwhnbK08XfYZ3DxCPH0jQdA2Jj/aABrntq2EpWjzW5H9iZqrVo33rmsNHUSQvla/333RkbpwGyNhI6kcPBRq4cVSAa3y7dMQKBgQDVfyDUPWKXVwIJUgO1my8WIUu2p6nhuT7Mfnpk4X7ewdFaRVjb/r0KvhLgoz2/KOwkqtWTlEvNaCDDycpLXk+V5ZH833kYsDEmxY7ikOUjCcrfYJgT7P77//cZ4Kx8a5X45SiKAZT2GQv7BTtIfNhrfTUj6AQx/3MP3sa2QAWeNQKBgQCedWoF7t+qyck2hctqtTFC7fRkEk7RNJVph1ZOeTqOIAKhmhkwaOE3joxQ/VqHDy212YdW4hI0BWUzbEdMy0Idz2G3y9ERVD84hZehf5GGRdiSrY9EEQgHlcI6Qb8/AnDdpy1DlKUMwTYjVNzkDL3AzeWn61JS1XQaOzZBsJy2NwKBgFa+pJQXrOtYytcGn8M2Hlebh6vbS8cPAVkNOqWqiWXw0iMfcg9Q3XZz7C+hpAD7m5b6YnToGDSJTma+opck5qk88agRFJ7XV+Es+/VKcg9edzNzh9bwwFmbksbM5shW3kSWt3X7Vo73dkqzwXaeY0CpSuIf7zRxWkrkdVCvipjRAoGAMcJlPN+6VQNwsDJromKryXy31gT5wzBkCvN44sOm46KhsOWXK2CD+NJGtdgZaXgWvphEq7/qP3PCR9ekvDTH2lyZLwJN8Mcn4zPwXcKVjDi6vbTK3HEMuHUKvQiQadT2ZGRvDl3LRqoVuhqYEvT9UWJWz9hRzblB8ErPyukPDRkCgYB7bMv2iflpaGE1J3gkTlVJB+2QSfnAXaUDMLWsZN4gYjwEBVCEJ+mhWL1/GeEIBjSs5/qZIeRsYzlxGEcnsJzRfog6ITBF14AeZ+xNkHq83ja87OGVKMypiccGwRehijDhJi6tgMJ0u0w6PiqcJvh0SX4jBhDDPjuWzK2XD+lx8A==
appPublicKeyCertPath: /opt/iformall/service/alipay/appCertPublicKey_2021002140616334.crt
alipayCertPath: /opt/iformall/service/alipay/alipayCertPublicKey_RSA2.crt
alipayRootCertPath: /opt/iformall/service/alipay/alipayRootCert.crt
callback: https://callback.malls.iformall.com/api/alipay/notify/callback
video:
aliyun:
accessKeyId: LTAI4G7ixY4AhvM35F8o3W3V
accessKeySecret: VfWqGb83qIQrS9us45utskl8itd7ry
regionId: cn-beijing
endPoint: https://oss-cn-beijing.aliyuncs.com
corePoolSize: 6
maxPoolSize: 20
queueCapacity: 1000
namePrefix: aliyun-video-upload

fm:
exception: true
exception_emails: houtaikaifa@iformall.com
deploy: 3
open: true
upload_dir: /root/uploads/
videoType: aliyun

logging:
level:
com.iformall.mapper: debug
path: ./logs/admin

+ 73
- 0
suimangCallback/target/classes/application.yml 查看文件

@@ -0,0 +1,73 @@
server:
port: 9300
servlet:
context-path: /

spring:
application:
name: suimang
profiles:
active: dev
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
default-property-inclusion: non_null
servlet:
multipart:
max-file-size: 2MB
max-request-size: 2MB
cache:
type: REDIS
cache-names: redis_cache #缓存的名字(可以不指定)
redis:
time-to-live: 60000ms #很重要,缓存的有效时间,以便缓存的过期(单位为毫秒)
# rocketmq:
# nameServer: 202.165.179.86:9876
# producer:
# retry-times-when-send-async-failed: 0
# send-msg-timeout: 300000
# compress-msg-body-over-howmuch: 4096
# max-message-size: 4194304
# retry-another-broker-when-not-store-ok: false
# retry-times-when-send-failed: 2
# rabbitmq:
# host: 202.165.179.86
# port: 5672
# username: guest
# password: guest
# publisher-confirms: true
# virtual-host: /
aop:
proxy-target-class: true
auto: true

# MybatisPlus
mybatis-plus:
mapper-locations: classpath:mapper/*Mapper.xml
global-config:
db-config:
id-type: id_worker
field-strategy: not_null
db-type: mysql
configuration:
jdbc-type-for-null: 'null'
cache-enabled: false
call-setters-on-nulls: true
type-aliases-package: com.iformall.domain.po
type-enums-package: com.iformall.enums

# PageHelper
pagehelper:
helperDialect: mysql
reasonable: false
supportMethodsArguments: true
params: count=countSql
offset-as-page-num: true
page-size-zero: true
row-bounds-with-count: true

mapper:
mappers:
- com.iformall.common.CommonMapper

version: 1.0

二進制
suimangCallback/target/classes/com/iformall/CallbackApplication.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/annotation/SystemControllerLog.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/annotation/SystemServiceLog.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/config/AwsProperty.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/config/MyBatisConfiguration.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/config/MyExecutorConfig.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/config/RedisConfig.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/config/RestFilter.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/config/RestTemplateConfig.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/config/ShiroConfig.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/config/ShiroLoginFilter.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/config/WebConfig.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/controller/HomeController.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/controller/base/BaseController$1.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/controller/base/BaseController.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper$1.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/interceptor/HttpServletRequestWrapperFilter.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/interceptor/RequestInterceptor$1.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/interceptor/RequestInterceptor.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/interceptor/XssHttpServletRequestWrapper.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/shiro/MyRetryLimitCredentialsMatcher.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/shiro/MyShiroRealm.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/shiro/PasswordHelper.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/shiro/ShiroService.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/shiro/UserSession.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/shiro/UseriFormallToken.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/utils/AlipayMsgPage.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/utils/ReportResult.class 查看文件


二進制
suimangCallback/target/classes/com/iformall/utils/UrlCheck.class 查看文件


+ 100
- 0
suimangCallback/target/classes/logback-spring.xml 查看文件

@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
<!-- 外部指定路径 -->
<springProperty scop="context" name="logPath" source="logging.path" />

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] --%mdc{client}%msg%n</Pattern>
</encoder>
</appender>

<appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/trace.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${logPath}/daily/trace.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留180天 -->
</rollingPolicy>
<layout>
<pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n</pattern>
</layout>
</appender>

<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${logPath}/daily/info.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留180天 -->
</rollingPolicy>
<layout>
<pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>

<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${logPath}/daily/debug.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留180天 -->
</rollingPolicy>
<layout>
<pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>


<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/warn.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${logPath}/daily/warn.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留180天 -->
</rollingPolicy>
<layout>
<pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>



<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${logPath}/daily/error.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留180天 -->
</rollingPolicy>
<layout>
<pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>

<root level="TRACE">
<appender-ref ref="TRACE_FILE" />
<appender-ref ref="INFO_FILE" />
<!-- <appender-ref ref="DEBUG_FILE" /> -->
<!-- <appender-ref ref="WARN_FILE" /> -->
<appender-ref ref="ERROR_FILE" />
</root>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>

+ 3
- 0
suimangCallback/target/maven-archiver/pom.properties 查看文件

@@ -0,0 +1,3 @@
version=1.0
groupId=com.iformall
artifactId=suimangCallback

+ 31
- 0
suimangCallback/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst 查看文件

@@ -0,0 +1,31 @@
com\iformall\utils\AlipayMsgPage.class
com\iformall\controller\HomeController.class
META-INF\spring-configuration-metadata.json
com\iformall\config\MyExecutorConfig.class
com\iformall\controller\base\BaseController$1.class
com\iformall\interceptor\HttpServletRequestWrapperFilter.class
com\iformall\config\ShiroLoginFilter.class
com\iformall\interceptor\RequestInterceptor$1.class
com\iformall\config\MyBatisConfiguration.class
com\iformall\config\WebConfig.class
com\iformall\config\RestFilter.class
com\iformall\annotation\SystemControllerLog.class
com\iformall\interceptor\RequestInterceptor.class
com\iformall\shiro\UserSession.class
com\iformall\shiro\PasswordHelper.class
com\iformall\config\RedisConfig.class
com\iformall\utils\ReportResult.class
com\iformall\shiro\UseriFormallToken.class
com\iformall\utils\UrlCheck.class
com\iformall\controller\base\BaseController.class
com\iformall\shiro\MyShiroRealm.class
com\iformall\config\RestTemplateConfig.class
com\iformall\config\ShiroConfig.class
com\iformall\interceptor\BodyReaderHttpServletRequestWrapper$1.class
com\iformall\annotation\SystemServiceLog.class
com\iformall\shiro\ShiroService.class
com\iformall\interceptor\BodyReaderHttpServletRequestWrapper.class
com\iformall\shiro\MyRetryLimitCredentialsMatcher.class
com\iformall\CallbackApplication.class
com\iformall\config\AwsProperty.class
com\iformall\interceptor\XssHttpServletRequestWrapper.class

+ 27
- 0
suimangCallback/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst 查看文件

@@ -0,0 +1,27 @@
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\config\MyExecutorConfig.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\controller\HomeController.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\shiro\ShiroService.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\interceptor\XssHttpServletRequestWrapper.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\shiro\MyShiroRealm.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\CallbackApplication.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\utils\UrlCheck.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\interceptor\HttpServletRequestWrapperFilter.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\config\AwsProperty.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\config\ShiroLoginFilter.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\controller\base\BaseController.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\interceptor\BodyReaderHttpServletRequestWrapper.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\config\RedisConfig.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\config\ShiroConfig.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\shiro\UseriFormallToken.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\shiro\MyRetryLimitCredentialsMatcher.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\annotation\SystemControllerLog.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\config\MyBatisConfiguration.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\utils\ReportResult.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\interceptor\RequestInterceptor.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\annotation\SystemServiceLog.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\config\RestTemplateConfig.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\shiro\UserSession.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\config\RestFilter.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\shiro\PasswordHelper.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\utils\AlipayMsgPage.java
C:\Users\xiaohu\ideaSuimangProject\suimangServer\suimangCallback\src\main\java\com\iformall\config\WebConfig.java

+ 79
- 0
suimangMQConsumer/src/main/java/com/iformall/mq/impl/AliyunRocketMqConsumer.java 查看文件

@@ -0,0 +1,79 @@
package com.iformall.mq.impl;

import java.util.Properties;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSON;
import com.aliyun.openservices.ons.api.Action;
import com.aliyun.openservices.ons.api.ConsumeContext;
import com.aliyun.openservices.ons.api.Consumer;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.MessageListener;
import com.aliyun.openservices.ons.api.ONSFactory;
import com.aliyun.openservices.ons.api.PropertyKeyConst;
import com.aliyun.openservices.ons.api.bean.ConsumerBean;
import com.iformall.enums.EnumMsgMqTopic;
import com.iformall.mq.MQConfig;
import com.iformall.mq.MqBaseConsumer;
import com.iformall.utils.JsonUtil;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
@Profile(MQConfig.Impl.ALIYUN_ROCKET_MQ)
public class AliyunRocketMqConsumer extends MqBaseConsumer {

@Value("${spring.aliyunRocketmq.accessKeyId}")
private String accessKeyId;
@Value("${spring.aliyunRocketmq.accessKeySecret}")
private String accessKeySecret;
@Value("${spring.aliyunRocketmq.groupId}")
private String groupId;
@Value("${spring.aliyunRocketmq.namesrvAddr}")
private String namesrvAddr;
@PostConstruct
public void init() {
for (EnumMsgMqTopic topic: EnumMsgMqTopic.values()) {
Properties properties = new Properties();
// 您在控制台创建的 Group ID
properties.put(PropertyKeyConst.GROUP_ID, topic.getGroupId());
// AccessKey 阿里云身份验证,在阿里云服务器管理控制台创建
properties.put(PropertyKeyConst.AccessKey, accessKeyId);
// SecretKey 阿里云身份验证,在阿里云服务器管理控制台创建
properties.put(PropertyKeyConst.SecretKey, accessKeySecret);
// 设置 TCP 接入域名,到控制台的实例基本信息中查看
properties.put(PropertyKeyConst.NAMESRV_ADDR,namesrvAddr);
// 集群订阅方式(默认)
// properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.CLUSTERING);
// 广播订阅方式
// properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.BROADCASTING);
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe(topic.getCode(), "*", new MessageListener() { //订阅多个 Tag
public Action consume(Message message, ConsumeContext context) {
try {
System.out.println("Receive: " + message);
doMessage(new String(message.getBody()));
return Action.CommitMessage;
}catch(Exception e) {
log.error("AliyunRocketMqConsumer error:",e);
return Action.ReconsumeLater;
}
}
});
consumer.start();
log.info(" aliyunrocketMq consumer start success! "+JSON.toJSONString(consumer));
}
}
}

+ 61
- 0
suimangMQConsumer/src/main/java/com/iformall/mq/impl/RabbitMqConsumer.java 查看文件

@@ -0,0 +1,61 @@
package com.iformall.mq.impl;

import com.iformall.mq.MqBaseConsumer;
import com.iformall.enums.EnumMsgMqTopic;
import com.iformall.mq.MQConfig;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
@Profile(MQConfig.Impl.RABBIT_MQ)
public class RabbitMqConsumer extends MqBaseConsumer {
//String queueName = "topic-1";
private String[] queuenames = null;

@Autowired
private AmqpAdmin amqpAdmin;

@PostConstruct
public void init() {
for (EnumMsgMqTopic topic: EnumMsgMqTopic.values()) {
DirectExchange exchange = new DirectExchange(topic.getCode());
Queue queue = new Queue(topic.getCode());
Binding binding = BindingBuilder.bind(queue).to(exchange).withQueueName();
amqpAdmin.declareExchange(exchange);
amqpAdmin.declareQueue(queue);
amqpAdmin.declareBinding(binding);
}
}

@Autowired
private AmqpTemplate rabbitTemplate;

public void send(String queueName, String msg) {
rabbitTemplate.convertAndSend(queueName, msg);
}

@Bean
public String[] fmRabbitmaQueues(){
if (null == queuenames) {
queuenames = new String[EnumMsgMqTopic.values().length];
int i = 0 ;
for (EnumMsgMqTopic topic: EnumMsgMqTopic.values()) {
queuenames[i] = topic.getCode();
i ++;
}
}
return queuenames;
}
@RabbitListener(queues = {"#{fmRabbitmaQueues}"})
public void onMessage(String message) {
doMessage(message);
}
}

+ 19
- 0
suimangMQConsumer/src/main/java/com/iformall/mq/impl/RocketMqConsumer.java 查看文件

@@ -0,0 +1,19 @@
package com.iformall.mq.impl;

import com.iformall.mq.MqBaseConsumer;
import com.iformall.mq.MQConfig;
import lombok.extern.slf4j.Slf4j;
import org.rocketmq.starter.annotation.RocketMQListener;
import org.rocketmq.starter.annotation.RocketMQMessage;
import org.springframework.context.annotation.Profile;

@Slf4j
@Profile(MQConfig.Impl.ROCKET_MQ)
@RocketMQListener(topic = "topic-1",consumeThreadMax=100,consumeThreadMin = 20)
public class RocketMqConsumer extends MqBaseConsumer {

@RocketMQMessage(messageClass = String.class, tag = "tag-1")
public void onMessage(String message) {
doMessage(message);
}
}

+ 32
- 0
suimangMQConsumer/target/classes/META-INF/spring-configuration-metadata.json 查看文件

@@ -0,0 +1,32 @@
{
"groups": [
{
"name": "aws",
"type": "com.iformall.config.AwsProperty",
"sourceType": "com.iformall.config.AwsProperty"
}
],
"properties": [
{
"name": "aws.access",
"type": "java.lang.String",
"sourceType": "com.iformall.config.AwsProperty"
},
{
"name": "aws.bucket-name",
"type": "java.lang.String",
"sourceType": "com.iformall.config.AwsProperty"
},
{
"name": "aws.client-region",
"type": "java.lang.String",
"sourceType": "com.iformall.config.AwsProperty"
},
{
"name": "aws.secret",
"type": "java.lang.String",
"sourceType": "com.iformall.config.AwsProperty"
}
],
"hints": []
}

+ 183
- 0
suimangMQConsumer/target/classes/application-dev.yml 查看文件

@@ -0,0 +1,183 @@
spring:
profiles:
#include: aliyunRocketMQ
include: rabbitMQ
# JDBC
datasource:
url: jdbc:mysql://101.200.130.134:3306/malink_suimang?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&useAffectedRows=true
username: root
password: fm2020test
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 28000
minEvictableIdleTimeMillis: 28000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000"
#jackson:
#date-format: yyyy-MM-dd HH:mm:ss

# REDIS
redis:
host: 101.200.130.134
port: 6379
password: iF0rm@2l2ol9
timeout: 3600
expire: 1800 #30分钟
database: 5
defaultExpiration: 2592000 # 默认生命周期30天
jedis:
pool:
max-active: 50
max-idle: 50
max-wait: -1
min-idle: 10

# SMS
aliyun:
sms:
accessKeyId: LTAI4G7ixY4AhvM35F8o3W3V
accessKeySecret: VfWqGb83qIQrS9us45utskl8itd7ry
product: Dysmsapi
domain: dysmsapi.aliyuncs.com
regionId: cn-hangzhou
dateFormat: yyyyMMdd
endpointName: cn-hangzhou

oss:
endpoint: oss-cn-beijing.aliyuncs.com
keyid: LTAI4G7ixY4AhvM35F8o3W3V
keysecret: VfWqGb83qIQrS9us45utskl8itd7ry
bucketname: formall
filehost: malinkmqconsumer
filedomain: https://formall.oss-accelerate.aliyuncs.com

# EMAIL
mail:
host: smtp.exmail.qq.com
username: zhengfangyuan@iformall.com
password: 2hSeppFRaw7KZZyf # 授权密码
properties:
mail:
smtp:
auth: true
starttls:
enable: true
socketFactory:
port: 465
class: javax.net.ssl.SSLSocketFactory
rocketmq:
nameServer: 127.0.0.1:9876
producer:
retry-times-when-send-async-failed: 0
send-msg-timeout: 300000
compress-msg-body-over-howmuch: 4096
max-message-size: 4194304
retry-another-broker-when-not-store-ok: false
retry-times-when-send-failed: 2
rabbitmq:
host: 101.200.130.134
port: 5672
username: fumao
password: f9l98
publisher-confirms: true
publisher-returns: false
virtual-host: /
aliyunRocketmq:
accessKeyId: "LTAI4G7ixY4AhvM35F8o3W3V"
accessKeySecret: "VfWqGb83qIQrS9us45utskl8itd7ry"
groupId: "GID_P_1"
namesrvAddr: "http://MQ_INST_1796289517488555_Bcqaq2is.cn-beijing.mq-internal.aliyuncs.com:8080"

aws:
clientRegion: cn-northwest-1
bucketName: iformall-net
access: ENC(3gx5ghDFBqGrEhO3Wf8aYmXsnwHO7Cj3HNKJGOeUj0o=)
secret: ENC(HVKIJwCJKVXLlUpGlQPwNqJOlnpxn4xYuy91SH0seTSm2uAttIQHvA49fXWWax90v5wloIk0QuU=)

#wechat:
# open:
# componentAppId: "wxdfc8fb4e62d6b52b"
# componentSecret: "98daa62b316dd6feabaad708327ce233"
# componentToken: "formall2018"
# componentAesKey: "htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN"
# redis:
# host: 101.201.103.81
# port: 6379
# password: ENC(xPFDlgd6v8zUhJMbcKc0KmmQiqs9qHtk)
# timeout: 3600
# expire: 1800 #30分钟
# database: 2
# defaultExpiration: 2592000 # 默认生命周期30天
# jedis:
# pool:
# max-active: 100
# max-idle: 500
# max-wait: -1
# min-idle: 10

wechat:
web:
appId: "wx091907dd0bfd3f6b"
secret: "2a2ca10738998b9ef92c1fe8a4d366a6"
url: "https://admintest.malls.iformall.com"
open:
componentAppId: wxdfc8fb4e62d6b52b
componentSecret: 98daa62b316dd6feabaad708327ce233
componentToken: formall2018
componentAesKey: htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN
redis:
host: 101.200.130.134
port: 6379
password: iF0rm@2l2ol9
timeout: 3600
expire: 1800 #30分钟
database: 2
defaultExpiration: 2592000 # 默认生命周期30天
jedis:
pool:
max-active: 100
max-idle: 100
max-wait: -1
min-idle: 10

alipay:
open:
appId: 2021002137663024
appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCUfymV5J73QQMG52PVIGUbowkloYCO4B7TQoKbrTZf2YeYsg/To/o4PiXPMNwEUfEUU8NYQ6WwNhCd2fa1ei8WFXJUf3bfgswtBk1aOmHLeY9yoXFxIKMTQ9RcobnmBzKQZlaAPMTSr7t1QtKZKPuc2gEHGRFYKO/ZuL8gIpnsVidVtmi52yd7hzao/pI3ThLA0lreg4L3rYP5ESQZRytxIPgUQ4KI11pZxFgbe+uy28AGDYIQscSIb+SWOHPYKLvOEqqepIZ8M18w/U0lZzpzepzi/V/llekvXJ6UEf1lzl7x/4UIA3WPN1B40+NzbD/OxEGTuM0UctOG6ZTd4Te9AgMBAAECggEAPYksnHbvARspu/SrRCh2fatkIPn6Ijrxyy3mnch7neCw9i/jqxpqmF/4nxFqO0gRlRDZBHyT7p+Y5zDpsW5+kLI2fJmNkzXKkmXoLBnBaOZo8WHBdtXFfjg/iltig9Y7t+cQtXd5QK2eCwuz5dA75FXa0ywqKdRdAGY0nYZ5LpwrHVU8RXheUDCJyhKNj2+W6lIaSKDxLZU3laO1oBrv1agcy7Crd5E2ndb8O3Enga+z7wSz2h7A1BasC/Yl/Ro0Y21wLCH3s/R6qA0Paq12+WEF+xdodM7SrP43CCTVFGbC1TfEOdanJfixop8QuYsIp7pHrL925+vP4eY9RfckgQKBgQDQqLdpDzzU7Ot/L9Vc/r8d4iwXXbX8+HwVFV4oBuausgFyv8eJJpfrI+IlEoB1ubJcPpJBFqfmeYTW6/v6ioFljJAlWfFvesUVt/HszBMIOsU0Bzt7ex6WlwKOagb0q0ZPA4T0OY0K0lg0loaaaR8ZTr4ivDymaGBtTBYhslpc7QKBgQC2MBznGEc5r2dhyENvdPOR20PnXQcevGnPdqSus8m0VmDcHE72RVcckcZtwczsb3NaLSqmjAcWTn51/VFmlvhB3F34FcFTPZGq6sj7fWK8HuFq7l7mu5OzYuVr73zy9ggsUuaw10IqvvwIVxszNAF0hiRnSGH3z27CoRmz3s+8EQKBgQCK3o7atBJ3X4rIJiypbL4DhIB1uJ+jUjk6yvLUTut+fufp1+tTw0S+cS5UIAEw2Lr1G4u5F/v8rwmTBJG6SC4gSLGyui6uVBYRA1BWmedcxchzfRDAeMt9y9kesUAZ3Fe5xIzbAeZ1ulKMBVZmM+pHrJlsgr0Wv0bV1xqvqITtbQKBgBIsIGXopQoa9dvqBtfyOW1eCprkS5aEQqWf9vM6Ga90QjsSU8n6xqKh48IE57TZtQ7UnIF6TCasc66/MsRh4KdpHLJnMR5lcMc0nhF/wz5ychehaTPol+X3wlyOyc7OPah2KG6ROhdbb3ZBggQMduyxiKYIsUTvmuOtAAxR+DSRAoGADtuDzGQDOJYWiO2uuP6FpA5IJaiwlSfu3xncJVfhO8SVr6VBJFg88igbIB3w6nk/sv7j9VTXqXre9HMvp1flxaaLsdxM4HcTSALS9q6t/ajaveqte6S5kAtWx0WW8C6PtgWXHbxcD7LXARSsKLoEl2JXXyUVS/m2l/RzHBQ8GJI=
appPublicKeyCertPath: /opt/iformall/service/alipay/appCertPublicKey_2021002137663024.crt
alipayCertPath: /opt/iformall/service/alipay/alipayCertPublicKey_RSA2.crt
alipayRootCertPath: /opt/iformall/service/alipay/alipayRootCert.crt
callback: https://callbacktest.malls.iformall.com/api/alipay/notify/callback
video:
aliyun:
accessKeyId: LTAI4G7ixY4AhvM35F8o3W3V
accessKeySecret: VfWqGb83qIQrS9us45utskl8itd7ry
regionId: cn-beijing

jasypt:
encryptor:
password: oRqdnDbK5pj3eMmB

fm:
exception: true
exception_emails: xuxiaohu@iformall.com
deploy: 1
open: true
upload_dir: /home/test/server/uploads/
videoType: aliyun

logging:
level:
com.iformall.mapper: debug
path: ./logs/m

+ 143
- 0
suimangMQConsumer/target/classes/application-prod.yml 查看文件

@@ -0,0 +1,143 @@
spring:
profiles:
include: aliyunRocketMQ
# JDBC
datasource:
url: jdbc:mysql://zc349w82qvn56ftl5e64-rw4rm.rwlb.rds.aliyuncs.com:3306/malink_suimang?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true
username: ENC(nUefcxWYlMS/1cDxikIKwA==)
password: ENC(neToS+hzeFjgSFB/7UEl5qYnW2rUjrPq)
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
filters: stat
maxActive: 200
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 28000
minEvictableIdleTimeMillis: 28000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000"
# REDIS
redis:
host: r-2zeaglwf13qqmnllj5.redis.rds.aliyuncs.com
port: 6379
password: mallone:iF0rm@2l2ol9
timeout: 3600
expire: 1800 #30分钟
database: 1
defaultExpiration: 2592000 # 默认生命周期30天
jedis:
pool:
max-active: 50
max-idle: 50
max-wait: -1
min-idle: 0
# SMS
aliyun:
sms:
accessKeyId: LTAI4G7ixY4AhvM35F8o3W3V
accessKeySecret: VfWqGb83qIQrS9us45utskl8itd7ry
product: Dysmsapi
domain: dysmsapi.aliyuncs.com
regionId: cn-hangzhou
dateFormat: yyyyMMdd
endpointName: cn-hangzhou
oss:
endpoint: oss-cn-beijing.aliyuncs.com
keyid: LTAI4G7ixY4AhvM35F8o3W3V
keysecret: VfWqGb83qIQrS9us45utskl8itd7ry
bucketname: formall
filehost: malinkadmin
filedomain: https://formall.oss-accelerate.aliyuncs.com
# EMAIL
mail:
host: smtp.exmail.qq.com
username: zhengfangyuan@iformall.com
password: 2hSeppFRaw7KZZyf # 授权密码
properties:
mail:
smtp:
auth: true
starttls:
enable: true
socketFactory:
port: 465
class: javax.net.ssl.SSLSocketFactory
# RABBITMQ
rabbitmq:
host: localhost
port: 5672
username: ENC(lRmLd6EzgeY1RT5ktcHv9g==)
password: ENC(gBI8mCjr3OC0v57jcnSb660Ux7mW03K2oePgvohhg7w=)
publisher-confirms: true
publisher-returns: false
virtual-host: /
aliyunRocketmq:
accessKeyId: "LTAI4G7ixY4AhvM35F8o3W3V"
accessKeySecret: "VfWqGb83qIQrS9us45utskl8itd7ry"
groupId: "GID_P_1"
namesrvAddr: "http://MQ_INST_1796289517488555_Bcqaq2is.cn-beijing.mq-internal.aliyuncs.com:8080"
aws:
clientRegion: cn-northwest-1
bucketName: iformall-net
access: ENC(a6SN1sZ1enNL49ypiOXkg/pPPAnZD8H4buQFTTKN08s=)
secret: ENC(5P5ff4bTMJUbXVR4ZsM03UHzOKZ4+Zg5Iutcdkyp/Quny/oXg+A4KpfwEyGarlLu3vQMJahGP5M=)

wechat:
open:
componentAppId: ENC(b3JG0MUZgQfz5Zj+DC2ZM1zDeLOiGTmmeokfe2O8kaM=)
componentSecret: ENC(QVyc4BPGdnSjXGs2ivgpDBE1v8wPWHLLRMYI7Vv8uYwC0SiZHQz0QpyyQV/b48Pb)
componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC)
componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=)
redis:
host: r-2zeaglwf13qqmnllj5.redis.rds.aliyuncs.com
port: 6379
password: mallone:iF0rm@2l2ol9
timeout: 3600
expire: 1800 #30分钟
database: 2
defaultExpiration: 2592000 # 默认生命周期30天
jedis:
pool:
max-active: 100
max-idle: 100
max-wait: -1
min-idle: 10

alipay:
open:
appId: 2021002140616334
appPrivateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCEJmHIlS0luIH7zJRRVlypCcgiSkqpSlnmgyCEM7nu8IerV8Yf7dMBitBklTpJB+4URV1bW+q6Ijzo8RsCyjm1Kx+EFiKf1PiJXlT0h1+bF3fYdDr6r5GK0/TtB8O80p774NcRD3HgbzUS8AEe/GcBvhiXbDRgJh7yAngW9vxl9u1o5UcaxOXVLWDrjlQGF6qyXUlycCNIdPXj3LduP3PBK5daVZwJm33Pr7kmSI0agZvV267HaTpSKaiXI7Zwo+nFMqx9g9kpzmYRfOgHx3DWpQUFI646IB8nEpLpQp3/0eDocuqiHXYgEpLpPoFKoVE228v74YSFh3Y4fFGX+qtjAgMBAAECggEAIJK9Y42xtSyHjaNdo7bf3CK3HAyn3pafFjyYFT4SxJyxNEDMay5Z5nVq7IAD/+BehMycOFqtvveVf+1+NO/XzZo1iH9URYVfRazkz+lWXYopVkdACm6gN1ILeymAy9g2q+s918ywyxteP668+ABK+5j5wsk/F7wNwKVvKGn0yMT7DP0FAL1e0KWndZCZlF79VnFpBLscDJq28GqRzqYop4CWqHHTA6DBvIqkfQV4U3IzqnzOsxNLEMBwhnbK08XfYZ3DxCPH0jQdA2Jj/aABrntq2EpWjzW5H9iZqrVo33rmsNHUSQvla/333RkbpwGyNhI6kcPBRq4cVSAa3y7dMQKBgQDVfyDUPWKXVwIJUgO1my8WIUu2p6nhuT7Mfnpk4X7ewdFaRVjb/r0KvhLgoz2/KOwkqtWTlEvNaCDDycpLXk+V5ZH833kYsDEmxY7ikOUjCcrfYJgT7P77//cZ4Kx8a5X45SiKAZT2GQv7BTtIfNhrfTUj6AQx/3MP3sa2QAWeNQKBgQCedWoF7t+qyck2hctqtTFC7fRkEk7RNJVph1ZOeTqOIAKhmhkwaOE3joxQ/VqHDy212YdW4hI0BWUzbEdMy0Idz2G3y9ERVD84hZehf5GGRdiSrY9EEQgHlcI6Qb8/AnDdpy1DlKUMwTYjVNzkDL3AzeWn61JS1XQaOzZBsJy2NwKBgFa+pJQXrOtYytcGn8M2Hlebh6vbS8cPAVkNOqWqiWXw0iMfcg9Q3XZz7C+hpAD7m5b6YnToGDSJTma+opck5qk88agRFJ7XV+Es+/VKcg9edzNzh9bwwFmbksbM5shW3kSWt3X7Vo73dkqzwXaeY0CpSuIf7zRxWkrkdVCvipjRAoGAMcJlPN+6VQNwsDJromKryXy31gT5wzBkCvN44sOm46KhsOWXK2CD+NJGtdgZaXgWvphEq7/qP3PCR9ekvDTH2lyZLwJN8Mcn4zPwXcKVjDi6vbTK3HEMuHUKvQiQadT2ZGRvDl3LRqoVuhqYEvT9UWJWz9hRzblB8ErPyukPDRkCgYB7bMv2iflpaGE1J3gkTlVJB+2QSfnAXaUDMLWsZN4gYjwEBVCEJ+mhWL1/GeEIBjSs5/qZIeRsYzlxGEcnsJzRfog6ITBF14AeZ+xNkHq83ja87OGVKMypiccGwRehijDhJi6tgMJ0u0w6PiqcJvh0SX4jBhDDPjuWzK2XD+lx8A==
appPublicKeyCertPath: /opt/iformall/service/alipay/appCertPublicKey_2021002140616334.crt
alipayCertPath: /opt/iformall/service/alipay/alipayCertPublicKey_RSA2.crt
alipayRootCertPath: /opt/iformall/service/alipay/alipayRootCert.crt
callback: https://callback.malls.iformall.com/api/alipay/notify/callback
video:
aliyun:
accessKeyId: LTAI4G7ixY4AhvM35F8o3W3V
accessKeySecret: VfWqGb83qIQrS9us45utskl8itd7ry
regionId: cn-beijing
endPoint: https://oss-cn-beijing.aliyuncs.com
corePoolSize: 6
maxPoolSize: 20
queueCapacity: 1000
namePrefix: aliyun-video-upload

fm:
exception: true
exception_emails: houtaikaifa@iformall.com
deploy: 3
open: true
upload_dir: /root/uploads/
videoType: aliyun

logging:
level:
com.iformall: debug
path: ./logs/m

+ 71
- 0
suimangMQConsumer/target/classes/application.yml 查看文件

@@ -0,0 +1,71 @@
server:
port: 5100
servlet:
context-path: /mq

spring:
application:
name: suimang
profiles:
active: dev
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
default-property-inclusion: non_null
servlet:
multipart:
max-file-size: 2MB
max-request-size: 2MB
cache:
type: REDIS
cache-names: redis_cache #缓存的名字(可以不指定)
redis:
time-to-live: 60000ms #很重要,缓存的有效时间,以便缓存的过期(单位为毫秒)
# rocketmq:
# nameServer: 127.0.0.1:9876
# producer:
# retry-times-when-send-async-failed: 0
# send-msg-timeout: 300000
# compress-msg-body-over-howmuch: 4096
# max-message-size: 4194304
# retry-another-broker-when-not-store-ok: false
# retry-times-when-send-failed: 2
# rabbitmq:
# host: 202.165.179.86
# port: 5672
# username: guest
# password: guest
# publisher-confirms: true
# virtual-host: /


# MybatisPlus
mybatis-plus:
mapper-locations: classpath:mapper/*Mapper.xml
global-config:
db-config:
id-type: id_worker
field-strategy: not_null
db-type: mysql
configuration:
jdbc-type-for-null: 'null'
cache-enabled: false
call-setters-on-nulls: true
type-aliases-package: com.iformall.domain.po
type-enums-package: com.iformall.enums

# PageHelper
pagehelper:
helperDialect: mysql
reasonable: false
supportMethodsArguments: true
params: count=countSql
offset-as-page-num: true
page-size-zero: true
row-bounds-with-count: true

mapper:
mappers:
- com.iformall.common.CommonMapper

version: 1.0

二進制
suimangMQConsumer/target/classes/com/iformall/ConsumerApplication.class 查看文件


二進制
suimangMQConsumer/target/classes/com/iformall/config/AwsProperty.class 查看文件


二進制
suimangMQConsumer/target/classes/com/iformall/config/MyBatisConfiguration.class 查看文件


二進制
suimangMQConsumer/target/classes/com/iformall/config/RedisConfig.class 查看文件


二進制
suimangMQConsumer/target/classes/com/iformall/config/RestFilter.class 查看文件


二進制
suimangMQConsumer/target/classes/com/iformall/config/RestTemplateConfig.class 查看文件


二進制
suimangMQConsumer/target/classes/com/iformall/config/WebConfig.class 查看文件


二進制
suimangMQConsumer/target/classes/com/iformall/controller/HomeController.class 查看文件


二進制
suimangMQConsumer/target/classes/com/iformall/mq/MqBaseConsumer.class 查看文件


二進制
suimangMQConsumer/target/classes/com/iformall/mq/impl/AliyunRocketMqConsumer$1.class 查看文件


二進制
suimangMQConsumer/target/classes/com/iformall/mq/impl/AliyunRocketMqConsumer.class 查看文件


二進制
suimangMQConsumer/target/classes/com/iformall/mq/impl/RabbitMqConsumer.class 查看文件


二進制
suimangMQConsumer/target/classes/com/iformall/mq/impl/RocketMqConsumer.class 查看文件


+ 100
- 0
suimangMQConsumer/target/classes/logback-spring.xml 查看文件

@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
<!-- 外部指定路径 -->
<springProperty scop="context" name="logPath" source="logging.path" />

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] --%mdc{client}%msg%n</Pattern>
</encoder>
</appender>

<appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/trace.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${logPath}/daily/trace.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留180天 -->
</rollingPolicy>
<layout>
<pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n</pattern>
</layout>
</appender>

<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${logPath}/daily/info.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留180天 -->
</rollingPolicy>
<layout>
<pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>

<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${logPath}/daily/debug.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留180天 -->
</rollingPolicy>
<layout>
<pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>


<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/warn.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${logPath}/daily/warn.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留180天 -->
</rollingPolicy>
<layout>
<pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>



<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${logPath}/daily/error.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留180天 -->
</rollingPolicy>
<layout>
<pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>

<root level="TRACE">
<appender-ref ref="TRACE_FILE" />
<appender-ref ref="INFO_FILE" />
<!-- <appender-ref ref="DEBUG_FILE" /> -->
<!-- <appender-ref ref="WARN_FILE" /> -->
<appender-ref ref="ERROR_FILE" />
</root>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>

+ 3
- 0
suimangMQConsumer/target/maven-archiver/pom.properties 查看文件

@@ -0,0 +1,3 @@
version=1.0
groupId=com.iformall
artifactId=suimangMQConsumer

部分文件因文件數量過多而無法顯示

Loading…
取消
儲存