Sfoglia il codice sorgente

feat(server): 添加后端框架

Go 6 anni fa
parent
commit
5567207f06
100 ha cambiato i file con 8631 aggiunte e 0 eliminazioni
  1. 0 0
      .githooks/.gitkeep
  2. 1 0
      deploy/ssh/qianxing.ini
  3. 0 0
      deploy/upload.sh
  4. 0 0
      deploy/uploaded.sh
  5. 6 0
      project.ini
  6. 16 0
      server/.gitignore
  7. 49 0
      server/README.md
  8. 114 0
      server/build.gradle
  9. 71 0
      server/data/build.gradle
  10. 32 0
      server/data/src/main/java/com/qxgmat/data/MybatisConfig.java
  11. 10 0
      server/data/src/main/java/com/qxgmat/data/constants/SessionKey.java
  12. 14 0
      server/data/src/main/java/com/qxgmat/data/constants/enums/DeleteStatus.java
  13. 14 0
      server/data/src/main/java/com/qxgmat/data/constants/enums/OpenStatus.java
  14. 9 0
      server/data/src/main/java/com/qxgmat/data/constants/enums/PaperModule.java
  15. 9 0
      server/data/src/main/java/com/qxgmat/data/constants/enums/QuestionModule.java
  16. 9 0
      server/data/src/main/java/com/qxgmat/data/constants/enums/ServiceKey.java
  17. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/AdMapper.java
  18. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/ArticleMapper.java
  19. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/ExaminationMapper.java
  20. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/ExaminationStructMapper.java
  21. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/ExerciseMapper.java
  22. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/ExerciseStructMapper.java
  23. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/FeedbackErrorMapper.java
  24. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/FlywaySchemaHistoryMapper.java
  25. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/HomeworkPreviewMapper.java
  26. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/ManagerLogMapper.java
  27. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/ManagerMapper.java
  28. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/ManagerRoleMapper.java
  29. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/PayMapper.java
  30. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/QuestionMapper.java
  31. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/RankMapper.java
  32. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/SentenceArticleMapper.java
  33. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/SentenceCodeMapper.java
  34. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/SentenceMapper.java
  35. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/SentencePaperMapper.java
  36. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/SentenceQuestionMapper.java
  37. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/SentenceStructMapper.java
  38. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/SettingMapper.java
  39. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserAskMapper.java
  40. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserCollectArticleMapper.java
  41. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserCollectMapper.java
  42. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserCollectQuestionMapper.java
  43. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserExaminationMapper.java
  44. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserExerciseMapper.java
  45. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserMapper.java
  46. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserMessageMapper.java
  47. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserNoteMapper.java
  48. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserPaperMapper.java
  49. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserPaperQuestionMapper.java
  50. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserPayMapper.java
  51. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserQuestionMapper.java
  52. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserReportMapper.java
  53. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserSentenceProcessMapper.java
  54. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserServiceMapper.java
  55. 274 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/Ad.java
  56. 115 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/Article.java
  57. 63 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/Examination.java
  58. 203 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/ExaminationStruct.java
  59. 63 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/Exercise.java
  60. 238 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/ExerciseStruct.java
  61. 212 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/FeedbackError.java
  62. 297 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/FlywaySchemaHistory.java
  63. 221 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/HomeworkPreview.java
  64. 247 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/Manager.java
  65. 230 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/ManagerLog.java
  66. 185 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/ManagerRole.java
  67. 625 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/Pay.java
  68. 378 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/Question.java
  69. 63 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/Rank.java
  70. 63 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/Sentence.java
  71. 203 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/SentenceArticle.java
  72. 186 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/SentenceCode.java
  73. 63 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/SentencePaper.java
  74. 168 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/SentenceQuestion.java
  75. 63 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/SentenceStruct.java
  76. 133 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/Setting.java
  77. 851 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/User.java
  78. 256 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserAsk.java
  79. 195 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserCollect.java
  80. 63 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserCollectArticle.java
  81. 63 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserCollectQuestion.java
  82. 63 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserExamination.java
  83. 63 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserExercise.java
  84. 124 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserMessage.java
  85. 221 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserNote.java
  86. 308 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserPaper.java
  87. 168 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserPaperQuestion.java
  88. 125 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserPay.java
  89. 300 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserQuestion.java
  90. 396 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserReport.java
  91. 203 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserSentenceProcess.java
  92. 186 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserService.java
  93. 22 0
      server/data/src/main/java/com/qxgmat/data/dao/mapping/AdMapper.xml
  94. 18 0
      server/data/src/main/java/com/qxgmat/data/dao/mapping/ArticleMapper.xml
  95. 10 0
      server/data/src/main/java/com/qxgmat/data/dao/mapping/ExaminationMapper.xml
  96. 20 0
      server/data/src/main/java/com/qxgmat/data/dao/mapping/ExaminationStructMapper.xml
  97. 10 0
      server/data/src/main/java/com/qxgmat/data/dao/mapping/ExerciseMapper.xml
  98. 21 0
      server/data/src/main/java/com/qxgmat/data/dao/mapping/ExerciseStructMapper.xml
  99. 32 0
      server/data/src/main/java/com/qxgmat/data/dao/mapping/FeedbackErrorMapper.xml
  100. 0 0
      server/data/src/main/java/com/qxgmat/data/dao/mapping/FlywaySchemaHistoryMapper.xml

README.md → .githooks/.gitkeep


+ 1 - 0
deploy/ssh/qianxing.ini

@@ -0,0 +1 @@
+DEPLOY_PATH=/data

+ 0 - 0
deploy/upload.sh


+ 0 - 0
deploy/uploaded.sh


+ 6 - 0
project.ini

@@ -0,0 +1,6 @@
+
+PROJECT=qianxing
+LANGUAGE=node
+MULTIPLE=y
+ENV=production
+BRANCH=master

+ 16 - 0
server/.gitignore

@@ -0,0 +1,16 @@
+*.class
+
+# Package Files #
+*.jar
+*.war
+*.ear
+!libs/*.jar
+logs
+*.iml
+.idea/
+/target
+.DS_Store
+gradle
+.gradle/
+build/
+out/

+ 49 - 0
server/README.md

@@ -0,0 +1,49 @@
+# 架构说明
+
+## 依赖
+* Gradle
+* SpringBoot
+* Mybatis
+* Shiro
+* Druid
+
+## 模块划分
+* Root: 根项目用户管理依赖关系,包括:SpringBoot,以及资源打包,各模块之间的依赖设置
+* tools: 工具类库,提供无业务逻辑的工具,包括:mybatis-example,shiro-redis,以及各类第三方服务
+* data: 数据管理类库,主要提供mybatis,mybatis-generator,flyway的配置管理
+* xxx-api: api提供应用,提供SpringBoot的Application的启动支持
+
+## 配置管理
+* xx-api需设定可支持的配置文件
+```
+spring:
+  profiles:
+    active: runtime, tools, data
+```
+    * runtime: 可根据运行环境加载对应的配置文件,通过profile中进行不同环境的配置管理
+    * tools,data: 对应自模块的配置信息
+* 支持各个模块建立独立的配置文件
+
+## 缓存
+* 通过Redis+Ehcache实现不同需求的缓存
+```
+@Cacheable(cacheNames="redis-SSAccountInfo", key="'SSAccountInfo_' + #root.args[0].accountId", unless="#result==null")
+@Cacheable(cacheNames="SSAccountInfo",  key="'SSAccountInfo_' + #root.args[0].accountId", unless="#result==null")
+```
+* 通过前缀进行划分
+
+## 数据库管理
+* 通过Flyway进行版本管理
+* 配置在data模块中
+* 版本sql存放在resources/db/migration中
+* 通过Mybatis-generator生成所需的Dao、Mapping、Entity、Example
+* tools模块中包含通用Example
+* 建议通过Service提供数据支持(tools中提供Service类库用于继承),避免在generator的文件中变更
+
+## Api支持
+* 通过Swagger生成所有api文档用于对接
+* 使用注解的方式在controller中说明接口信息
+* shiro打开对于接口文档的访问权限
+```
+
+```

+ 114 - 0
server/build.gradle

@@ -0,0 +1,114 @@
+
+apply from: 'dependencyDefine.gradle'
+
+// SpringBoot
+buildscript {
+    ext {
+        springBootVersion = '2.1.3.RELEASE'
+    }
+    repositories {
+        mavenLocal()
+//		maven { url = "http://maven.aliyun.com/nexus/content/groups/public" }
+        mavenCentral()
+        maven {
+            url "https://plugins.gradle.org/m2/"
+        }
+    }
+    dependencies {
+        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
+    }
+}
+
+subprojects {
+    apply plugin: 'java'
+    apply plugin: "idea"
+//    apply plugin: 'eclipse'
+    apply plugin: 'org.springframework.boot'
+    apply plugin: 'io.spring.dependency-management'
+
+    group = 'com.qxgmat'
+    version = '0.0.1-SNAPSHOT'
+
+    sourceCompatibility = 1.8
+    targetCompatibility = 1.8
+
+    tasks.withType(JavaCompile) {
+        options.encoding = 'UTF-8'
+    }
+
+    repositories {
+        mavenLocal()
+        maven { url = "http://maven.aliyun.com/nexus/content/groups/public" }
+        mavenCentral()
+    }
+    dependencies {
+        compile("org.springframework.boot:spring-boot-starter")
+        compile("org.springframework.boot:spring-boot-starter-web")
+        compile('org.springframework.boot:spring-boot-starter-aop')
+        compile('org.springframework.boot:spring-boot-starter-jdbc')
+        compile('org.springframework.boot:spring-boot-starter-data-jpa')
+//	compile("org.springframework.boot:spring-boot-starter-security")
+        compile("org.springframework.boot:spring-boot-starter-actuator")
+        compile('org.springframework.boot:spring-boot-starter-logging')
+        compile('org.springframework.boot:spring-boot-starter-cache')
+        compile('org.springframework.boot:spring-boot-starter-data-redis')
+        compile("org.springframework.boot:spring-boot-devtools")
+
+        compile('mysql:mysql-connector-java')
+
+        testCompile("org.springframework.boot:spring-boot-starter-test")
+
+        compile fileTree(dir:'libs',include:['*.jar'])
+    }
+
+
+//自定义环境 start
+    def env = System.getProperty("env") ?: "dev"
+    sourceSets {
+        main {
+            resources {
+                srcDirs = ["src/main/resources", "src/main/profile/$env"]
+            }
+        }
+    }
+//自定义环境 end
+
+}
+// 如果不使用spring boot plugin,也可以使用spring boot dependency management,只需要导入SpringBootPlugin类的BOM_COORDINATES常量
+//dependencyManagement {
+//	imports {
+//		mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
+//	}
+//}
+
+//如果module中名称有包含api的,则加入下面的内容
+configure(subprojects.findAll {it.name.contains('api')}) {
+    apply plugin: 'war'
+    apply plugin: 'application'
+    springBoot {
+        buildInfo()
+    }
+
+//    war {
+//        manifest {
+//            attributes("Implementation-Title": "Gradle")
+//        }
+//    }
+
+    dependencies {
+//    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
+        providedRuntime 'org.springframework.boot:spring-boot-starter-jetty'
+    }
+}
+
+project(':data') {
+    dependencies {
+        compile(project(":tools"))
+    }
+}
+project(':gateway-api') {
+    dependencies {
+        compile(project(":tools"))
+        compile(project(":data"))
+    }
+}

+ 71 - 0
server/data/build.gradle

@@ -0,0 +1,71 @@
+apply plugin: 'java'
+
+def libraries = rootProject.ext.libraries
+
+repositories {
+    mavenLocal()
+    maven { url = "http://maven.aliyun.com/nexus/content/groups/public" }
+    mavenCentral()
+}
+
+dependencies {
+    //mybatis
+    compile(libraries."mybatis", libraries."mybatis-mapper")
+
+    //flyway
+    compile(libraries."flyway")
+}
+
+//mybatis generator plugin ------ start
+buildscript {
+    repositories {
+        maven {
+            url "https://plugins.gradle.org/m2/"
+        }
+    }
+    dependencies {
+        classpath "gradle.plugin.com.arenagod.gradle:mybatis-generator-plugin:1.4"
+    }
+}
+apply plugin: "com.arenagod.gradle.MybatisGenerator"
+
+configurations {
+    mybatisGenerator
+}
+dependencies{
+    mybatisGenerator libraries."mybatis-generator"
+    mybatisGenerator libraries."mybatis-mapper"
+    mybatisGenerator libraries."mybatis-mapping-generator"
+    mybatisGenerator libraries."mybatis-generator-plugin"
+    mybatisGenerator libraries."mybatis-mysql"
+    mybatisGenerator project(":tools")
+}
+
+mybatisGenerator {
+//    verbose = true
+    configFile = 'src/main/resources/mybatis-generator.xml'
+}
+//mybatis generator plugin ------ end
+
+// flyway -------- start
+buildscript {
+    dependencies {
+//        classpath libraries."flyway-h2"
+        classpath "gradle.plugin.com.boxfuse.client:gradle-plugin-publishing:6.0.0-beta2"
+    }
+}
+apply plugin: "org.flywaydb.flyway"
+flyway {
+    // 写自己本地测试数据库
+    url = 'jdbc:mysql://127.0.0.1:3306/qianxing'
+    user = 'qianxing'
+    password = 'qianxing'
+    // 线上:mvn package exec:java -Dexec.mainClass=com.qxgmat.Flyway
+}
+// flyway ------ end
+
+apply plugin: 'java-library'
+
+jar {
+    enabled=true
+}

+ 32 - 0
server/data/src/main/java/com/qxgmat/data/MybatisConfig.java

@@ -0,0 +1,32 @@
+package com.qxgmat.data;
+
+
+import com.qxgmat.data.constants.SessionKey;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+
+import javax.sql.DataSource;
+
+@Configuration
+@MapperScan({"com.qxgmat.data.dao", "com.qxgmat.data.relation"})
+public class MybatisConfig {
+//    /**
+//     * 根据数据源创建SqlSessionFactory
+//     */
+//    @Bean(name = "customSqlSessionFactory")
+//    public SqlSessionFactory sqlSessionFactory(DataSource dataSource,
+//                                               @Value("${mybatis.type-aliases-package}") String typeAliasesPackage,
+//                                               @Value("${mybatis.mapper-locations}") String mapperLocations) throws Exception{
+//        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
+//        bean.setDataSource(dataSource);
+//        //下边两句仅仅用于*.xml文件,如果整个持久层操作不需要使用到xml文件的话(只用注解就可以搞定),则不加
+//        bean.setTypeAliasesPackage(typeAliasesPackage);//指定基包
+//        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
+//        return bean.getObject();
+//    }
+}

+ 10 - 0
server/data/src/main/java/com/qxgmat/data/constants/SessionKey.java

@@ -0,0 +1,10 @@
+package com.qxgmat.data.constants;
+
+/**
+ * Created by GaoJie on 2017/11/3.
+ */
+public class SessionKey {
+    final static public String SMS_KEY = "sms";
+    final static public String CAPTCHA_KEY = "captcha";
+    final static public String FORGET_KEY = "forget";
+}

+ 14 - 0
server/data/src/main/java/com/qxgmat/data/constants/enums/DeleteStatus.java

@@ -0,0 +1,14 @@
+package com.qxgmat.data.constants.enums;
+
+/**
+ * Created by gaojie on 2017/11/19.
+ */
+public enum DeleteStatus {
+    NO(0), YES(1);
+    final static public String message = "删除状态:0未删除,1已删除";
+
+    public int index;
+    private DeleteStatus(int index){
+        this.index = index;
+    }
+}

+ 14 - 0
server/data/src/main/java/com/qxgmat/data/constants/enums/OpenStatus.java

@@ -0,0 +1,14 @@
+package com.qxgmat.data.constants.enums;
+
+/**
+ * Created by gaojie on 2017/11/19.
+ */
+public enum OpenStatus {
+    CLOSE(0), OPEN(1);
+    final static public String message = "状态:0关闭,1启用";
+
+    public int index;
+    private OpenStatus(int index){
+        this.index = index;
+    }
+}

+ 9 - 0
server/data/src/main/java/com/qxgmat/data/constants/enums/PaperModule.java

@@ -0,0 +1,9 @@
+package com.qxgmat.data.constants.enums;
+
+public enum PaperModule {
+    EXERCISE("exercise"), EXAMINATION("examination"), COLLECT("collect"), ERROR("error");
+    public String key;
+    private PaperModule(String key){
+        this.key = key;
+    }
+}

+ 9 - 0
server/data/src/main/java/com/qxgmat/data/constants/enums/QuestionModule.java

@@ -0,0 +1,9 @@
+package com.qxgmat.data.constants.enums;
+
+public enum QuestionModule {
+    EXERCISE("exercise"), EXAMINATION("examination"), SENTENCE("sentence");
+    public String key;
+    private QuestionModule(String key){
+        this.key = key;
+    }
+}

+ 9 - 0
server/data/src/main/java/com/qxgmat/data/constants/enums/ServiceKey.java

@@ -0,0 +1,9 @@
+package com.qxgmat.data.constants.enums;
+
+public enum ServiceKey {
+    VIP("vip");
+    public String key;
+    private ServiceKey(String key){
+        this.key = key;
+    }
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/AdMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.Ad;
+
+public interface AdMapper extends Mapper<Ad> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/ArticleMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.Article;
+
+public interface ArticleMapper extends Mapper<Article> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/ExaminationMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.Examination;
+
+public interface ExaminationMapper extends Mapper<Examination> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/ExaminationStructMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.ExaminationStruct;
+
+public interface ExaminationStructMapper extends Mapper<ExaminationStruct> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/ExerciseMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.Exercise;
+
+public interface ExerciseMapper extends Mapper<Exercise> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/ExerciseStructMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.ExerciseStruct;
+
+public interface ExerciseStructMapper extends Mapper<ExerciseStruct> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/FeedbackErrorMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.FeedbackError;
+
+public interface FeedbackErrorMapper extends Mapper<FeedbackError> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/FlywaySchemaHistoryMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.FlywaySchemaHistory;
+
+public interface FlywaySchemaHistoryMapper extends Mapper<FlywaySchemaHistory> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/HomeworkPreviewMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.HomeworkPreview;
+
+public interface HomeworkPreviewMapper extends Mapper<HomeworkPreview> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/ManagerLogMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.ManagerLog;
+
+public interface ManagerLogMapper extends Mapper<ManagerLog> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/ManagerMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.Manager;
+
+public interface ManagerMapper extends Mapper<Manager> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/ManagerRoleMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.ManagerRole;
+
+public interface ManagerRoleMapper extends Mapper<ManagerRole> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/PayMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.Pay;
+
+public interface PayMapper extends Mapper<Pay> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/QuestionMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.Question;
+
+public interface QuestionMapper extends Mapper<Question> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/RankMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.Rank;
+
+public interface RankMapper extends Mapper<Rank> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/SentenceArticleMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.SentenceArticle;
+
+public interface SentenceArticleMapper extends Mapper<SentenceArticle> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/SentenceCodeMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.SentenceCode;
+
+public interface SentenceCodeMapper extends Mapper<SentenceCode> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/SentenceMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.Sentence;
+
+public interface SentenceMapper extends Mapper<Sentence> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/SentencePaperMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.SentencePaper;
+
+public interface SentencePaperMapper extends Mapper<SentencePaper> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/SentenceQuestionMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.SentenceQuestion;
+
+public interface SentenceQuestionMapper extends Mapper<SentenceQuestion> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/SentenceStructMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.SentenceStruct;
+
+public interface SentenceStructMapper extends Mapper<SentenceStruct> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/SettingMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.Setting;
+
+public interface SettingMapper extends Mapper<Setting> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserAskMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserAsk;
+
+public interface UserAskMapper extends Mapper<UserAsk> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserCollectArticleMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserCollectArticle;
+
+public interface UserCollectArticleMapper extends Mapper<UserCollectArticle> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserCollectMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserCollect;
+
+public interface UserCollectMapper extends Mapper<UserCollect> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserCollectQuestionMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserCollectQuestion;
+
+public interface UserCollectQuestionMapper extends Mapper<UserCollectQuestion> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserExaminationMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserExamination;
+
+public interface UserExaminationMapper extends Mapper<UserExamination> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserExerciseMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserExercise;
+
+public interface UserExerciseMapper extends Mapper<UserExercise> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.User;
+
+public interface UserMapper extends Mapper<User> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserMessageMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserMessage;
+
+public interface UserMessageMapper extends Mapper<UserMessage> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserNoteMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserNote;
+
+public interface UserNoteMapper extends Mapper<UserNote> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserPaperMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserPaper;
+
+public interface UserPaperMapper extends Mapper<UserPaper> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserPaperQuestionMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserPaperQuestion;
+
+public interface UserPaperQuestionMapper extends Mapper<UserPaperQuestion> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserPayMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserPay;
+
+public interface UserPayMapper extends Mapper<UserPay> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserQuestionMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserQuestion;
+
+public interface UserQuestionMapper extends Mapper<UserQuestion> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserReportMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserReport;
+
+public interface UserReportMapper extends Mapper<UserReport> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserSentenceProcessMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserSentenceProcess;
+
+public interface UserSentenceProcessMapper extends Mapper<UserSentenceProcess> {
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserServiceMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserService;
+
+public interface UserServiceMapper extends Mapper<UserService> {
+}

+ 274 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/Ad.java

@@ -0,0 +1,274 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "ad")
+public class Ad implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 广告标题
+     */
+    @Column(name = "`title`")
+    private String title;
+
+    /**
+     * 广告图片
+     */
+    @Column(name = "`image`")
+    private String image;
+
+    /**
+     * 广告位置
+     */
+    @Column(name = "`position`")
+    private Integer position;
+
+    /**
+     * 广告链接
+     */
+    @Column(name = "`link`")
+    private String link;
+
+    /**
+     * 开始时间
+     */
+    @Column(name = "`start_time`")
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    @Column(name = "`end_time`")
+    private Date endTime;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取广告标题
+     *
+     * @return title - 广告标题
+     */
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 设置广告标题
+     *
+     * @param title 广告标题
+     */
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    /**
+     * 获取广告图片
+     *
+     * @return image - 广告图片
+     */
+    public String getImage() {
+        return image;
+    }
+
+    /**
+     * 设置广告图片
+     *
+     * @param image 广告图片
+     */
+    public void setImage(String image) {
+        this.image = image;
+    }
+
+    /**
+     * 获取广告位置
+     *
+     * @return position - 广告位置
+     */
+    public Integer getPosition() {
+        return position;
+    }
+
+    /**
+     * 设置广告位置
+     *
+     * @param position 广告位置
+     */
+    public void setPosition(Integer position) {
+        this.position = position;
+    }
+
+    /**
+     * 获取广告链接
+     *
+     * @return link - 广告链接
+     */
+    public String getLink() {
+        return link;
+    }
+
+    /**
+     * 设置广告链接
+     *
+     * @param link 广告链接
+     */
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    /**
+     * 获取开始时间
+     *
+     * @return start_time - 开始时间
+     */
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    /**
+     * 设置开始时间
+     *
+     * @param startTime 开始时间
+     */
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    /**
+     * 获取结束时间
+     *
+     * @return end_time - 结束时间
+     */
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    /**
+     * 设置结束时间
+     *
+     * @param endTime 结束时间
+     */
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", title=").append(title);
+        sb.append(", image=").append(image);
+        sb.append(", position=").append(position);
+        sb.append(", link=").append(link);
+        sb.append(", startTime=").append(startTime);
+        sb.append(", endTime=").append(endTime);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static Ad.Builder builder() {
+        return new Ad.Builder();
+    }
+
+    public static class Builder {
+        private Ad obj;
+
+        public Builder() {
+            this.obj = new Ad();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置广告标题
+         *
+         * @param title 广告标题
+         */
+        public Builder title(String title) {
+            obj.setTitle(title);
+            return this;
+        }
+
+        /**
+         * 设置广告图片
+         *
+         * @param image 广告图片
+         */
+        public Builder image(String image) {
+            obj.setImage(image);
+            return this;
+        }
+
+        /**
+         * 设置广告位置
+         *
+         * @param position 广告位置
+         */
+        public Builder position(Integer position) {
+            obj.setPosition(position);
+            return this;
+        }
+
+        /**
+         * 设置广告链接
+         *
+         * @param link 广告链接
+         */
+        public Builder link(String link) {
+            obj.setLink(link);
+            return this;
+        }
+
+        /**
+         * 设置开始时间
+         *
+         * @param startTime 开始时间
+         */
+        public Builder startTime(Date startTime) {
+            obj.setStartTime(startTime);
+            return this;
+        }
+
+        /**
+         * 设置结束时间
+         *
+         * @param endTime 结束时间
+         */
+        public Builder endTime(Date endTime) {
+            obj.setEndTime(endTime);
+            return this;
+        }
+
+        public Ad build() {
+            return this.obj;
+        }
+    }
+}

+ 115 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/Article.java

@@ -0,0 +1,115 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "article")
+public class Article implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    @Column(name = "`module`")
+    private Integer module;
+
+    @Column(name = "`module_id`")
+    private Integer moduleId;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * @return module
+     */
+    public Integer getModule() {
+        return module;
+    }
+
+    /**
+     * @param module
+     */
+    public void setModule(Integer module) {
+        this.module = module;
+    }
+
+    /**
+     * @return module_id
+     */
+    public Integer getModuleId() {
+        return moduleId;
+    }
+
+    /**
+     * @param moduleId
+     */
+    public void setModuleId(Integer moduleId) {
+        this.moduleId = moduleId;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", module=").append(module);
+        sb.append(", moduleId=").append(moduleId);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static Article.Builder builder() {
+        return new Article.Builder();
+    }
+
+    public static class Builder {
+        private Article obj;
+
+        public Builder() {
+            this.obj = new Article();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * @param module
+         */
+        public Builder module(Integer module) {
+            obj.setModule(module);
+            return this;
+        }
+
+        /**
+         * @param moduleId
+         */
+        public Builder moduleId(Integer moduleId) {
+            obj.setModuleId(moduleId);
+            return this;
+        }
+
+        public Article build() {
+            return this.obj;
+        }
+    }
+}

+ 63 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/Examination.java

@@ -0,0 +1,63 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "examination")
+public class Examination implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static Examination.Builder builder() {
+        return new Examination.Builder();
+    }
+
+    public static class Builder {
+        private Examination obj;
+
+        public Builder() {
+            this.obj = new Examination();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        public Examination build() {
+            return this.obj;
+        }
+    }
+}

+ 203 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/ExaminationStruct.java

@@ -0,0 +1,203 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "examination_struct")
+public class ExaminationStruct implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 中文名称
+     */
+    @Column(name = "`name_zh`")
+    private String nameZh;
+
+    /**
+     * 英文名称
+     */
+    @Column(name = "`name_en`")
+    private String nameEn;
+
+    /**
+     * 父级id
+     */
+    @Column(name = "`parent_id`")
+    private Integer parentId;
+
+    /**
+     * 排序:从大到小
+     */
+    @Column(name = "`order`")
+    private Integer order;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取中文名称
+     *
+     * @return name_zh - 中文名称
+     */
+    public String getNameZh() {
+        return nameZh;
+    }
+
+    /**
+     * 设置中文名称
+     *
+     * @param nameZh 中文名称
+     */
+    public void setNameZh(String nameZh) {
+        this.nameZh = nameZh;
+    }
+
+    /**
+     * 获取英文名称
+     *
+     * @return name_en - 英文名称
+     */
+    public String getNameEn() {
+        return nameEn;
+    }
+
+    /**
+     * 设置英文名称
+     *
+     * @param nameEn 英文名称
+     */
+    public void setNameEn(String nameEn) {
+        this.nameEn = nameEn;
+    }
+
+    /**
+     * 获取父级id
+     *
+     * @return parent_id - 父级id
+     */
+    public Integer getParentId() {
+        return parentId;
+    }
+
+    /**
+     * 设置父级id
+     *
+     * @param parentId 父级id
+     */
+    public void setParentId(Integer parentId) {
+        this.parentId = parentId;
+    }
+
+    /**
+     * 获取排序:从大到小
+     *
+     * @return order - 排序:从大到小
+     */
+    public Integer getOrder() {
+        return order;
+    }
+
+    /**
+     * 设置排序:从大到小
+     *
+     * @param order 排序:从大到小
+     */
+    public void setOrder(Integer order) {
+        this.order = order;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", nameZh=").append(nameZh);
+        sb.append(", nameEn=").append(nameEn);
+        sb.append(", parentId=").append(parentId);
+        sb.append(", order=").append(order);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static ExaminationStruct.Builder builder() {
+        return new ExaminationStruct.Builder();
+    }
+
+    public static class Builder {
+        private ExaminationStruct obj;
+
+        public Builder() {
+            this.obj = new ExaminationStruct();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置中文名称
+         *
+         * @param nameZh 中文名称
+         */
+        public Builder nameZh(String nameZh) {
+            obj.setNameZh(nameZh);
+            return this;
+        }
+
+        /**
+         * 设置英文名称
+         *
+         * @param nameEn 英文名称
+         */
+        public Builder nameEn(String nameEn) {
+            obj.setNameEn(nameEn);
+            return this;
+        }
+
+        /**
+         * 设置父级id
+         *
+         * @param parentId 父级id
+         */
+        public Builder parentId(Integer parentId) {
+            obj.setParentId(parentId);
+            return this;
+        }
+
+        /**
+         * 设置排序:从大到小
+         *
+         * @param order 排序:从大到小
+         */
+        public Builder order(Integer order) {
+            obj.setOrder(order);
+            return this;
+        }
+
+        public ExaminationStruct build() {
+            return this.obj;
+        }
+    }
+}

+ 63 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/Exercise.java

@@ -0,0 +1,63 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "exercise")
+public class Exercise implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static Exercise.Builder builder() {
+        return new Exercise.Builder();
+    }
+
+    public static class Builder {
+        private Exercise obj;
+
+        public Builder() {
+            this.obj = new Exercise();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        public Exercise build() {
+            return this.obj;
+        }
+    }
+}

+ 238 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/ExerciseStruct.java

@@ -0,0 +1,238 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "exercise_struct")
+public class ExerciseStruct implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 中文名称
+     */
+    @Column(name = "`name_zh`")
+    private String nameZh;
+
+    /**
+     * 英文名称
+     */
+    @Column(name = "`name_en`")
+    private String nameEn;
+
+    /**
+     * 父级id
+     */
+    @Column(name = "`parent_id`")
+    private Integer parentId;
+
+    /**
+     * 排序:从大到小
+     */
+    @Column(name = "`order`")
+    private Integer order;
+
+    /**
+     * 提问状态:0关闭,1开启
+     */
+    @Column(name = "`question_status`")
+    private Integer questionStatus;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取中文名称
+     *
+     * @return name_zh - 中文名称
+     */
+    public String getNameZh() {
+        return nameZh;
+    }
+
+    /**
+     * 设置中文名称
+     *
+     * @param nameZh 中文名称
+     */
+    public void setNameZh(String nameZh) {
+        this.nameZh = nameZh;
+    }
+
+    /**
+     * 获取英文名称
+     *
+     * @return name_en - 英文名称
+     */
+    public String getNameEn() {
+        return nameEn;
+    }
+
+    /**
+     * 设置英文名称
+     *
+     * @param nameEn 英文名称
+     */
+    public void setNameEn(String nameEn) {
+        this.nameEn = nameEn;
+    }
+
+    /**
+     * 获取父级id
+     *
+     * @return parent_id - 父级id
+     */
+    public Integer getParentId() {
+        return parentId;
+    }
+
+    /**
+     * 设置父级id
+     *
+     * @param parentId 父级id
+     */
+    public void setParentId(Integer parentId) {
+        this.parentId = parentId;
+    }
+
+    /**
+     * 获取排序:从大到小
+     *
+     * @return order - 排序:从大到小
+     */
+    public Integer getOrder() {
+        return order;
+    }
+
+    /**
+     * 设置排序:从大到小
+     *
+     * @param order 排序:从大到小
+     */
+    public void setOrder(Integer order) {
+        this.order = order;
+    }
+
+    /**
+     * 获取提问状态:0关闭,1开启
+     *
+     * @return question_status - 提问状态:0关闭,1开启
+     */
+    public Integer getQuestionStatus() {
+        return questionStatus;
+    }
+
+    /**
+     * 设置提问状态:0关闭,1开启
+     *
+     * @param questionStatus 提问状态:0关闭,1开启
+     */
+    public void setQuestionStatus(Integer questionStatus) {
+        this.questionStatus = questionStatus;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", nameZh=").append(nameZh);
+        sb.append(", nameEn=").append(nameEn);
+        sb.append(", parentId=").append(parentId);
+        sb.append(", order=").append(order);
+        sb.append(", questionStatus=").append(questionStatus);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static ExerciseStruct.Builder builder() {
+        return new ExerciseStruct.Builder();
+    }
+
+    public static class Builder {
+        private ExerciseStruct obj;
+
+        public Builder() {
+            this.obj = new ExerciseStruct();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置中文名称
+         *
+         * @param nameZh 中文名称
+         */
+        public Builder nameZh(String nameZh) {
+            obj.setNameZh(nameZh);
+            return this;
+        }
+
+        /**
+         * 设置英文名称
+         *
+         * @param nameEn 英文名称
+         */
+        public Builder nameEn(String nameEn) {
+            obj.setNameEn(nameEn);
+            return this;
+        }
+
+        /**
+         * 设置父级id
+         *
+         * @param parentId 父级id
+         */
+        public Builder parentId(Integer parentId) {
+            obj.setParentId(parentId);
+            return this;
+        }
+
+        /**
+         * 设置排序:从大到小
+         *
+         * @param order 排序:从大到小
+         */
+        public Builder order(Integer order) {
+            obj.setOrder(order);
+            return this;
+        }
+
+        /**
+         * 设置提问状态:0关闭,1开启
+         *
+         * @param questionStatus 提问状态:0关闭,1开启
+         */
+        public Builder questionStatus(Integer questionStatus) {
+            obj.setQuestionStatus(questionStatus);
+            return this;
+        }
+
+        public ExerciseStruct build() {
+            return this.obj;
+        }
+    }
+}

+ 212 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/FeedbackError.java

@@ -0,0 +1,212 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "feedback_error")
+public class FeedbackError implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "`user_id`")
+    private Integer userId;
+
+    /**
+     * 题目id
+     */
+    @Column(name = "`question_id`")
+    private Integer questionId;
+
+    @Column(name = "`type`")
+    private Integer type;
+
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    @Column(name = "`content`")
+    private String content;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取用户id
+     *
+     * @return user_id - 用户id
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+
+    /**
+     * 设置用户id
+     *
+     * @param userId 用户id
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * 获取题目id
+     *
+     * @return question_id - 题目id
+     */
+    public Integer getQuestionId() {
+        return questionId;
+    }
+
+    /**
+     * 设置题目id
+     *
+     * @param questionId 题目id
+     */
+    public void setQuestionId(Integer questionId) {
+        this.questionId = questionId;
+    }
+
+    /**
+     * @return type
+     */
+    public Integer getType() {
+        return type;
+    }
+
+    /**
+     * @param type
+     */
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    /**
+     * @return create_time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * @return content
+     */
+    public String getContent() {
+        return content;
+    }
+
+    /**
+     * @param content
+     */
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", questionId=").append(questionId);
+        sb.append(", type=").append(type);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", content=").append(content);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static FeedbackError.Builder builder() {
+        return new FeedbackError.Builder();
+    }
+
+    public static class Builder {
+        private FeedbackError obj;
+
+        public Builder() {
+            this.obj = new FeedbackError();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置用户id
+         *
+         * @param userId 用户id
+         */
+        public Builder userId(Integer userId) {
+            obj.setUserId(userId);
+            return this;
+        }
+
+        /**
+         * 设置题目id
+         *
+         * @param questionId 题目id
+         */
+        public Builder questionId(Integer questionId) {
+            obj.setQuestionId(questionId);
+            return this;
+        }
+
+        /**
+         * @param type
+         */
+        public Builder type(Integer type) {
+            obj.setType(type);
+            return this;
+        }
+
+        /**
+         * @param createTime
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        /**
+         * @param content
+         */
+        public Builder content(String content) {
+            obj.setContent(content);
+            return this;
+        }
+
+        public FeedbackError build() {
+            return this.obj;
+        }
+    }
+}

+ 297 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/FlywaySchemaHistory.java

@@ -0,0 +1,297 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "flyway_schema_history")
+public class FlywaySchemaHistory implements Serializable {
+    @Id
+    @Column(name = "`installed_rank`")
+    private Integer installedRank;
+
+    @Column(name = "`version`")
+    private String version;
+
+    @Column(name = "`description`")
+    private String description;
+
+    @Column(name = "`type`")
+    private String type;
+
+    @Column(name = "`script`")
+    private String script;
+
+    @Column(name = "`checksum`")
+    private Integer checksum;
+
+    @Column(name = "`installed_by`")
+    private String installedBy;
+
+    @Column(name = "`installed_on`")
+    private Date installedOn;
+
+    @Column(name = "`execution_time`")
+    private Integer executionTime;
+
+    @Column(name = "`success`")
+    private Integer success;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return installed_rank
+     */
+    public Integer getInstalledRank() {
+        return installedRank;
+    }
+
+    /**
+     * @param installedRank
+     */
+    public void setInstalledRank(Integer installedRank) {
+        this.installedRank = installedRank;
+    }
+
+    /**
+     * @return version
+     */
+    public String getVersion() {
+        return version;
+    }
+
+    /**
+     * @param version
+     */
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    /**
+     * @return description
+     */
+    public String getDescription() {
+        return description;
+    }
+
+    /**
+     * @param description
+     */
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    /**
+     * @return type
+     */
+    public String getType() {
+        return type;
+    }
+
+    /**
+     * @param type
+     */
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    /**
+     * @return script
+     */
+    public String getScript() {
+        return script;
+    }
+
+    /**
+     * @param script
+     */
+    public void setScript(String script) {
+        this.script = script;
+    }
+
+    /**
+     * @return checksum
+     */
+    public Integer getChecksum() {
+        return checksum;
+    }
+
+    /**
+     * @param checksum
+     */
+    public void setChecksum(Integer checksum) {
+        this.checksum = checksum;
+    }
+
+    /**
+     * @return installed_by
+     */
+    public String getInstalledBy() {
+        return installedBy;
+    }
+
+    /**
+     * @param installedBy
+     */
+    public void setInstalledBy(String installedBy) {
+        this.installedBy = installedBy;
+    }
+
+    /**
+     * @return installed_on
+     */
+    public Date getInstalledOn() {
+        return installedOn;
+    }
+
+    /**
+     * @param installedOn
+     */
+    public void setInstalledOn(Date installedOn) {
+        this.installedOn = installedOn;
+    }
+
+    /**
+     * @return execution_time
+     */
+    public Integer getExecutionTime() {
+        return executionTime;
+    }
+
+    /**
+     * @param executionTime
+     */
+    public void setExecutionTime(Integer executionTime) {
+        this.executionTime = executionTime;
+    }
+
+    /**
+     * @return success
+     */
+    public Integer getSuccess() {
+        return success;
+    }
+
+    /**
+     * @param success
+     */
+    public void setSuccess(Integer success) {
+        this.success = success;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", installedRank=").append(installedRank);
+        sb.append(", version=").append(version);
+        sb.append(", description=").append(description);
+        sb.append(", type=").append(type);
+        sb.append(", script=").append(script);
+        sb.append(", checksum=").append(checksum);
+        sb.append(", installedBy=").append(installedBy);
+        sb.append(", installedOn=").append(installedOn);
+        sb.append(", executionTime=").append(executionTime);
+        sb.append(", success=").append(success);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static FlywaySchemaHistory.Builder builder() {
+        return new FlywaySchemaHistory.Builder();
+    }
+
+    public static class Builder {
+        private FlywaySchemaHistory obj;
+
+        public Builder() {
+            this.obj = new FlywaySchemaHistory();
+        }
+
+        /**
+         * @param installedRank
+         */
+        public Builder installedRank(Integer installedRank) {
+            obj.setInstalledRank(installedRank);
+            return this;
+        }
+
+        /**
+         * @param version
+         */
+        public Builder version(String version) {
+            obj.setVersion(version);
+            return this;
+        }
+
+        /**
+         * @param description
+         */
+        public Builder description(String description) {
+            obj.setDescription(description);
+            return this;
+        }
+
+        /**
+         * @param type
+         */
+        public Builder type(String type) {
+            obj.setType(type);
+            return this;
+        }
+
+        /**
+         * @param script
+         */
+        public Builder script(String script) {
+            obj.setScript(script);
+            return this;
+        }
+
+        /**
+         * @param checksum
+         */
+        public Builder checksum(Integer checksum) {
+            obj.setChecksum(checksum);
+            return this;
+        }
+
+        /**
+         * @param installedBy
+         */
+        public Builder installedBy(String installedBy) {
+            obj.setInstalledBy(installedBy);
+            return this;
+        }
+
+        /**
+         * @param installedOn
+         */
+        public Builder installedOn(Date installedOn) {
+            obj.setInstalledOn(installedOn);
+            return this;
+        }
+
+        /**
+         * @param executionTime
+         */
+        public Builder executionTime(Integer executionTime) {
+            obj.setExecutionTime(executionTime);
+            return this;
+        }
+
+        /**
+         * @param success
+         */
+        public Builder success(Integer success) {
+            obj.setSuccess(success);
+            return this;
+        }
+
+        public FlywaySchemaHistory build() {
+            return this.obj;
+        }
+    }
+}

+ 221 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/HomeworkPreview.java

@@ -0,0 +1,221 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "homework_preview")
+public class HomeworkPreview implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 作业标题
+     */
+    @Column(name = "`title`")
+    private String title;
+
+    /**
+     * 作业开始时间
+     */
+    @Column(name = "`start_time`")
+    private Date startTime;
+
+    /**
+     * 作业结束时间
+     */
+    @Column(name = "`end_time`")
+    private Date endTime;
+
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    @Column(name = "`update_time`")
+    private Date updateTime;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取作业标题
+     *
+     * @return title - 作业标题
+     */
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 设置作业标题
+     *
+     * @param title 作业标题
+     */
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    /**
+     * 获取作业开始时间
+     *
+     * @return start_time - 作业开始时间
+     */
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    /**
+     * 设置作业开始时间
+     *
+     * @param startTime 作业开始时间
+     */
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    /**
+     * 获取作业结束时间
+     *
+     * @return end_time - 作业结束时间
+     */
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    /**
+     * 设置作业结束时间
+     *
+     * @param endTime 作业结束时间
+     */
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    /**
+     * @return create_time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * @return update_time
+     */
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    /**
+     * @param updateTime
+     */
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", title=").append(title);
+        sb.append(", startTime=").append(startTime);
+        sb.append(", endTime=").append(endTime);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static HomeworkPreview.Builder builder() {
+        return new HomeworkPreview.Builder();
+    }
+
+    public static class Builder {
+        private HomeworkPreview obj;
+
+        public Builder() {
+            this.obj = new HomeworkPreview();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置作业标题
+         *
+         * @param title 作业标题
+         */
+        public Builder title(String title) {
+            obj.setTitle(title);
+            return this;
+        }
+
+        /**
+         * 设置作业开始时间
+         *
+         * @param startTime 作业开始时间
+         */
+        public Builder startTime(Date startTime) {
+            obj.setStartTime(startTime);
+            return this;
+        }
+
+        /**
+         * 设置作业结束时间
+         *
+         * @param endTime 作业结束时间
+         */
+        public Builder endTime(Date endTime) {
+            obj.setEndTime(endTime);
+            return this;
+        }
+
+        /**
+         * @param createTime
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        /**
+         * @param updateTime
+         */
+        public Builder updateTime(Date updateTime) {
+            obj.setUpdateTime(updateTime);
+            return this;
+        }
+
+        public HomeworkPreview build() {
+            return this.obj;
+        }
+    }
+}

+ 247 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/Manager.java

@@ -0,0 +1,247 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "manager")
+public class Manager implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户名
+     */
+    @Column(name = "`username`")
+    private String username;
+
+    /**
+     * 密码
+     */
+    @Column(name = "`password`")
+    private String password;
+
+    /**
+     * 角色id
+     */
+    @Column(name = "`role_id`")
+    private Integer roleId;
+
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    @Column(name = "`update_time`")
+    private Date updateTime;
+
+    @Column(name = "`delete_time`")
+    private Date deleteTime;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取用户名
+     *
+     * @return username - 用户名
+     */
+    public String getUsername() {
+        return username;
+    }
+
+    /**
+     * 设置用户名
+     *
+     * @param username 用户名
+     */
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    /**
+     * 获取密码
+     *
+     * @return password - 密码
+     */
+    public String getPassword() {
+        return password;
+    }
+
+    /**
+     * 设置密码
+     *
+     * @param password 密码
+     */
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    /**
+     * 获取角色id
+     *
+     * @return role_id - 角色id
+     */
+    public Integer getRoleId() {
+        return roleId;
+    }
+
+    /**
+     * 设置角色id
+     *
+     * @param roleId 角色id
+     */
+    public void setRoleId(Integer roleId) {
+        this.roleId = roleId;
+    }
+
+    /**
+     * @return create_time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * @return update_time
+     */
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    /**
+     * @param updateTime
+     */
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    /**
+     * @return delete_time
+     */
+    public Date getDeleteTime() {
+        return deleteTime;
+    }
+
+    /**
+     * @param deleteTime
+     */
+    public void setDeleteTime(Date deleteTime) {
+        this.deleteTime = deleteTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", username=").append(username);
+        sb.append(", password=").append(password);
+        sb.append(", roleId=").append(roleId);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append(", deleteTime=").append(deleteTime);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static Manager.Builder builder() {
+        return new Manager.Builder();
+    }
+
+    public static class Builder {
+        private Manager obj;
+
+        public Builder() {
+            this.obj = new Manager();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置用户名
+         *
+         * @param username 用户名
+         */
+        public Builder username(String username) {
+            obj.setUsername(username);
+            return this;
+        }
+
+        /**
+         * 设置密码
+         *
+         * @param password 密码
+         */
+        public Builder password(String password) {
+            obj.setPassword(password);
+            return this;
+        }
+
+        /**
+         * 设置角色id
+         *
+         * @param roleId 角色id
+         */
+        public Builder roleId(Integer roleId) {
+            obj.setRoleId(roleId);
+            return this;
+        }
+
+        /**
+         * @param createTime
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        /**
+         * @param updateTime
+         */
+        public Builder updateTime(Date updateTime) {
+            obj.setUpdateTime(updateTime);
+            return this;
+        }
+
+        /**
+         * @param deleteTime
+         */
+        public Builder deleteTime(Date deleteTime) {
+            obj.setDeleteTime(deleteTime);
+            return this;
+        }
+
+        public Manager build() {
+            return this.obj;
+        }
+    }
+}

+ 230 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/ManagerLog.java

@@ -0,0 +1,230 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "manager_log")
+public class ManagerLog implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 管理员ID
+     */
+    @Column(name = "`manager_id`")
+    private Integer managerId;
+
+    /**
+     * 用户名
+     */
+    @Column(name = "`username`")
+    private String username;
+
+    /**
+     * 当前ip
+     */
+    @Column(name = "`ip`")
+    private String ip;
+
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    /**
+     * 内容:json
+     */
+    @Column(name = "`content`")
+    private String content;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取管理员ID
+     *
+     * @return manager_id - 管理员ID
+     */
+    public Integer getManagerId() {
+        return managerId;
+    }
+
+    /**
+     * 设置管理员ID
+     *
+     * @param managerId 管理员ID
+     */
+    public void setManagerId(Integer managerId) {
+        this.managerId = managerId;
+    }
+
+    /**
+     * 获取用户名
+     *
+     * @return username - 用户名
+     */
+    public String getUsername() {
+        return username;
+    }
+
+    /**
+     * 设置用户名
+     *
+     * @param username 用户名
+     */
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    /**
+     * 获取当前ip
+     *
+     * @return ip - 当前ip
+     */
+    public String getIp() {
+        return ip;
+    }
+
+    /**
+     * 设置当前ip
+     *
+     * @param ip 当前ip
+     */
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
+    /**
+     * @return create_time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取内容:json
+     *
+     * @return content - 内容:json
+     */
+    public String getContent() {
+        return content;
+    }
+
+    /**
+     * 设置内容:json
+     *
+     * @param content 内容:json
+     */
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", managerId=").append(managerId);
+        sb.append(", username=").append(username);
+        sb.append(", ip=").append(ip);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", content=").append(content);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static ManagerLog.Builder builder() {
+        return new ManagerLog.Builder();
+    }
+
+    public static class Builder {
+        private ManagerLog obj;
+
+        public Builder() {
+            this.obj = new ManagerLog();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置管理员ID
+         *
+         * @param managerId 管理员ID
+         */
+        public Builder managerId(Integer managerId) {
+            obj.setManagerId(managerId);
+            return this;
+        }
+
+        /**
+         * 设置用户名
+         *
+         * @param username 用户名
+         */
+        public Builder username(String username) {
+            obj.setUsername(username);
+            return this;
+        }
+
+        /**
+         * 设置当前ip
+         *
+         * @param ip 当前ip
+         */
+        public Builder ip(String ip) {
+            obj.setIp(ip);
+            return this;
+        }
+
+        /**
+         * @param createTime
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        /**
+         * 设置内容:json
+         *
+         * @param content 内容:json
+         */
+        public Builder content(String content) {
+            obj.setContent(content);
+            return this;
+        }
+
+        public ManagerLog build() {
+            return this.obj;
+        }
+    }
+}

+ 185 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/ManagerRole.java

@@ -0,0 +1,185 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "manager_role")
+public class ManagerRole implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    private Integer id;
+
+    /**
+     * 角色名称
+     */
+    @Column(name = "`title`")
+    private String title;
+
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    @Column(name = "`update_time`")
+    private Date updateTime;
+
+    /**
+     * 权限列表:json
+     */
+    @Column(name = "`permission_list`")
+    private String[] permissionList;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取角色名称
+     *
+     * @return title - 角色名称
+     */
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 设置角色名称
+     *
+     * @param title 角色名称
+     */
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    /**
+     * @return create_time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * @return update_time
+     */
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    /**
+     * @param updateTime
+     */
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    /**
+     * 获取权限列表:json
+     *
+     * @return permission_list - 权限列表:json
+     */
+    public String[] getPermissionList() {
+        return permissionList;
+    }
+
+    /**
+     * 设置权限列表:json
+     *
+     * @param permissionList 权限列表:json
+     */
+    public void setPermissionList(String[] permissionList) {
+        this.permissionList = permissionList;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", title=").append(title);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append(", permissionList=").append(permissionList);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static ManagerRole.Builder builder() {
+        return new ManagerRole.Builder();
+    }
+
+    public static class Builder {
+        private ManagerRole obj;
+
+        public Builder() {
+            this.obj = new ManagerRole();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置角色名称
+         *
+         * @param title 角色名称
+         */
+        public Builder title(String title) {
+            obj.setTitle(title);
+            return this;
+        }
+
+        /**
+         * @param createTime
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        /**
+         * @param updateTime
+         */
+        public Builder updateTime(Date updateTime) {
+            obj.setUpdateTime(updateTime);
+            return this;
+        }
+
+        /**
+         * 设置权限列表:json
+         *
+         * @param permissionList 权限列表:json
+         */
+        public Builder permissionList(String[] permissionList) {
+            obj.setPermissionList(permissionList);
+            return this;
+        }
+
+        public ManagerRole build() {
+            return this.obj;
+        }
+    }
+}

+ 625 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/Pay.java

@@ -0,0 +1,625 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "pay")
+public class Pay implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    /**
+     * 支付流水id
+     */
+    @Column(name = "`no`")
+    private String no;
+
+    /**
+     * 支付渠道
+     */
+    @Column(name = "`channel`")
+    private String channel;
+
+    /**
+     * 商户号
+     */
+    @Column(name = "`pid`")
+    private String pid;
+
+    /**
+     * 支付端ip
+     */
+    @Column(name = "`client_ip`")
+    private String clientIp;
+
+    /**
+     * 支付金额
+     */
+    @Column(name = "`money`")
+    private BigDecimal money;
+
+    /**
+     * 模块
+     */
+    @Column(name = "`module`")
+    private String module;
+
+    /**
+     * 模块id
+     */
+    @Column(name = "`module_id`")
+    private Long moduleId;
+
+    /**
+     * 商品标题
+     */
+    @Column(name = "`subject`")
+    private String subject;
+
+    /**
+     * 商品描述
+     */
+    @Column(name = "`body`")
+    private String body;
+
+    /**
+     * 支付渠道交易流水号
+     */
+    @Column(name = "`transaction_no`")
+    private String transactionNo;
+
+    /**
+     * 3位iso货币代码,人民币为cny
+     */
+    @Column(name = "`currency`")
+    private String currency;
+
+    /**
+     * 订单状态
+     */
+    @Column(name = "`trade_status`")
+    private Integer tradeStatus;
+
+    /**
+     * 支付时间
+     */
+    @Column(name = "`pay_time`")
+    private Date payTime;
+
+    /**
+     * 工具类型: 1账户, 2支付宝, 3微信
+     */
+    @Column(name = "`tools_type`")
+    private Integer toolsType;
+
+    /**
+     * 创建时间
+     */
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @Column(name = "`update_time`")
+    private Date updateTime;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Long getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取支付流水id
+     *
+     * @return no - 支付流水id
+     */
+    public String getNo() {
+        return no;
+    }
+
+    /**
+     * 设置支付流水id
+     *
+     * @param no 支付流水id
+     */
+    public void setNo(String no) {
+        this.no = no;
+    }
+
+    /**
+     * 获取支付渠道
+     *
+     * @return channel - 支付渠道
+     */
+    public String getChannel() {
+        return channel;
+    }
+
+    /**
+     * 设置支付渠道
+     *
+     * @param channel 支付渠道
+     */
+    public void setChannel(String channel) {
+        this.channel = channel;
+    }
+
+    /**
+     * 获取商户号
+     *
+     * @return pid - 商户号
+     */
+    public String getPid() {
+        return pid;
+    }
+
+    /**
+     * 设置商户号
+     *
+     * @param pid 商户号
+     */
+    public void setPid(String pid) {
+        this.pid = pid;
+    }
+
+    /**
+     * 获取支付端ip
+     *
+     * @return client_ip - 支付端ip
+     */
+    public String getClientIp() {
+        return clientIp;
+    }
+
+    /**
+     * 设置支付端ip
+     *
+     * @param clientIp 支付端ip
+     */
+    public void setClientIp(String clientIp) {
+        this.clientIp = clientIp;
+    }
+
+    /**
+     * 获取支付金额
+     *
+     * @return money - 支付金额
+     */
+    public BigDecimal getMoney() {
+        return money;
+    }
+
+    /**
+     * 设置支付金额
+     *
+     * @param money 支付金额
+     */
+    public void setMoney(BigDecimal money) {
+        this.money = money;
+    }
+
+    /**
+     * 获取模块
+     *
+     * @return module - 模块
+     */
+    public String getModule() {
+        return module;
+    }
+
+    /**
+     * 设置模块
+     *
+     * @param module 模块
+     */
+    public void setModule(String module) {
+        this.module = module;
+    }
+
+    /**
+     * 获取模块id
+     *
+     * @return module_id - 模块id
+     */
+    public Long getModuleId() {
+        return moduleId;
+    }
+
+    /**
+     * 设置模块id
+     *
+     * @param moduleId 模块id
+     */
+    public void setModuleId(Long moduleId) {
+        this.moduleId = moduleId;
+    }
+
+    /**
+     * 获取商品标题
+     *
+     * @return subject - 商品标题
+     */
+    public String getSubject() {
+        return subject;
+    }
+
+    /**
+     * 设置商品标题
+     *
+     * @param subject 商品标题
+     */
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    /**
+     * 获取商品描述
+     *
+     * @return body - 商品描述
+     */
+    public String getBody() {
+        return body;
+    }
+
+    /**
+     * 设置商品描述
+     *
+     * @param body 商品描述
+     */
+    public void setBody(String body) {
+        this.body = body;
+    }
+
+    /**
+     * 获取支付渠道交易流水号
+     *
+     * @return transaction_no - 支付渠道交易流水号
+     */
+    public String getTransactionNo() {
+        return transactionNo;
+    }
+
+    /**
+     * 设置支付渠道交易流水号
+     *
+     * @param transactionNo 支付渠道交易流水号
+     */
+    public void setTransactionNo(String transactionNo) {
+        this.transactionNo = transactionNo;
+    }
+
+    /**
+     * 获取3位iso货币代码,人民币为cny
+     *
+     * @return currency - 3位iso货币代码,人民币为cny
+     */
+    public String getCurrency() {
+        return currency;
+    }
+
+    /**
+     * 设置3位iso货币代码,人民币为cny
+     *
+     * @param currency 3位iso货币代码,人民币为cny
+     */
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    /**
+     * 获取订单状态
+     *
+     * @return trade_status - 订单状态
+     */
+    public Integer getTradeStatus() {
+        return tradeStatus;
+    }
+
+    /**
+     * 设置订单状态
+     *
+     * @param tradeStatus 订单状态
+     */
+    public void setTradeStatus(Integer tradeStatus) {
+        this.tradeStatus = tradeStatus;
+    }
+
+    /**
+     * 获取支付时间
+     *
+     * @return pay_time - 支付时间
+     */
+    public Date getPayTime() {
+        return payTime;
+    }
+
+    /**
+     * 设置支付时间
+     *
+     * @param payTime 支付时间
+     */
+    public void setPayTime(Date payTime) {
+        this.payTime = payTime;
+    }
+
+    /**
+     * 获取工具类型: 1账户, 2支付宝, 3微信
+     *
+     * @return tools_type - 工具类型: 1账户, 2支付宝, 3微信
+     */
+    public Integer getToolsType() {
+        return toolsType;
+    }
+
+    /**
+     * 设置工具类型: 1账户, 2支付宝, 3微信
+     *
+     * @param toolsType 工具类型: 1账户, 2支付宝, 3微信
+     */
+    public void setToolsType(Integer toolsType) {
+        this.toolsType = toolsType;
+    }
+
+    /**
+     * 获取创建时间
+     *
+     * @return create_time - 创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * 设置创建时间
+     *
+     * @param createTime 创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取更新时间
+     *
+     * @return update_time - 更新时间
+     */
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    /**
+     * 设置更新时间
+     *
+     * @param updateTime 更新时间
+     */
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", no=").append(no);
+        sb.append(", channel=").append(channel);
+        sb.append(", pid=").append(pid);
+        sb.append(", clientIp=").append(clientIp);
+        sb.append(", money=").append(money);
+        sb.append(", module=").append(module);
+        sb.append(", moduleId=").append(moduleId);
+        sb.append(", subject=").append(subject);
+        sb.append(", body=").append(body);
+        sb.append(", transactionNo=").append(transactionNo);
+        sb.append(", currency=").append(currency);
+        sb.append(", tradeStatus=").append(tradeStatus);
+        sb.append(", payTime=").append(payTime);
+        sb.append(", toolsType=").append(toolsType);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static Pay.Builder builder() {
+        return new Pay.Builder();
+    }
+
+    public static class Builder {
+        private Pay obj;
+
+        public Builder() {
+            this.obj = new Pay();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Long id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置支付流水id
+         *
+         * @param no 支付流水id
+         */
+        public Builder no(String no) {
+            obj.setNo(no);
+            return this;
+        }
+
+        /**
+         * 设置支付渠道
+         *
+         * @param channel 支付渠道
+         */
+        public Builder channel(String channel) {
+            obj.setChannel(channel);
+            return this;
+        }
+
+        /**
+         * 设置商户号
+         *
+         * @param pid 商户号
+         */
+        public Builder pid(String pid) {
+            obj.setPid(pid);
+            return this;
+        }
+
+        /**
+         * 设置支付端ip
+         *
+         * @param clientIp 支付端ip
+         */
+        public Builder clientIp(String clientIp) {
+            obj.setClientIp(clientIp);
+            return this;
+        }
+
+        /**
+         * 设置支付金额
+         *
+         * @param money 支付金额
+         */
+        public Builder money(BigDecimal money) {
+            obj.setMoney(money);
+            return this;
+        }
+
+        /**
+         * 设置模块
+         *
+         * @param module 模块
+         */
+        public Builder module(String module) {
+            obj.setModule(module);
+            return this;
+        }
+
+        /**
+         * 设置模块id
+         *
+         * @param moduleId 模块id
+         */
+        public Builder moduleId(Long moduleId) {
+            obj.setModuleId(moduleId);
+            return this;
+        }
+
+        /**
+         * 设置商品标题
+         *
+         * @param subject 商品标题
+         */
+        public Builder subject(String subject) {
+            obj.setSubject(subject);
+            return this;
+        }
+
+        /**
+         * 设置商品描述
+         *
+         * @param body 商品描述
+         */
+        public Builder body(String body) {
+            obj.setBody(body);
+            return this;
+        }
+
+        /**
+         * 设置支付渠道交易流水号
+         *
+         * @param transactionNo 支付渠道交易流水号
+         */
+        public Builder transactionNo(String transactionNo) {
+            obj.setTransactionNo(transactionNo);
+            return this;
+        }
+
+        /**
+         * 设置3位iso货币代码,人民币为cny
+         *
+         * @param currency 3位iso货币代码,人民币为cny
+         */
+        public Builder currency(String currency) {
+            obj.setCurrency(currency);
+            return this;
+        }
+
+        /**
+         * 设置订单状态
+         *
+         * @param tradeStatus 订单状态
+         */
+        public Builder tradeStatus(Integer tradeStatus) {
+            obj.setTradeStatus(tradeStatus);
+            return this;
+        }
+
+        /**
+         * 设置支付时间
+         *
+         * @param payTime 支付时间
+         */
+        public Builder payTime(Date payTime) {
+            obj.setPayTime(payTime);
+            return this;
+        }
+
+        /**
+         * 设置工具类型: 1账户, 2支付宝, 3微信
+         *
+         * @param toolsType 工具类型: 1账户, 2支付宝, 3微信
+         */
+        public Builder toolsType(Integer toolsType) {
+            obj.setToolsType(toolsType);
+            return this;
+        }
+
+        /**
+         * 设置创建时间
+         *
+         * @param createTime 创建时间
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        /**
+         * 设置更新时间
+         *
+         * @param updateTime 更新时间
+         */
+        public Builder updateTime(Date updateTime) {
+            obj.setUpdateTime(updateTime);
+            return this;
+        }
+
+        public Pay build() {
+            return this.obj;
+        }
+    }
+}

+ 378 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/Question.java

@@ -0,0 +1,378 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "question")
+public class Question implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 模块:examination, exercise,sentence
+     */
+    @Column(name = "`module`")
+    private Integer module;
+
+    /**
+     * 类型
+     */
+    @Column(name = "`type`")
+    private Integer type;
+
+    /**
+     * 难度
+     */
+    @Column(name = "`difficult`")
+    private Integer difficult;
+
+    @Column(name = "`question_time`")
+    private Date questionTime;
+
+    @Column(name = "`qx_time`")
+    private Date qxTime;
+
+    @Column(name = "`offical_time`")
+    private Date officalTime;
+
+    @Column(name = "`association_time`")
+    private Date associationTime;
+
+    /**
+     * 总作答时间
+     */
+    @Column(name = "`total_time`")
+    private Integer totalTime;
+
+    /**
+     * 总作答次数
+     */
+    @Column(name = "`total_number`")
+    private Integer totalNumber;
+
+    /**
+     * 总正确次数
+     */
+    @Column(name = "`total_correct`")
+    private Integer totalCorrect;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取模块:examination, exercise,sentence
+     *
+     * @return module - 模块:examination, exercise,sentence
+     */
+    public Integer getModule() {
+        return module;
+    }
+
+    /**
+     * 设置模块:examination, exercise,sentence
+     *
+     * @param module 模块:examination, exercise,sentence
+     */
+    public void setModule(Integer module) {
+        this.module = module;
+    }
+
+    /**
+     * 获取类型
+     *
+     * @return type - 类型
+     */
+    public Integer getType() {
+        return type;
+    }
+
+    /**
+     * 设置类型
+     *
+     * @param type 类型
+     */
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    /**
+     * 获取难度
+     *
+     * @return difficult - 难度
+     */
+    public Integer getDifficult() {
+        return difficult;
+    }
+
+    /**
+     * 设置难度
+     *
+     * @param difficult 难度
+     */
+    public void setDifficult(Integer difficult) {
+        this.difficult = difficult;
+    }
+
+    /**
+     * @return question_time
+     */
+    public Date getQuestionTime() {
+        return questionTime;
+    }
+
+    /**
+     * @param questionTime
+     */
+    public void setQuestionTime(Date questionTime) {
+        this.questionTime = questionTime;
+    }
+
+    /**
+     * @return qx_time
+     */
+    public Date getQxTime() {
+        return qxTime;
+    }
+
+    /**
+     * @param qxTime
+     */
+    public void setQxTime(Date qxTime) {
+        this.qxTime = qxTime;
+    }
+
+    /**
+     * @return offical_time
+     */
+    public Date getOfficalTime() {
+        return officalTime;
+    }
+
+    /**
+     * @param officalTime
+     */
+    public void setOfficalTime(Date officalTime) {
+        this.officalTime = officalTime;
+    }
+
+    /**
+     * @return association_time
+     */
+    public Date getAssociationTime() {
+        return associationTime;
+    }
+
+    /**
+     * @param associationTime
+     */
+    public void setAssociationTime(Date associationTime) {
+        this.associationTime = associationTime;
+    }
+
+    /**
+     * 获取总作答时间
+     *
+     * @return total_time - 总作答时间
+     */
+    public Integer getTotalTime() {
+        return totalTime;
+    }
+
+    /**
+     * 设置总作答时间
+     *
+     * @param totalTime 总作答时间
+     */
+    public void setTotalTime(Integer totalTime) {
+        this.totalTime = totalTime;
+    }
+
+    /**
+     * 获取总作答次数
+     *
+     * @return total_number - 总作答次数
+     */
+    public Integer getTotalNumber() {
+        return totalNumber;
+    }
+
+    /**
+     * 设置总作答次数
+     *
+     * @param totalNumber 总作答次数
+     */
+    public void setTotalNumber(Integer totalNumber) {
+        this.totalNumber = totalNumber;
+    }
+
+    /**
+     * 获取总正确次数
+     *
+     * @return total_correct - 总正确次数
+     */
+    public Integer getTotalCorrect() {
+        return totalCorrect;
+    }
+
+    /**
+     * 设置总正确次数
+     *
+     * @param totalCorrect 总正确次数
+     */
+    public void setTotalCorrect(Integer totalCorrect) {
+        this.totalCorrect = totalCorrect;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", module=").append(module);
+        sb.append(", type=").append(type);
+        sb.append(", difficult=").append(difficult);
+        sb.append(", questionTime=").append(questionTime);
+        sb.append(", qxTime=").append(qxTime);
+        sb.append(", officalTime=").append(officalTime);
+        sb.append(", associationTime=").append(associationTime);
+        sb.append(", totalTime=").append(totalTime);
+        sb.append(", totalNumber=").append(totalNumber);
+        sb.append(", totalCorrect=").append(totalCorrect);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static Question.Builder builder() {
+        return new Question.Builder();
+    }
+
+    public static class Builder {
+        private Question obj;
+
+        public Builder() {
+            this.obj = new Question();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置模块:examination, exercise,sentence
+         *
+         * @param module 模块:examination, exercise,sentence
+         */
+        public Builder module(Integer module) {
+            obj.setModule(module);
+            return this;
+        }
+
+        /**
+         * 设置类型
+         *
+         * @param type 类型
+         */
+        public Builder type(Integer type) {
+            obj.setType(type);
+            return this;
+        }
+
+        /**
+         * 设置难度
+         *
+         * @param difficult 难度
+         */
+        public Builder difficult(Integer difficult) {
+            obj.setDifficult(difficult);
+            return this;
+        }
+
+        /**
+         * @param questionTime
+         */
+        public Builder questionTime(Date questionTime) {
+            obj.setQuestionTime(questionTime);
+            return this;
+        }
+
+        /**
+         * @param qxTime
+         */
+        public Builder qxTime(Date qxTime) {
+            obj.setQxTime(qxTime);
+            return this;
+        }
+
+        /**
+         * @param officalTime
+         */
+        public Builder officalTime(Date officalTime) {
+            obj.setOfficalTime(officalTime);
+            return this;
+        }
+
+        /**
+         * @param associationTime
+         */
+        public Builder associationTime(Date associationTime) {
+            obj.setAssociationTime(associationTime);
+            return this;
+        }
+
+        /**
+         * 设置总作答时间
+         *
+         * @param totalTime 总作答时间
+         */
+        public Builder totalTime(Integer totalTime) {
+            obj.setTotalTime(totalTime);
+            return this;
+        }
+
+        /**
+         * 设置总作答次数
+         *
+         * @param totalNumber 总作答次数
+         */
+        public Builder totalNumber(Integer totalNumber) {
+            obj.setTotalNumber(totalNumber);
+            return this;
+        }
+
+        /**
+         * 设置总正确次数
+         *
+         * @param totalCorrect 总正确次数
+         */
+        public Builder totalCorrect(Integer totalCorrect) {
+            obj.setTotalCorrect(totalCorrect);
+            return this;
+        }
+
+        public Question build() {
+            return this.obj;
+        }
+    }
+}

+ 63 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/Rank.java

@@ -0,0 +1,63 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "rank")
+public class Rank implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static Rank.Builder builder() {
+        return new Rank.Builder();
+    }
+
+    public static class Builder {
+        private Rank obj;
+
+        public Builder() {
+            this.obj = new Rank();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        public Rank build() {
+            return this.obj;
+        }
+    }
+}

+ 63 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/Sentence.java

@@ -0,0 +1,63 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "sentence")
+public class Sentence implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static Sentence.Builder builder() {
+        return new Sentence.Builder();
+    }
+
+    public static class Builder {
+        private Sentence obj;
+
+        public Builder() {
+            this.obj = new Sentence();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        public Sentence build() {
+            return this.obj;
+        }
+    }
+}

+ 203 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/SentenceArticle.java

@@ -0,0 +1,203 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "sentence_article")
+public class SentenceArticle implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 章节
+     */
+    @Column(name = "`chapter`")
+    private Integer chapter;
+
+    /**
+     * 段落
+     */
+    @Column(name = "`part`")
+    private Integer part;
+
+    /**
+     * 是否试用:0非试用,1试用
+     */
+    @Column(name = "`is_trail`")
+    private Integer isTrail;
+
+    /**
+     * 内容
+     */
+    @Column(name = "`content`")
+    private String content;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取章节
+     *
+     * @return chapter - 章节
+     */
+    public Integer getChapter() {
+        return chapter;
+    }
+
+    /**
+     * 设置章节
+     *
+     * @param chapter 章节
+     */
+    public void setChapter(Integer chapter) {
+        this.chapter = chapter;
+    }
+
+    /**
+     * 获取段落
+     *
+     * @return part - 段落
+     */
+    public Integer getPart() {
+        return part;
+    }
+
+    /**
+     * 设置段落
+     *
+     * @param part 段落
+     */
+    public void setPart(Integer part) {
+        this.part = part;
+    }
+
+    /**
+     * 获取是否试用:0非试用,1试用
+     *
+     * @return is_trail - 是否试用:0非试用,1试用
+     */
+    public Integer getIsTrail() {
+        return isTrail;
+    }
+
+    /**
+     * 设置是否试用:0非试用,1试用
+     *
+     * @param isTrail 是否试用:0非试用,1试用
+     */
+    public void setIsTrail(Integer isTrail) {
+        this.isTrail = isTrail;
+    }
+
+    /**
+     * 获取内容
+     *
+     * @return content - 内容
+     */
+    public String getContent() {
+        return content;
+    }
+
+    /**
+     * 设置内容
+     *
+     * @param content 内容
+     */
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", chapter=").append(chapter);
+        sb.append(", part=").append(part);
+        sb.append(", isTrail=").append(isTrail);
+        sb.append(", content=").append(content);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static SentenceArticle.Builder builder() {
+        return new SentenceArticle.Builder();
+    }
+
+    public static class Builder {
+        private SentenceArticle obj;
+
+        public Builder() {
+            this.obj = new SentenceArticle();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置章节
+         *
+         * @param chapter 章节
+         */
+        public Builder chapter(Integer chapter) {
+            obj.setChapter(chapter);
+            return this;
+        }
+
+        /**
+         * 设置段落
+         *
+         * @param part 段落
+         */
+        public Builder part(Integer part) {
+            obj.setPart(part);
+            return this;
+        }
+
+        /**
+         * 设置是否试用:0非试用,1试用
+         *
+         * @param isTrail 是否试用:0非试用,1试用
+         */
+        public Builder isTrail(Integer isTrail) {
+            obj.setIsTrail(isTrail);
+            return this;
+        }
+
+        /**
+         * 设置内容
+         *
+         * @param content 内容
+         */
+        public Builder content(String content) {
+            obj.setContent(content);
+            return this;
+        }
+
+        public SentenceArticle build() {
+            return this.obj;
+        }
+    }
+}

+ 186 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/SentenceCode.java

@@ -0,0 +1,186 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "sentence_code")
+public class SentenceCode implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 激活code
+     */
+    @Column(name = "`code`")
+    private String code;
+
+    /**
+     * 激活用户id
+     */
+    @Column(name = "`user_id`")
+    private Integer userId;
+
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    @Column(name = "`update_time`")
+    private Date updateTime;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取激活code
+     *
+     * @return code - 激活code
+     */
+    public String getCode() {
+        return code;
+    }
+
+    /**
+     * 设置激活code
+     *
+     * @param code 激活code
+     */
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    /**
+     * 获取激活用户id
+     *
+     * @return user_id - 激活用户id
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+
+    /**
+     * 设置激活用户id
+     *
+     * @param userId 激活用户id
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * @return create_time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * @return update_time
+     */
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    /**
+     * @param updateTime
+     */
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", code=").append(code);
+        sb.append(", userId=").append(userId);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static SentenceCode.Builder builder() {
+        return new SentenceCode.Builder();
+    }
+
+    public static class Builder {
+        private SentenceCode obj;
+
+        public Builder() {
+            this.obj = new SentenceCode();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置激活code
+         *
+         * @param code 激活code
+         */
+        public Builder code(String code) {
+            obj.setCode(code);
+            return this;
+        }
+
+        /**
+         * 设置激活用户id
+         *
+         * @param userId 激活用户id
+         */
+        public Builder userId(Integer userId) {
+            obj.setUserId(userId);
+            return this;
+        }
+
+        /**
+         * @param createTime
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        /**
+         * @param updateTime
+         */
+        public Builder updateTime(Date updateTime) {
+            obj.setUpdateTime(updateTime);
+            return this;
+        }
+
+        public SentenceCode build() {
+            return this.obj;
+        }
+    }
+}

+ 63 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/SentencePaper.java

@@ -0,0 +1,63 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "sentence_paper")
+public class SentencePaper implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static SentencePaper.Builder builder() {
+        return new SentencePaper.Builder();
+    }
+
+    public static class Builder {
+        private SentencePaper obj;
+
+        public Builder() {
+            this.obj = new SentencePaper();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        public SentencePaper build() {
+            return this.obj;
+        }
+    }
+}

+ 168 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/SentenceQuestion.java

@@ -0,0 +1,168 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "sentence_question")
+public class SentenceQuestion implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 是否试用:0非试用,1试用
+     */
+    @Column(name = "`is_trail`")
+    private Integer isTrail;
+
+    /**
+     * 千行解析
+     */
+    @Column(name = "`question_id`")
+    private Integer questionId;
+
+    /**
+     * 长难句id
+     */
+    @Column(name = "`sentence_id`")
+    private Integer sentenceId;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取是否试用:0非试用,1试用
+     *
+     * @return is_trail - 是否试用:0非试用,1试用
+     */
+    public Integer getIsTrail() {
+        return isTrail;
+    }
+
+    /**
+     * 设置是否试用:0非试用,1试用
+     *
+     * @param isTrail 是否试用:0非试用,1试用
+     */
+    public void setIsTrail(Integer isTrail) {
+        this.isTrail = isTrail;
+    }
+
+    /**
+     * 获取千行解析
+     *
+     * @return question_id - 千行解析
+     */
+    public Integer getQuestionId() {
+        return questionId;
+    }
+
+    /**
+     * 设置千行解析
+     *
+     * @param questionId 千行解析
+     */
+    public void setQuestionId(Integer questionId) {
+        this.questionId = questionId;
+    }
+
+    /**
+     * 获取长难句id
+     *
+     * @return sentence_id - 长难句id
+     */
+    public Integer getSentenceId() {
+        return sentenceId;
+    }
+
+    /**
+     * 设置长难句id
+     *
+     * @param sentenceId 长难句id
+     */
+    public void setSentenceId(Integer sentenceId) {
+        this.sentenceId = sentenceId;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", isTrail=").append(isTrail);
+        sb.append(", questionId=").append(questionId);
+        sb.append(", sentenceId=").append(sentenceId);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static SentenceQuestion.Builder builder() {
+        return new SentenceQuestion.Builder();
+    }
+
+    public static class Builder {
+        private SentenceQuestion obj;
+
+        public Builder() {
+            this.obj = new SentenceQuestion();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置是否试用:0非试用,1试用
+         *
+         * @param isTrail 是否试用:0非试用,1试用
+         */
+        public Builder isTrail(Integer isTrail) {
+            obj.setIsTrail(isTrail);
+            return this;
+        }
+
+        /**
+         * 设置千行解析
+         *
+         * @param questionId 千行解析
+         */
+        public Builder questionId(Integer questionId) {
+            obj.setQuestionId(questionId);
+            return this;
+        }
+
+        /**
+         * 设置长难句id
+         *
+         * @param sentenceId 长难句id
+         */
+        public Builder sentenceId(Integer sentenceId) {
+            obj.setSentenceId(sentenceId);
+            return this;
+        }
+
+        public SentenceQuestion build() {
+            return this.obj;
+        }
+    }
+}

+ 63 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/SentenceStruct.java

@@ -0,0 +1,63 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "sentence_struct")
+public class SentenceStruct implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static SentenceStruct.Builder builder() {
+        return new SentenceStruct.Builder();
+    }
+
+    public static class Builder {
+        private SentenceStruct obj;
+
+        public Builder() {
+            this.obj = new SentenceStruct();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        public SentenceStruct build() {
+            return this.obj;
+        }
+    }
+}

+ 133 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/Setting.java

@@ -0,0 +1,133 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "setting")
+public class Setting implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 配置key
+     */
+    @Column(name = "`key`")
+    private String key;
+
+    /**
+     * 内容:json
+     */
+    @Column(name = "`value`")
+    private String value;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取配置key
+     *
+     * @return key - 配置key
+     */
+    public String getKey() {
+        return key;
+    }
+
+    /**
+     * 设置配置key
+     *
+     * @param key 配置key
+     */
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    /**
+     * 获取内容:json
+     *
+     * @return value - 内容:json
+     */
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 设置内容:json
+     *
+     * @param value 内容:json
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", key=").append(key);
+        sb.append(", value=").append(value);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static Setting.Builder builder() {
+        return new Setting.Builder();
+    }
+
+    public static class Builder {
+        private Setting obj;
+
+        public Builder() {
+            this.obj = new Setting();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置配置key
+         *
+         * @param key 配置key
+         */
+        public Builder key(String key) {
+            obj.setKey(key);
+            return this;
+        }
+
+        /**
+         * 设置内容:json
+         *
+         * @param value 内容:json
+         */
+        public Builder value(String value) {
+            obj.setValue(value);
+            return this;
+        }
+
+        public Setting build() {
+            return this.obj;
+        }
+    }
+}

+ 851 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/User.java

@@ -0,0 +1,851 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "user")
+public class User implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 昵称
+     */
+    @Column(name = "`nickname`")
+    private String nickname;
+
+    @Column(name = "`avatar`")
+    private String avatar;
+
+    /**
+     * 密码
+     */
+    @Column(name = "`password`")
+    private String password;
+
+    /**
+     * 邮箱
+     */
+    @Column(name = "`email`")
+    private String email;
+
+    /**
+     * 手机
+     */
+    @Column(name = "`mobile`")
+    private String mobile;
+
+    /**
+     * 微信openid:pc端
+     */
+    @Column(name = "`wechat_open_id_pc`")
+    private String wechatOpenIdPc;
+
+    /**
+     * 微信openid: 公众号
+     */
+    @Column(name = "`wechat_open_id_wechat`")
+    private String wechatOpenIdWechat;
+
+    /**
+     * 微信关联id
+     */
+    @Column(name = "`wechat_union_id`")
+    private String wechatUnionId;
+
+    /**
+     * 微信公众号accessToken
+     */
+    @Column(name = "`wechat_access_token`")
+    private String wechatAccessToken;
+
+    /**
+     * 微信公众号refresh_token
+     */
+    @Column(name = "`wechat_refresh_token`")
+    private String wechatRefreshToken;
+
+    /**
+     * 微信公众号expireTime
+     */
+    @Column(name = "`wechat_expire_time`")
+    private Date wechatExpireTime;
+
+    /**
+     * 实名:姓名
+     */
+    @Column(name = "`real_name`")
+    private String realName;
+
+    /**
+     * 实名:地址
+     */
+    @Column(name = "`real_address`")
+    private String realAddress;
+
+    /**
+     * 实名:身份ID
+     */
+    @Column(name = "`real_identity`")
+    private String realIdentity;
+
+    /**
+     * 实名:身份证照片
+     */
+    @Column(name = "`real_photo`")
+    private String realPhoto;
+
+    /**
+     * 备考:身份
+     */
+    @Column(name = "`prepare_status`")
+    private Integer prepareStatus;
+
+    /**
+     * 备考:目标分数
+     */
+    @Column(name = "`prepare_goal`")
+    private Integer prepareGoal;
+
+    /**
+     * 备考:考试时间
+     */
+    @Column(name = "`prepare_examination_time`")
+    private Date prepareExaminationTime;
+
+    /**
+     * 备考:处分时间
+     */
+    @Column(name = "`prepare_score_time`")
+    private Date prepareScoreTime;
+
+    /**
+     * 上次做题
+     */
+    @Column(name = "`last_exercise`")
+    private Integer lastExercise;
+
+    /**
+     * 邀请用户
+     */
+    @Column(name = "`origin_id`")
+    private Integer originId;
+
+    /**
+     * 个人邀请码
+     */
+    @Column(name = "`invite_code`")
+    private String inviteCode;
+
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取昵称
+     *
+     * @return nickname - 昵称
+     */
+    public String getNickname() {
+        return nickname;
+    }
+
+    /**
+     * 设置昵称
+     *
+     * @param nickname 昵称
+     */
+    public void setNickname(String nickname) {
+        this.nickname = nickname;
+    }
+
+    /**
+     * @return avatar
+     */
+    public String getAvatar() {
+        return avatar;
+    }
+
+    /**
+     * @param avatar
+     */
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    /**
+     * 获取密码
+     *
+     * @return password - 密码
+     */
+    public String getPassword() {
+        return password;
+    }
+
+    /**
+     * 设置密码
+     *
+     * @param password 密码
+     */
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    /**
+     * 获取邮箱
+     *
+     * @return email - 邮箱
+     */
+    public String getEmail() {
+        return email;
+    }
+
+    /**
+     * 设置邮箱
+     *
+     * @param email 邮箱
+     */
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    /**
+     * 获取手机
+     *
+     * @return mobile - 手机
+     */
+    public String getMobile() {
+        return mobile;
+    }
+
+    /**
+     * 设置手机
+     *
+     * @param mobile 手机
+     */
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    /**
+     * 获取微信openid:pc端
+     *
+     * @return wechat_open_id_pc - 微信openid:pc端
+     */
+    public String getWechatOpenIdPc() {
+        return wechatOpenIdPc;
+    }
+
+    /**
+     * 设置微信openid:pc端
+     *
+     * @param wechatOpenIdPc 微信openid:pc端
+     */
+    public void setWechatOpenIdPc(String wechatOpenIdPc) {
+        this.wechatOpenIdPc = wechatOpenIdPc;
+    }
+
+    /**
+     * 获取微信openid: 公众号
+     *
+     * @return wechat_open_id_wechat - 微信openid: 公众号
+     */
+    public String getWechatOpenIdWechat() {
+        return wechatOpenIdWechat;
+    }
+
+    /**
+     * 设置微信openid: 公众号
+     *
+     * @param wechatOpenIdWechat 微信openid: 公众号
+     */
+    public void setWechatOpenIdWechat(String wechatOpenIdWechat) {
+        this.wechatOpenIdWechat = wechatOpenIdWechat;
+    }
+
+    /**
+     * 获取微信关联id
+     *
+     * @return wechat_union_id - 微信关联id
+     */
+    public String getWechatUnionId() {
+        return wechatUnionId;
+    }
+
+    /**
+     * 设置微信关联id
+     *
+     * @param wechatUnionId 微信关联id
+     */
+    public void setWechatUnionId(String wechatUnionId) {
+        this.wechatUnionId = wechatUnionId;
+    }
+
+    /**
+     * 获取微信公众号accessToken
+     *
+     * @return wechat_access_token - 微信公众号accessToken
+     */
+    public String getWechatAccessToken() {
+        return wechatAccessToken;
+    }
+
+    /**
+     * 设置微信公众号accessToken
+     *
+     * @param wechatAccessToken 微信公众号accessToken
+     */
+    public void setWechatAccessToken(String wechatAccessToken) {
+        this.wechatAccessToken = wechatAccessToken;
+    }
+
+    /**
+     * 获取微信公众号refresh_token
+     *
+     * @return wechat_refresh_token - 微信公众号refresh_token
+     */
+    public String getWechatRefreshToken() {
+        return wechatRefreshToken;
+    }
+
+    /**
+     * 设置微信公众号refresh_token
+     *
+     * @param wechatRefreshToken 微信公众号refresh_token
+     */
+    public void setWechatRefreshToken(String wechatRefreshToken) {
+        this.wechatRefreshToken = wechatRefreshToken;
+    }
+
+    /**
+     * 获取微信公众号expireTime
+     *
+     * @return wechat_expire_time - 微信公众号expireTime
+     */
+    public Date getWechatExpireTime() {
+        return wechatExpireTime;
+    }
+
+    /**
+     * 设置微信公众号expireTime
+     *
+     * @param wechatExpireTime 微信公众号expireTime
+     */
+    public void setWechatExpireTime(Date wechatExpireTime) {
+        this.wechatExpireTime = wechatExpireTime;
+    }
+
+    /**
+     * 获取实名:姓名
+     *
+     * @return real_name - 实名:姓名
+     */
+    public String getRealName() {
+        return realName;
+    }
+
+    /**
+     * 设置实名:姓名
+     *
+     * @param realName 实名:姓名
+     */
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    /**
+     * 获取实名:地址
+     *
+     * @return real_address - 实名:地址
+     */
+    public String getRealAddress() {
+        return realAddress;
+    }
+
+    /**
+     * 设置实名:地址
+     *
+     * @param realAddress 实名:地址
+     */
+    public void setRealAddress(String realAddress) {
+        this.realAddress = realAddress;
+    }
+
+    /**
+     * 获取实名:身份ID
+     *
+     * @return real_identity - 实名:身份ID
+     */
+    public String getRealIdentity() {
+        return realIdentity;
+    }
+
+    /**
+     * 设置实名:身份ID
+     *
+     * @param realIdentity 实名:身份ID
+     */
+    public void setRealIdentity(String realIdentity) {
+        this.realIdentity = realIdentity;
+    }
+
+    /**
+     * 获取实名:身份证照片
+     *
+     * @return real_photo - 实名:身份证照片
+     */
+    public String getRealPhoto() {
+        return realPhoto;
+    }
+
+    /**
+     * 设置实名:身份证照片
+     *
+     * @param realPhoto 实名:身份证照片
+     */
+    public void setRealPhoto(String realPhoto) {
+        this.realPhoto = realPhoto;
+    }
+
+    /**
+     * 获取备考:身份
+     *
+     * @return prepare_status - 备考:身份
+     */
+    public Integer getPrepareStatus() {
+        return prepareStatus;
+    }
+
+    /**
+     * 设置备考:身份
+     *
+     * @param prepareStatus 备考:身份
+     */
+    public void setPrepareStatus(Integer prepareStatus) {
+        this.prepareStatus = prepareStatus;
+    }
+
+    /**
+     * 获取备考:目标分数
+     *
+     * @return prepare_goal - 备考:目标分数
+     */
+    public Integer getPrepareGoal() {
+        return prepareGoal;
+    }
+
+    /**
+     * 设置备考:目标分数
+     *
+     * @param prepareGoal 备考:目标分数
+     */
+    public void setPrepareGoal(Integer prepareGoal) {
+        this.prepareGoal = prepareGoal;
+    }
+
+    /**
+     * 获取备考:考试时间
+     *
+     * @return prepare_examination_time - 备考:考试时间
+     */
+    public Date getPrepareExaminationTime() {
+        return prepareExaminationTime;
+    }
+
+    /**
+     * 设置备考:考试时间
+     *
+     * @param prepareExaminationTime 备考:考试时间
+     */
+    public void setPrepareExaminationTime(Date prepareExaminationTime) {
+        this.prepareExaminationTime = prepareExaminationTime;
+    }
+
+    /**
+     * 获取备考:处分时间
+     *
+     * @return prepare_score_time - 备考:处分时间
+     */
+    public Date getPrepareScoreTime() {
+        return prepareScoreTime;
+    }
+
+    /**
+     * 设置备考:处分时间
+     *
+     * @param prepareScoreTime 备考:处分时间
+     */
+    public void setPrepareScoreTime(Date prepareScoreTime) {
+        this.prepareScoreTime = prepareScoreTime;
+    }
+
+    /**
+     * 获取上次做题
+     *
+     * @return last_exercise - 上次做题
+     */
+    public Integer getLastExercise() {
+        return lastExercise;
+    }
+
+    /**
+     * 设置上次做题
+     *
+     * @param lastExercise 上次做题
+     */
+    public void setLastExercise(Integer lastExercise) {
+        this.lastExercise = lastExercise;
+    }
+
+    /**
+     * 获取邀请用户
+     *
+     * @return origin_id - 邀请用户
+     */
+    public Integer getOriginId() {
+        return originId;
+    }
+
+    /**
+     * 设置邀请用户
+     *
+     * @param originId 邀请用户
+     */
+    public void setOriginId(Integer originId) {
+        this.originId = originId;
+    }
+
+    /**
+     * 获取个人邀请码
+     *
+     * @return invite_code - 个人邀请码
+     */
+    public String getInviteCode() {
+        return inviteCode;
+    }
+
+    /**
+     * 设置个人邀请码
+     *
+     * @param inviteCode 个人邀请码
+     */
+    public void setInviteCode(String inviteCode) {
+        this.inviteCode = inviteCode;
+    }
+
+    /**
+     * @return create_time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", nickname=").append(nickname);
+        sb.append(", avatar=").append(avatar);
+        sb.append(", password=").append(password);
+        sb.append(", email=").append(email);
+        sb.append(", mobile=").append(mobile);
+        sb.append(", wechatOpenIdPc=").append(wechatOpenIdPc);
+        sb.append(", wechatOpenIdWechat=").append(wechatOpenIdWechat);
+        sb.append(", wechatUnionId=").append(wechatUnionId);
+        sb.append(", wechatAccessToken=").append(wechatAccessToken);
+        sb.append(", wechatRefreshToken=").append(wechatRefreshToken);
+        sb.append(", wechatExpireTime=").append(wechatExpireTime);
+        sb.append(", realName=").append(realName);
+        sb.append(", realAddress=").append(realAddress);
+        sb.append(", realIdentity=").append(realIdentity);
+        sb.append(", realPhoto=").append(realPhoto);
+        sb.append(", prepareStatus=").append(prepareStatus);
+        sb.append(", prepareGoal=").append(prepareGoal);
+        sb.append(", prepareExaminationTime=").append(prepareExaminationTime);
+        sb.append(", prepareScoreTime=").append(prepareScoreTime);
+        sb.append(", lastExercise=").append(lastExercise);
+        sb.append(", originId=").append(originId);
+        sb.append(", inviteCode=").append(inviteCode);
+        sb.append(", createTime=").append(createTime);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static User.Builder builder() {
+        return new User.Builder();
+    }
+
+    public static class Builder {
+        private User obj;
+
+        public Builder() {
+            this.obj = new User();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置昵称
+         *
+         * @param nickname 昵称
+         */
+        public Builder nickname(String nickname) {
+            obj.setNickname(nickname);
+            return this;
+        }
+
+        /**
+         * @param avatar
+         */
+        public Builder avatar(String avatar) {
+            obj.setAvatar(avatar);
+            return this;
+        }
+
+        /**
+         * 设置密码
+         *
+         * @param password 密码
+         */
+        public Builder password(String password) {
+            obj.setPassword(password);
+            return this;
+        }
+
+        /**
+         * 设置邮箱
+         *
+         * @param email 邮箱
+         */
+        public Builder email(String email) {
+            obj.setEmail(email);
+            return this;
+        }
+
+        /**
+         * 设置手机
+         *
+         * @param mobile 手机
+         */
+        public Builder mobile(String mobile) {
+            obj.setMobile(mobile);
+            return this;
+        }
+
+        /**
+         * 设置微信openid:pc端
+         *
+         * @param wechatOpenIdPc 微信openid:pc端
+         */
+        public Builder wechatOpenIdPc(String wechatOpenIdPc) {
+            obj.setWechatOpenIdPc(wechatOpenIdPc);
+            return this;
+        }
+
+        /**
+         * 设置微信openid: 公众号
+         *
+         * @param wechatOpenIdWechat 微信openid: 公众号
+         */
+        public Builder wechatOpenIdWechat(String wechatOpenIdWechat) {
+            obj.setWechatOpenIdWechat(wechatOpenIdWechat);
+            return this;
+        }
+
+        /**
+         * 设置微信关联id
+         *
+         * @param wechatUnionId 微信关联id
+         */
+        public Builder wechatUnionId(String wechatUnionId) {
+            obj.setWechatUnionId(wechatUnionId);
+            return this;
+        }
+
+        /**
+         * 设置微信公众号accessToken
+         *
+         * @param wechatAccessToken 微信公众号accessToken
+         */
+        public Builder wechatAccessToken(String wechatAccessToken) {
+            obj.setWechatAccessToken(wechatAccessToken);
+            return this;
+        }
+
+        /**
+         * 设置微信公众号refresh_token
+         *
+         * @param wechatRefreshToken 微信公众号refresh_token
+         */
+        public Builder wechatRefreshToken(String wechatRefreshToken) {
+            obj.setWechatRefreshToken(wechatRefreshToken);
+            return this;
+        }
+
+        /**
+         * 设置微信公众号expireTime
+         *
+         * @param wechatExpireTime 微信公众号expireTime
+         */
+        public Builder wechatExpireTime(Date wechatExpireTime) {
+            obj.setWechatExpireTime(wechatExpireTime);
+            return this;
+        }
+
+        /**
+         * 设置实名:姓名
+         *
+         * @param realName 实名:姓名
+         */
+        public Builder realName(String realName) {
+            obj.setRealName(realName);
+            return this;
+        }
+
+        /**
+         * 设置实名:地址
+         *
+         * @param realAddress 实名:地址
+         */
+        public Builder realAddress(String realAddress) {
+            obj.setRealAddress(realAddress);
+            return this;
+        }
+
+        /**
+         * 设置实名:身份ID
+         *
+         * @param realIdentity 实名:身份ID
+         */
+        public Builder realIdentity(String realIdentity) {
+            obj.setRealIdentity(realIdentity);
+            return this;
+        }
+
+        /**
+         * 设置实名:身份证照片
+         *
+         * @param realPhoto 实名:身份证照片
+         */
+        public Builder realPhoto(String realPhoto) {
+            obj.setRealPhoto(realPhoto);
+            return this;
+        }
+
+        /**
+         * 设置备考:身份
+         *
+         * @param prepareStatus 备考:身份
+         */
+        public Builder prepareStatus(Integer prepareStatus) {
+            obj.setPrepareStatus(prepareStatus);
+            return this;
+        }
+
+        /**
+         * 设置备考:目标分数
+         *
+         * @param prepareGoal 备考:目标分数
+         */
+        public Builder prepareGoal(Integer prepareGoal) {
+            obj.setPrepareGoal(prepareGoal);
+            return this;
+        }
+
+        /**
+         * 设置备考:考试时间
+         *
+         * @param prepareExaminationTime 备考:考试时间
+         */
+        public Builder prepareExaminationTime(Date prepareExaminationTime) {
+            obj.setPrepareExaminationTime(prepareExaminationTime);
+            return this;
+        }
+
+        /**
+         * 设置备考:处分时间
+         *
+         * @param prepareScoreTime 备考:处分时间
+         */
+        public Builder prepareScoreTime(Date prepareScoreTime) {
+            obj.setPrepareScoreTime(prepareScoreTime);
+            return this;
+        }
+
+        /**
+         * 设置上次做题
+         *
+         * @param lastExercise 上次做题
+         */
+        public Builder lastExercise(Integer lastExercise) {
+            obj.setLastExercise(lastExercise);
+            return this;
+        }
+
+        /**
+         * 设置邀请用户
+         *
+         * @param originId 邀请用户
+         */
+        public Builder originId(Integer originId) {
+            obj.setOriginId(originId);
+            return this;
+        }
+
+        /**
+         * 设置个人邀请码
+         *
+         * @param inviteCode 个人邀请码
+         */
+        public Builder inviteCode(String inviteCode) {
+            obj.setInviteCode(inviteCode);
+            return this;
+        }
+
+        /**
+         * @param createTime
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        public User build() {
+            return this.obj;
+        }
+    }
+}

+ 256 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserAsk.java

@@ -0,0 +1,256 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "user_ask")
+public class UserAsk implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "`user_id`")
+    private Integer userId;
+
+    /**
+     * 题目id
+     */
+    @Column(name = "`question_id`")
+    private Integer questionId;
+
+    /**
+     * 问题对象:question,offical,qianxing,association
+     */
+    @Column(name = "`target`")
+    private String target;
+
+    /**
+     * 回答人id
+     */
+    @Column(name = "`manager_id`")
+    private Integer managerId;
+
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    @Column(name = "`update_time`")
+    private Date updateTime;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取用户id
+     *
+     * @return user_id - 用户id
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+
+    /**
+     * 设置用户id
+     *
+     * @param userId 用户id
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * 获取题目id
+     *
+     * @return question_id - 题目id
+     */
+    public Integer getQuestionId() {
+        return questionId;
+    }
+
+    /**
+     * 设置题目id
+     *
+     * @param questionId 题目id
+     */
+    public void setQuestionId(Integer questionId) {
+        this.questionId = questionId;
+    }
+
+    /**
+     * 获取问题对象:question,offical,qianxing,association
+     *
+     * @return target - 问题对象:question,offical,qianxing,association
+     */
+    public String getTarget() {
+        return target;
+    }
+
+    /**
+     * 设置问题对象:question,offical,qianxing,association
+     *
+     * @param target 问题对象:question,offical,qianxing,association
+     */
+    public void setTarget(String target) {
+        this.target = target;
+    }
+
+    /**
+     * 获取回答人id
+     *
+     * @return manager_id - 回答人id
+     */
+    public Integer getManagerId() {
+        return managerId;
+    }
+
+    /**
+     * 设置回答人id
+     *
+     * @param managerId 回答人id
+     */
+    public void setManagerId(Integer managerId) {
+        this.managerId = managerId;
+    }
+
+    /**
+     * @return create_time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * @return update_time
+     */
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    /**
+     * @param updateTime
+     */
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", questionId=").append(questionId);
+        sb.append(", target=").append(target);
+        sb.append(", managerId=").append(managerId);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserAsk.Builder builder() {
+        return new UserAsk.Builder();
+    }
+
+    public static class Builder {
+        private UserAsk obj;
+
+        public Builder() {
+            this.obj = new UserAsk();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置用户id
+         *
+         * @param userId 用户id
+         */
+        public Builder userId(Integer userId) {
+            obj.setUserId(userId);
+            return this;
+        }
+
+        /**
+         * 设置题目id
+         *
+         * @param questionId 题目id
+         */
+        public Builder questionId(Integer questionId) {
+            obj.setQuestionId(questionId);
+            return this;
+        }
+
+        /**
+         * 设置问题对象:question,offical,qianxing,association
+         *
+         * @param target 问题对象:question,offical,qianxing,association
+         */
+        public Builder target(String target) {
+            obj.setTarget(target);
+            return this;
+        }
+
+        /**
+         * 设置回答人id
+         *
+         * @param managerId 回答人id
+         */
+        public Builder managerId(Integer managerId) {
+            obj.setManagerId(managerId);
+            return this;
+        }
+
+        /**
+         * @param createTime
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        /**
+         * @param updateTime
+         */
+        public Builder updateTime(Date updateTime) {
+            obj.setUpdateTime(updateTime);
+            return this;
+        }
+
+        public UserAsk build() {
+            return this.obj;
+        }
+    }
+}

+ 195 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserCollect.java

@@ -0,0 +1,195 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "user_collect")
+public class UserCollect implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "`user_id`")
+    private Integer userId;
+
+    /**
+     * 模块:question,article
+     */
+    @Column(name = "`module`")
+    private String module;
+
+    /**
+     * 对应模块id
+     */
+    @Column(name = "`module_id`")
+    private Integer moduleId;
+
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取用户id
+     *
+     * @return user_id - 用户id
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+
+    /**
+     * 设置用户id
+     *
+     * @param userId 用户id
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * 获取模块:question,article
+     *
+     * @return module - 模块:question,article
+     */
+    public String getModule() {
+        return module;
+    }
+
+    /**
+     * 设置模块:question,article
+     *
+     * @param module 模块:question,article
+     */
+    public void setModule(String module) {
+        this.module = module;
+    }
+
+    /**
+     * 获取对应模块id
+     *
+     * @return module_id - 对应模块id
+     */
+    public Integer getModuleId() {
+        return moduleId;
+    }
+
+    /**
+     * 设置对应模块id
+     *
+     * @param moduleId 对应模块id
+     */
+    public void setModuleId(Integer moduleId) {
+        this.moduleId = moduleId;
+    }
+
+    /**
+     * @return create_time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", module=").append(module);
+        sb.append(", moduleId=").append(moduleId);
+        sb.append(", createTime=").append(createTime);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserCollect.Builder builder() {
+        return new UserCollect.Builder();
+    }
+
+    public static class Builder {
+        private UserCollect obj;
+
+        public Builder() {
+            this.obj = new UserCollect();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置用户id
+         *
+         * @param userId 用户id
+         */
+        public Builder userId(Integer userId) {
+            obj.setUserId(userId);
+            return this;
+        }
+
+        /**
+         * 设置模块:question,article
+         *
+         * @param module 模块:question,article
+         */
+        public Builder module(String module) {
+            obj.setModule(module);
+            return this;
+        }
+
+        /**
+         * 设置对应模块id
+         *
+         * @param moduleId 对应模块id
+         */
+        public Builder moduleId(Integer moduleId) {
+            obj.setModuleId(moduleId);
+            return this;
+        }
+
+        /**
+         * @param createTime
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        public UserCollect build() {
+            return this.obj;
+        }
+    }
+}

+ 63 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserCollectArticle.java

@@ -0,0 +1,63 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "user_collect_article")
+public class UserCollectArticle implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserCollectArticle.Builder builder() {
+        return new UserCollectArticle.Builder();
+    }
+
+    public static class Builder {
+        private UserCollectArticle obj;
+
+        public Builder() {
+            this.obj = new UserCollectArticle();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        public UserCollectArticle build() {
+            return this.obj;
+        }
+    }
+}

+ 63 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserCollectQuestion.java

@@ -0,0 +1,63 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "user_collect_question")
+public class UserCollectQuestion implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserCollectQuestion.Builder builder() {
+        return new UserCollectQuestion.Builder();
+    }
+
+    public static class Builder {
+        private UserCollectQuestion obj;
+
+        public Builder() {
+            this.obj = new UserCollectQuestion();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        public UserCollectQuestion build() {
+            return this.obj;
+        }
+    }
+}

+ 63 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserExamination.java

@@ -0,0 +1,63 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "user_examination")
+public class UserExamination implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserExamination.Builder builder() {
+        return new UserExamination.Builder();
+    }
+
+    public static class Builder {
+        private UserExamination obj;
+
+        public Builder() {
+            this.obj = new UserExamination();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        public UserExamination build() {
+            return this.obj;
+        }
+    }
+}

+ 63 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserExercise.java

@@ -0,0 +1,63 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "user_exercise")
+public class UserExercise implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserExercise.Builder builder() {
+        return new UserExercise.Builder();
+    }
+
+    public static class Builder {
+        private UserExercise obj;
+
+        public Builder() {
+            this.obj = new UserExercise();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        public UserExercise build() {
+            return this.obj;
+        }
+    }
+}

+ 124 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserMessage.java

@@ -0,0 +1,124 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "user_message")
+public class UserMessage implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "`user_id`")
+    private Integer userId;
+
+    @Column(name = "`content`")
+    private String content;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取用户id
+     *
+     * @return user_id - 用户id
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+
+    /**
+     * 设置用户id
+     *
+     * @param userId 用户id
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * @return content
+     */
+    public String getContent() {
+        return content;
+    }
+
+    /**
+     * @param content
+     */
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", content=").append(content);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserMessage.Builder builder() {
+        return new UserMessage.Builder();
+    }
+
+    public static class Builder {
+        private UserMessage obj;
+
+        public Builder() {
+            this.obj = new UserMessage();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置用户id
+         *
+         * @param userId 用户id
+         */
+        public Builder userId(Integer userId) {
+            obj.setUserId(userId);
+            return this;
+        }
+
+        /**
+         * @param content
+         */
+        public Builder content(String content) {
+            obj.setContent(content);
+            return this;
+        }
+
+        public UserMessage build() {
+            return this.obj;
+        }
+    }
+}

+ 221 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserNote.java

@@ -0,0 +1,221 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "user_note")
+public class UserNote implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "`user_id`")
+    private Integer userId;
+
+    /**
+     * 题目id
+     */
+    @Column(name = "`question_id`")
+    private Integer questionId;
+
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    @Column(name = "`update_time`")
+    private Date updateTime;
+
+    /**
+     * 笔记内容
+     */
+    @Column(name = "`content`")
+    private String content;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取用户id
+     *
+     * @return user_id - 用户id
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+
+    /**
+     * 设置用户id
+     *
+     * @param userId 用户id
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * 获取题目id
+     *
+     * @return question_id - 题目id
+     */
+    public Integer getQuestionId() {
+        return questionId;
+    }
+
+    /**
+     * 设置题目id
+     *
+     * @param questionId 题目id
+     */
+    public void setQuestionId(Integer questionId) {
+        this.questionId = questionId;
+    }
+
+    /**
+     * @return create_time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * @return update_time
+     */
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    /**
+     * @param updateTime
+     */
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    /**
+     * 获取笔记内容
+     *
+     * @return content - 笔记内容
+     */
+    public String getContent() {
+        return content;
+    }
+
+    /**
+     * 设置笔记内容
+     *
+     * @param content 笔记内容
+     */
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", questionId=").append(questionId);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append(", content=").append(content);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserNote.Builder builder() {
+        return new UserNote.Builder();
+    }
+
+    public static class Builder {
+        private UserNote obj;
+
+        public Builder() {
+            this.obj = new UserNote();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置用户id
+         *
+         * @param userId 用户id
+         */
+        public Builder userId(Integer userId) {
+            obj.setUserId(userId);
+            return this;
+        }
+
+        /**
+         * 设置题目id
+         *
+         * @param questionId 题目id
+         */
+        public Builder questionId(Integer questionId) {
+            obj.setQuestionId(questionId);
+            return this;
+        }
+
+        /**
+         * @param createTime
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        /**
+         * @param updateTime
+         */
+        public Builder updateTime(Date updateTime) {
+            obj.setUpdateTime(updateTime);
+            return this;
+        }
+
+        /**
+         * 设置笔记内容
+         *
+         * @param content 笔记内容
+         */
+        public Builder content(String content) {
+            obj.setContent(content);
+            return this;
+        }
+
+        public UserNote build() {
+            return this.obj;
+        }
+    }
+}

+ 308 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserPaper.java

@@ -0,0 +1,308 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "user_paper")
+public class UserPaper implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "`user_id`")
+    private Integer userId;
+
+    /**
+     * 组卷名称
+     */
+    @Column(name = "`title`")
+    private String title;
+
+    /**
+     * 组卷模块:examination,exercise,collect,error
+     */
+    @Column(name = "`module`")
+    private String module;
+
+    /**
+     * 对应模块id
+     */
+    @Column(name = "`module_id`")
+    private Integer moduleId;
+
+    /**
+     * 练习次数
+     */
+    @Column(name = "`number`")
+    private Integer number;
+
+    /**
+     * 总时间
+     */
+    @Column(name = "`time`")
+    private Integer time;
+
+    /**
+     * 题目id列表:json
+     */
+    @Column(name = "`question_ids`")
+    private String questionIds;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取用户id
+     *
+     * @return user_id - 用户id
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+
+    /**
+     * 设置用户id
+     *
+     * @param userId 用户id
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * 获取组卷名称
+     *
+     * @return title - 组卷名称
+     */
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 设置组卷名称
+     *
+     * @param title 组卷名称
+     */
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    /**
+     * 获取组卷模块:examination,exercise,collect,error
+     *
+     * @return module - 组卷模块:examination,exercise,collect,error
+     */
+    public String getModule() {
+        return module;
+    }
+
+    /**
+     * 设置组卷模块:examination,exercise,collect,error
+     *
+     * @param module 组卷模块:examination,exercise,collect,error
+     */
+    public void setModule(String module) {
+        this.module = module;
+    }
+
+    /**
+     * 获取对应模块id
+     *
+     * @return module_id - 对应模块id
+     */
+    public Integer getModuleId() {
+        return moduleId;
+    }
+
+    /**
+     * 设置对应模块id
+     *
+     * @param moduleId 对应模块id
+     */
+    public void setModuleId(Integer moduleId) {
+        this.moduleId = moduleId;
+    }
+
+    /**
+     * 获取练习次数
+     *
+     * @return number - 练习次数
+     */
+    public Integer getNumber() {
+        return number;
+    }
+
+    /**
+     * 设置练习次数
+     *
+     * @param number 练习次数
+     */
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    /**
+     * 获取总时间
+     *
+     * @return time - 总时间
+     */
+    public Integer getTime() {
+        return time;
+    }
+
+    /**
+     * 设置总时间
+     *
+     * @param time 总时间
+     */
+    public void setTime(Integer time) {
+        this.time = time;
+    }
+
+    /**
+     * 获取题目id列表:json
+     *
+     * @return question_ids - 题目id列表:json
+     */
+    public String getQuestionIds() {
+        return questionIds;
+    }
+
+    /**
+     * 设置题目id列表:json
+     *
+     * @param questionIds 题目id列表:json
+     */
+    public void setQuestionIds(String questionIds) {
+        this.questionIds = questionIds;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", title=").append(title);
+        sb.append(", module=").append(module);
+        sb.append(", moduleId=").append(moduleId);
+        sb.append(", number=").append(number);
+        sb.append(", time=").append(time);
+        sb.append(", questionIds=").append(questionIds);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserPaper.Builder builder() {
+        return new UserPaper.Builder();
+    }
+
+    public static class Builder {
+        private UserPaper obj;
+
+        public Builder() {
+            this.obj = new UserPaper();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置用户id
+         *
+         * @param userId 用户id
+         */
+        public Builder userId(Integer userId) {
+            obj.setUserId(userId);
+            return this;
+        }
+
+        /**
+         * 设置组卷名称
+         *
+         * @param title 组卷名称
+         */
+        public Builder title(String title) {
+            obj.setTitle(title);
+            return this;
+        }
+
+        /**
+         * 设置组卷模块:examination,exercise,collect,error
+         *
+         * @param module 组卷模块:examination,exercise,collect,error
+         */
+        public Builder module(String module) {
+            obj.setModule(module);
+            return this;
+        }
+
+        /**
+         * 设置对应模块id
+         *
+         * @param moduleId 对应模块id
+         */
+        public Builder moduleId(Integer moduleId) {
+            obj.setModuleId(moduleId);
+            return this;
+        }
+
+        /**
+         * 设置练习次数
+         *
+         * @param number 练习次数
+         */
+        public Builder number(Integer number) {
+            obj.setNumber(number);
+            return this;
+        }
+
+        /**
+         * 设置总时间
+         *
+         * @param time 总时间
+         */
+        public Builder time(Integer time) {
+            obj.setTime(time);
+            return this;
+        }
+
+        /**
+         * 设置题目id列表:json
+         *
+         * @param questionIds 题目id列表:json
+         */
+        public Builder questionIds(String questionIds) {
+            obj.setQuestionIds(questionIds);
+            return this;
+        }
+
+        public UserPaper build() {
+            return this.obj;
+        }
+    }
+}

+ 168 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserPaperQuestion.java

@@ -0,0 +1,168 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "user_paper_question")
+public class UserPaperQuestion implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "`user_id`")
+    private Integer userId;
+
+    /**
+     * 分组id
+     */
+    @Column(name = "`paper_id`")
+    private Integer paperId;
+
+    /**
+     * 组卷模块:collect,error
+     */
+    @Column(name = "`paper_module`")
+    private String paperModule;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取用户id
+     *
+     * @return user_id - 用户id
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+
+    /**
+     * 设置用户id
+     *
+     * @param userId 用户id
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * 获取分组id
+     *
+     * @return paper_id - 分组id
+     */
+    public Integer getPaperId() {
+        return paperId;
+    }
+
+    /**
+     * 设置分组id
+     *
+     * @param paperId 分组id
+     */
+    public void setPaperId(Integer paperId) {
+        this.paperId = paperId;
+    }
+
+    /**
+     * 获取组卷模块:collect,error
+     *
+     * @return paper_module - 组卷模块:collect,error
+     */
+    public String getPaperModule() {
+        return paperModule;
+    }
+
+    /**
+     * 设置组卷模块:collect,error
+     *
+     * @param paperModule 组卷模块:collect,error
+     */
+    public void setPaperModule(String paperModule) {
+        this.paperModule = paperModule;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", paperId=").append(paperId);
+        sb.append(", paperModule=").append(paperModule);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserPaperQuestion.Builder builder() {
+        return new UserPaperQuestion.Builder();
+    }
+
+    public static class Builder {
+        private UserPaperQuestion obj;
+
+        public Builder() {
+            this.obj = new UserPaperQuestion();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置用户id
+         *
+         * @param userId 用户id
+         */
+        public Builder userId(Integer userId) {
+            obj.setUserId(userId);
+            return this;
+        }
+
+        /**
+         * 设置分组id
+         *
+         * @param paperId 分组id
+         */
+        public Builder paperId(Integer paperId) {
+            obj.setPaperId(paperId);
+            return this;
+        }
+
+        /**
+         * 设置组卷模块:collect,error
+         *
+         * @param paperModule 组卷模块:collect,error
+         */
+        public Builder paperModule(String paperModule) {
+            obj.setPaperModule(paperModule);
+            return this;
+        }
+
+        public UserPaperQuestion build() {
+            return this.obj;
+        }
+    }
+}

+ 125 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserPay.java

@@ -0,0 +1,125 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "user_pay")
+public class UserPay implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "`user_id`")
+    private Integer userId;
+
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取用户id
+     *
+     * @return user_id - 用户id
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+
+    /**
+     * 设置用户id
+     *
+     * @param userId 用户id
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * @return create_time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", createTime=").append(createTime);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserPay.Builder builder() {
+        return new UserPay.Builder();
+    }
+
+    public static class Builder {
+        private UserPay obj;
+
+        public Builder() {
+            this.obj = new UserPay();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置用户id
+         *
+         * @param userId 用户id
+         */
+        public Builder userId(Integer userId) {
+            obj.setUserId(userId);
+            return this;
+        }
+
+        /**
+         * @param createTime
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        public UserPay build() {
+            return this.obj;
+        }
+    }
+}

+ 300 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserQuestion.java

@@ -0,0 +1,300 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "user_question")
+public class UserQuestion implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "`user_id`")
+    private Integer userId;
+
+    /**
+     * 报告id
+     */
+    @Column(name = "`report_id`")
+    private Integer reportId;
+
+    /**
+     * 题目id
+     */
+    @Column(name = "`question_id`")
+    private Integer questionId;
+
+    /**
+     * 系统定义时间
+     */
+    @Column(name = "`time`")
+    private Integer time;
+
+    /**
+     * 用户用时
+     */
+    @Column(name = "`user_time`")
+    private Integer userTime;
+
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    /**
+     * 正确:0错误,1正确
+     */
+    @Column(name = "`is_correct`")
+    private Integer isCorrect;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取用户id
+     *
+     * @return user_id - 用户id
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+
+    /**
+     * 设置用户id
+     *
+     * @param userId 用户id
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * 获取报告id
+     *
+     * @return report_id - 报告id
+     */
+    public Integer getReportId() {
+        return reportId;
+    }
+
+    /**
+     * 设置报告id
+     *
+     * @param reportId 报告id
+     */
+    public void setReportId(Integer reportId) {
+        this.reportId = reportId;
+    }
+
+    /**
+     * 获取题目id
+     *
+     * @return question_id - 题目id
+     */
+    public Integer getQuestionId() {
+        return questionId;
+    }
+
+    /**
+     * 设置题目id
+     *
+     * @param questionId 题目id
+     */
+    public void setQuestionId(Integer questionId) {
+        this.questionId = questionId;
+    }
+
+    /**
+     * 获取系统定义时间
+     *
+     * @return time - 系统定义时间
+     */
+    public Integer getTime() {
+        return time;
+    }
+
+    /**
+     * 设置系统定义时间
+     *
+     * @param time 系统定义时间
+     */
+    public void setTime(Integer time) {
+        this.time = time;
+    }
+
+    /**
+     * 获取用户用时
+     *
+     * @return user_time - 用户用时
+     */
+    public Integer getUserTime() {
+        return userTime;
+    }
+
+    /**
+     * 设置用户用时
+     *
+     * @param userTime 用户用时
+     */
+    public void setUserTime(Integer userTime) {
+        this.userTime = userTime;
+    }
+
+    /**
+     * @return create_time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取正确:0错误,1正确
+     *
+     * @return is_correct - 正确:0错误,1正确
+     */
+    public Integer getIsCorrect() {
+        return isCorrect;
+    }
+
+    /**
+     * 设置正确:0错误,1正确
+     *
+     * @param isCorrect 正确:0错误,1正确
+     */
+    public void setIsCorrect(Integer isCorrect) {
+        this.isCorrect = isCorrect;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", reportId=").append(reportId);
+        sb.append(", questionId=").append(questionId);
+        sb.append(", time=").append(time);
+        sb.append(", userTime=").append(userTime);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", isCorrect=").append(isCorrect);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserQuestion.Builder builder() {
+        return new UserQuestion.Builder();
+    }
+
+    public static class Builder {
+        private UserQuestion obj;
+
+        public Builder() {
+            this.obj = new UserQuestion();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置用户id
+         *
+         * @param userId 用户id
+         */
+        public Builder userId(Integer userId) {
+            obj.setUserId(userId);
+            return this;
+        }
+
+        /**
+         * 设置报告id
+         *
+         * @param reportId 报告id
+         */
+        public Builder reportId(Integer reportId) {
+            obj.setReportId(reportId);
+            return this;
+        }
+
+        /**
+         * 设置题目id
+         *
+         * @param questionId 题目id
+         */
+        public Builder questionId(Integer questionId) {
+            obj.setQuestionId(questionId);
+            return this;
+        }
+
+        /**
+         * 设置系统定义时间
+         *
+         * @param time 系统定义时间
+         */
+        public Builder time(Integer time) {
+            obj.setTime(time);
+            return this;
+        }
+
+        /**
+         * 设置用户用时
+         *
+         * @param userTime 用户用时
+         */
+        public Builder userTime(Integer userTime) {
+            obj.setUserTime(userTime);
+            return this;
+        }
+
+        /**
+         * @param createTime
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        /**
+         * 设置正确:0错误,1正确
+         *
+         * @param isCorrect 正确:0错误,1正确
+         */
+        public Builder isCorrect(Integer isCorrect) {
+            obj.setIsCorrect(isCorrect);
+            return this;
+        }
+
+        public UserQuestion build() {
+            return this.obj;
+        }
+    }
+}

+ 396 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserReport.java

@@ -0,0 +1,396 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "user_report")
+public class UserReport implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "`user_id`")
+    private Integer userId;
+
+    /**
+     * 对应模块:exercise,examination
+     */
+    @Column(name = "`module`")
+    private String module;
+
+    @Column(name = "`module_id`")
+    private Integer moduleId;
+
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    /**
+     * 总题目数
+     */
+    @Column(name = "`total_number`")
+    private Integer totalNumber;
+
+    /**
+     * 预计时常/总时长
+     */
+    @Column(name = "`total_time`")
+    private Integer totalTime;
+
+    /**
+     * 已做题目数
+     */
+    @Column(name = "`user_number`")
+    private Integer userNumber;
+
+    /**
+     * 已用时长
+     */
+    @Column(name = "`user_time`")
+    private Integer userTime;
+
+    /**
+     * 完成答题时间
+     */
+    @Column(name = "`finish_time`")
+    private Date finishTime;
+
+    /**
+     * 题目id列表:json
+     */
+    @Column(name = "`question_ids`")
+    private String questionIds;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取用户id
+     *
+     * @return user_id - 用户id
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+
+    /**
+     * 设置用户id
+     *
+     * @param userId 用户id
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * 获取对应模块:exercise,examination
+     *
+     * @return module - 对应模块:exercise,examination
+     */
+    public String getModule() {
+        return module;
+    }
+
+    /**
+     * 设置对应模块:exercise,examination
+     *
+     * @param module 对应模块:exercise,examination
+     */
+    public void setModule(String module) {
+        this.module = module;
+    }
+
+    /**
+     * @return module_id
+     */
+    public Integer getModuleId() {
+        return moduleId;
+    }
+
+    /**
+     * @param moduleId
+     */
+    public void setModuleId(Integer moduleId) {
+        this.moduleId = moduleId;
+    }
+
+    /**
+     * @return create_time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取总题目数
+     *
+     * @return total_number - 总题目数
+     */
+    public Integer getTotalNumber() {
+        return totalNumber;
+    }
+
+    /**
+     * 设置总题目数
+     *
+     * @param totalNumber 总题目数
+     */
+    public void setTotalNumber(Integer totalNumber) {
+        this.totalNumber = totalNumber;
+    }
+
+    /**
+     * 获取预计时常/总时长
+     *
+     * @return total_time - 预计时常/总时长
+     */
+    public Integer getTotalTime() {
+        return totalTime;
+    }
+
+    /**
+     * 设置预计时常/总时长
+     *
+     * @param totalTime 预计时常/总时长
+     */
+    public void setTotalTime(Integer totalTime) {
+        this.totalTime = totalTime;
+    }
+
+    /**
+     * 获取已做题目数
+     *
+     * @return user_number - 已做题目数
+     */
+    public Integer getUserNumber() {
+        return userNumber;
+    }
+
+    /**
+     * 设置已做题目数
+     *
+     * @param userNumber 已做题目数
+     */
+    public void setUserNumber(Integer userNumber) {
+        this.userNumber = userNumber;
+    }
+
+    /**
+     * 获取已用时长
+     *
+     * @return user_time - 已用时长
+     */
+    public Integer getUserTime() {
+        return userTime;
+    }
+
+    /**
+     * 设置已用时长
+     *
+     * @param userTime 已用时长
+     */
+    public void setUserTime(Integer userTime) {
+        this.userTime = userTime;
+    }
+
+    /**
+     * 获取完成答题时间
+     *
+     * @return finish_time - 完成答题时间
+     */
+    public Date getFinishTime() {
+        return finishTime;
+    }
+
+    /**
+     * 设置完成答题时间
+     *
+     * @param finishTime 完成答题时间
+     */
+    public void setFinishTime(Date finishTime) {
+        this.finishTime = finishTime;
+    }
+
+    /**
+     * 获取题目id列表:json
+     *
+     * @return question_ids - 题目id列表:json
+     */
+    public String getQuestionIds() {
+        return questionIds;
+    }
+
+    /**
+     * 设置题目id列表:json
+     *
+     * @param questionIds 题目id列表:json
+     */
+    public void setQuestionIds(String questionIds) {
+        this.questionIds = questionIds;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", module=").append(module);
+        sb.append(", moduleId=").append(moduleId);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", totalNumber=").append(totalNumber);
+        sb.append(", totalTime=").append(totalTime);
+        sb.append(", userNumber=").append(userNumber);
+        sb.append(", userTime=").append(userTime);
+        sb.append(", finishTime=").append(finishTime);
+        sb.append(", questionIds=").append(questionIds);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserReport.Builder builder() {
+        return new UserReport.Builder();
+    }
+
+    public static class Builder {
+        private UserReport obj;
+
+        public Builder() {
+            this.obj = new UserReport();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置用户id
+         *
+         * @param userId 用户id
+         */
+        public Builder userId(Integer userId) {
+            obj.setUserId(userId);
+            return this;
+        }
+
+        /**
+         * 设置对应模块:exercise,examination
+         *
+         * @param module 对应模块:exercise,examination
+         */
+        public Builder module(String module) {
+            obj.setModule(module);
+            return this;
+        }
+
+        /**
+         * @param moduleId
+         */
+        public Builder moduleId(Integer moduleId) {
+            obj.setModuleId(moduleId);
+            return this;
+        }
+
+        /**
+         * @param createTime
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        /**
+         * 设置总题目数
+         *
+         * @param totalNumber 总题目数
+         */
+        public Builder totalNumber(Integer totalNumber) {
+            obj.setTotalNumber(totalNumber);
+            return this;
+        }
+
+        /**
+         * 设置预计时常/总时长
+         *
+         * @param totalTime 预计时常/总时长
+         */
+        public Builder totalTime(Integer totalTime) {
+            obj.setTotalTime(totalTime);
+            return this;
+        }
+
+        /**
+         * 设置已做题目数
+         *
+         * @param userNumber 已做题目数
+         */
+        public Builder userNumber(Integer userNumber) {
+            obj.setUserNumber(userNumber);
+            return this;
+        }
+
+        /**
+         * 设置已用时长
+         *
+         * @param userTime 已用时长
+         */
+        public Builder userTime(Integer userTime) {
+            obj.setUserTime(userTime);
+            return this;
+        }
+
+        /**
+         * 设置完成答题时间
+         *
+         * @param finishTime 完成答题时间
+         */
+        public Builder finishTime(Date finishTime) {
+            obj.setFinishTime(finishTime);
+            return this;
+        }
+
+        /**
+         * 设置题目id列表:json
+         *
+         * @param questionIds 题目id列表:json
+         */
+        public Builder questionIds(String questionIds) {
+            obj.setQuestionIds(questionIds);
+            return this;
+        }
+
+        public UserReport build() {
+            return this.obj;
+        }
+    }
+}

+ 203 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserSentenceProcess.java

@@ -0,0 +1,203 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+@Table(name = "user_sentence_process")
+public class UserSentenceProcess implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "`user_id`")
+    private Integer userId;
+
+    /**
+     * 章节
+     */
+    @Column(name = "`chapter`")
+    private Integer chapter;
+
+    /**
+     * 段落
+     */
+    @Column(name = "`part`")
+    private Integer part;
+
+    /**
+     * 进度:0-100
+     */
+    @Column(name = "`process`")
+    private Integer process;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取用户id
+     *
+     * @return user_id - 用户id
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+
+    /**
+     * 设置用户id
+     *
+     * @param userId 用户id
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * 获取章节
+     *
+     * @return chapter - 章节
+     */
+    public Integer getChapter() {
+        return chapter;
+    }
+
+    /**
+     * 设置章节
+     *
+     * @param chapter 章节
+     */
+    public void setChapter(Integer chapter) {
+        this.chapter = chapter;
+    }
+
+    /**
+     * 获取段落
+     *
+     * @return part - 段落
+     */
+    public Integer getPart() {
+        return part;
+    }
+
+    /**
+     * 设置段落
+     *
+     * @param part 段落
+     */
+    public void setPart(Integer part) {
+        this.part = part;
+    }
+
+    /**
+     * 获取进度:0-100
+     *
+     * @return process - 进度:0-100
+     */
+    public Integer getProcess() {
+        return process;
+    }
+
+    /**
+     * 设置进度:0-100
+     *
+     * @param process 进度:0-100
+     */
+    public void setProcess(Integer process) {
+        this.process = process;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", chapter=").append(chapter);
+        sb.append(", part=").append(part);
+        sb.append(", process=").append(process);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserSentenceProcess.Builder builder() {
+        return new UserSentenceProcess.Builder();
+    }
+
+    public static class Builder {
+        private UserSentenceProcess obj;
+
+        public Builder() {
+            this.obj = new UserSentenceProcess();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置用户id
+         *
+         * @param userId 用户id
+         */
+        public Builder userId(Integer userId) {
+            obj.setUserId(userId);
+            return this;
+        }
+
+        /**
+         * 设置章节
+         *
+         * @param chapter 章节
+         */
+        public Builder chapter(Integer chapter) {
+            obj.setChapter(chapter);
+            return this;
+        }
+
+        /**
+         * 设置段落
+         *
+         * @param part 段落
+         */
+        public Builder part(Integer part) {
+            obj.setPart(part);
+            return this;
+        }
+
+        /**
+         * 设置进度:0-100
+         *
+         * @param process 进度:0-100
+         */
+        public Builder process(Integer process) {
+            obj.setProcess(process);
+            return this;
+        }
+
+        public UserSentenceProcess build() {
+            return this.obj;
+        }
+    }
+}

+ 186 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserService.java

@@ -0,0 +1,186 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "user_service")
+public class UserService implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "`user_id`")
+    private Integer userId;
+
+    /**
+     * 服务: vip, 
+     */
+    @Column(name = "`service`")
+    private String service;
+
+    @Column(name = "`start_time`")
+    private Date startTime;
+
+    @Column(name = "`expire_time`")
+    private Date expireTime;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取用户id
+     *
+     * @return user_id - 用户id
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+
+    /**
+     * 设置用户id
+     *
+     * @param userId 用户id
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * 获取服务: vip, 
+     *
+     * @return service - 服务: vip, 
+     */
+    public String getService() {
+        return service;
+    }
+
+    /**
+     * 设置服务: vip, 
+     *
+     * @param service 服务: vip, 
+     */
+    public void setService(String service) {
+        this.service = service;
+    }
+
+    /**
+     * @return start_time
+     */
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    /**
+     * @param startTime
+     */
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    /**
+     * @return expire_time
+     */
+    public Date getExpireTime() {
+        return expireTime;
+    }
+
+    /**
+     * @param expireTime
+     */
+    public void setExpireTime(Date expireTime) {
+        this.expireTime = expireTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", service=").append(service);
+        sb.append(", startTime=").append(startTime);
+        sb.append(", expireTime=").append(expireTime);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserService.Builder builder() {
+        return new UserService.Builder();
+    }
+
+    public static class Builder {
+        private UserService obj;
+
+        public Builder() {
+            this.obj = new UserService();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置用户id
+         *
+         * @param userId 用户id
+         */
+        public Builder userId(Integer userId) {
+            obj.setUserId(userId);
+            return this;
+        }
+
+        /**
+         * 设置服务: vip, 
+         *
+         * @param service 服务: vip, 
+         */
+        public Builder service(String service) {
+            obj.setService(service);
+            return this;
+        }
+
+        /**
+         * @param startTime
+         */
+        public Builder startTime(Date startTime) {
+            obj.setStartTime(startTime);
+            return this;
+        }
+
+        /**
+         * @param expireTime
+         */
+        public Builder expireTime(Date expireTime) {
+            obj.setExpireTime(expireTime);
+            return this;
+        }
+
+        public UserService build() {
+            return this.obj;
+        }
+    }
+}

+ 22 - 0
server/data/src/main/java/com/qxgmat/data/dao/mapping/AdMapper.xml

@@ -0,0 +1,22 @@
+<?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="com.qxgmat.data.dao.AdMapper">
+  <resultMap id="BaseResultMap" type="com.qxgmat.data.dao.entity.Ad">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="title" jdbcType="VARCHAR" property="title" />
+    <result column="image" jdbcType="VARCHAR" property="image" />
+    <result column="position" jdbcType="INTEGER" property="position" />
+    <result column="link" jdbcType="VARCHAR" property="link" />
+    <result column="start_time" jdbcType="TIMESTAMP" property="startTime" />
+    <result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    `id`, `title`, `image`, `position`, `link`, `start_time`, `end_time`
+  </sql>
+</mapper>

+ 18 - 0
server/data/src/main/java/com/qxgmat/data/dao/mapping/ArticleMapper.xml

@@ -0,0 +1,18 @@
+<?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="com.qxgmat.data.dao.ArticleMapper">
+  <resultMap id="BaseResultMap" type="com.qxgmat.data.dao.entity.Article">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="module" jdbcType="INTEGER" property="module" />
+    <result column="module_id" jdbcType="INTEGER" property="moduleId" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    `id`, `module`, `module_id`
+  </sql>
+</mapper>

+ 10 - 0
server/data/src/main/java/com/qxgmat/data/dao/mapping/ExaminationMapper.xml

@@ -0,0 +1,10 @@
+<?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="com.qxgmat.data.dao.ExaminationMapper">
+  <resultMap id="BaseResultMap" type="com.qxgmat.data.dao.entity.Examination">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="id" jdbcType="INTEGER" property="id" />
+  </resultMap>
+</mapper>

+ 20 - 0
server/data/src/main/java/com/qxgmat/data/dao/mapping/ExaminationStructMapper.xml

@@ -0,0 +1,20 @@
+<?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="com.qxgmat.data.dao.ExaminationStructMapper">
+  <resultMap id="BaseResultMap" type="com.qxgmat.data.dao.entity.ExaminationStruct">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="name_zh" jdbcType="VARCHAR" property="nameZh" />
+    <result column="name_en" jdbcType="VARCHAR" property="nameEn" />
+    <result column="parent_id" jdbcType="INTEGER" property="parentId" />
+    <result column="order" jdbcType="INTEGER" property="order" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    `id`, `name_zh`, `name_en`, `parent_id`, `order`
+  </sql>
+</mapper>

+ 10 - 0
server/data/src/main/java/com/qxgmat/data/dao/mapping/ExerciseMapper.xml

@@ -0,0 +1,10 @@
+<?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="com.qxgmat.data.dao.ExerciseMapper">
+  <resultMap id="BaseResultMap" type="com.qxgmat.data.dao.entity.Exercise">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="id" jdbcType="INTEGER" property="id" />
+  </resultMap>
+</mapper>

+ 21 - 0
server/data/src/main/java/com/qxgmat/data/dao/mapping/ExerciseStructMapper.xml

@@ -0,0 +1,21 @@
+<?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="com.qxgmat.data.dao.ExerciseStructMapper">
+  <resultMap id="BaseResultMap" type="com.qxgmat.data.dao.entity.ExerciseStruct">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="name_zh" jdbcType="VARCHAR" property="nameZh" />
+    <result column="name_en" jdbcType="VARCHAR" property="nameEn" />
+    <result column="parent_id" jdbcType="INTEGER" property="parentId" />
+    <result column="order" jdbcType="INTEGER" property="order" />
+    <result column="question_status" jdbcType="INTEGER" property="questionStatus" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    `id`, `name_zh`, `name_en`, `parent_id`, `order`, `question_status`
+  </sql>
+</mapper>

+ 32 - 0
server/data/src/main/java/com/qxgmat/data/dao/mapping/FeedbackErrorMapper.xml

@@ -0,0 +1,32 @@
+<?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="com.qxgmat.data.dao.FeedbackErrorMapper">
+  <resultMap id="BaseResultMap" type="com.qxgmat.data.dao.entity.FeedbackError">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="user_id" jdbcType="INTEGER" property="userId" />
+    <result column="question_id" jdbcType="INTEGER" property="questionId" />
+    <result column="type" jdbcType="INTEGER" property="type" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+  </resultMap>
+  <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.qxgmat.data.dao.entity.FeedbackError">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <result column="content" jdbcType="LONGVARCHAR" property="content" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    `id`, `user_id`, `question_id`, `type`, `create_time`
+  </sql>
+  <sql id="Blob_Column_List">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    `content`
+  </sql>
+</mapper>

+ 0 - 0
server/data/src/main/java/com/qxgmat/data/dao/mapping/FlywaySchemaHistoryMapper.xml


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