syh 6 лет назад
Родитель
Сommit
0431718497
100 измененных файлов с 5116 добавлено и 593 удалено
  1. 8 9
      .gitignore
  2. 0 9
      .idea/adsp-boot.iml
  3. 0 36
      .idea/inspectionProfiles/Project_Default.xml
  4. 0 6
      .idea/misc.xml
  5. 0 8
      .idea/modules.xml
  6. 0 6
      .idea/vcs.xml
  7. 0 1
      jeecg-boot-base-common/.gitignore
  8. 0 234
      jeecg-boot-base-common/jeecg-boot-base-common.iml
  9. 0 11
      jeecg-boot-base-common/src/main/main.iml
  10. 54 0
      jeecg-boot-base-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
  11. 52 0
      jeecg-boot-base-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
  12. 0 1
      jeecg-boot-module-system/.gitignore
  13. 0 246
      jeecg-boot-module-system/jeecg-boot-module-system.iml
  14. 0 12
      jeecg-boot-module-system/src/main/main1.iml
  15. 1 1
      jeecg-boot-module-system/src/main/resources/application-dev.yml
  16. 1 1
      jeecg-boot-module-system/src/main/resources/jeecg/jeecg_database.properties
  17. 0 12
      jeecg-boot-module-system/src/test/test.iml
  18. BIN
      jeecg-boot-module-system/target/classes/META-INF/jeecg-boot-module-system.kotlin_module
  19. 136 0
      jeecg-boot-module-system/target/classes/application-dev.yml
  20. 139 0
      jeecg-boot-module-system/target/classes/application-prod.yml
  21. 139 0
      jeecg-boot-module-system/target/classes/application-test.yml
  22. 9 0
      jeecg-boot-module-system/target/classes/application.yml
  23. 14 0
      jeecg-boot-module-system/target/classes/banner.txt
  24. 8 0
      jeecg-boot-module-system/target/classes/db/data-mysql.sql
  25. 11 0
      jeecg-boot-module-system/target/classes/db/schema-mysql.sql
  26. 244 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
  27. 53 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
  28. 17 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
  29. 5 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
  30. 14 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
  31. 19 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
  32. 171 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
  33. 155 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
  34. 162 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal__Style#Drawer.vuei
  35. 232 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/controller/${entityPackage}/${entityName}Controller.javai
  36. 45 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/entity/${entityPackage}/${entityName}.javai
  37. 17 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/mapper/${entityPackage}/${entityName}Mapper.javai
  38. 5 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/mapper/${entityPackage}/xml/${entityName}Mapper.xml
  39. 14 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/service/${entityPackage}/I${entityName}Service.javai
  40. 19 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/service/${entityPackage}/impl/${entityName}ServiceImpl.javai
  41. 171 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/vue/${entityPackage}/${entityName}List.vuei
  42. 155 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/vue/${entityPackage}/modules/${entityName}Modal.vuei
  43. 162 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/vue/${entityPackage}/modules/${entityName}Modal__Style#Drawer.vuei
  44. 274 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
  45. 39 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
  46. 50 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
  47. 17 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
  48. 21 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
  49. 5 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
  50. 38 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
  51. 42 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
  52. 19 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
  53. 101 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
  54. 30 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
  55. 50 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai
  56. 162 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
  57. 184 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
  58. 374 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
  59. 39 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
  60. 49 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
  61. 17 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
  62. 21 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
  63. 5 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
  64. 38 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
  65. 42 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
  66. 19 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
  67. 101 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
  68. 30 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
  69. 49 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai
  70. 225 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
  71. 140 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/[1-n]List.vuei
  72. 167 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
  73. 183 0
      jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Modal.vuei
  74. 23 0
      jeecg-boot-module-system/target/classes/jeecg/jeecg_config.properties
  75. 24 0
      jeecg-boot-module-system/target/classes/jeecg/jeecg_database.properties
  76. 96 0
      jeecg-boot-module-system/target/classes/logback-spring.xml
  77. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/AdvertiserMapper.xml
  78. 4 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/CTopOauthTokenMapper.xml
  79. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/CTopToutiaoAdvertisePlanMapper.xml
  80. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/CTopToutiaoAdvertiserMapper.xml
  81. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/CTopToutiaoCampaignMapper.xml
  82. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/CtopToutiaoAdvertiserBudgetMapper.xml
  83. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/CtopToutiaoBudgetTemplateMapper.xml
  84. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/ToutiaoCreativeMapper.xml
  85. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/ToutiaoCreativeMaterialMapper.xml
  86. 9 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/demo/test/mapper/xml/JeecgDemoMapper.xml
  87. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderCustomerMapper.xml
  88. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderMainMapper.xml
  89. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderTicketMapper.xml
  90. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/demo/test/mapper/xml/JoaDemoMapper.xml
  91. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/industry/mapper/xml/IndustryMapper.xml
  92. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/media/mapper/xml/MediaMapper.xml
  93. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/message/mapper/xml/SysMessageMapper.xml
  94. 5 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/message/mapper/xml/SysMessageTemplateMapper.xml
  95. 7 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/ngalain/mapper/xml/NgAlainMapper.xml
  96. 9 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/quartz/mapper/xml/QuartzJobMapper.xml
  97. 37 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/mapper/xml/SysAnnouncementMapper.xml
  98. 48 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/mapper/xml/SysAnnouncementSendMapper.xml
  99. 16 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/mapper/xml/SysCategoryMapper.xml
  100. 0 0
      jeecg-boot-module-system/target/classes/org/jeecg/modules/system/mapper/xml/SysDataLogMapper.xml

+ 8 - 9
.gitignore

@@ -1,4 +1,12 @@
 # Created by .ignore support plugin (hsz.mobi)
+### Example user template template
+### Example user template
+
+# IntelliJ project files
+.idea
+**/*.iml
+out
+gen
 ### Java template
 # Compiled class file
 *.class
@@ -24,12 +32,3 @@
 # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
 hs_err_pid*
 
-### Example user template template
-### Example user template
-
-# IntelliJ project files
-.idea
-*.iml
-out
-gen
-/.idea/

+ 0 - 9
.idea/adsp-boot.iml

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$" />
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>

+ 0 - 36
.idea/inspectionProfiles/Project_Default.xml

@@ -1,36 +0,0 @@
-<component name="InspectionProjectProfileManager">
-  <profile version="1.0">
-    <option name="myName" value="Project Default" />
-    <inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true">
-      <option name="TOP_LEVEL_CLASS_OPTIONS">
-        <value>
-          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
-          <option name="REQUIRED_TAGS" value="" />
-        </value>
-      </option>
-      <option name="INNER_CLASS_OPTIONS">
-        <value>
-          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
-          <option name="REQUIRED_TAGS" value="" />
-        </value>
-      </option>
-      <option name="METHOD_OPTIONS">
-        <value>
-          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
-          <option name="REQUIRED_TAGS" value="@return@param@throws or @exception" />
-        </value>
-      </option>
-      <option name="FIELD_OPTIONS">
-        <value>
-          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
-          <option name="REQUIRED_TAGS" value="" />
-        </value>
-      </option>
-      <option name="IGNORE_DEPRECATED" value="false" />
-      <option name="IGNORE_JAVADOC_PERIOD" value="true" />
-      <option name="IGNORE_DUPLICATED_THROWS" value="false" />
-      <option name="IGNORE_POINT_TO_ITSELF" value="false" />
-      <option name="myAdditionalJavadocTags" value="date" />
-    </inspection_tool>
-  </profile>
-</component>

+ 0 - 6
.idea/misc.xml

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="JavaScriptSettings">
-    <option name="languageLevel" value="ES6" />
-  </component>
-</project>

+ 0 - 8
.idea/modules.xml

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/adsp-boot.iml" filepath="$PROJECT_DIR$/.idea/adsp-boot.iml" />
-    </modules>
-  </component>
-</project>

+ 0 - 6
.idea/vcs.xml

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

+ 0 - 1
jeecg-boot-base-common/.gitignore

@@ -1 +0,0 @@
-/target/

+ 0 - 234
jeecg-boot-base-common/jeecg-boot-base-common.iml

@@ -1,234 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-      </configuration>
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.3.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.11.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.2" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.25" level="project" />
-    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.8" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.16" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.16" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.16" level="project" />
-    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.14.Final" level="project" />
-    <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-mail:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.sun.mail:javax.mail:1.6.2" level="project" />
-    <orderEntry type="library" name="Maven: javax.activation:activation:1.1" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: net.minidev:json-smart:2.3" level="project" />
-    <orderEntry type="library" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
-    <orderEntry type="library" name="Maven: org.assertj:assertj-core:3.11.1" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:2.23.4" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.9.10" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.6.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-actuator:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator-autoconfigure:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: io.micrometer:micrometer-core:1.1.3" level="project" />
-    <orderEntry type="library" name="Maven: org.hdrhistogram:HdrHistogram:2.1.9" level="project" />
-    <orderEntry type="library" name="Maven: org.latencyutils:LatencyUtils:2.0.3" level="project" />
-    <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
-    <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-freemarker:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.28" level="project" />
-    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.6" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.0.6" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.0.6" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.0.6" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.0.6" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.0.6" level="project" />
-    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-generator:3.0.6" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.10" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:druid:1.1.10" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:dynamic-datasource-spring-boot-starter:2.5.4" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.56" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:5.1.47" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: net.sourceforge.jtds:jtds:1.3.1" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: com.microsoft.sqlserver:mssql-jdbc:7.2.1.jre8" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-quartz:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.5.RELEASE" 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: com.auth0:java-jwt:3.7.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.shiro:shiro-spring-boot-starter: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-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: commons-beanutils:commons-beanutils:1.9.3" 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-web:1.4.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" 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.9.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:swagger-bootstrap-ui:1.9.3" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.1.4.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.33.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.33.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.33.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.33.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.33.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.33.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.2.6.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.6.1" level="project" />
-    <orderEntry type="library" name="Maven: org.jeecgframework.boot:codegenerate:1.0.5" level="project" />
-    <orderEntry type="library" name="Maven: org.jeecgframework:autopoi-web:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.jeecgframework:autopoi:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi:3.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.9" level="project" />
-    <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.3.0" level="project" />
-    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: xerces:xercesImpl:2.9.1" level="project" />
-    <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi-scratchpad:3.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.retrofit2:retrofit:2.6.0" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.12.0" level="project" />
-    <orderEntry type="library" name="Maven: com.graphql-java:graphql-java:13.0" level="project" />
-    <orderEntry type="library" name="Maven: org.antlr:antlr4-runtime:4.7.2" level="project" />
-    <orderEntry type="library" name="Maven: com.graphql-java:java-dataloader:2.1.1" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.mountcloud:graphql-client:1.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.8" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.pdfbox:fontbox:2.0.15" level="project" />
-    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-java:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-api:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-chrome-driver:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-edge-driver:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-firefox-driver:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-ie-driver:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-opera-driver:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-remote-driver:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-safari-driver:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-support:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.9.10" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-exec:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okio:okio:1.14.1" level="project" />
-    <orderEntry type="library" name="Maven: org.json:json:20180813" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:25.0-jre" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.0.0" 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: us.codecraft:webmagic-core:0.7.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" />
-    <orderEntry type="library" name="Maven: us.codecraft:xsoup:0.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-log4j12:1.7.25" level="project" />
-    <orderEntry type="library" name="Maven: log4j:log4j:1.2.17" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
-    <orderEntry type="library" name="Maven: org.jsoup:jsoup:1.10.3" level="project" />
-    <orderEntry type="library" name="Maven: us.codecraft:webmagic-extension:0.7.3" level="project" />
-    <orderEntry type="library" name="Maven: redis.clients:jedis:2.9.1" level="project" />
-    <orderEntry type="library" name="Maven: net.sourceforge.htmlunit:htmlunit:2.35.0" level="project" />
-    <orderEntry type="library" name="Maven: xalan:xalan:2.7.2" level="project" />
-    <orderEntry type="library" name="Maven: xalan:serializer:2.7.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-text:1.6" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5.7" level="project" />
-    <orderEntry type="library" name="Maven: net.sourceforge.htmlunit:htmlunit-core-js:2.35.0" level="project" />
-    <orderEntry type="library" name="Maven: net.sourceforge.htmlunit:neko-htmlunit:2.35.0" level="project" />
-    <orderEntry type="library" name="Maven: net.sourceforge.htmlunit:htmlunit-cssparser:1.4.0" level="project" />
-    <orderEntry type="library" name="Maven: commons-net:commons-net:3.6" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty.websocket:websocket-client:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-client:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-http:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-xml:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-util:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-io:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty.websocket:websocket-common:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty.websocket:websocket-api:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.11" level="project" />
-    <orderEntry type="library" name="Maven: cn.hutool:hutool-all:4.5.11" level="project" />
-    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-dysmsapi:1.0.0" level="project" />
-    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:3.2.3" level="project" />
-  </component>
-</module>

+ 0 - 11
jeecg-boot-base-common/src/main/main.iml

@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/java" isTestSource="false" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>

+ 54 - 0
jeecg-boot-base-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst

@@ -0,0 +1,54 @@
+org\jeecg\common\util\jsonschema\JsonschemaUtil.class
+org\jeecg\common\util\jsonschema\validate\TreeSelectProperty.class
+org\jeecg\common\constant\CommonSendStatus.class
+org\jeecg\common\exception\JeecgBootExceptionHandler.class
+org\jeecg\common\system\util\JeecgDataAutorUtils.class
+org\jeecg\common\system\query\QueryGenerator$1.class
+org\jeecg\common\util\superSearch\ObjectParseUtil$1.class
+org\jeecg\common\system\query\QueryGenerator.class
+org\jeecg\common\api\vo\Result.class
+org\jeecg\common\constant\CacheConstant.class
+org\jeecg\common\system\query\QueryRuleEnum.class
+org\jeecg\common\util\MyClassLoader.class
+org\jeecg\common\util\superSearch\ObjectParseUtil.class
+org\jeecg\common\exception\JeecgBootException.class
+org\jeecg\common\system\util\JwtUtil.class
+org\jeecg\common\util\encryption\EncryptedString.class
+org\jeecg\common\system\vo\DictModel.class
+org\jeecg\common\system\api\ISysBaseAPI.class
+org\jeecg\common\system\base\service\impl\JeecgServiceImpl.class
+org\jeecg\common\system\base\controller\JeecgController.class
+org\jeecg\common\constant\DataBaseConstant.class
+org\jeecg\modules\system\entity\SysPermissionDataRule.class
+org\jeecg\common\util\jsonschema\JsonSchemaDescrip.class
+org\jeecg\common\system\vo\SysUserCacheInfo.class
+org\jeecg\common\util\BrowserType.class
+org\jeecg\common\aspect\annotation\Dict.class
+org\jeecg\common\util\jsonschema\validate\PopupProperty.class
+org\jeecg\common\util\YouBianCodeUtil.class
+org\jeecg\common\aspect\annotation\PermissionData.class
+org\jeecg\common\util\BrowserUtils.class
+org\jeecg\common\system\controller\CommonController.class
+org\jeecg\common\util\jsonschema\validate\DictProperty.class
+org\jeecg\common\util\UUIDGenerator.class
+org\jeecg\common\system\base\entity\JeecgEntity.class
+org\jeecg\common\constant\CommonConstant.class
+org\jeecg\common\util\oConvertUtils.class
+org\jeecg\common\util\SqlInjectionUtil.class
+org\jeecg\common\util\jsonschema\CommonProperty.class
+org\jeecg\common\util\PasswordUtil.class
+org\jeecg\common\util\DateUtils.class
+org\jeecg\common\util\SpringContextUtils.class
+org\jeecg\common\util\encryption\AesEncryptUtil.class
+org\jeecg\common\util\MD5Util.class
+org\jeecg\common\util\RedisUtil.class
+org\jeecg\common\util\superSearch\QueryRuleEnum.class
+org\jeecg\common\system\vo\LoginUser.class
+org\jeecg\common\system\base\service\JeecgService.class
+org\jeecg\common\util\superSearch\QueryRuleVo.class
+org\jeecg\common\util\IPUtils.class
+org\jeecg\common\util\jsonschema\validate\StringProperty.class
+org\jeecg\common\aspect\annotation\AutoLog.class
+org\jeecg\common\util\DySmsHelper.class
+org\jeecg\common\util\jsonschema\validate\NumberProperty.class
+org\jeecg\common\system\query\QueryCondition.class

+ 52 - 0
jeecg-boot-base-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

@@ -0,0 +1,52 @@
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\MD5Util.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\DySmsHelper.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\jsonschema\validate\DictProperty.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\system\vo\DictModel.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\aspect\annotation\PermissionData.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\aspect\annotation\Dict.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\system\base\controller\JeecgController.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\jsonschema\validate\TreeSelectProperty.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\system\api\ISysBaseAPI.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\YouBianCodeUtil.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\oConvertUtils.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\jsonschema\JsonSchemaDescrip.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\BrowserType.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\system\util\JeecgDataAutorUtils.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\UUIDGenerator.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\PasswordUtil.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\system\query\QueryRuleEnum.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\exception\JeecgBootException.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\superSearch\QueryRuleEnum.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\constant\CommonSendStatus.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\system\controller\CommonController.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\SpringContextUtils.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\jsonschema\CommonProperty.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\system\vo\LoginUser.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\api\vo\Result.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\system\query\QueryCondition.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\jsonschema\validate\PopupProperty.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\system\query\QueryGenerator.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\modules\system\entity\SysPermissionDataRule.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\system\base\service\JeecgService.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\constant\CommonConstant.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\constant\CacheConstant.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\jsonschema\JsonschemaUtil.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\aspect\annotation\AutoLog.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\exception\JeecgBootExceptionHandler.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\constant\DataBaseConstant.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\SqlInjectionUtil.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\DateUtils.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\BrowserUtils.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\superSearch\QueryRuleVo.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\encryption\AesEncryptUtil.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\RedisUtil.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\system\base\entity\JeecgEntity.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\encryption\EncryptedString.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\MyClassLoader.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\system\vo\SysUserCacheInfo.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\system\util\JwtUtil.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\jsonschema\validate\NumberProperty.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\IPUtils.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\system\base\service\impl\JeecgServiceImpl.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\jsonschema\validate\StringProperty.java
+D:\git\adsp-boot\jeecg-boot-base-common\src\main\java\org\jeecg\common\util\superSearch\ObjectParseUtil.java

+ 0 - 1
jeecg-boot-module-system/.gitignore

@@ -1 +0,0 @@
-/target/

+ 0 - 246
jeecg-boot-module-system/jeecg-boot-module-system.iml

@@ -1,246 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="jeecg-boot-base-common" />
-    <orderEntry type="module" module-name="module-media" />
-    <orderEntry type="module" module-name="module-common" />
-    <orderEntry type="module" module-name="module-kuaishou" />
-    <orderEntry type="module" module-name="module-crawler" />
-    <orderEntry type="module" module-name="module-toutiao" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.3.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.11.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.2" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.25" level="project" />
-    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.8" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.16" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.16" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.16" level="project" />
-    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.14.Final" level="project" />
-    <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-mail:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.sun.mail:javax.mail:1.6.2" level="project" />
-    <orderEntry type="library" name="Maven: javax.activation:activation:1.1" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: net.minidev:json-smart:2.3" level="project" />
-    <orderEntry type="library" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
-    <orderEntry type="library" name="Maven: org.assertj:assertj-core:3.11.1" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:2.23.4" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.9.10" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.6.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-actuator:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator-autoconfigure:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: io.micrometer:micrometer-core:1.1.3" level="project" />
-    <orderEntry type="library" name="Maven: org.hdrhistogram:HdrHistogram:2.1.9" level="project" />
-    <orderEntry type="library" name="Maven: org.latencyutils:LatencyUtils:2.0.3" level="project" />
-    <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
-    <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-freemarker:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.28" level="project" />
-    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.6" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.0.6" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.0.6" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.0.6" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.0.6" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.0.6" level="project" />
-    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-generator:3.0.6" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.10" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:druid:1.1.10" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:dynamic-datasource-spring-boot-starter:2.5.4" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.56" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:5.1.47" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: net.sourceforge.jtds:jtds:1.3.1" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: com.microsoft.sqlserver:mssql-jdbc:7.2.1.jre8" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-quartz:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.5.RELEASE" 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: com.auth0:java-jwt:3.7.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.shiro:shiro-spring-boot-starter: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-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: commons-beanutils:commons-beanutils:1.9.3" 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-web:1.4.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" 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.9.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:swagger-bootstrap-ui:1.9.3" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.1.4.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.33.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.33.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.33.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.33.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.33.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.33.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.2.6.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.6.1" level="project" />
-    <orderEntry type="library" name="Maven: org.jeecgframework.boot:codegenerate:1.0.5" level="project" />
-    <orderEntry type="library" name="Maven: org.jeecgframework:autopoi-web:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.jeecgframework:autopoi:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi:3.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.9" level="project" />
-    <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.3.0" level="project" />
-    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: xerces:xercesImpl:2.9.1" level="project" />
-    <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi-scratchpad:3.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.retrofit2:retrofit:2.6.0" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.12.0" level="project" />
-    <orderEntry type="library" name="Maven: com.graphql-java:graphql-java:13.0" level="project" />
-    <orderEntry type="library" name="Maven: org.antlr:antlr4-runtime:4.7.2" level="project" />
-    <orderEntry type="library" name="Maven: com.graphql-java:java-dataloader:2.1.1" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.mountcloud:graphql-client:1.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.8" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.pdfbox:fontbox:2.0.15" level="project" />
-    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-java:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-api:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-chrome-driver:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-edge-driver:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-firefox-driver:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-ie-driver:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-opera-driver:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-remote-driver:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-safari-driver:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-support:3.14.0" level="project" />
-    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.9.10" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-exec:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okio:okio:1.14.1" level="project" />
-    <orderEntry type="library" name="Maven: org.json:json:20180813" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:25.0-jre" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.0.0" 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: us.codecraft:webmagic-core:0.7.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" />
-    <orderEntry type="library" name="Maven: us.codecraft:xsoup:0.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-log4j12:1.7.25" level="project" />
-    <orderEntry type="library" name="Maven: log4j:log4j:1.2.17" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
-    <orderEntry type="library" name="Maven: org.jsoup:jsoup:1.10.3" level="project" />
-    <orderEntry type="library" name="Maven: us.codecraft:webmagic-extension:0.7.3" level="project" />
-    <orderEntry type="library" name="Maven: redis.clients:jedis:2.9.1" level="project" />
-    <orderEntry type="library" name="Maven: net.sourceforge.htmlunit:htmlunit:2.35.0" level="project" />
-    <orderEntry type="library" name="Maven: xalan:xalan:2.7.2" level="project" />
-    <orderEntry type="library" name="Maven: xalan:serializer:2.7.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-text:1.6" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5.7" level="project" />
-    <orderEntry type="library" name="Maven: net.sourceforge.htmlunit:htmlunit-core-js:2.35.0" level="project" />
-    <orderEntry type="library" name="Maven: net.sourceforge.htmlunit:neko-htmlunit:2.35.0" level="project" />
-    <orderEntry type="library" name="Maven: net.sourceforge.htmlunit:htmlunit-cssparser:1.4.0" level="project" />
-    <orderEntry type="library" name="Maven: commons-net:commons-net:3.6" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty.websocket:websocket-client:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-client:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-http:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-xml:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-util:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-io:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty.websocket:websocket-common:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty.websocket:websocket-api:9.4.14.v20181114" level="project" />
-    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.11" level="project" />
-    <orderEntry type="library" name="Maven: cn.hutool:hutool-all:4.5.11" level="project" />
-    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-dysmsapi:1.0.0" level="project" />
-    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:3.2.3" level="project" />
-  </component>
-</module>

+ 0 - 12
jeecg-boot-module-system/src/main/main1.iml

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/java" isTestSource="false" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="main" />
-  </component>
-</module>

+ 1 - 1
jeecg-boot-module-system/src/main/resources/application-dev.yml

@@ -92,7 +92,7 @@ spring:
         master:
           url: jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
           username: root
-          password:
+          password: root
           driver-class-name: com.mysql.jdbc.Driver
           # 多数据源配置
           #multi-datasource1:

+ 1 - 1
jeecg-boot-module-system/src/main/resources/jeecg/jeecg_database.properties

@@ -2,7 +2,7 @@
 diver_name=com.mysql.jdbc.Driver
 url=jdbc:mysql://localhost:3306/jeecg-boot?useUnicode=true&characterEncoding=UTF-8
 username=root
-password=
+password=root
 database_name=jeecg-boot
 #oracle
 #diver_name=oracle.jdbc.driver.OracleDriver

+ 0 - 12
jeecg-boot-module-system/src/test/test.iml

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/java" isTestSource="true" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="main1" />
-  </component>
-</module>

BIN
jeecg-boot-module-system/target/classes/META-INF/jeecg-boot-module-system.kotlin_module


+ 136 - 0
jeecg-boot-module-system/target/classes/application-dev.yml

@@ -0,0 +1,136 @@
+server:
+  port: 8080
+  servlet:
+    context-path: /jeecg-boot
+    compression:
+      enabled: true
+      mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*
+
+management:
+  endpoints:
+    web:
+      exposure:
+        include: metrics,httptrace
+
+spring:
+  mail:
+    host: smtp.163.com
+    username: jeecgos@163.com
+    password: ??
+    properties:
+      mail:
+        smtp:
+          auth: true
+          starttls:
+            enable: true
+            required: true
+  ## quartz定时任务,采用数据库方式
+  quartz:
+    job-store-type: jdbc
+  #json 时间戳统一转换
+  jackson:
+    date-format:   yyyy-MM-dd HH:mm:ss
+    time-zone:   GMT+8
+  aop:
+    proxy-target-class: true
+  #配置freemarker
+  freemarker:
+    # 设置模板后缀名
+    suffix: .ftl
+    # 设置文档类型
+    content-type: text/html
+    # 设置页面编码格式
+    charset: UTF-8
+    # 设置页面缓存
+    cache: false
+    prefer-file-system-access: false
+    # 设置ftl文件路径
+    template-loader-path:
+      - classpath:/templates
+  # 设置静态文件路径,js,css等
+  mvc:
+    static-path-pattern: /**
+  resource:
+    static-locations: classpath:/static/,classpath:/public/
+  autoconfigure:
+    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+  datasource:
+    druid:
+      stat-view-servlet:
+        enabled: true
+        loginUsername: admin
+        loginPassword: 123456
+      web-stat-filter:
+        enabled: true
+    dynamic:
+      druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)
+        # 连接池的配置信息
+        # 初始化大小,最小,最大
+        connection-init-sql: set names utf8mb4
+
+        initial-size: 5
+        min-idle: 5
+        maxActive: 20
+        # 配置获取连接等待超时的时间
+        maxWait: 60000
+        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+        timeBetweenEvictionRunsMillis: 60000
+        # 配置一个连接在池中最小生存的时间,单位是毫秒
+        minEvictableIdleTimeMillis: 300000
+        validationQuery: SELECT 1 FROM DUAL
+        testWhileIdle: true
+        testOnBorrow: false
+        testOnReturn: false
+        # 打开PSCache,并且指定每个连接上PSCache的大小
+        poolPreparedStatements: true
+        maxPoolPreparedStatementPerConnectionSize: 20
+        # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
+        filters: stat,wall,slf4j
+        # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
+        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
+      datasource:
+        master:
+          url: jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+          username: root
+          password: root
+          driver-class-name: com.mysql.jdbc.Driver
+          # 多数据源配置
+          #multi-datasource1:
+          #url: jdbc:mysql://localhost:3306/jeecg-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
+          #username: root
+          #password: root
+          #driver-class-name: com.mysql.jdbc.Driver
+  #redis 配置
+  redis:
+    database: 0
+    host: 127.0.0.1
+    lettuce:
+      pool:
+        max-active: 8   #最大连接数据库连接数,设 0 为没有限制
+        max-idle: 8     #最大等待连接中的数量,设 0 为没有限制
+        max-wait: -1ms  #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
+        min-idle: 0     #最小等待连接中的数量,设 0 为没有限制
+      shutdown-timeout: 100ms
+    password: ''
+    port: 6379
+#mybatis plus 设置
+mybatis-plus:
+  mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml,classpath*:cn/com/ctop/kuaishou/modules/**/xml/*Mapper.xml,classpath*:cn/com/ctop/crawler/modules/**/xml/*Mapper.xml
+  global-config:
+    # 关闭MP3.0自带的banner
+    banner: false
+    db-config:
+      #主键类型  0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";
+      id-type: 4
+      # 默认数据库表下划线命名
+      table-underline: true
+    #configuration:
+    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
+    #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+#jeecg专用配置
+jeecg:
+  path:
+    #文件上传根目录 设置
+    upload: D://upFiles
+    #webapp文件路径
+    webapp: D://webapp

+ 139 - 0
jeecg-boot-module-system/target/classes/application-prod.yml

@@ -0,0 +1,139 @@
+server:
+  port: 8080
+  servlet:
+    context-path: /jeecg-boot
+    compression:
+      enabled: true
+      mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*
+
+management:
+  endpoints:
+    web:
+      exposure:
+        include: metrics,httptrace
+
+spring:
+  mail:
+    host: smtp.163.com
+    username: jeecgos@163.com
+    password: ??
+    properties:
+      mail:
+        smtp:
+          auth: true
+          starttls:
+            enable: true
+            required: true
+  ## quartz定时任务,采用数据库方式
+  quartz:
+    job-store-type: jdbc
+  #json 时间戳统一转换
+  jackson:
+    date-format:   yyyy-MM-dd HH:mm:ss
+    time-zone:   GMT+8
+  aop:
+    proxy-target-class: true
+  #配置freemarker
+  freemarker:
+    # 设置模板后缀名
+    suffix: .ftl
+    # 设置文档类型
+    content-type: text/html
+    # 设置页面编码格式
+    charset: UTF-8
+    # 设置页面缓存
+    cache: false
+    prefer-file-system-access: false
+    # 设置ftl文件路径
+    template-loader-path:
+      - classpath:/templates
+  # 设置静态文件路径,js,css等
+  mvc:
+    static-path-pattern: /**
+  resource:
+    static-locations: classpath:/static/,classpath:/public/
+  autoconfigure:
+    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+  datasource:
+    druid:
+      stat-view-servlet:
+
+        loginUsername: admin
+        loginPassword: hcst2016
+
+        enabled: true
+      web-stat-filter:
+        enabled: true
+    dynamic:
+      druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)
+        # 连接池的配置信息
+        # 初始化大小,最小,最大
+        connection-init-sql: set names utf8mb4
+
+        initial-size: 5
+        min-idle: 5
+        maxActive: 20
+        # 配置获取连接等待超时的时间
+        maxWait: 60000
+        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+        timeBetweenEvictionRunsMillis: 60000
+        # 配置一个连接在池中最小生存的时间,单位是毫秒
+        minEvictableIdleTimeMillis: 300000
+        validationQuery: SELECT 1 FROM DUAL
+        testWhileIdle: true
+        testOnBorrow: false
+        testOnReturn: false
+        # 打开PSCache,并且指定每个连接上PSCache的大小
+        poolPreparedStatements: true
+        maxPoolPreparedStatementPerConnectionSize: 20
+        # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
+        filters: stat,wall,slf4j
+        # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
+        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
+      datasource:
+        master:
+          url: jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+          username: hcst
+          password: test@20190531
+          driver-class-name: com.mysql.jdbc.Driver
+          # 多数据源配置
+          #multi-datasource1:
+          #url: jdbc:mysql://localhost:3306/jeecg-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
+          #username: root
+          #password: root
+          #driver-class-name: com.mysql.jdbc.Driver
+  #redis 配置
+  redis:
+    database: 0
+    host: 127.0.0.1
+
+    lettuce:
+      pool:
+        max-active: 8   #最大连接数据库连接数,设 0 为没有限制
+        max-idle: 8     #最大等待连接中的数量,设 0 为没有限制
+        max-wait: -1ms  #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
+        min-idle: 0     #最小等待连接中的数量,设 0 为没有限制
+      shutdown-timeout: 100ms
+    password: ''
+    port: 6379
+#mybatis plus 设置
+mybatis-plus:
+  mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml,classpath*:cn/com/ctop/kuaishou/modules/**/xml/*Mapper.xml,classpath*:cn/com/ctop/crawler/modules/**/xml/*Mapper.xml
+
+
+  global-config:
+    # 关闭MP3.0自带的banner
+    banner: false
+    db-config:
+      #主键类型  0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";
+      id-type: 4
+      # 默认数据库表下划线命名
+      table-underline: true
+#jeecg专用配置
+jeecg:
+  path:
+    #文件上传根目录 设置
+    upload: /mnt/upload
+    #webapp文件路径
+    webapp: /mnt/webapp
+

+ 139 - 0
jeecg-boot-module-system/target/classes/application-test.yml

@@ -0,0 +1,139 @@
+server:
+  port: 8080
+  servlet:
+    context-path: /jeecg-boot
+    compression:
+      enabled: true
+      mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*
+
+management:
+  endpoints:
+    web:
+      exposure:
+        include: metrics,httptrace
+
+spring:
+  mail:
+    host: smtp.163.com
+    username: jeecgos@163.com
+    password: ??
+    properties:
+      mail:
+        smtp:
+          auth: true
+          starttls:
+            enable: true
+            required: true
+  ## quartz定时任务,采用数据库方式
+  quartz:
+    job-store-type: jdbc
+  #json 时间戳统一转换
+  jackson:
+    date-format:   yyyy-MM-dd HH:mm:ss
+    time-zone:   GMT+8
+  aop:
+    proxy-target-class: true
+  #配置freemarker
+  freemarker:
+    # 设置模板后缀名
+    suffix: .ftl
+    # 设置文档类型
+    content-type: text/html
+    # 设置页面编码格式
+    charset: UTF-8
+    # 设置页面缓存
+    cache: false
+    prefer-file-system-access: false
+    # 设置ftl文件路径
+    template-loader-path:
+      - classpath:/templates
+  # 设置静态文件路径,js,css等
+  mvc:
+    static-path-pattern: /**
+  resource:
+    static-locations: classpath:/static/,classpath:/public/
+  autoconfigure:
+    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+  datasource:
+    druid:
+      stat-view-servlet:
+
+        enabled: true
+        loginUsername: admin
+        loginPassword: 123456
+      web-stat-filter:
+        enabled: true
+    dynamic:
+      druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)
+        # 连接池的配置信息
+        # 初始化大小,最小,最大
+        initial-size: 5
+        min-idle: 5
+        maxActive: 20
+        # 配置获取连接等待超时的时间
+        maxWait: 60000
+        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+        timeBetweenEvictionRunsMillis: 60000
+        # 配置一个连接在池中最小生存的时间,单位是毫秒
+        minEvictableIdleTimeMillis: 300000
+        validationQuery: SELECT 1 FROM DUAL
+        testWhileIdle: true
+        testOnBorrow: false
+        testOnReturn: false
+        # 打开PSCache,并且指定每个连接上PSCache的大小
+        poolPreparedStatements: true
+        maxPoolPreparedStatementPerConnectionSize: 20
+        # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
+        filters: stat,wall,slf4j
+        # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
+        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
+      datasource:
+        master:
+          url: jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+          username: root
+          password: root
+          driver-class-name: com.mysql.jdbc.Driver
+          # 多数据源配置   
+          #multi-datasource1: 
+          #url: jdbc:mysql://localhost:3306/jeecg-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
+          #username: root
+          #password: root
+          #driver-class-name: com.mysql.jdbc.Driver
+  #redis 配置
+  redis:
+    database: 0
+    host: 192.168.1.199
+    lettuce:
+      pool:
+        max-active: 8   #最大连接数据库连接数,设 0 为没有限制
+        max-idle: 8     #最大等待连接中的数量,设 0 为没有限制
+        max-wait: -1ms  #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
+        min-idle: 0     #最小等待连接中的数量,设 0 为没有限制
+      shutdown-timeout: 100ms
+    password: ''
+    port: 6379
+#mybatis plus 设置
+mybatis-plus:
+  mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml
+
+  global-config:
+    # 关闭MP3.0自带的banner
+    banner: false
+    db-config:
+      #主键类型  0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";
+      id-type: 4
+      # 默认数据库表下划线命名
+      table-underline: true
+    #configuration:
+    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
+    #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+#jeecg专用配置
+jeecg:
+  path:
+    #文件上传根目录 设置
+    upload: D://upFiles
+    #webapp文件路径
+    webapp: D://webapp
+logging:
+  level:
+    org.jeecg.modules.system.mapper: debug

+ 9 - 0
jeecg-boot-module-system/target/classes/application.yml

@@ -0,0 +1,9 @@
+spring:
+  profiles:
+    active: dev
+swagger:
+  production: false
+  basic:
+    enable: true
+    username: jeecg
+    password: jeecg1314

+ 14 - 0
jeecg-boot-module-system/target/classes/banner.txt

@@ -0,0 +1,14 @@
+
+${AnsiColor.BRIGHT_BLUE}
+   (_)                          | |               | |
+    _  ___  ___  ___ __ _ ______| |__   ___   ___ | |_ 
+   | |/ _ \/ _ \/ __/ _` |______| '_ \ / _ \ / _ \| __|
+   | |  __/  __/ (_| (_| |      | |_) | (_) | (_) | |_ 
+   | |\___|\___|\___\__, |      |_.__/ \___/ \___/ \__|
+  _/ |               __/ |                             
+ |__/               |___/
+
+${AnsiColor.BRIGHT_GREEN}
+Jeecg  Boot Version: 2.0.2
+Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version}
+${AnsiColor.BLACK}

+ 8 - 0
jeecg-boot-module-system/target/classes/db/data-mysql.sql

@@ -0,0 +1,8 @@
+DELETE FROM demo;
+
+INSERT INTO demo (id, name, age, email,sex,birthday,content) VALUES
+(1, 'Jone', 18, 'test1@baomidou.com','1','2017-12-28','很好'),
+(2, 'Jack', 20, 'test2@baomidou.com','2','2018-02-28','努力型'),
+(3, 'Tom', 28, 'test3@baomidou.com','1','2018-11-28','吃苦'),
+(4, 'Sandy', 21, 'test4@baomidou.com','1','2018-07-28','聪明'),
+(5, 'Billie', 24, 'test5@baomidou.com','2','2018-12-11','出色');

+ 11 - 0
jeecg-boot-module-system/target/classes/db/schema-mysql.sql

@@ -0,0 +1,11 @@
+DROP TABLE IF EXISTS demo;
+CREATE TABLE demo (
+  id BIGINT(20) NOT NULL auto_increment COMMENT '主键ID',
+  name varchar(30) default NULL COMMENT '姓名',
+  sex varchar(2) default NULL,
+  age int(11) default NULL COMMENT '年龄',
+  birthday date default NULL COMMENT '生日',
+  email varchar(50) default NULL COMMENT '邮箱',
+  content varchar(1000) default NULL COMMENT '个人简介',
+  PRIMARY KEY  (id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;

+ 244 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai

@@ -0,0 +1,244 @@
+package ${bussiPackage}.${entityPackage}.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.util.oConvertUtils;
+import ${bussiPackage}.${entityPackage}.entity.${entityName};
+import ${bussiPackage}.${entityPackage}.service.I${entityName}Service;
+import java.util.Date;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+ /**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="${tableVo.ftlDescription}")
+@RestController
+@RequestMapping("/${entityPackage}/${entityName?uncap_first}")
+public class ${entityName}Controller {
+	@Autowired
+	private I${entityName}Service ${entityName?uncap_first}Service;
+	
+	/**
+	  * 分页列表查询
+	 * @param ${entityName?uncap_first}
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "${tableVo.ftlDescription}-分页列表查询")
+	@ApiOperation(value="${tableVo.ftlDescription}-分页列表查询", notes="${tableVo.ftlDescription}-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<${entityName}>> queryPageList(${entityName} ${entityName?uncap_first},
+									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+									  HttpServletRequest req) {
+		Result<IPage<${entityName}>> result = new Result<IPage<${entityName}>>();
+		QueryWrapper<${entityName}> queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, req.getParameterMap());
+		Page<${entityName}> page = new Page<${entityName}>(pageNo, pageSize);
+		IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+	
+	/**
+	  *   添加
+	 * @param ${entityName?uncap_first}
+	 * @return
+	 */
+	@AutoLog(value = "${tableVo.ftlDescription}-添加")
+	@ApiOperation(value="${tableVo.ftlDescription}-添加", notes="${tableVo.ftlDescription}-添加")
+	@PostMapping(value = "/add")
+	public Result<${entityName}> add(@RequestBody ${entityName} ${entityName?uncap_first}) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		try {
+			${entityName?uncap_first}Service.save(${entityName?uncap_first});
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+	
+	/**
+	  *  编辑
+	 * @param ${entityName?uncap_first}
+	 * @return
+	 */
+	@AutoLog(value = "${tableVo.ftlDescription}-编辑")
+	@ApiOperation(value="${tableVo.ftlDescription}-编辑", notes="${tableVo.ftlDescription}-编辑")
+	@PutMapping(value = "/edit")
+	public Result<${entityName}> edit(@RequestBody ${entityName} ${entityName?uncap_first}) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		${entityName} ${entityName?uncap_first}Entity = ${entityName?uncap_first}Service.getById(${entityName?uncap_first}.getId());
+		if(${entityName?uncap_first}Entity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = ${entityName?uncap_first}Service.updateById(${entityName?uncap_first});
+			//TODO 返回false说明什么?
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+		
+		return result;
+	}
+	
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "${tableVo.ftlDescription}-通过id删除")
+	@ApiOperation(value="${tableVo.ftlDescription}-通过id删除", notes="${tableVo.ftlDescription}-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			${entityName?uncap_first}Service.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "${tableVo.ftlDescription}-批量删除")
+	@ApiOperation(value="${tableVo.ftlDescription}-批量删除", notes="${tableVo.ftlDescription}-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<${entityName}> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.${entityName?uncap_first}Service.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+	
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "${tableVo.ftlDescription}-通过id查询")
+	@ApiOperation(value="${tableVo.ftlDescription}-通过id查询", notes="${tableVo.ftlDescription}-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<${entityName}> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.getById(id);
+		if(${entityName?uncap_first}==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(${entityName?uncap_first});
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+  /**
+      * 导出excel
+   *
+   * @param request
+   * @param response
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+      // Step.1 组装查询条件
+      QueryWrapper<${entityName}> queryWrapper = null;
+      try {
+          String paramsStr = request.getParameter("paramsStr");
+          if (oConvertUtils.isNotEmpty(paramsStr)) {
+              String deString = URLDecoder.decode(paramsStr, "UTF-8");
+              ${entityName} ${entityName?uncap_first} = JSON.parseObject(deString, ${entityName}.class);
+              queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, request.getParameterMap());
+          }
+      } catch (UnsupportedEncodingException e) {
+          e.printStackTrace();
+      }
+
+      //Step.2 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      List<${entityName}> pageList = ${entityName?uncap_first}Service.list(queryWrapper);
+      //导出文件名称
+      mv.addObject(NormalExcelConstants.FILE_NAME, "${tableVo.ftlDescription}列表");
+      mv.addObject(NormalExcelConstants.CLASS, ${entityName}.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("${tableVo.ftlDescription}列表数据", "导出人:Jeecg", "导出信息"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+  }
+
+  /**
+      * 通过excel导入数据
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+  @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+  public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          MultipartFile file = entity.getValue();// 获取上传文件对象
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<${entityName}> list${entityName}s = ExcelImportUtil.importExcel(file.getInputStream(), ${entityName}.class, params);
+              ${entityName?uncap_first}Service.saveBatch(list${entityName}s);
+              return Result.ok("文件导入成功!数据行数:" + list${entityName}s.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+  }
+
+}

+ 53 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai

@@ -0,0 +1,53 @@
+package ${bussiPackage}.${entityPackage}.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Data
+@TableName("${tableName}")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="${tableName}对象", description="${tableVo.ftlDescription}")
+public class ${entityName} {
+    
+    <#list originalColumns as po>
+	/**${po.filedComment}*/
+	<#if po.fieldName == primaryKeyField>
+	@TableId(type = IdType.UUID)
+	<#else>
+  <#if po.fieldType =='java.util.Date'>
+	<#if po.fieldDbType =='date'>
+	@Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	<#elseif po.fieldDbType =='datetime'>
+	@Excel(name = "${po.filedComment}", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	</#if>
+	<#else>
+	@Excel(name = "${po.filedComment}", width = 15)
+  </#if>
+  </#if>
+    @ApiModelProperty(value = "${po.filedComment}")
+	private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType}</#if> ${po.fieldName};
+	</#list>
+}

+ 17 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai

@@ -0,0 +1,17 @@
+package ${bussiPackage}.${entityPackage}.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import ${bussiPackage}.${entityPackage}.entity.${entityName};
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+public interface ${entityName}Mapper extends BaseMapper<${entityName}> {
+
+}

+ 5 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="${bussiPackage}.${entityPackage}.mapper.${entityName}Mapper">
+
+</mapper>

+ 14 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai

@@ -0,0 +1,14 @@
+package ${bussiPackage}.${entityPackage}.service;
+
+import ${bussiPackage}.${entityPackage}.entity.${entityName};
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+public interface I${entityName}Service extends IService<${entityName}> {
+
+}

+ 19 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai

@@ -0,0 +1,19 @@
+package ${bussiPackage}.${entityPackage}.service.impl;
+
+import ${bussiPackage}.${entityPackage}.entity.${entityName};
+import ${bussiPackage}.${entityPackage}.mapper.${entityName}Mapper;
+import ${bussiPackage}.${entityPackage}.service.I${entityName}Service;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Service
+public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, ${entityName}> implements I${entityName}Service {
+
+}

+ 171 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei

@@ -0,0 +1,171 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+
+<#list columns as po>
+<#if po.fieldName !='id' && po_index<= tableVo.searchFieldNum>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="${po.filedComment}">
+              <a-input placeholder="请输入${po.filedComment}" v-model="queryParam.${po.fieldName}"></a-input>
+            </a-form-item>
+          </a-col>
+<#elseif po_index == 2>
+        <template v-if="toggleSearchStatus">
+        <a-col :md="6" :sm="8">
+            <a-form-item label="${po.filedComment}">
+              <a-input placeholder="请输入${po.filedComment}" v-model="queryParam.${po.fieldName}"></a-input>
+            </a-form-item>
+          </a-col>
+<#elseif po.fieldName !='id' && po_index< 5>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="${po.filedComment}">
+              <a-input placeholder="请输入${po.filedComment}" v-model="queryParam.${po.fieldName}"></a-input>
+            </a-form-item>
+          </a-col>
+<#else>
+</#if>
+</#list>
+        <#if (columns?size>1) >
+          </template>
+        </#if>
+          <a-col :md="6" :sm="8" >
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('${tableVo.ftlDescription}')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <${entityName?uncap_first}-modal ref="modalForm" @ok="modalFormOk"></${entityName?uncap_first}-modal>
+  </a-card>
+</template>
+
+<script>
+  import ${entityName}Modal from './modules/${entityName}Modal'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+  export default {
+    name: "${entityName}List",
+    mixins:[JeecgListMixin],
+    components: {
+      ${entityName}Modal
+    },
+    data () {
+      return {
+        description: '${tableVo.ftlDescription}管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+           },
+          <#list columns as po>
+           <#if po.fieldName !='id'>
+		   {
+            title: '${po.filedComment}',
+            align:"center",
+            dataIndex: '${po.fieldName}'
+           },
+		   </#if>
+		  </#list>
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+		url: {
+          list: "/${entityPackage}/${entityName?uncap_first}/list",
+          delete: "/${entityPackage}/${entityName?uncap_first}/delete",
+          deleteBatch: "/${entityPackage}/${entityName?uncap_first}/deleteBatch",
+          exportXlsUrl: "${entityPackage}/${entityName?uncap_first}/exportXls",
+          importExcelUrl: "${entityPackage}/${entityName?uncap_first}/importExcel",
+       },
+    }
+  },
+  computed: {
+    importExcelUrl: function(){
+      <#noparse>return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;</#noparse>
+    }
+  },
+    methods: {
+     
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>

+ 155 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei

@@ -0,0 +1,155 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+<#list columns as po><#rt/>
+<#if po.fieldName !='id'><#rt/>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="${po.filedComment}">
+          <#if po.fieldType =='date'>
+          <a-date-picker v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#elseif po.fieldType =='datetime'>
+          <a-date-picker showTime format='YYYY-MM-DD HH:mm:ss' v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#elseif "int,decimal,double,"?contains(po.fieldType)>
+          <a-input-number v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#else>
+          <a-input placeholder="请输入${po.filedComment}" v-decorator="['${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          </#if>
+        </a-form-item>
+</#if>
+</#list>
+		
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "${entityName}Modal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        <#list columns as po>
+        <#if po.fieldName !='id'>
+        <#if po.nullable =='N'>
+        ${po.fieldName}:{rules: [{ required: true, message: '请输入${po.filedComment}!' }]},
+        </#if>
+        </#if>
+	    </#list>
+        },
+        url: {
+          add: "/${entityPackage}/${entityName?uncap_first}/add",
+          edit: "/${entityPackage}/${entityName?uncap_first}/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model<#list columns as po><#if po.fieldName !='id' && po.fieldType?index_of("date")==-1>,'${po.fieldName}'</#if></#list>))
+		  //时间格式化
+          <#list columns as po>
+          <#if po.fieldName !='id' && po.fieldType?index_of("date")!=-1>
+          this.form.setFieldsValue({${po.fieldName}:this.model.${po.fieldName}?moment(this.model.${po.fieldName}):null})
+          </#if>
+          </#list>
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            <#list columns as po>
+            <#if po.fieldName !='id' && po.fieldType =='date'>
+            formData.${po.fieldName} = formData.${po.fieldName}?formData.${po.fieldName}.format():null;
+            <#elseif po.fieldName !='id' && po.fieldType =='datetime'>
+            formData.${po.fieldName} = formData.${po.fieldName}?formData.${po.fieldName}.format('YYYY-MM-DD HH:mm:ss'):null;
+            </#if>
+            </#list>
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+
+</style>

+ 162 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal__Style#Drawer.vuei

@@ -0,0 +1,162 @@
+<template>
+  <a-drawer
+      :title="title"
+      :width="800"
+      placement="right"
+      :closable="false"
+      @close="close"
+      :visible="visible"
+  >
+
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+<#list columns as po><#rt/>
+<#if po.fieldName !='id'><#rt/>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="${po.filedComment}">
+          <#if po.fieldType =='date'>
+          <a-date-picker v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#elseif po.fieldType =='datetime'>
+          <a-date-picker showTime format='YYYY-MM-DD HH:mm:ss' v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#elseif "int,decimal,double,"?contains(po.fieldType)>
+          <a-input-number v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#else>
+          <a-input placeholder="请输入${po.filedComment}" v-decorator="['${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          </#if>
+        </a-form-item>
+</#if>
+</#list>
+		
+      </a-form>
+    </a-spin>
+    <a-button type="primary" @click="handleOk">确定</a-button>
+    <a-button type="primary" @click="handleCancel">取消</a-button>
+  </a-drawer>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "${entityName}Modal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        <#list columns as po>
+        <#if po.fieldName !='id'>
+        <#if po.nullable =='N'>
+        ${po.fieldName}:{rules: [{ required: true, message: '请输入${po.filedComment}!' }]},
+        </#if>
+        </#if>
+	    </#list>
+        },
+        url: {
+          add: "/${entityPackage}/${entityName?uncap_first}/add",
+          edit: "/${entityPackage}/${entityName?uncap_first}/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model<#list columns as po><#if po.fieldName !='id' && po.fieldType?index_of("date")==-1>,'${po.fieldName}'</#if></#list>))
+		  //时间格式化
+          <#list columns as po>
+          <#if po.fieldName !='id' && po.fieldType?index_of("date")!=-1>
+          this.form.setFieldsValue({${po.fieldName}:this.model.${po.fieldName}?moment(this.model.${po.fieldName}):null})
+          </#if>
+          </#list>
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            <#list columns as po>
+            <#if po.fieldName !='id' && po.fieldType =='date'>
+            formData.${po.fieldName} = formData.${po.fieldName}?formData.${po.fieldName}.format():null;
+            <#elseif po.fieldName !='id' && po.fieldType =='datetime'>
+            formData.${po.fieldName} = formData.${po.fieldName}?formData.${po.fieldName}.format('YYYY-MM-DD HH:mm:ss'):null;
+            </#if>
+            </#list>
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+</style>

+ 232 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/controller/${entityPackage}/${entityName}Controller.javai

@@ -0,0 +1,232 @@
+package ${bussiPackage}.controller.${entityPackage};
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import ${bussiPackage}.entity.${entityPackage}.${entityName};
+import ${bussiPackage}.service.${entityPackage}.I${entityName}Service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import lombok.extern.slf4j.Slf4j;
+
+import com.alibaba.fastjson.JSON;
+
+ /**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@RestController
+@RequestMapping("/${entityPackage}/${entityName?uncap_first}")
+@Slf4j
+public class ${entityName}Controller {
+	@Autowired
+	private I${entityName}Service ${entityName?uncap_first}Service;
+	
+	/**
+	  * 分页列表查询
+	 * @param ${entityName?uncap_first}
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<${entityName}>> queryPageList(${entityName} ${entityName?uncap_first},
+									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+									  HttpServletRequest req) {
+		Result<IPage<${entityName}>> result = new Result<IPage<${entityName}>>();
+		QueryWrapper<${entityName}> queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, req.getParameterMap());
+		Page<${entityName}> page = new Page<${entityName}>(pageNo, pageSize);
+		IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+	
+	/**
+	  *   添加
+	 * @param ${entityName?uncap_first}
+	 * @return
+	 */
+	@PostMapping(value = "/add")
+	public Result<${entityName}> add(@RequestBody ${entityName} ${entityName?uncap_first}) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		try {
+			${entityName?uncap_first}Service.save(${entityName?uncap_first});
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+	
+	/**
+	  *  编辑
+	 * @param ${entityName?uncap_first}
+	 * @return
+	 */
+	@PutMapping(value = "/edit")
+	public Result<${entityName}> edit(@RequestBody ${entityName} ${entityName?uncap_first}) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		${entityName} ${entityName?uncap_first}Entity = ${entityName?uncap_first}Service.getById(${entityName?uncap_first}.getId());
+		if(${entityName?uncap_first}Entity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = ${entityName?uncap_first}Service.updateById(${entityName?uncap_first});
+			//TODO 返回false说明什么?
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+		
+		return result;
+	}
+	
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			${entityName?uncap_first}Service.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<${entityName}> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.${entityName?uncap_first}Service.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+	
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@GetMapping(value = "/queryById")
+	public Result<${entityName}> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.getById(id);
+		if(${entityName?uncap_first}==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(${entityName?uncap_first});
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+	/**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<${entityName}> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                ${entityName} ${entityName?uncap_first} = JSON.parseObject(deString, ${entityName}.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<${entityName}> pageList = ${entityName?uncap_first}Service.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "${tableVo.ftlDescription}列表");
+        mv.addObject(NormalExcelConstants.CLASS, ${entityName}.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("${tableVo.ftlDescription}列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+          * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            MultipartFile file = entity.getValue();// 获取上传文件对象
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<${entityName}> list${entityName}s = ExcelImportUtil.importExcel(file.getInputStream(), ${entityName}.class, params);
+                ${entityName?uncap_first}Service.saveBatch(list${entityName}s);
+                return Result.ok("文件导入成功!数据行数:" + list${entityName}s.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(),e);
+                return Result.error("文件导入失败:"+e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.ok("文件导入失败!");
+    }
+
+}

+ 45 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/entity/${entityPackage}/${entityName}.javai

@@ -0,0 +1,45 @@
+package ${bussiPackage}.entity.${entityPackage};
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Data
+@TableName("${tableName}")
+public class ${entityName} implements Serializable {
+    private static final long serialVersionUID = 1L;
+    
+    <#list originalColumns as po>
+	/**${po.filedComment}*/
+	<#if po.fieldName == primaryKeyField>
+	@TableId(type = IdType.UUID)
+	<#else>
+    <#if po.fieldType =='java.util.Date'>
+      <#if po.fieldDbType =='date'>
+    @Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+      <#elseif po.fieldDbType =='datetime'>
+    @Excel(name = "${po.filedComment}", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+      </#if>
+    <#else>
+    @Excel(name = "${po.filedComment}", width = 15)
+    </#if>
+  </#if>
+	private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType}</#if> ${po.fieldName};
+	</#list>
+}

+ 17 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/mapper/${entityPackage}/${entityName}Mapper.javai

@@ -0,0 +1,17 @@
+package ${bussiPackage}.mapper.${entityPackage};
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import ${bussiPackage}.entity.${entityPackage}.${entityName};
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+public interface ${entityName}Mapper extends BaseMapper<${entityName}> {
+
+}

+ 5 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/mapper/${entityPackage}/xml/${entityName}Mapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="${bussiPackage}.mapper.${entityPackage}.${entityName}Mapper">
+
+</mapper>

+ 14 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/service/${entityPackage}/I${entityName}Service.javai

@@ -0,0 +1,14 @@
+package ${bussiPackage}.service.${entityPackage};
+
+import ${bussiPackage}.entity.${entityPackage}.${entityName};
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+public interface I${entityName}Service extends IService<${entityName}> {
+
+}

+ 19 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/service/${entityPackage}/impl/${entityName}ServiceImpl.javai

@@ -0,0 +1,19 @@
+package ${bussiPackage}.service.${entityPackage}.impl;
+
+import ${bussiPackage}.entity.${entityPackage}.${entityName};
+import ${bussiPackage}.mapper.${entityPackage}.${entityName}Mapper;
+import ${bussiPackage}.service.${entityPackage}.I${entityName}Service;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Service
+public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, ${entityName}> implements I${entityName}Service {
+
+}

+ 171 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/vue/${entityPackage}/${entityName}List.vuei

@@ -0,0 +1,171 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+
+<#list columns as po>
+<#if po.fieldName !='id' && po_index<= tableVo.searchFieldNum>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="${po.filedComment}">
+              <a-input placeholder="请输入${po.filedComment}" v-model="queryParam.${po.fieldName}"></a-input>
+            </a-form-item>
+          </a-col>
+<#elseif po_index == 2>
+        <template v-if="toggleSearchStatus">
+        <a-col :md="6" :sm="8">
+            <a-form-item label="${po.filedComment}">
+              <a-input placeholder="请输入${po.filedComment}" v-model="queryParam.${po.fieldName}"></a-input>
+            </a-form-item>
+          </a-col>
+<#elseif po.fieldName !='id' && po_index< 5>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="${po.filedComment}">
+              <a-input placeholder="请输入${po.filedComment}" v-model="queryParam.${po.fieldName}"></a-input>
+            </a-form-item>
+          </a-col>
+<#else>
+</#if>
+</#list>
+        <#if (columns?size>1) >
+          </template>
+        </#if>
+          <a-col :md="6" :sm="8" >
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('${tableVo.ftlDescription}')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <${entityName?uncap_first}-modal ref="modalForm" @ok="modalFormOk"></${entityName?uncap_first}-modal>
+  </a-card>
+</template>
+
+<script>
+  import ${entityName}Modal from './modules/${entityName}Modal'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+  export default {
+    name: "${entityName}List",
+    mixins:[JeecgListMixin],
+    components: {
+      ${entityName}Modal
+    },
+    data () {
+      return {
+        description: '${tableVo.ftlDescription}管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+           },
+          <#list columns as po>
+           <#if po.fieldName !='id'>
+		   {
+            title: '${po.filedComment}',
+            align:"center",
+            dataIndex: '${po.fieldName}'
+           },
+		   </#if>
+		  </#list>
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+		url: {
+          list: "/${entityPackage}/${entityName?uncap_first}/list",
+          delete: "/${entityPackage}/${entityName?uncap_first}/delete",
+          deleteBatch: "/${entityPackage}/${entityName?uncap_first}/deleteBatch",
+          exportXlsUrl: "${entityPackage}/${entityName?uncap_first}/exportXls",
+          importExcelUrl: "${entityPackage}/${entityName?uncap_first}/importExcel",
+       },
+    }
+  },
+  computed: {
+    importExcelUrl: function(){
+      <#noparse>return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;</#noparse>
+    }
+  },
+    methods: {
+
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>

+ 155 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/vue/${entityPackage}/modules/${entityName}Modal.vuei

@@ -0,0 +1,155 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+
+<#list columns as po><#rt/>
+<#if po.fieldName !='id'><#rt/>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="${po.filedComment}">
+          <#if po.fieldType =='date'>
+          <a-date-picker v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#elseif po.fieldType =='datetime'>
+          <a-date-picker showTime format='YYYY-MM-DD HH:mm:ss' v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#elseif "int,decimal,double,"?contains(po.fieldType)>
+          <a-input-number v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#else>
+          <a-input placeholder="请输入${po.filedComment}" v-decorator="['${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          </#if>
+        </a-form-item>
+</#if>
+</#list>
+
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "${entityName}Modal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        <#list columns as po>
+        <#if po.fieldName !='id'>
+        <#if po.nullable =='N'>
+        ${po.fieldName}:{rules: [{ required: true, message: '请输入${po.filedComment}!' }]},
+        </#if>
+        </#if>
+	    </#list>
+        },
+        url: {
+          add: "/${entityPackage}/${entityName?uncap_first}/add",
+          edit: "/${entityPackage}/${entityName?uncap_first}/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model<#list columns as po><#if po.fieldName !='id' && po.fieldType?index_of("date")==-1>,'${po.fieldName}'</#if></#list>))
+		  //时间格式化
+          <#list columns as po>
+          <#if po.fieldName !='id' && po.fieldType?index_of("date")!=-1>
+          this.form.setFieldsValue({${po.fieldName}:this.model.${po.fieldName}?moment(this.model.${po.fieldName}):null})
+          </#if>
+          </#list>
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            <#list columns as po>
+            <#if po.fieldName !='id' && po.fieldType =='date'>
+            formData.${po.fieldName} = formData.${po.fieldName}?formData.${po.fieldName}.format():null;
+            <#elseif po.fieldName !='id' && po.fieldType =='datetime'>
+            formData.${po.fieldName} = formData.${po.fieldName}?formData.${po.fieldName}.format('YYYY-MM-DD HH:mm:ss'):null;
+            </#if>
+            </#list>
+
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+
+</style>

+ 162 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/one2/java/${bussiPackage}/vue/${entityPackage}/modules/${entityName}Modal__Style#Drawer.vuei

@@ -0,0 +1,162 @@
+<template>
+  <a-drawer
+      :title="title"
+      :width="800"
+      placement="right"
+      :closable="false"
+      @close="close"
+      :visible="visible"
+  >
+
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+<#list columns as po><#rt/>
+<#if po.fieldName !='id'><#rt/>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="${po.filedComment}">
+          <#if po.fieldType =='date'>
+          <a-date-picker v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#elseif po.fieldType =='datetime'>
+          <a-date-picker showTime format='YYYY-MM-DD HH:mm:ss' v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#elseif "int,decimal,double,"?contains(po.fieldType)>
+          <a-input-number v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#else>
+          <a-input placeholder="请输入${po.filedComment}" v-decorator="['${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          </#if>
+        </a-form-item>
+</#if>
+</#list>
+		
+      </a-form>
+    </a-spin>
+    <a-button type="primary" @click="handleOk">确定</a-button>
+    <a-button type="primary" @click="handleCancel">取消</a-button>
+  </a-drawer>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "${entityName}Modal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        <#list columns as po>
+        <#if po.fieldName !='id'>
+        <#if po.nullable =='N'>
+        ${po.fieldName}:{rules: [{ required: true, message: '请输入${po.filedComment}!' }]},
+        </#if>
+        </#if>
+	    </#list>
+        },
+        url: {
+          add: "/${entityPackage}/${entityName?uncap_first}/add",
+          edit: "/${entityPackage}/${entityName?uncap_first}/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model<#list columns as po><#if po.fieldName !='id' && po.fieldType?index_of("date")==-1>,'${po.fieldName}'</#if></#list>))
+		  //时间格式化
+          <#list columns as po>
+          <#if po.fieldName !='id' && po.fieldType?index_of("date")!=-1>
+          this.form.setFieldsValue({${po.fieldName}:this.model.${po.fieldName}?moment(this.model.${po.fieldName}):null})
+          </#if>
+          </#list>
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            <#list columns as po>
+            <#if po.fieldName !='id' && po.fieldType =='date'>
+            formData.${po.fieldName} = formData.${po.fieldName}?formData.${po.fieldName}.format():null;
+            <#elseif po.fieldName !='id' && po.fieldType =='datetime'>
+            formData.${po.fieldName} = formData.${po.fieldName}?formData.${po.fieldName}.format('YYYY-MM-DD HH:mm:ss'):null;
+            </#if>
+            </#list>
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+</style>

+ 274 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai

@@ -0,0 +1,274 @@
+package ${bussiPackage}.${entityPackage}.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+<#list subTables as sub>
+import ${bussiPackage}.${entityPackage}.entity.${sub.entityName};
+</#list>
+import ${bussiPackage}.${entityPackage}.entity.${entityName};
+import ${bussiPackage}.${entityPackage}.vo.${entityName}Page;
+import ${bussiPackage}.${entityPackage}.service.I${entityName}Service;
+<#list subTables as sub>
+import ${bussiPackage}.${entityPackage}.service.I${sub.entityName}Service;
+</#list>
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import com.alibaba.fastjson.JSON;
+
+ /**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@RestController
+@RequestMapping("/${entityPackage}/${entityName?uncap_first}")
+@Slf4j
+public class ${entityName}Controller {
+	@Autowired
+	private I${entityName}Service ${entityName?uncap_first}Service;
+	<#list subTables as sub>
+	@Autowired
+	private I${sub.entityName}Service ${sub.entityName?uncap_first}Service;
+	</#list>
+	
+	/**
+	  * 分页列表查询
+	 * @param ${entityName?uncap_first}
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<${entityName}>> queryPageList(${entityName} ${entityName?uncap_first},
+									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+									  HttpServletRequest req) {
+		Result<IPage<${entityName}>> result = new Result<IPage<${entityName}>>();
+		QueryWrapper<${entityName}> queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, req.getParameterMap());
+		Page<${entityName}> page = new Page<${entityName}>(pageNo, pageSize);
+		IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+	
+	/**
+	  *   添加
+	 * @param ${entityName?uncap_first}Page
+	 * @return
+	 */
+	@PostMapping(value = "/add")
+	public Result<${entityName}> add(@RequestBody ${entityName}Page ${entityName?uncap_first}Page) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		try {
+			${entityName} ${entityName?uncap_first} = new ${entityName}();
+			BeanUtils.copyProperties(${entityName?uncap_first}Page, ${entityName?uncap_first});
+			
+			${entityName?uncap_first}Service.saveMain(${entityName?uncap_first}, <#list subTables as sub>${entityName?uncap_first}Page.get${sub.entityName}List()<#if sub_has_next>,</#if></#list>);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+	
+	/**
+	  *  编辑
+	 * @param ${entityName?uncap_first}Page
+	 * @return
+	 */
+	@PutMapping(value = "/edit")
+	public Result<${entityName}> edit(@RequestBody ${entityName}Page ${entityName?uncap_first}Page) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		${entityName} ${entityName?uncap_first} = new ${entityName}();
+		BeanUtils.copyProperties(${entityName?uncap_first}Page, ${entityName?uncap_first});
+		${entityName} ${entityName?uncap_first}Entity = ${entityName?uncap_first}Service.getById(${entityName?uncap_first}.getId());
+		if(${entityName?uncap_first}Entity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = ${entityName?uncap_first}Service.updateById(${entityName?uncap_first});
+			${entityName?uncap_first}Service.updateMain(${entityName?uncap_first}, <#list subTables as sub>${entityName?uncap_first}Page.get${sub.entityName}List()<#if sub_has_next>,</#if></#list>);
+			result.success("修改成功!");
+		}
+		
+		return result;
+	}
+	
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			${entityName?uncap_first}Service.delMain(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<${entityName}> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.${entityName?uncap_first}Service.delBatchMain(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+	
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@GetMapping(value = "/queryById")
+	public Result<${entityName}> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.getById(id);
+		if(${entityName?uncap_first}==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(${entityName?uncap_first});
+			result.setSuccess(true);
+		}
+		return result;
+	}
+	
+	<#list subTables as sub>
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@GetMapping(value = "/query${sub.entityName}ByMainId")
+	public Result<List<${sub.entityName}>> query${sub.entityName}ListByMainId(@RequestParam(name="id",required=true) String id) {
+		Result<List<${sub.entityName}>> result = new Result<List<${sub.entityName}>>();
+		List<${sub.entityName}> ${sub.entityName?uncap_first}List = ${sub.entityName?uncap_first}Service.selectByMainId(id);
+		result.setResult(${sub.entityName?uncap_first}List);
+		result.setSuccess(true);
+		return result;
+	}
+	</#list>
+
+  /**
+      * 导出excel
+   *
+   * @param request
+   * @param response
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+      // Step.1 组装查询条件
+      QueryWrapper<${entityName}> queryWrapper = null;
+      try {
+          String paramsStr = request.getParameter("paramsStr");
+          if (oConvertUtils.isNotEmpty(paramsStr)) {
+              String deString = URLDecoder.decode(paramsStr, "UTF-8");
+              ${entityName} ${entityName?uncap_first} = JSON.parseObject(deString, ${entityName}.class);
+              queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, request.getParameterMap());
+          }
+      } catch (UnsupportedEncodingException e) {
+          e.printStackTrace();
+      }
+
+      //Step.2 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      List<${entityName}Page> pageList = new ArrayList<${entityName}Page>();
+      List<${entityName}> ${entityName?uncap_first}List = ${entityName?uncap_first}Service.list(queryWrapper);
+      for (${entityName} ${entityName?uncap_first} : ${entityName?uncap_first}List) {
+          ${entityName}Page vo = new ${entityName}Page();
+          BeanUtils.copyProperties(${entityName?uncap_first}, vo);
+          <#list subTables as sub>
+          List<${sub.entityName}> ${sub.entityName?uncap_first}List = ${sub.entityName?uncap_first}Service.selectByMainId(${entityName?uncap_first}.getId());
+          vo.set${sub.entityName}List(${sub.entityName?uncap_first}List);
+          </#list>
+          pageList.add(vo);
+      }
+      //导出文件名称
+      mv.addObject(NormalExcelConstants.FILE_NAME, "${tableVo.ftlDescription}列表");
+      mv.addObject(NormalExcelConstants.CLASS, ${entityName}Page.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("${tableVo.ftlDescription}列表数据", "导出人:Jeecg", "导出信息"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+  }
+
+  /**
+      * 通过excel导入数据
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+  @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+  public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          MultipartFile file = entity.getValue();// 获取上传文件对象
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<${entityName}Page> list = ExcelImportUtil.importExcel(file.getInputStream(), ${entityName}Page.class, params);
+              for (${entityName}Page page : list) {
+                  ${entityName} po = new ${entityName}();
+                  BeanUtils.copyProperties(page, po);
+                  ${entityName?uncap_first}Service.saveMain(po, <#list subTables as sub>page.get${sub.entityName}List()<#if sub_has_next>,</#if></#list>);
+              }
+              return Result.ok("文件导入成功!数据行数:" + list.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+  }
+
+}

+ 39 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai

@@ -0,0 +1,39 @@
+package ${bussiPackage}.${entityPackage}.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Data
+@TableName("${tableName}")
+public class ${entityName} implements Serializable {
+    private static final long serialVersionUID = 1L;
+    
+    <#list originalColumns as po>
+	/**${po.filedComment}*/
+	<#if po.fieldName == primaryKeyField>
+	@TableId(type = IdType.UUID)
+	</#if>
+  <#if po.fieldType =='java.util.Date'>
+	<#if po.fieldDbType =='date'>
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	<#elseif po.fieldDbType =='datetime'>
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	</#if>
+  </#if>
+	private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType}</#if> ${po.fieldName};
+	</#list>
+}

+ 50 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai

@@ -0,0 +1,50 @@
+<#list subTables as subTab>
+#segment#${subTab.entityName}.java
+package ${bussiPackage}.${entityPackage}.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+
+/**
+ * @Description: ${subTab.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Data
+@TableName("${subTab.tableName}")
+public class ${subTab.entityName} implements Serializable {
+    private static final long serialVersionUID = 1L;
+    
+    <#list subTab.originalColumns as po>
+	/**${po.filedComment}*/
+	<#if po.fieldName == primaryKeyField>
+	@TableId(type = IdType.UUID)
+	<#else>
+  <#if po.fieldType =='java.util.Date'>
+	<#if po.fieldDbType =='date'>
+	@Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	<#elseif po.fieldDbType =='datetime'>
+	@Excel(name = "${po.filedComment}", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	</#if>
+	<#else>
+	<#if !subTab.foreignKeys?seq_contains(po.fieldName?cap_first)>
+    @Excel(name = "${po.filedComment}", width = 15)
+    </#if>
+  </#if>
+  </#if>
+	private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType}</#if> ${po.fieldName};
+	</#list>
+}
+</#list>

+ 17 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai

@@ -0,0 +1,17 @@
+package ${bussiPackage}.${entityPackage}.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import ${bussiPackage}.${entityPackage}.entity.${entityName};
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+public interface ${entityName}Mapper extends BaseMapper<${entityName}> {
+
+}

+ 21 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai

@@ -0,0 +1,21 @@
+<#list subTables as subTab>
+#segment#${subTab.entityName}Mapper.java
+package ${bussiPackage}.${entityPackage}.mapper;
+
+import java.util.List;
+import ${bussiPackage}.${entityPackage}.entity.${subTab.entityName};
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: ${subTab.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+public interface ${subTab.entityName}Mapper extends BaseMapper<${subTab.entityName}> {
+
+	public boolean deleteByMainId(String mainId);
+    
+	public List<${subTab.entityName}> selectByMainId(String mainId);
+}
+</#list>

+ 5 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="${bussiPackage}.${entityPackage}.mapper.${entityName}Mapper">
+
+</mapper>

+ 38 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml

@@ -0,0 +1,38 @@
+<#list subTables as subTab>
+<#assign originalForeignKeys = subTab.originalForeignKeys>
+        #segment#${subTab.entityName}Mapper.xml
+        <?xml version="1.0" encoding="UTF-8"?>
+        <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="${bussiPackage}.${entityPackage}.mapper.${subTab.entityName}Mapper">
+
+<delete id="deleteByMainId" parameterType="java.lang.String">
+    DELETE
+    FROM ${subTab.tableName}
+    WHERE
+    <#list originalForeignKeys as key>
+    <#if key?lower_case?index_of("${primaryKeyField}")!=-1>
+    ${key} = ${r'#'}{${primaryKeyField}}<#rt/>
+    <#else>
+    ${key} = ${r'#'}{${key}}<#rt/>
+</#if>
+<#if key_has_next>AND
+</#if>
+        </#list>
+        </delete>
+
+<select id="selectByMainId" parameterType="java.lang.String"
+        resultType="${bussiPackage}.${entityPackage}.entity.${subTab.entityName}">
+SELECT *
+FROM ${subTab.tableName}
+WHERE
+<#list originalForeignKeys as key>
+<#if key?lower_case?index_of("${primaryKeyField}")!=-1>
+${key} = ${r'#'}{${primaryKeyField}}<#rt/>
+<#else>
+${key} = ${r'#'}{${key}}<#rt/>
+</#if>
+<#if key_has_next>AND</#if>
+        </#list>
+        </select>
+        </mapper>
+        </#list>

+ 42 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai

@@ -0,0 +1,42 @@
+package ${bussiPackage}.${entityPackage}.service;
+
+<#list subTables as sub>
+import ${bussiPackage}.${entityPackage}.entity.${sub.entityName};
+</#list>
+import ${bussiPackage}.${entityPackage}.entity.${entityName};
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+public interface I${entityName}Service extends IService<${entityName}> {
+
+	/**
+	 * 添加一对多
+	 * 
+	 */
+	public void saveMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) ;
+	
+	/**
+	 * 修改一对多
+	 * 
+	 */
+	public void updateMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>);
+	
+	/**
+	 * 删除一对多
+	 */
+	public void delMain (String id);
+	
+	/**
+	 * 批量删除一对多
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+	
+}

+ 19 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai

@@ -0,0 +1,19 @@
+<#list subTables as subTab>
+#segment#I${subTab.entityName}Service.java
+package ${bussiPackage}.${entityPackage}.service;
+
+import ${bussiPackage}.${entityPackage}.entity.${subTab.entityName};
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: ${subTab.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+public interface I${subTab.entityName}Service extends IService<${subTab.entityName}> {
+
+	public List<${subTab.entityName}> selectByMainId(String mainId);
+}
+</#list>

+ 101 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai

@@ -0,0 +1,101 @@
+package ${bussiPackage}.${entityPackage}.service.impl;
+
+import ${bussiPackage}.${entityPackage}.entity.${entityName};
+<#list subTables as sub>
+import ${bussiPackage}.${entityPackage}.entity.${sub.entityName};
+</#list>
+<#list subTables as sub>
+import ${bussiPackage}.${entityPackage}.mapper.${sub.entityName}Mapper;
+</#list>
+import ${bussiPackage}.${entityPackage}.mapper.${entityName}Mapper;
+import ${bussiPackage}.${entityPackage}.service.I${entityName}Service;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Collection;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Service
+public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, ${entityName}> implements I${entityName}Service {
+
+	@Autowired
+	private ${entityName}Mapper ${entityName?uncap_first}Mapper;
+	<#list subTables as sub>
+	@Autowired
+	private ${sub.entityName}Mapper ${sub.entityName?uncap_first}Mapper;
+	</#list>
+	
+	@Override
+	@Transactional
+	public void saveMain(${entityName} ${entityName?uncap_first}, <#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
+		${entityName?uncap_first}Mapper.insert(${entityName?uncap_first});
+		<#list subTables as sub>
+		for(${sub.entityName} entity:${sub.entityName?uncap_first}List) {
+			<#list sub.foreignKeys as key>
+			//外键设置
+			<#if key?lower_case?index_of("${primaryKeyField}")!=-1>
+			entity.set${key?cap_first}(${entityName?uncap_first}.get${primaryKeyField?cap_first}());
+			<#else>
+			entity.set${key?cap_first}(${entityName?uncap_first}.get${key}());
+			</#if>
+			</#list>
+			${sub.entityName?uncap_first}Mapper.insert(entity);
+		}
+		</#list>
+	}
+
+	@Override
+	@Transactional
+	public void updateMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
+		${entityName?uncap_first}Mapper.updateById(${entityName?uncap_first});
+		
+		//1.先删除子表数据
+		<#list subTables as sub>
+		${sub.entityName?uncap_first}Mapper.deleteByMainId(${entityName?uncap_first}.getId());
+		</#list>
+		
+		//2.子表数据重新插入
+		<#list subTables as sub>
+		for(${sub.entityName} entity:${sub.entityName?uncap_first}List) {
+			<#list sub.foreignKeys as key>
+			//外键设置
+			<#if key?lower_case?index_of("${primaryKeyField}")!=-1>
+			entity.set${key?cap_first}(${entityName?uncap_first}.get${primaryKeyField?cap_first}());
+			<#else>
+			entity.set${key?cap_first}(${entityName?uncap_first}.get${key}());
+			</#if>
+			</#list>
+			${sub.entityName?uncap_first}Mapper.insert(entity);
+		}
+		</#list>
+	}
+
+	@Override
+	@Transactional
+	public void delMain(String id) {
+		<#list subTables as sub>
+		${sub.entityName?uncap_first}Mapper.deleteByMainId(id);
+		</#list>
+		${entityName?uncap_first}Mapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			<#list subTables as sub>
+			${sub.entityName?uncap_first}Mapper.deleteByMainId(id.toString());
+			</#list>
+			${entityName?uncap_first}Mapper.deleteById(id);
+		}
+	}
+	
+}

+ 30 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai

@@ -0,0 +1,30 @@
+<#list subTables as subTab>
+#segment#${subTab.entityName}ServiceImpl.java
+package ${bussiPackage}.${entityPackage}.service.impl;
+
+import ${bussiPackage}.${entityPackage}.entity.${subTab.entityName};
+import ${bussiPackage}.${entityPackage}.mapper.${subTab.entityName}Mapper;
+import ${bussiPackage}.${entityPackage}.service.I${subTab.entityName}Service;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: ${subTab.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Service
+public class ${subTab.entityName}ServiceImpl extends ServiceImpl<${subTab.entityName}Mapper, ${subTab.entityName}> implements I${subTab.entityName}Service {
+	
+	@Autowired
+	private ${subTab.entityName}Mapper ${subTab.entityName?uncap_first}Mapper;
+	
+	@Override
+	public List<${subTab.entityName}> selectByMainId(String mainId) {
+		return ${subTab.entityName?uncap_first}Mapper.selectByMainId(mainId);
+	}
+}
+</#list>

+ 50 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai

@@ -0,0 +1,50 @@
+package ${bussiPackage}.${entityPackage}.vo;
+
+import java.util.List;
+import ${bussiPackage}.${entityPackage}.entity.${entityName};
+<#list subTables as sub>
+import ${bussiPackage}.${entityPackage}.entity.${sub.entityName};
+</#list>
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Data
+public class ${entityName}Page {
+	
+    <#list originalColumns as po>
+	/**${po.filedComment}*/
+	<#if po.fieldName == primaryKeyField>
+	<#else>
+    <#if po.fieldType =='java.util.Date'>
+  	<#if po.fieldDbType =='date'>
+  	@Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd")
+  	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+  	<#elseif po.fieldDbType =='datetime'>
+  	@Excel(name = "${po.filedComment}", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+  	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+  	</#if>
+  	<#else>
+  	@Excel(name = "${po.filedComment}", width = 15)
+    </#if>
+  </#if>
+	private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType}</#if> ${po.fieldName};
+	</#list>
+	
+	<#list subTables as sub>
+	@ExcelCollection(name="${sub.ftlDescription}")
+	private List<${sub.entityName}> ${sub.entityName?uncap_first}List;
+	</#list>
+	
+}

+ 162 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei

@@ -0,0 +1,162 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+<#list columns as po><#rt/>
+<#if po.fieldName !='id' && po_index<= tableVo.searchFieldNum>
+          <a-col :span="6">
+            <a-form-item label="${po.filedComment}">
+              <a-input placeholder="请输入${po.filedComment}" v-model="queryParam.${po.fieldName}"></a-input>
+            </a-form-item>
+          </a-col>
+</#if>
+</#list>
+          <a-col :span="8" >
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('${tableVo.ftlDescription}')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i>
+        <span>已选择</span>
+        <a style="font-weight: 600">
+          {{ selectedRowKeys.length }}
+        </a>
+        <span>项</span>
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <${entityName?uncap_first}-modal ref="modalForm" @ok="modalFormOk"/>
+
+  </a-card>
+</template>
+
+<script>
+
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import ${entityName}Modal from './modules/${entityName}Modal'
+
+  export default {
+    name: "${entityName}List",
+    mixins: [JeecgListMixin],
+    components: {
+      ${entityName}Modal
+    },
+    data () {
+      return {
+        description: '${tableVo.ftlDescription}管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key: 'rowIndex',
+            width: 60,
+            align: "center",
+            customRender:function (t, r, index) {
+              return parseInt(index)+1;
+            }
+          },
+<#list columns as po><#rt/>
+  <#if po.fieldName !='id'>
+          {
+            title: '${po.filedComment}',
+            align:"center",
+            dataIndex: '${po.fieldName}'
+          },
+  </#if>
+</#list>
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+        // 请求参数
+    	url: {
+              list: "/${entityPackage}/${entityName?uncap_first}/list",
+              delete: "/${entityPackage}/${entityName?uncap_first}/delete",
+              deleteBatch: "/${entityPackage}/${entityName?uncap_first}/deleteBatch",
+              exportXlsUrl: "${entityPackage}/${entityName?uncap_first}/exportXls",
+              importExcelUrl: "${entityPackage}/${entityName?uncap_first}/importExcel",
+           },
+        }
+      },
+      computed: {
+        importExcelUrl: function(){
+          <#noparse>return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;</#noparse>
+        }
+      },
+
+
+    methods: {
+
+      initDictConfig() {
+      }
+
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>

+ 184 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei

@@ -0,0 +1,184 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="1200"
+    :visible="visible"
+    :maskClosable="false"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <!-- 主表单区域 -->
+      <a-form :form="form">
+<#list columns as po><#rt/>
+  <#if po_index % 2 == 0 ><#rt/>
+        <a-row>
+    <#if po.fieldName !='id'>
+      <#list [po_index, po_index+1] as idx><#rt/>
+        <#if idx lt columns?size>
+          <a-col :span="12" :gutter="8">
+            <a-form-item
+              :labelCol="labelCol"
+              :wrapperCol="wrapperCol"
+              label="${columns[idx].filedComment}">
+            <#if columns[idx].fieldType =='date'>
+              <a-date-picker
+                placeholder="请输入${columns[idx].filedComment}"
+                style="width:100%"
+                v-decorator="[ '${columns[idx].fieldName}', <#if columns[idx].nullable =='N'>validatorRules.${columns[idx].fieldName} <#else>{}</#if>]"/>
+            <#elseif columns[idx].fieldType =='datetime'>
+              <a-date-picker
+                placeholder="请输入${columns[idx].filedComment}"
+                style="width:100%"
+                :showTime="true"
+                format="YYYY-MM-DD HH:mm:ss"
+                v-decorator="[ '${columns[idx].fieldName}', <#if columns[idx].nullable =='N'>validatorRules.${columns[idx].fieldName} <#else>{}</#if>]"/>
+            <#elseif "int,decimal,double,"?contains(columns[idx].fieldType)>
+              <a-input-number placeholder="请输入${columns[idx].filedComment}" style="width:100%" v-decorator="[ '${columns[idx].fieldName}', <#if columns[idx].nullable =='N'>validatorRules.${columns[idx].fieldName} <#else>{}</#if>]"/>
+            <#else>
+              <a-input placeholder="请输入${columns[idx].filedComment}" v-decorator="['${columns[idx].fieldName}', <#if columns[idx].nullable =='N'>validatorRules.${columns[idx].fieldName} <#else>{}</#if>]"/>
+            </#if>
+            </a-form-item>
+          </a-col>
+        </#if>
+      </#list><#rt/>
+    </#if><#rt/>
+        </a-row>
+  </#if><#rt/>
+</#list>
+      </a-form>
+
+      <!-- 子表单区域 -->
+      <a-tabs v-model="activeKey" @change="handleChangeTabs">
+<#list subTables as sub><#rt/>
+        <a-tab-pane tab="${sub.ftlDescription}" :key="refKeys[${sub_index}]" :forceRender="true">
+          <j-editable-table
+            :ref="refKeys[${sub_index}]"
+            :loading="${sub.entityName?uncap_first}Table.loading"
+            :columns="${sub.entityName?uncap_first}Table.columns"
+            :dataSource="${sub.entityName?uncap_first}Table.dataSource"
+            :maxHeight="300"
+            :rowNumber="true"
+            :rowSelection="true"
+            :actionButton="true"/>
+        </a-tab-pane>
+</#list>
+      </a-tabs>
+
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+
+  import moment from 'moment'
+  import pick from 'lodash.pick'
+  import { FormTypes } from '@/utils/JEditableTableUtil'
+  import { JEditableTableMixin } from '@/mixins/JEditableTableMixin'
+
+  export default {
+    name: '${entityName}Modal',
+    mixins: [JEditableTableMixin],
+    data() {
+      return {
+        // 新增时子表默认添加几行空数据
+        addDefaultRowNum: 1,
+        validatorRules: {
+<#list columns as po>
+  <#if po.fieldName !='id'>
+    <#if po.nullable =='N'>
+          ${po.fieldName}: { rules: [{ required: true, message: '请输入${po.filedComment}!' }] },
+    </#if>
+  </#if>
+</#list>
+        },
+        refKeys: [<#list subTables as sub>'${sub.entityName?uncap_first}', </#list>],
+        activeKey: '${subTables[0].entityName?uncap_first}',
+<#list subTables as sub><#rt/>
+        // ${sub.ftlDescription}
+        ${sub.entityName?uncap_first}Table: {
+          loading: false,
+          dataSource: [],
+          columns: [
+<#list sub.colums as col><#rt/>
+    <#if col.filedComment !='外键'>
+            {
+              title: '${col.filedComment}',
+              key: '${col.fieldName}',
+      <#if col.fieldType =='date'>
+              type: FormTypes.date,
+      <#elseif col.fieldType =='datetime'>
+              type: FormTypes.datetime,
+      <#elseif "int,decimal,double,"?contains(col.fieldType)>
+              type: FormTypes.inputNumber,
+      <#else>
+              type: FormTypes.input,
+      </#if>
+              defaultValue: '',
+              placeholder: '请输入${'$'}{title}',
+      <#if col.nullable =='N'>
+              validateRules: [{ required: true, message: '${'$'}{title}不能为空' }],
+      </#if>
+            },
+    </#if>
+</#list>
+          ]
+        },
+</#list>
+        url: {
+          add: "/${entityPackage}/${entityName?uncap_first}/add",
+          edit: "/${entityPackage}/${entityName?uncap_first}/edit",
+<#list subTables as sub><#rt/>
+          ${sub.entityName?uncap_first}: {
+            list: '/${entityPackage}/${entityName?uncap_first}/query${sub.entityName}ByMainId'
+          },
+</#list>
+        }
+      }
+    },
+    methods: {
+ 
+      /** 调用完edit()方法之后会自动调用此方法 */
+      editAfter() {
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model, <#list columns as col>'${col.fieldName}', </#list>))
+          // 时间格式化
+<#list columns as col><#rt/>
+	<#if col.fieldName !='id' && (col.fieldType =='date' || col.fieldType =='datetime')>
+          this.form.setFieldsValue({ ${col.fieldName}: this.model.${col.fieldName} ? moment(this.model.${col.fieldName}) : null })
+	</#if>
+</#list>  
+        })
+        // 加载子表数据
+        if (this.model.id) {
+          let params = { id: this.model.id }
+<#list subTables as sub><#rt/>
+          this.requestSubTableData(this.url.${sub.entityName?uncap_first}.list, params, this.${sub.entityName?uncap_first}Table)
+</#list>
+        }
+      },
+ 
+      /** 整理成formData */
+      classifyIntoFormData(allValues) {
+        let main = Object.assign(this.model, allValues.formValue)
+        //时间格式化
+<#list columns as col><#rt/>
+	<#if col.fieldName !='id' && col.fieldType =='date'>
+        main.${col.fieldName} = main.${col.fieldName} ? main.${col.fieldName}.format() : null;
+	<#elseif col.fieldName !='id' && col.fieldType =='datetime'>
+        main.${col.fieldName} = main.${col.fieldName} ? main.${col.fieldName}.format('YYYY-MM-DD HH:mm:ss') : null;
+	</#if>
+</#list>
+        return {
+          ...main, // 展开
+<#list subTables as sub><#rt/>
+          ${sub.entityName?uncap_first}List: allValues.tablesValue[${sub_index}].values,
+</#list>
+        }
+      }
+    }
+  }
+</script>
+
+<style scoped>
+</style>

+ 374 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai

@@ -0,0 +1,374 @@
+package ${bussiPackage}.${entityPackage}.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+<#list subTables as sub>
+import ${bussiPackage}.${entityPackage}.entity.${sub.entityName};
+</#list>
+import ${bussiPackage}.${entityPackage}.entity.${entityName};
+import ${bussiPackage}.${entityPackage}.vo.${entityName}Page;
+import ${bussiPackage}.${entityPackage}.service.I${entityName}Service;
+<#list subTables as sub>
+import ${bussiPackage}.${entityPackage}.service.I${sub.entityName}Service;
+</#list>
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import com.alibaba.fastjson.JSON;
+
+ /**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@RestController
+@RequestMapping("/${entityPackage}/${entityName?uncap_first}")
+@Slf4j
+public class ${entityName}Controller {
+	@Autowired
+	private I${entityName}Service ${entityName?uncap_first}Service;
+	<#list subTables as sub>
+	@Autowired
+	private I${sub.entityName}Service ${sub.entityName?uncap_first}Service;
+	</#list>
+	
+	/**
+	  * 分页列表查询
+	 * @param ${entityName?uncap_first}
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<${entityName}>> queryPageList(${entityName} ${entityName?uncap_first},
+									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+									  HttpServletRequest req) {
+		Result<IPage<${entityName}>> result = new Result<IPage<${entityName}>>();
+		QueryWrapper<${entityName}> queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, req.getParameterMap());
+		Page<${entityName}> page = new Page<${entityName}>(pageNo, pageSize);
+		IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+	
+	/**
+	  *   添加
+	 * @param ${entityName?uncap_first}Page
+	 * @return
+	 */
+	@PostMapping(value = "/add")
+	public Result<${entityName}> add(@RequestBody ${entityName}Page ${entityName?uncap_first}Page) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		try {
+			${entityName} ${entityName?uncap_first} = new ${entityName}();
+			BeanUtils.copyProperties(${entityName?uncap_first}Page, ${entityName?uncap_first});
+			
+			${entityName?uncap_first}Service.save(${entityName?uncap_first});
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+	
+	/**
+	  *  编辑
+	 * @param ${entityName?uncap_first}Page
+	 * @return
+	 */
+	@PutMapping(value = "/edit")
+	public Result<${entityName}> edit(@RequestBody ${entityName}Page ${entityName?uncap_first}Page) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		${entityName} ${entityName?uncap_first} = new ${entityName}();
+		BeanUtils.copyProperties(${entityName?uncap_first}Page, ${entityName?uncap_first});
+		${entityName} ${entityName?uncap_first}Entity = ${entityName?uncap_first}Service.getById(${entityName?uncap_first}.getId());
+		if(${entityName?uncap_first}Entity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			${entityName?uncap_first}Service.updateById(${entityName?uncap_first});
+			result.success("修改成功!");
+		}
+		
+		return result;
+	}
+	
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			${entityName?uncap_first}Service.delMain(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<${entityName}> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.${entityName?uncap_first}Service.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+	
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@GetMapping(value = "/queryById")
+	public Result<${entityName}> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<${entityName}> result = new Result<${entityName}>();
+		${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.getById(id);
+		if(${entityName?uncap_first}==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(${entityName?uncap_first});
+			result.setSuccess(true);
+		}
+		return result;
+	}
+	
+	//===========================以下是子表信息操作相关API====================================
+	
+	<#list subTables as sub>
+	/**
+	  * 通过主表id查询${sub.ftlDescription}
+	 * @param mainId
+	 * @return
+	 */
+	@GetMapping(value = "/list${sub.entityName}ByMainId")
+	public Result<List<${sub.entityName}>> query${sub.entityName}ListByMainId(@RequestParam(name="mainId",required=false) String mainId) {
+		Result<List<${sub.entityName}>> result = new Result<List<${sub.entityName}>>();
+		List<${sub.entityName}> ${sub.entityName?uncap_first}List = null;
+		if (mainId != null) {
+			${sub.entityName?uncap_first}List = ${sub.entityName?uncap_first}Service.selectByMainId(mainId);
+            result.setResult(${sub.entityName?uncap_first}List);
+            result.setSuccess(true);
+            return result;
+		}else return null;	
+	}
+	
+	/**
+     * 添加${sub.ftlDescription}
+     *
+     * @param ${sub.entityName?uncap_first}
+     * @return
+     */
+    @PostMapping(value = "/add${sub.entityName}")
+    public Result<${sub.entityName}> add${sub.entityName}(@RequestBody ${sub.entityName} ${sub.entityName?uncap_first}) {
+        Result<${sub.entityName}> result = new Result<>();
+        try {
+            boolean ok = ${sub.entityName?uncap_first}Service.save(${sub.entityName?uncap_first});
+            if (ok) {
+                result.setSuccess(true);
+                result.setMessage("添加${sub.ftlDescription}成功.");
+            } else {
+                result.setSuccess(false);
+                result.setMessage("添加${sub.ftlDescription}失败!");
+            }
+            return result;
+        } catch (Exception e) {
+            e.fillInStackTrace();
+            result.setSuccess(false);
+            result.setMessage("添加${sub.ftlDescription}过程中出现了异常: " + e.getMessage());
+            return result;
+        }
+    }
+    
+    /**
+     * 编辑${sub.ftlDescription}
+     *
+     * @param ${sub.entityName?uncap_first}
+     * @return
+     */
+    @PutMapping("/edit${sub.entityName}")
+    public Result<${sub.entityName}> edit${sub.entityName}(@RequestBody ${sub.entityName} ${sub.entityName?uncap_first}) {
+        Result<${sub.entityName}> result = new Result<>();
+        try {
+            boolean ok = ${sub.entityName?uncap_first}Service.updateById(${sub.entityName?uncap_first});
+            if (ok) {
+                result.setSuccess(true);
+                result.setMessage("更新${sub.ftlDescription}成功.");
+            } else {
+                result.setSuccess(false);
+                result.setMessage("更新${sub.ftlDescription}失败!");
+            }
+            return result;
+        } catch (Exception e) {
+            result.setSuccess(false);
+            result.setMessage("更新数据过程中出现异常啦: " + e.getMessage());
+            return result;
+        }
+    }
+    
+    /**
+     * 通过id删除${sub.ftlDescription}
+     *
+     * @param id
+     * @return
+     */
+    @DeleteMapping(value = "/delete${sub.entityName}")
+    public Result<${sub.entityName}> delete${sub.entityName}(@RequestParam(name = "id", required = true) String id) {
+        Result<${sub.entityName}> result = new Result<>();
+        try {
+            boolean ok = ${sub.entityName?uncap_first}Service.removeById(id);
+            if (ok) {
+                result.setSuccess(true);
+                result.setMessage("删除${sub.ftlDescription}成功.");
+            } else {
+                result.setSuccess(false);
+                result.setMessage("删除${sub.ftlDescription}失败!");
+            }
+            return result;
+        } catch (Exception e) {
+            result.setSuccess(false);
+            result.setMessage("删除${sub.ftlDescription}过程中出现异常啦: " + e.getMessage());
+            return result;
+        }
+    }
+	
+	/**
+     * 批量删除${sub.ftlDescription}
+     *
+     * @param ids
+     * @return
+     */
+    @DeleteMapping(value = "/deleteBatch${sub.entityName}")
+    public Result<${sub.entityName}> deleteBatch${sub.entityName}(@RequestParam(name = "ids", required = true) String ids) {
+        Result<${sub.entityName}> result = new Result<${sub.entityName}>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.${sub.entityName?uncap_first}Service.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+    
+	</#list>
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<${entityName}> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                ${entityName} ${entityName?uncap_first} = JSON.parseObject(deString, ${entityName}.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<${entityName}Page> pageList = new ArrayList<${entityName}Page>();
+        List<${entityName}> ${entityName?uncap_first}List = ${entityName?uncap_first}Service.list(queryWrapper);
+        for (${entityName} ${entityName?uncap_first} : ${entityName?uncap_first}List) {
+            ${entityName}Page vo = new ${entityName}Page();
+            BeanUtils.copyProperties(${entityName?uncap_first}, vo);
+            <#list subTables as sub>
+            List<${sub.entityName}> ${sub.entityName?uncap_first}List = ${sub.entityName?uncap_first}Service.selectByMainId(${entityName?uncap_first}.getId());
+            vo.set${sub.entityName}List(${sub.entityName?uncap_first}List);
+            </#list>
+            pageList.add(vo);
+        }
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "${tableVo.ftlDescription}列表");
+        mv.addObject(NormalExcelConstants.CLASS, ${entityName}Page.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("${tableVo.ftlDescription}列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            MultipartFile file = entity.getValue();// 获取上传文件对象
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<${entityName}Page> list = ExcelImportUtil.importExcel(file.getInputStream(), ${entityName}Page.class, params);
+                for (${entityName}Page page : list) {
+                    ${entityName} po = new ${entityName}();
+                    BeanUtils.copyProperties(page, po);
+                    ${entityName?uncap_first}Service.saveMain(po, <#list subTables as sub>page.get${sub.entityName}List()<#if sub_has_next>,</#if></#list>);
+                }
+                return Result.ok("文件导入成功!数据行数:" + list.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(),e);
+                return Result.error("文件导入失败:"+e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.ok("文件导入失败!");
+    }
+}

+ 39 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai

@@ -0,0 +1,39 @@
+package ${bussiPackage}.${entityPackage}.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Data
+@TableName("${tableName}")
+public class ${entityName} implements Serializable {
+    private static final long serialVersionUID = 1L;
+    
+    <#list originalColumns as po>
+	/**${po.filedComment}*/
+	<#if po.fieldName == primaryKeyField>
+	@TableId(type = IdType.UUID)
+	</#if>
+  <#if po.fieldType =='java.util.Date'>
+	<#if po.fieldDbType =='date'>
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	<#elseif po.fieldDbType =='datetime'>
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	</#if>
+  </#if>
+	private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType}</#if> ${po.fieldName};
+	</#list>
+}

+ 49 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai

@@ -0,0 +1,49 @@
+<#list subTables as subTab>
+#segment#${subTab.entityName}.java
+package ${bussiPackage}.${entityPackage}.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * @Description: ${subTab.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Data
+@TableName("${subTab.tableName}")
+public class ${subTab.entityName} implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    <#list subTab.originalColumns as po>
+	/**${po.filedComment}*/
+	<#if po.fieldName == primaryKeyField>
+	@TableId(type = IdType.UUID)
+	<#else>
+  <#if po.fieldType =='java.util.Date'>
+	<#if po.fieldDbType =='date'>
+	@Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	<#elseif po.fieldDbType =='datetime'>
+	@Excel(name = "${po.filedComment}", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	</#if>
+	<#else>
+	<#if !subTab.foreignKeys?seq_contains(po.fieldName?cap_first)>
+    @Excel(name = "${po.filedComment}", width = 15)
+    </#if>
+  </#if>
+  </#if>
+	private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType}</#if> ${po.fieldName};
+	</#list>
+}
+</#list>

+ 17 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai

@@ -0,0 +1,17 @@
+package ${bussiPackage}.${entityPackage}.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import ${bussiPackage}.${entityPackage}.entity.${entityName};
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+public interface ${entityName}Mapper extends BaseMapper<${entityName}> {
+
+}

+ 21 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai

@@ -0,0 +1,21 @@
+<#list subTables as subTab>
+#segment#${subTab.entityName}Mapper.java
+package ${bussiPackage}.${entityPackage}.mapper;
+
+import java.util.List;
+import ${bussiPackage}.${entityPackage}.entity.${subTab.entityName};
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: ${subTab.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+public interface ${subTab.entityName}Mapper extends BaseMapper<${subTab.entityName}> {
+
+	public boolean deleteByMainId(String mainId);
+    
+	public List<${subTab.entityName}> selectByMainId(String mainId);
+}
+</#list>

+ 5 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="${bussiPackage}.${entityPackage}.mapper.${entityName}Mapper">
+
+</mapper>

+ 38 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml

@@ -0,0 +1,38 @@
+<#list subTables as subTab>
+<#assign originalForeignKeys = subTab.originalForeignKeys>
+        #segment#${subTab.entityName}Mapper.xml
+        <?xml version="1.0" encoding="UTF-8"?>
+        <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="${bussiPackage}.${entityPackage}.mapper.${subTab.entityName}Mapper">
+
+<delete id="deleteByMainId" parameterType="java.lang.String">
+    DELETE
+    FROM ${subTab.tableName}
+    WHERE
+    <#list originalForeignKeys as key>
+    <#if key?lower_case?index_of("${primaryKeyField}")!=-1>
+    ${key} = ${r'#'}{${primaryKeyField}}<#rt/>
+    <#else>
+    ${key} = ${r'#'}{${key}}<#rt/>
+</#if>
+<#if key_has_next>AND
+</#if>
+        </#list>
+        </delete>
+
+<select id="selectByMainId" parameterType="java.lang.String"
+        resultType="${bussiPackage}.${entityPackage}.entity.${subTab.entityName}">
+SELECT *
+FROM ${subTab.tableName}
+WHERE
+<#list originalForeignKeys as key>
+<#if key?lower_case?index_of("${primaryKeyField}")!=-1>
+${key} = ${r'#'}{${primaryKeyField}}<#rt/>
+<#else>
+${key} = ${r'#'}{${key}}<#rt/>
+</#if>
+<#if key_has_next>AND</#if>
+        </#list>
+        </select>
+        </mapper>
+        </#list>

+ 42 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai

@@ -0,0 +1,42 @@
+package ${bussiPackage}.${entityPackage}.service;
+
+<#list subTables as sub>
+import ${bussiPackage}.${entityPackage}.entity.${sub.entityName};
+</#list>
+import ${bussiPackage}.${entityPackage}.entity.${entityName};
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+public interface I${entityName}Service extends IService<${entityName}> {
+
+	/**
+	 * 添加一对多
+	 * 
+	 */
+	public void saveMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) ;
+	
+	/**
+	 * 修改一对多
+	 * 
+	 */
+	public void updateMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>);
+	
+	/**
+	 * 删除一对多
+	 */
+	public void delMain (String id);
+	
+	/**
+	 * 批量删除一对多
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+	
+}

+ 19 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai

@@ -0,0 +1,19 @@
+<#list subTables as subTab>
+#segment#I${subTab.entityName}Service.java
+package ${bussiPackage}.${entityPackage}.service;
+
+import ${bussiPackage}.${entityPackage}.entity.${subTab.entityName};
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: ${subTab.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+public interface I${subTab.entityName}Service extends IService<${subTab.entityName}> {
+
+	public List<${subTab.entityName}> selectByMainId(String mainId);
+}
+</#list>

+ 101 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai

@@ -0,0 +1,101 @@
+package ${bussiPackage}.${entityPackage}.service.impl;
+
+import ${bussiPackage}.${entityPackage}.entity.${entityName};
+<#list subTables as sub>
+import ${bussiPackage}.${entityPackage}.entity.${sub.entityName};
+</#list>
+<#list subTables as sub>
+import ${bussiPackage}.${entityPackage}.mapper.${sub.entityName}Mapper;
+</#list>
+import ${bussiPackage}.${entityPackage}.mapper.${entityName}Mapper;
+import ${bussiPackage}.${entityPackage}.service.I${entityName}Service;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Collection;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Service
+public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, ${entityName}> implements I${entityName}Service {
+
+	@Autowired
+	private ${entityName}Mapper ${entityName?uncap_first}Mapper;
+	<#list subTables as sub>
+	@Autowired
+	private ${sub.entityName}Mapper ${sub.entityName?uncap_first}Mapper;
+	</#list>
+	
+	@Override
+	@Transactional
+	public void saveMain(${entityName} ${entityName?uncap_first}, <#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
+		${entityName?uncap_first}Mapper.insert(${entityName?uncap_first});
+		<#list subTables as sub>
+		for(${sub.entityName} entity:${sub.entityName?uncap_first}List) {
+			<#list sub.foreignKeys as key>
+			//外键设置
+			<#if key?lower_case?index_of("${primaryKeyField}")!=-1>
+			entity.set${key?cap_first}(${entityName?uncap_first}.get${primaryKeyField?cap_first}());
+			<#else>
+			entity.set${key?cap_first}(${entityName?uncap_first}.get${key}());
+			</#if>
+			</#list>
+			${sub.entityName?uncap_first}Mapper.insert(entity);
+		}
+		</#list>
+	}
+
+	@Override
+	@Transactional
+	public void updateMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
+		${entityName?uncap_first}Mapper.updateById(${entityName?uncap_first});
+		
+		//1.先删除子表数据
+		<#list subTables as sub>
+		${sub.entityName?uncap_first}Mapper.deleteByMainId(${entityName?uncap_first}.getId());
+		</#list>
+		
+		//2.子表数据重新插入
+		<#list subTables as sub>
+		for(${sub.entityName} entity:${sub.entityName?uncap_first}List) {
+			<#list sub.foreignKeys as key>
+			//外键设置
+			<#if key?lower_case?index_of("${primaryKeyField}")!=-1>
+			entity.set${key?cap_first}(${entityName?uncap_first}.get${primaryKeyField?cap_first}());
+			<#else>
+			entity.set${key?cap_first}(${entityName?uncap_first}.get${key}());
+			</#if>
+			</#list>
+			${sub.entityName?uncap_first}Mapper.insert(entity);
+		}
+		</#list>
+	}
+
+	@Override
+	@Transactional
+	public void delMain(String id) {
+		<#list subTables as sub>
+		${sub.entityName?uncap_first}Mapper.deleteByMainId(id);
+		</#list>
+		${entityName?uncap_first}Mapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			<#list subTables as sub>
+			${sub.entityName?uncap_first}Mapper.deleteByMainId(id.toString());
+			</#list>
+			${entityName?uncap_first}Mapper.deleteById(id);
+		}
+	}
+	
+}

+ 30 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai

@@ -0,0 +1,30 @@
+<#list subTables as subTab>
+#segment#${subTab.entityName}ServiceImpl.java
+package ${bussiPackage}.${entityPackage}.service.impl;
+
+import ${bussiPackage}.${entityPackage}.entity.${subTab.entityName};
+import ${bussiPackage}.${entityPackage}.mapper.${subTab.entityName}Mapper;
+import ${bussiPackage}.${entityPackage}.service.I${subTab.entityName}Service;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: ${subTab.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Service
+public class ${subTab.entityName}ServiceImpl extends ServiceImpl<${subTab.entityName}Mapper, ${subTab.entityName}> implements I${subTab.entityName}Service {
+	
+	@Autowired
+	private ${subTab.entityName}Mapper ${subTab.entityName?uncap_first}Mapper;
+	
+	@Override
+	public List<${subTab.entityName}> selectByMainId(String mainId) {
+		return ${subTab.entityName?uncap_first}Mapper.selectByMainId(mainId);
+	}
+}
+</#list>

+ 49 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai

@@ -0,0 +1,49 @@
+package ${bussiPackage}.${entityPackage}.vo;
+
+import java.util.List;
+import ${bussiPackage}.${entityPackage}.entity.${entityName};
+<#list subTables as sub>
+import ${bussiPackage}.${entityPackage}.entity.${sub.entityName};
+</#list>
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * @Description: ${tableVo.ftlDescription}
+ * @Author: jeecg-boot
+ * @Date:   ${.now?string["yyyy-MM-dd"]}
+ * @Version: V1.0
+ */
+@Data
+public class ${entityName}Page {
+
+    <#list originalColumns as po>
+	/**${po.filedComment}*/
+	<#if po.fieldName == primaryKeyField>
+	<#else>
+    <#if po.fieldType =='java.util.Date'>
+  	<#if po.fieldDbType =='date'>
+  	@Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd")
+  	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+  	<#elseif po.fieldDbType =='datetime'>
+  	@Excel(name = "${po.filedComment}", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+  	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+  	</#if>
+  	<#else>
+  	@Excel(name = "${po.filedComment}", width = 15)
+    </#if>
+  </#if>
+	private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType}</#if> ${po.fieldName};
+	</#list>
+
+	<#list subTables as sub>
+	@ExcelCollection(name="${sub.ftlDescription}")
+	private List<${sub.entityName}> ${sub.entityName?uncap_first}List;
+	</#list>
+	
+}

+ 225 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei

@@ -0,0 +1,225 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+<#list columns as po><#rt/>
+<#if po.fieldName !='id' && po_index<= tableVo.searchFieldNum>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="${po.filedComment}">
+              <a-input placeholder="请输入${po.filedComment}" v-model="queryParam.${po.fieldName}"></a-input>
+            </a-form-item>
+          </a-col>
+</#if>
+</#list>
+          <a-col :md="6" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('${tableVo.ftlDescription}')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel">
+          <a-icon type="delete"/>删除
+          </a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 
+          <a-icon type="down" />
+        </a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i>
+        <span>已选择</span>
+        <a style="font-weight: 600">
+          {{ selectedRowKeys.length }}
+        </a>
+        <span>项</span>
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,type:type}"
+        @change="handleTableChange"
+        :customRow="clickThenCheck">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+            <a>删除</a>
+          </a-popconfirm>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+    
+    <a-tabs defaultActiveKey="1">
+    <#list subTables as sub><#rt/>
+      <a-tab-pane tab="${sub.ftlDescription}" :key="refKeys[${sub_index}]" :forceRender="true">
+        <${sub.entityName?uncap_first}-List ref="${sub.entityName}List"></${sub.entityName?uncap_first}-List>
+      </a-tab-pane>
+	</#list>
+    </a-tabs>
+
+    <!-- 表单区域 -->
+    <${entityName?uncap_first}-modal ref="modalForm" @ok="modalFormOk"/>
+
+  </a-card>
+</template>
+
+<script>
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import ${entityName}Modal from './modules/${entityName}Modal'
+  import {deleteAction} from '@/api/manage'
+  <#list subTables as sub><#rt/>
+  import ${sub.entityName}List from './${sub.entityName}List'
+  import ${sub.entityName}Modal from './modules/${sub.entityName}Modal'
+  </#list>
+
+  export default {
+    name: "${entityName}List",
+    mixins: [JeecgListMixin],
+    components: {
+      ${entityName}Modal,
+    <#list subTables as sub><#rt/>
+      ${sub.entityName}Modal,
+      ${sub.entityName}List,
+	</#list>
+    },
+    data () {
+      return {
+        refKeys: [<#list subTables as sub>'${sub.entityName?uncap_first}', </#list>],
+        description: '${tableVo.ftlDescription}管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key: 'rowIndex',
+            width: 60,
+            align: "center",
+            customRender:function (t, r, index) {
+              return parseInt(index)+1;
+            }
+          },
+<#list columns as po><#rt/>
+  <#if po.fieldName !='id'>
+          {
+            title: '${po.filedComment}',
+            align:"center",
+            dataIndex: '${po.fieldName}'
+          },
+  </#if>
+</#list>
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+ 
+        //操作url
+        type: "radio",
+        url: {
+          list: "/${entityPackage}/${entityName?uncap_first}/list",
+          delete: "/${entityPackage}/${entityName?uncap_first}/delete",
+          deleteBatch: "/${entityPackage}/${entityName?uncap_first}/deleteBatch",
+          exportXlsUrl: "${entityPackage}/${entityName?uncap_first}/exportXls",
+          importExcelUrl: "${entityPackage}/${entityName?uncap_first}/importExcel",
+         },
+      }
+    },
+    computed: {
+      importExcelUrl: function(){
+        <#noparse>return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;</#noparse>
+      }
+    },
+    methods: {
+		clickThenCheck(record) {
+        return {
+          on: {
+            click: () => {
+              this.onSelectChange(record.id.split(","), [record]);
+            }
+          }
+        };
+      },
+      onSelectChange(selectedRowKeys, selectionRows) {
+        this.selectedRowKeys = selectedRowKeys;
+        this.selectionRows = selectionRows;
+        <#list subTables as sub><#rt/>
+        this.$refs.${sub.entityName}List.getMain(this.selectedRowKeys[0]);
+        </#list>
+      },
+      onClearSelected() {
+        this.selectedRowKeys = [];
+        this.selectionRows = [];
+        <#list subTables as sub><#rt/>
+        this.$refs.${sub.entityName}List.queryParam.mainId = null;
+        this.$refs.${sub.entityName}List.loadData();
+        this.$refs.${sub.entityName}List.selectedRowKeys = [];
+        this.$refs.${sub.entityName}List.selectionRows = [];
+        </#list>
+      },
+
+      handleDelete: function (id) {
+        var that = this;
+        deleteAction(that.url.delete, {id: id}).then((res) => {
+          if (res.success) {
+            that.$message.success(res.message);
+            that.loadData();
+            <#list subTables as sub><#rt/>
+            this.$refs.${sub.entityName}List.loadData();
+            </#list>
+          } else {
+            that.$message.warning(res.message);
+          }
+        });
+      },
+      searchQuery:function(){
+        this.selectedRowKeys = [];
+        this.selectionRows = [];
+        <#list subTables as sub><#rt/>
+        this.$refs.${sub.entityName}List.queryParam.mainId = null;
+        this.$refs.${sub.entityName}List.loadData();
+        this.$refs.${sub.entityName}List.selectedRowKeys = [];
+        this.$refs.${sub.entityName}List.selectionRows = [];
+        </#list>
+        this.loadData();
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>

+ 140 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/[1-n]List.vuei

@@ -0,0 +1,140 @@
+<#list subTables as subTab>
+#segment#${subTab.entityName}List.vue
+<template>
+  <a-card :bordered="false">
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator" :md="24" :sm="24" style="margin: 0px 0px 20px 0px">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel">
+            <a-icon type="delete"/>删除
+          </a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作
+          <a-icon type="down"/>
+        </a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+          <a-divider type="vertical"/>
+          <a-dropdown>
+            <a class="ant-dropdown-link">
+              更多 <a-icon type="down"/>
+            </a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a href="javascript:;" @click="handleDetail(record)">详情</a>
+              </a-menu-item>
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <${subTab.entityName}-modal ref="modalForm" @ok="modalFormOk"/>
+  </a-card>
+</template>
+
+<script>
+  import ${subTab.entityName}Modal from './modules/${subTab.entityName}Modal'
+  import {JeecgListMixin} from '@/mixins/JeecgListMixin'
+  import {getAction} from '@/api/manage'
+
+  export default {
+    name: "${subTab.entityName}List",
+    mixins: [JeecgListMixin],
+    components: {
+      ${subTab.entityName}Modal,
+    },
+    data() {
+      return {
+        description: '信息',
+        // 表头
+        columns: [
+        <#list subTab.colums as po><#rt/>
+  <#if po.fieldName !='id' && subTab.foreignKeys[0]?uncap_first != po.fieldName>
+          {
+            title: '${po.filedComment}',
+            align:"center",
+            dataIndex: '${po.fieldName}'
+          },
+  </#if>
+</#list>
+         {
+          title: '操作',
+          key: 'operation',
+          align: "center",
+          width: 130,
+          scopedSlots: {customRender: 'action'},
+        }],
+        url: {
+          list: "/${entityPackage}/${entityName?uncap_first}/list${subTab.entityName}ByMainId",
+          delete: "/${entityPackage}/${entityName?uncap_first}/delete${subTab.entityName}",
+          deleteBatch: "/${entityPackage}/${entityName?uncap_first}/deleteBatch${subTab.entityName}",
+        }
+      }
+    },
+    methods: {
+      loadData(arg) {
+        if (arg === 1) {
+          this.ipagination.current = 1;
+        }
+        var params = this.getQueryParams();
+        getAction(this.url.list, {mainId: params.mainId}).then((res) => {
+          if (res.success) {
+            this.dataSource = res.result;
+          } else {
+            this.dataSource = null;
+          }
+        })
+      },
+      getMain(mainId) {
+        this.queryParam.mainId = mainId;
+        this.loadData(1);
+      },
+      handleAdd: function () {
+        this.$refs.modalForm.add(this.queryParam.mainId);
+        this.$refs.modalForm.title = "添加${subTab.ftlDescription}";
+      },
+    }
+  }
+</script>
+<style scoped>
+  .ant-card {
+    margin-left: -30px;
+    margin-right: -30px;
+  }
+</style>
+</#list>

+ 167 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei

@@ -0,0 +1,167 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="1000"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <!-- 主表单区域 -->
+      <a-form :form="form">
+		<#list columns as po><#rt/>
+        <#if po.fieldName !='id'><#rt/>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="${po.filedComment}">
+          <#if po.fieldType =='date'>
+          <a-date-picker v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#elseif po.fieldType =='datetime'>
+          <a-date-picker showTime format="YYYY-MM-DD HH:mm:ss" v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#elseif "int,decimal,double,"?contains(po.fieldType)>
+          <a-input-number v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#else>
+          <a-input placeholder="请输入${po.filedComment}" v-decorator="['${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          </#if>
+        </a-form-item>
+        </#if>
+        </#list>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import {httpAction} from '@/api/manage'
+  import JDate from '@/components/jeecg/JDate'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: '${entityName}Modal',
+    components: {
+      JDate
+    },
+    data() {
+      return {
+        title: "操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: {span: 24},
+          sm: {span: 5},
+        },
+        wrapperCol: {
+          xs: {span: 24},
+          sm: {span: 16},
+        },
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules: {
+<#list columns as po>
+  <#if po.fieldName !='id'>
+    <#if po.nullable =='N'>
+          ${po.fieldName}: { rules: [{ required: true, message: '请输入${po.filedComment}!' }] },
+    </#if>
+  </#if>
+</#list>
+        },
+        url: {
+          add: "/${entityPackage}/${entityName?uncap_first}/add",
+          edit: "/${entityPackage}/${entityName?uncap_first}/edit",
+<#list subTables as sub><#rt/>
+          ${sub.entityName?uncap_first}List: '/${entityPackage}/${entityName?uncap_first}/query${sub.entityName}ByMainId',
+</#list>
+        }
+      }
+    },
+    methods: {
+      add() {
+        this.edit({});
+      },
+      edit(record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        //初始化明细表数据
+        console.log(this.model.id)
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model, <#list columns as col>'${col.fieldName}', </#list>))
+          // 时间格式化
+<#list columns as col><#rt/>
+	<#if col.fieldName !='id' && (col.fieldType =='date' || col.fieldType =='datetime')>
+          this.form.setFieldsValue({ ${col.fieldName}: this.model.${col.fieldName} ? moment(this.model.${col.fieldName}) : null })
+	</#if>
+</#list>  
+        });
+      },
+      close() {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk() {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if (!this.model.id) {
+              httpurl += this.url.add;
+              method = 'post';
+            } else {
+              httpurl += this.url.edit;
+              method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            <#list columns as po>
+            <#if po.fieldName !='id' && po.fieldType =='date'>
+            formData.${po.fieldName} = formData.${po.fieldName}?formData.${po.fieldName}.format():null;
+            <#elseif po.fieldName !='id' && po.fieldType =='datetime'>
+            formData.${po.fieldName} = formData.${po.fieldName}?formData.${po.fieldName}.format('YYYY-MM-DD HH:mm:ss'):null;
+            </#if>
+            </#list>
+            httpAction(httpurl, formData, method).then((res) => {
+              if (res.success) {
+                 that.$message.success(res.message);
+                 that.$emit('ok');
+               } else {
+                 that.$message.warning(res.message);
+               }
+             }).finally(() => {
+               that.confirmLoading = false;
+               that.close();
+             })
+           }
+        })
+      },
+      handleCancel() {
+        this.close()
+      }
+    }
+  }
+</script>
+
+<style scoped>
+  .ant-btn {
+    padding: 0 10px;
+    margin-left: 3px;
+  }
+
+  .ant-form-item-control {
+    line-height: 0px;
+  }
+
+  /** 主表单行间距 */
+  .ant-form .ant-form-item {
+    margin-bottom: 10px;
+  }
+
+  /** Tab页面行间距 */
+  .ant-tabs-content .ant-form-item {
+    margin-bottom: 0px;
+  }
+</style>

+ 183 - 0
jeecg-boot-module-system/target/classes/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Modal.vuei

@@ -0,0 +1,183 @@
+<#list subTables as subTab>
+#segment#${subTab.entityName}Modal.vue
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :okButtonProps="{ props: {disabled: disableSubmit} }"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+<#list subTab.colums as po><#rt/>
+
+<#if po.fieldName !='id'><#rt/>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="${po.filedComment}"
+          <#if subTab.foreignKeys[0]?uncap_first == po.fieldName>
+          :hidden="hiding"
+          </#if>
+          hasFeedback>
+          <#if po.fieldType =='date'>
+          <a-date-picker v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#elseif po.fieldType =='datetime'>
+          <a-date-picker showTime format="YYYY-MM-DD HH:mm:ss" v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#elseif "int,decimal,double,"?contains(po.fieldType)>
+          <a-input-number v-decorator="[ '${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          <#else>
+          <#if subTab.foreignKeys[0]?uncap_first == po.fieldName>
+          <a-input placeholder="请输入${po.filedComment}" v-decorator="['${po.fieldName}', {'initialValue':this.mainId}]" />
+          <#else>
+          <a-input placeholder="请输入${po.filedComment}" v-decorator="['${po.fieldName}', <#if po.nullable =='N'>validatorRules.${po.fieldName} <#else>{}</#if>]" />
+          </#if>
+          </#if>
+        </a-form-item>
+</#if>
+</#list>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import {httpAction} from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from 'moment'
+  import JDate from '@/components/jeecg/JDate'
+
+  export default {
+    components: {
+      JDate
+    },
+    name: '${subTab.entityName}Modal',
+    data() {
+      return {
+        title: '操作',
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: {span: 24},
+          sm: {span: 5}
+        },
+        wrapperCol: {
+          xs: {span: 24},
+          sm: {span: 16}
+        },
+        moment,
+        format: 'YYYY-MM-DD HH:mm:ss',
+        disableSubmit: false,
+        mainId: '',
+        hiding: false,
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules: {
+  <#list subTab.colums as po>
+  <#if po.fieldName !='id' && subTab.foreignKeys[0]?uncap_first != po.fieldName>
+    <#if po.nullable =='N'>
+          ${po.fieldName}: { rules: [{ required: true, message: '请输入${po.filedComment}!' }] },
+    </#if>
+  </#if>
+</#list>
+        },
+        url: {
+          add: '/${entityPackage}/${entityName?uncap_first}/add${subTab.entityName}',
+          edit: '/${entityPackage}/${entityName?uncap_first}/edit${subTab.entityName}'
+        }
+      }
+    },
+    created() {
+    },
+    methods: {
+      add(mainId) {
+        if (mainId) {
+          this.edit({mainId}, '')
+        } else {
+          this.$message.warning('请选择一条数据')
+        }
+      },
+      detail(record) {
+        this.edit(record, 'd')
+      },
+      edit(record, v) {
+        if (v == 'e') {
+          this.hiding = false;
+          this.disableSubmit = false;
+        } else if (v == 'd') {
+          this.hiding = false;
+          this.disableSubmit = true;
+        } else {
+          this.hiding = true;
+          this.disableSubmit = false;
+        }
+        this.form.resetFields();
+        this.mainId = record.mainId;
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model, <#list subTab.colums as col>'${col.fieldName}', </#list>))
+          // 时间格式化
+<#list subTab.colums as col><#rt/>
+	<#if col.fieldName !='id' && (col.fieldType =='date' || col.fieldType =='datetime')>
+          this.form.setFieldsValue({ ${col.fieldName}: this.model.${col.fieldName} ? moment(this.model.${col.fieldName}) : null })
+	</#if>
+</#list>  
+        })
+      },
+      close() {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk() {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if (!this.model.id) {
+              httpurl += this.url.add;
+              method = 'post';
+            } else {
+              httpurl += this.url.edit;
+              method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            <#list subTab.colums as po>
+            <#if po.fieldName !='id' && po.fieldType =='date'>
+            formData.${po.fieldName} = formData.${po.fieldName}?formData.${po.fieldName}.format():null;
+            <#elseif po.fieldName !='id' && po.fieldType =='datetime'>
+            formData.${po.fieldName} = formData.${po.fieldName}?formData.${po.fieldName}.format('YYYY-MM-DD HH:mm:ss'):null;
+            </#if>
+            </#list>
+            httpAction(httpurl, formData, method).then((res) => {
+              if (res.success) {
+                that.$message.success(res.message);
+                that.$emit('ok');
+              } else {
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+          }
+        })
+      },
+      handleCancel() {
+        this.close();
+      }
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>
+</#list>

+ 23 - 0
jeecg-boot-module-system/target/classes/jeecg/jeecg_config.properties

@@ -0,0 +1,23 @@
+#code_generate_project_path
+project_path=D:\\module
+#bussi_package[User defined]
+bussi_package=org.jeecg.modules
+#default code path
+#source_root_package=src
+#webroot_package=WebRoot
+#maven code path
+source_root_package=src.main.java
+webroot_package=src.main.webapp
+#ftl resource url
+templatepath=/jeecg/code-template
+system_encoding=utf-8
+#db Table id [User defined]
+db_table_id=id
+#db convert flag[true/false]
+db_filed_convert=true
+#page Search Field num [User defined]
+page_search_filed_num=1
+#page_filter_fields
+page_filter_fields=create_time,create_by,update_time,update_by
+
+

+ 24 - 0
jeecg-boot-module-system/target/classes/jeecg/jeecg_database.properties

@@ -0,0 +1,24 @@
+#mysql 
+diver_name=com.mysql.jdbc.Driver
+url=jdbc:mysql://localhost:3306/jeecg-boot?useUnicode=true&characterEncoding=UTF-8
+username=root
+password=root
+database_name=jeecg-boot
+#oracle
+#diver_name=oracle.jdbc.driver.OracleDriver
+#url=jdbc:oracle:thin:@192.168.1.200:1521:ORCL
+#username=scott
+#password=tiger
+#database_name=ORCL
+#postgre
+#diver_name=org.postgresql.Driver
+#url=jdbc:postgresql://localhost:5432/jeecg
+#username=postgres
+#password=postgres
+#database_name=jeecg
+#SQLServer2005\u4ee5\u4e0a
+#diver_name=org.hibernate.dialect.SQLServerDialect
+#url=jdbc:sqlserver://192.168.1.200:1433;DatabaseName=jeecg
+#username=sa
+#password=SA
+#database_name=jeecg

+ 96 - 0
jeecg-boot-module-system/target/classes/logback-spring.xml

@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration debug="false">
+    <!--定义日志文件的存储地址 -->
+    <property name="LOG_HOME" value="../logs"/>
+
+    <property name="COLOR_PATTERN"
+              value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)"/>
+    <!-- 控制台输出 -->
+    <appender name="STDOUT"
+              class="ch.qos.logback.core.ConsoleAppender">
+        <encoder
+                class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <!-- 按照每天生成日志文件 -->
+    <appender name="FILE"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy
+                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--日志文件输出的文件名 -->
+            <FileNamePattern>${LOG_HOME}/jeecgboot.%d{yyyy-MM-dd}.log
+            </FileNamePattern>
+            <!--日志文件保留天数 -->
+            <MaxHistory>30</MaxHistory>
+        </rollingPolicy>
+        <encoder
+                class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
+        </encoder>
+        <!--日志文件最大的大小 -->
+        <triggeringPolicy
+                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+            <MaxFileSize>10MB</MaxFileSize>
+        </triggeringPolicy>
+    </appender>
+
+    <!-- 生成html格式日志开始 -->
+    <appender name="HTML" class="ch.qos.logback.core.FileAppender">
+        <!-- 过滤器,只记录WARN级别的日志 -->
+        <!-- <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>info</level>
+            <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> -->
+
+        <encoder
+                class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+            <layout class="ch.qos.logback.classic.html.HTMLLayout">
+                <pattern>%p%d%msg%M%F{32}%L</pattern>
+            </layout>
+        </encoder>
+        <file>${LOG_HOME}/error-log.html</file>
+    </appender>
+    <!-- 生成html格式日志结束 -->
+
+    <!-- 每天生成一个html格式的日志开始 -->
+    <appender name="FILE_HTML"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy
+                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--日志文件输出的文件名 -->
+            <FileNamePattern>${LOG_HOME}/jeecgboot.%d{yyyy-MM-dd}.html
+            </FileNamePattern>
+            <!--日志文件保留天数 -->
+            <MaxHistory>30</MaxHistory>
+        </rollingPolicy>
+        <encoder
+                class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+            <layout class="ch.qos.logback.classic.html.HTMLLayout">
+                <pattern>%p%d%msg%M%F{32}%L</pattern>
+            </layout>
+        </encoder>
+        <!--日志文件最大的大小 -->
+        <triggeringPolicy
+                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+            <MaxFileSize>10MB</MaxFileSize>
+        </triggeringPolicy>
+    </appender>
+    <!-- 每天生成一个html格式的日志结束 -->
+
+    <!--myibatis log configure -->
+    <logger name="com.apache.ibatis" level="TRACE"/>
+    <logger name="java.sql.Connection" level="DEBUG"/>
+    <logger name="java.sql.Statement" level="DEBUG"/>
+    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
+
+    <!-- 日志输出级别 -->
+    <root level="INFO">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="FILE"/>
+        <appender-ref ref="HTML"/>
+        <appender-ref ref="FILE_HTML"/>
+    </root>
+
+</configuration>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/AdvertiserMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.ctop.mapper.AdvertiserMapper">
+
+</mapper>

+ 4 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/CTopOauthTokenMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.ctop.mapper.CTopOauthTokenMapper">
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/CTopToutiaoAdvertisePlanMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.ctop.mapper.CTopToutiaoAdvertisePlanMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/CTopToutiaoAdvertiserMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.ctop.mapper.CTopToutiaoAdvertiserMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/CTopToutiaoCampaignMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.ctop.mapper.CTopToutiaoCampaignMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/CtopToutiaoAdvertiserBudgetMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.ctop.mapper.CtopToutiaoAdvertiserBudgetMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/CtopToutiaoBudgetTemplateMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.ctop.mapper.CtopToutiaoBudgetTemplateMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/ToutiaoCreativeMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.ctop.mapper.ToutiaoCreativeMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/ctop/mapper/xml/ToutiaoCreativeMaterialMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.ctop.mapper.ToutiaoCreativeMaterialMapper">
+
+</mapper>

+ 9 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/demo/test/mapper/xml/JeecgDemoMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.demo.test.mapper.JeecgDemoMapper">
+
+    <!-- 根据用户名查询 -->
+    <select id="getDemoByName" resultType="org.jeecg.modules.demo.test.entity.JeecgDemo">
+		select * from  demo  where name = #{name}
+	</select>
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderCustomerMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.demo.test.mapper.JeecgOrderCustomerMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderMainMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.demo.test.mapper.JeecgOrderMainMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderTicketMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.demo.test.mapper.JeecgOrderTicketMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/demo/test/mapper/xml/JoaDemoMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.demo.test.mapper.JoaDemoMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/industry/mapper/xml/IndustryMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.industry.mapper.IndustryMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/media/mapper/xml/MediaMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.media.mapper.MediaMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/message/mapper/xml/SysMessageMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.message.mapper.SysMessageMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/message/mapper/xml/SysMessageTemplateMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.message.mapper.SysMessageTemplateMapper">
+
+</mapper>

+ 7 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/ngalain/mapper/xml/NgAlainMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.ngalain.mapper.NgAlainMapper">
+    <select id="getDictByTable" parameterType="String" resultType="java.util.HashMap">
+		   select ${key} as 'label',${value} as 'value' from ${table}
+	</select>
+</mapper>

+ 9 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/quartz/mapper/xml/QuartzJobMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.quartz.mapper.QuartzJobMapper">
+
+    <!-- 根据jobClassName查询 -->
+    <select id="findByJobClassName" resultType="org.jeecg.modules.quartz.entity.QuartzJob">
+		select * from  sys_quartz_job  where job_class_name = #{jobClassName}
+	</select>
+</mapper>

+ 37 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/mapper/xml/SysAnnouncementMapper.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.system.mapper.SysAnnouncementMapper">
+
+    <resultMap id="SysAnnouncement" type="org.jeecg.modules.system.entity.SysAnnouncement">
+        <result column="id" property="id" jdbcType="VARCHAR"/>
+        <result column="titile" property="titile" jdbcType="VARCHAR"/>
+        <result column="msg_content" property="msgContent" jdbcType="VARCHAR"/>
+        <result column="start_time" property="startTime" jdbcType="TIMESTAMP"/>
+        <result column="end_time" property="endTime" jdbcType="TIMESTAMP"/>
+        <result column="sender" property="sender" jdbcType="VARCHAR"/>
+        <result column="priority" property="priority" jdbcType="VARCHAR"/>
+        <result column="msg_category" property="msgCategory" jdbcType="VARCHAR"/>
+        <result column="msg_type" property="msgType" jdbcType="VARCHAR"/>
+        <result column="send_status" property="sendStatus" jdbcType="VARCHAR"/>
+        <result column="send_time" property="sendTime" jdbcType="VARCHAR"/>
+        <result column="cancel_time" property="cancelTime" jdbcType="VARCHAR"/>
+        <result column="del_flag" property="delFlag" jdbcType="VARCHAR"/>
+        <result column="create_by" property="createBy" jdbcType="VARCHAR"/>
+        <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
+        <result column="update_by" property="updateBy" jdbcType="VARCHAR"/>
+        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
+        <result column="user_ids" property="userIds" jdbcType="VARCHAR"/>
+    </resultMap>
+
+
+    <select id="querySysCementListByUserId" parameterType="String" resultMap="SysAnnouncement">
+	   select sa.* from sys_announcement sa,sys_announcement_send sas 
+	   where sa.id = sas.annt_id 
+	   and sa.send_status = '1'
+	   and sa.del_flag = '0'
+	   and sas.user_id = #{userId}
+	   and sa.msg_category = #{msgCategory}
+	   and sas.read_flag = '0'
+	</select>
+
+</mapper>

+ 48 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/mapper/xml/SysAnnouncementSendMapper.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.system.mapper.SysAnnouncementSendMapper">
+
+    <resultMap id="AnnouncementSendModel" type="org.jeecg.modules.system.model.AnnouncementSendModel">
+        <result column="id" property="id" jdbcType="VARCHAR"/>
+        <result column="annt_id" property="anntId" jdbcType="VARCHAR"/>
+        <result column="user_id" property="userId" jdbcType="VARCHAR"/>
+        <result column="titile" property="titile" jdbcType="VARCHAR"/>
+        <result column="msg_content" property="msgContent" jdbcType="VARCHAR"/>
+        <result column="sender" property="sender" jdbcType="VARCHAR"/>
+        <result column="priority" property="priority" jdbcType="VARCHAR"/>
+        <result column="msg_category" property="msgCategory" jdbcType="VARCHAR"/>
+        <result column="send_time" property="sendTime" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <select id="queryByUserId" parameterType="String" resultType="String">
+	   select sas.annt_id from sys_announcement_send sas 
+	   where sas.user_id = #{userId}
+	</select>
+
+    <select id="getMyAnnouncementSendList" parameterType="Object" resultMap="AnnouncementSendModel">
+        select
+        sas.id,
+        sas.annt_id,
+        sas.user_id,
+        sas.read_flag,
+        sa.titile as titile,
+        sa.msg_content as msg_content,
+        sa.sender as sender,
+        sa.priority as priority,
+        sa.msg_category,
+        sa.send_time as send_time
+        from sys_announcement_send sas
+        left join sys_announcement sa ON sas.annt_id = sa.id
+        where sa.send_status = '1'
+        and sa.del_flag = '0'
+        and sas.user_id = #{announcementSendModel.userId}
+        <if test="announcementSendModel.titile !=null and announcementSendModel.titile != ''">
+            and sa.titile = #{announcementSendModel.titile}
+        </if>
+        <if test="announcementSendModel.sender !=null and announcementSendModel.sender != ''">
+            and sa.sender = #{announcementSendModel.sender}
+        </if>
+        order by sa.send_time desc
+    </select>
+
+</mapper>

+ 16 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/mapper/xml/SysCategoryMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.system.mapper.SysCategoryMapper">
+
+    <select id="queryListByPid" parameterType="String" resultType="org.jeecg.modules.system.model.TreeSelectModel">
+		select code,
+			   name as 'title',
+			   id as 'key',
+			   (case has_child when '1' then 0 else 1 end) as isLeaf,
+			   pid as parentId
+			   from sys_category
+			where pid = #{pid}
+	</select>
+
+
+</mapper>

+ 0 - 0
jeecg-boot-module-system/target/classes/org/jeecg/modules/system/mapper/xml/SysDataLogMapper.xml


Некоторые файлы не были показаны из-за большого количества измененных файлов