xuexiaobo vor 5 Jahren
Ursprung
Commit
79cc012044
100 geänderte Dateien mit 1517 neuen und 129 gelöschten Zeilen
  1. 2 1
      .gitignore
  2. 0 0
      git
  3. 132 31
      mooctest-site-server/pom.xml
  4. 2 27
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/Application.java
  5. 63 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/CompatibilityCallBack.java
  6. 49 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/KibugEvaluateCallBack.java
  7. 21 4
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/OnlineJudgeAndCulScoreCallBack.java
  8. 11 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/OnlineJudgeCallBack.java
  9. 59 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/RuntimeCallBack.java
  10. 95 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/ScriptAnalysisCallBack.java
  11. 122 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/aspect/LogAspect.java
  12. 10 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/AddOns2QualificationTypeConstants.java
  13. 3 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/CaseBlockConstants.java
  14. 3 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/Constants.java
  15. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/DevLanguageConstants.java
  16. 11 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/Exam2CasePropertiesConstant.java
  17. 48 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/ThirdPartToolJobStatusConstants.java
  18. 10 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/ThirdPartToolJobTypeConstants.java
  19. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/AsyncJobTool.java
  20. 25 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/CourseType.java
  21. 22 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/CourseVisibility.java
  22. 14 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/DownloadStatus.java
  23. 4 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/EntityTypeEnum.java
  24. 22 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/ProductType.java
  25. 24 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/RoleType.java
  26. 19 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/TestType.java
  27. 13 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/EventsListener.java
  28. 21 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/QuitCompetitionEvent.java
  29. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/CaptchaConfiguration.java
  30. 14 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ClientFeatureConfiguration.java
  31. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/DefaultFeatureConfiguration.java
  32. 23 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/EvaluationConfiguration.java
  33. 24 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ExecutorConfig.java
  34. 4 3
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/FileUploadConfiguration.java
  35. 7 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/OSSConfiguration.java
  36. 11 11
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/RedisSessionConfiguration.java
  37. 2 4
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/RequestLoggerAutoConfiguration.java
  38. 19 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ScriptConfiguration.java
  39. 10 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ShiroConfiguration.java
  40. 20 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AddOns2QualificationDao.java
  41. 19 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AnswerAnnexDao.java
  42. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ApplyUploadRecordDao.java
  43. 11 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Case2DimensionDao.java
  44. 7 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CaseExtendsDao.java
  45. 17 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CodeCovDao.java
  46. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Competition2ExamDao.java
  47. 2 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CompetitionDao.java
  48. 28 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CourseResourceDao.java
  49. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/DevCaseDao.java
  50. 8 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/DimensionDao.java
  51. 21 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/DroolsDao.java
  52. 8 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/EvaluationPermissionDao.java
  53. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Exam2AssistantManagerDao.java
  54. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Exam2CaseDao.java
  55. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Exam2PaperDao.java
  56. 7 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ExamDao.java
  57. 11 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ExamPythonCommunityDao.java
  58. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/GradeDao.java
  59. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/GradeGeneralDao.java
  60. 4 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Group2WorkerDao.java
  61. 4 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/GroupDao.java
  62. 5 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ManagerPropertyDao.java
  63. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/MessageDao.java
  64. 21 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/OperationCourseDao.java
  65. 23 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/OperationResourceDao.java
  66. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Paper2CaseDao.java
  67. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/PaperDao.java
  68. 20 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ParticipantCourseDao.java
  69. 4 3
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/PermissionDao.java
  70. 17 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Product2EntityDao.java
  71. 5 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/QualificationDao.java
  72. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/RoleDao.java
  73. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SalesPackageDao.java
  74. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SalesServiceDao.java
  75. 31 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/StudyRecordDao.java
  76. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SubjectDao.java
  77. 10 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SubmitRecordDao.java
  78. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SubsiteDao.java
  79. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TagDao.java
  80. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetDao.java
  81. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetExtendsDao.java
  82. 21 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Theme2GroupDao.java
  83. 42 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ThemeDetailDao.java
  84. 36 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ThemeEntityRelationsDao.java
  85. 28 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ThirdPartToolJobDao.java
  86. 11 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/UploadRecordDao.java
  87. 32 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/User2ThemeDao.java
  88. 2 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/UserDao.java
  89. 34 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/adapter/UpdateAdapter.java
  90. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/BugDao.java
  91. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/CaseTakeDao.java
  92. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ReportDao.java
  93. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ScoreRuleDao.java
  94. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/instancePermission/ExamPermissionDao.java
  95. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/instancePermission/TargetPermissionDao.java
  96. 12 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/GetHelpEmailDTO.java
  97. 1 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/OnlineJudgeResultDTO.java
  98. 17 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/OwnerAndWorkersCountDTO.java
  99. 1 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/UploadRecordDTO.java
  100. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/config/OSSClientConfig.java

+ 2 - 1
.gitignore

@@ -13,4 +13,5 @@ test-result
 **.log
 /log/
 .idea/
-**target/
+**target/
+out/

+ 0 - 0
git


+ 132 - 31
mooctest-site-server/pom.xml

@@ -23,7 +23,7 @@
         <dependency>
             <groupId>cn.iselab.mooctest</groupId>
             <artifactId>user-dubbo-api</artifactId>
-            <version>1.0.27</version>
+            <version>1.0.28</version>
         </dependency>
 
         <dependency>
@@ -43,7 +43,11 @@
             <artifactId>oauth2-dubbo-api</artifactId>
             <version>1.0.21</version>
         </dependency>
-
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.47</version>
+        </dependency>
         <!--dubbo-service-api-->
         <!--dubbo-dependency-->
         <!-- https://mvnrepository.com/artifact/io.dubbo.springboot/spring-boot-starter-dubbo -->
@@ -98,15 +102,21 @@
         </dependency>
 
         <!-- MS framework dependencies start -->
-        <dependency>
-            <groupId>org.jboss.spec.javax.servlet</groupId>
-            <artifactId>jboss-servlet-api_3.1_spec</artifactId>
-            <version>1.0.0.Final</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.jboss.spec.javax.servlet</groupId>-->
+<!--            <artifactId>jboss-servlet-api_3.1_spec</artifactId>-->
+<!--            <version>1.0.0.Final</version>-->
+<!--        </dependency>-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
             <version>${spring.boot.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-logging</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -119,16 +129,12 @@
                 </exclusion>
             </exclusions>
         </dependency>
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-web</artifactId>
-            <version>2.4.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-log4j2</artifactId>
-            <version>${spring.boot.version}</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.apache.logging.log4j</groupId>-->
+<!--            <artifactId>log4j-web</artifactId>-->
+<!--            <version>2.4.1</version>-->
+<!--        </dependency>-->
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-aop</artifactId>
@@ -142,13 +148,13 @@
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-redis</artifactId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
             <version>${spring.boot.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.session</groupId>
             <artifactId>spring-session-data-redis</artifactId>
-            <version>1.1.1.RELEASE</version>
+            <version>2.1.7.RELEASE</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -159,23 +165,23 @@
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
-            <version>2.6.3</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>jackson-annotations</artifactId>
-                </exclusion>
-            </exclusions>
+            <version>2.9.8</version>
+<!--            <exclusions>-->
+<!--                <exclusion>-->
+<!--                    <groupId>com.fasterxml.jackson.core</groupId>-->
+<!--                    <artifactId>jackson-annotations</artifactId>-->
+<!--                </exclusion>-->
+<!--            </exclusions>-->
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.dataformat</groupId>
             <artifactId>jackson-dataformat-yaml</artifactId>
-            <version>2.6.3</version>
+            <version>2.9.8</version>
         </dependency>
         <dependency>
             <groupId>com.lmax</groupId>
             <artifactId>disruptor</artifactId>
-            <version>3.3.2</version>
+            <version>3.4.2</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -209,6 +215,17 @@
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-zookeeper-config</artifactId>
         </dependency>
+<!--        &lt;!&ndash; 分布式链路追踪 &ndash;&gt;-->
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.cloud</groupId>-->
+<!--            <artifactId>spring-cloud-starter-zipkin</artifactId>-->
+<!--            <exclusions>-->
+<!--                <exclusion>-->
+<!--                    <groupId>org.springframework.boot</groupId>-->
+<!--                    <artifactId>spring-boot-starter-log4j2</artifactId>-->
+<!--                </exclusion>-->
+<!--            </exclusions>-->
+<!--        </dependency>-->
         <!-- zookeeper 依赖的健康检查的jar,所以需要引入actuator这个依赖 -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -226,17 +243,28 @@
         <dependency>
             <groupId>cn.afterturn</groupId>
             <artifactId>easypoi-base</artifactId>
-            <version>3.0.1</version>
+            <version>3.0.3</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>javax.validation</groupId>
+                    <artifactId>validation-api</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>cn.afterturn</groupId>
             <artifactId>easypoi-web</artifactId>
-            <version>3.0.1</version>
+            <version>3.0.3</version>
         </dependency>
         <dependency>
             <groupId>cn.afterturn</groupId>
             <artifactId>easypoi-annotation</artifactId>
-            <version>3.0.1</version>
+            <version>3.0.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-collections4</artifactId>
+            <version>4.1</version>
         </dependency>
         <!--EasyExcel END-->
 
@@ -335,6 +363,18 @@
             <artifactId>itextpdf</artifactId>
             <version>5.5.10</version>
         </dependency>
+        <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox -->
+        <dependency>
+            <groupId>org.apache.pdfbox</groupId>
+            <artifactId>fontbox</artifactId>
+            <version>2.0.9</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.pdfbox</groupId>
+            <artifactId>pdfbox</artifactId>
+            <version>2.0.9</version>
+        </dependency>
+
         <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 -->
         <dependency>
             <groupId>org.apache.commons</groupId>
@@ -345,6 +385,12 @@
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
             <version>2.4.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-api</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>io.springfox</groupId>
@@ -356,12 +402,67 @@
             <artifactId>mongo-java-driver</artifactId>
             <version>3.8.2</version>
         </dependency>
+        <!-- 规则引擎 -->
+        <dependency>
+            <groupId>org.kie</groupId>
+            <artifactId>kie-api</artifactId>
+            <version>7.0.0.Final</version>
+        </dependency>
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-core</artifactId>
+            <version>7.0.0.Final</version>
+        </dependency>
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-compiler</artifactId>
+            <version>7.0.0.Final</version>
+        </dependency>
         <!--<dependency>-->
             <!--<groupId>org.springframework.boot</groupId>-->
             <!--<artifactId>spring-boot-devtools</artifactId>-->
             <!--<version>1.3.5.RELEASE</version>-->
             <!--<optional>true</optional>-->
         <!--</dependency>-->
+
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-api-mockito</artifactId>
+            <version>1.6.5</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-module-junit4</artifactId>
+            <version>1.6.5</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.interceptor</groupId>
+            <artifactId>javax.interceptor-api</artifactId>
+            <version>1.2.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <version>20160810</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <version>2.1.1.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-log4j2</artifactId>
+            <version>${spring.boot.version}</version>
+        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.cloud</groupId>-->
+<!--            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
+<!--            <version>0.9.0.RELEASE</version>-->
+<!--        </dependency>-->
     </dependencies>
 
     <build>

+ 2 - 27
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/Application.java

@@ -1,9 +1,9 @@
 package cn.iselab.mooctest.site;
 
 import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration;
+import org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration;
 import org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration;
 import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration;
 import org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration;
@@ -21,26 +21,14 @@ import org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration;
 import org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration;
 import org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration;
 import org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration;
-import org.springframework.boot.autoconfigure.jms.hornetq.HornetQAutoConfiguration;
 import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration;
 import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration;
 import org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration;
-import org.springframework.boot.autoconfigure.mobile.DeviceDelegatingViewResolverAutoConfiguration;
-import org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration;
-import org.springframework.boot.autoconfigure.mobile.SitePreferenceAutoConfiguration;
 import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
 import org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration;
-import org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration;
-import org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration;
-import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration;
-import org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration;
-import org.springframework.boot.autoconfigure.social.LinkedInAutoConfiguration;
-import org.springframework.boot.autoconfigure.social.SocialWebAutoConfiguration;
-import org.springframework.boot.autoconfigure.social.TwitterAutoConfiguration;
+import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
 import org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration;
 import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration;
-import org.springframework.boot.autoconfigure.velocity.VelocityAutoConfiguration;
-import org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration;
 import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.scheduling.annotation.EnableAsync;
@@ -52,16 +40,11 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 @SpringBootApplication(exclude = {
         ActiveMQAutoConfiguration.class,
         BatchAutoConfiguration.class,
-        DeviceDelegatingViewResolverAutoConfiguration.class,
-        DeviceResolverAutoConfiguration.class,
         ElasticsearchRepositoriesAutoConfiguration.class,
-        FacebookAutoConfiguration.class,
-        FallbackWebSecurityAutoConfiguration.class,
         FlywayAutoConfiguration.class,
         FreeMarkerAutoConfiguration.class,
         GroovyTemplateAutoConfiguration.class,
         GsonAutoConfiguration.class,
-        HornetQAutoConfiguration.class,
         HypermediaAutoConfiguration.class,
         IntegrationAutoConfiguration.class,
         JerseyAutoConfiguration.class,
@@ -69,7 +52,6 @@ import org.springframework.scheduling.annotation.EnableScheduling;
         JmxAutoConfiguration.class,
         JndiConnectionFactoryAutoConfiguration.class,
         JndiDataSourceAutoConfiguration.class,
-        LinkedInAutoConfiguration.class,
         LiquibaseAutoConfiguration.class,
         MailSenderAutoConfiguration.class,
         MessageSourceAutoConfiguration.class,
@@ -77,17 +59,11 @@ import org.springframework.scheduling.annotation.EnableScheduling;
         MongoRepositoriesAutoConfiguration.class,
         MustacheAutoConfiguration.class,
         PersistenceExceptionTranslationAutoConfiguration.class,
-        ReactorAutoConfiguration.class,
         RepositoryRestMvcAutoConfiguration.class,
         SecurityAutoConfiguration.class,
-        SitePreferenceAutoConfiguration.class,
-        SocialWebAutoConfiguration.class,
         SolrAutoConfiguration.class,
         SolrRepositoriesAutoConfiguration.class,
         ThymeleafAutoConfiguration.class,
-        TwitterAutoConfiguration.class,
-        VelocityAutoConfiguration.class,
-        WebSocketAutoConfiguration.class,
         XADataSourceAutoConfiguration.class
 })
 @ServletComponentScan
@@ -98,7 +74,6 @@ public class Application {
     public static void main(String[] args) {
         SpringApplication application = new SpringApplication(Application.class);
         // To disabled web environment, change `true` to `false`
-        application.setWebEnvironment(true);
         application.run(args);
     }
 }

+ 63 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/CompatibilityCallBack.java

@@ -0,0 +1,63 @@
+package cn.iselab.mooctest.site.common.acyncTask;
+
+import cn.iselab.mooctest.site.service.GeneralCalculateScoreService;
+import lombok.extern.slf4j.Slf4j;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * Created by wyf on 2020/3/13.
+ */
+@Component
+@Slf4j
+public class CompatibilityCallBack implements AsyncTaskCallBack {
+    protected final Logger LOG = LoggerFactory.getLogger(getClass());
+    @Autowired
+    GeneralCalculateScoreService generalCalculateScoreService;
+
+    @Override
+    public void onSuccess(Map<String, String> context, String result) throws Exception {
+        LOG.info("------------------- calc compatibility onSuccess -------------------");
+        Long uploadId = 0L;
+        if (context.containsKey("uploadId")) {
+            uploadId = Long.parseLong(context.get("uploadId"));
+        }
+        processCompatibilityResult(result, uploadId);
+    }
+
+    private void processCompatibilityResult(String result, long uploadId) {
+        try {
+            JSONObject json = new JSONObject(result);
+            log.info("result json:" + json);
+            if (json.has("compatibility")) {
+                generalCalculateScoreService.updateTypeGrade(uploadId, "compatibility",
+                        json.getDouble("compatibility"));
+            }
+
+            if (json.has("detailList")) {
+                JSONArray detailList = json.getJSONArray("detailList");
+                for (int i = 0; i < detailList.length(); i++) {
+                    JSONObject item = detailList.getJSONObject(i);
+                    if (item.has("name") && item.has("isPassed")) {
+                        double score = item.getBoolean("isPassed") ? 1 : 0;
+                        generalCalculateScoreService.updateTypeGrade(uploadId, item.getString("name"), score);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage());
+        }
+
+    }
+
+    @Override
+    public void onError(Map<String, String> context, String result) {
+        LOG.info("------------------- calc compatibility onError :" + result + " -------------------");
+    }
+}

+ 49 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/KibugEvaluateCallBack.java

@@ -0,0 +1,49 @@
+package cn.iselab.mooctest.site.common.acyncTask;
+
+import cn.iselab.mooctest.site.service.GeneralCalculateScoreService;
+import lombok.extern.slf4j.Slf4j;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Created by wyf on 2020/2/10.
+ */
+@Component
+@Slf4j
+public class KibugEvaluateCallBack implements AsyncTaskCallBack {
+    protected final Logger LOG = LoggerFactory.getLogger(getClass());
+    @Autowired
+    GeneralCalculateScoreService generalCalculateScoreService;
+
+    @Override
+    public void onSuccess(Map<String, String> context, String result) throws Exception {
+        LOG.info("------------------- calc kibugEvaluate onSuccess -------------------");
+        Long uploadId = 0L;
+        if (context.containsKey("uploadId")) {
+            uploadId = Long.parseLong(context.get("uploadId"));
+        }
+        processKibugEvaluateResult(result, uploadId);
+    }
+
+    private void processKibugEvaluateResult(String result, long uploadId) {
+        JSONObject jsonObject = new JSONObject(result);
+        log.info("result jsonObject:" + jsonObject);
+        Iterator<String> sIterator = jsonObject.keys();
+        while (sIterator.hasNext()) {
+            String type = sIterator.next();
+            double score = jsonObject.getDouble(type);
+            generalCalculateScoreService.updateTypeGrade(uploadId, type, score);
+        }
+    }
+
+    @Override
+    public void onError(Map<String, String> context, String result) {
+        LOG.info("------------------- calc kibugEvaluate onError :" + result + " -------------------");
+    }
+}

+ 21 - 4
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/OnlineJudgeAndCulScoreCallBack.java

@@ -2,6 +2,7 @@ package cn.iselab.mooctest.site.common.acyncTask;
 
 import cn.iselab.mooctest.site.data.OnlineJudgeResultDTO;
 import cn.iselab.mooctest.site.models.ApplyUploadRecord;
+import cn.iselab.mooctest.site.service.CodeCovService;
 import cn.iselab.mooctest.site.web.data.OnlineJudgeResultVO;
 import cn.iselab.mooctest.site.web.data.TypeScoreJson;
 import cn.iselab.mooctest.site.web.data.response.ResponseVO;
@@ -10,6 +11,7 @@ import cn.iselab.mooctest.site.web.logic.CalculateSocreLogic;
 import cn.iselab.mooctest.site.web.logic.GeneralCalculateScoreLogic;
 import cn.iselab.mooctest.site.web.logic.OnlineJudgeLogic;
 import com.google.common.collect.Lists;
+import com.mysql.fabric.Server;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -41,6 +43,9 @@ class OnlineJudgeAndCulScoreCallBack implements AsyncTaskCallBack {
     private GeneralCalculateScoreLogic generalCalculateScoreLogic;
     @Autowired
     private CalculateSocreLogic calculateSocreLogic;
+    @Autowired
+    private CodeCovService codeCovService;
+
     @Override
     public void onSuccess(Map<String, String> context, String result) throws Exception {
         log.info("submissionId:[{}] 执行成功! result:[{}]",context.get("submissionId"),result);
@@ -51,19 +56,31 @@ class OnlineJudgeAndCulScoreCallBack implements AsyncTaskCallBack {
         while ((tmp = br.readLine()) != null) {
             onlineJudgeResultDTOS.add(onlineJudgeLogic.generalOnlineJudgeResultDTO (tmp));
         }
-        onlineJudgeLogic.setResultDTOToCache (context.get("submissionId"),onlineJudgeResultDTOS);
+
         long examId = Long.parseLong(context.get("examId"));
         long userId = Long.parseLong(context.get("userId"));
         long caseId = Long.parseLong(context.get("caseId"));
         long uploadId = Long.parseLong(context.get("uploadId"));
         //上传分数
-        double score = culScore(onlineJudgeResultDTOS.get(0).getRightCount(),onlineJudgeResultDTOS.get(0).getTotalCount());
+        double score=0;
+        if(onlineJudgeResultDTOS.size()!=0) {
+            score = culScore(onlineJudgeResultDTOS.get(0).getRightCount(), onlineJudgeResultDTOS.get(0).getTotalCount());
+        }
         //generalCalculateScoreLogic.uploadCaseScore(examId,caseId,userId,score);
         List<TypeScoreJson> scores = Lists.newArrayList();
         scores.add(new TypeScoreJson("cases",score));
         ResponseVO<ApplyUploadRecord> applyUploadRecordResponseVO = calculateSocreLogic.validateSubmit(uploadId);
-        if(applyUploadRecordResponseVO.getCode()== ServerCode.SUCCESS.getCode())
-            calculateSocreLogic.recordTypeScoreDirectly(examId,caseId,userId,String.valueOf(System.currentTimeMillis()),applyUploadRecordResponseVO.getData().getOssUrl(),"慕码社区",scores);
+        if(applyUploadRecordResponseVO.getCode() == ServerCode.SUCCESS.getCode()) {
+            calculateSocreLogic.recordTypeScoreDirectly(examId, caseId, userId, String.valueOf
+                    (System.currentTimeMillis()), applyUploadRecordResponseVO.getData().getOssUrl
+                    (), "慕码社区", scores, uploadId);
+            //上传覆盖数据
+            codeCovService.saveCodeCov(examId,caseId,userId,onlineJudgeResultDTOS.get(0).getCov());
+        }
+        else {
+            onlineJudgeResultDTOS.get(0).setResultMsg(onlineJudgeResultDTOS.get(0).getResultMsg()+" 提示:"+applyUploadRecordResponseVO.getMsg());
+        }
+        onlineJudgeLogic.setResultDTOToCache(context.get("submissionId"),onlineJudgeResultDTOS);
 
     }
 

+ 11 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/OnlineJudgeCallBack.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.site.common.acyncTask;
 
 import cn.iselab.mooctest.site.data.OnlineJudgeResultDTO;
+import cn.iselab.mooctest.site.service.CodeCovService;
 import cn.iselab.mooctest.site.web.data.OnlineJudgeResultVO;
 import cn.iselab.mooctest.site.web.logic.OnlineJudgeLogic;
 import com.google.common.collect.Lists;
@@ -24,7 +25,8 @@ public class OnlineJudgeCallBack implements AsyncTaskCallBack {
 
     @Autowired
     private OnlineJudgeLogic onlineJudgeLogic;
-
+    @Autowired
+    private CodeCovService codeCovService;
 
     @Override
     public void onSuccess(Map<String, String> context, String result) throws Exception {
@@ -36,6 +38,14 @@ public class OnlineJudgeCallBack implements AsyncTaskCallBack {
         while ((tmp = br.readLine()) != null) {
             onlineJudgeResultDTOS.add(onlineJudgeLogic.generalOnlineJudgeResultDTO (tmp));
         }
+        long examId = Long.parseLong(context.get("examId"));
+        long userId = Long.parseLong(context.get("userId"));
+        long caseId = Long.parseLong(context.get("caseId"));
+        if(userId != 0){
+            //上传覆盖数据
+            codeCovService.saveCodeCov(examId,caseId,userId,onlineJudgeResultDTOS.get(0).getCov());
+        }
+
         onlineJudgeLogic.setResultDTOToCache(context.get("submissionId"),onlineJudgeResultDTOS);
     }
 

+ 59 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/RuntimeCallBack.java

@@ -0,0 +1,59 @@
+package cn.iselab.mooctest.site.common.acyncTask;
+
+import cn.iselab.mooctest.site.service.GeneralCalculateScoreService;
+import lombok.extern.slf4j.Slf4j;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * calc runtime
+ *
+ * @author wyf
+ * @create 2019-12-06
+ */
+@Component
+@Slf4j
+public class RuntimeCallBack implements AsyncTaskCallBack {
+    protected final Logger LOG = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    GeneralCalculateScoreService generalCalculateScoreService;
+
+
+    @Override
+    public void onSuccess(Map<String, String> context, String result) throws Exception {
+        LOG.info("------------------- calc runtime onSuccess -------------------");
+        Long uploadId = 0L;
+        if (context.containsKey("uploadId")) {
+            uploadId = Long.parseLong(context.get("uploadId"));
+        }
+        processRuntimeResult(result, uploadId);
+    }
+
+    private void processRuntimeResult(String result, long uploadId) {
+        JSONObject jsonObject = new JSONObject(result);
+        log.info("runtimeCallBack result jsonObject:" + jsonObject);
+        if (jsonObject.isNull("mvn_test_status") || jsonObject.isNull("run_time")) {
+            return;
+        }
+        String mvnTestStatus = jsonObject.getString("mvn_test_status");
+        if (!jsonObject.isNull("run_time")) {
+            double score = jsonObject.getDouble("run_time");
+            if (mvnTestStatus.equals("success")) {
+                generalCalculateScoreService.updateTypeGrade(uploadId, "run_time", score);
+            } else {
+                generalCalculateScoreService.updateTypeGrade(uploadId, "run_time", -1);
+            }
+        }
+    }
+
+    @Override
+    public void onError(Map<String, String> context, String result) {
+        LOG.info("------------------- calc runtime onError :" + result + " -------------------");
+    }
+}

+ 95 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/ScriptAnalysisCallBack.java

@@ -0,0 +1,95 @@
+package cn.iselab.mooctest.site.common.acyncTask;
+
+import cn.iselab.mooctest.site.service.CalculateScoreService;
+import cn.iselab.mooctest.site.service.GeneralCalculateScoreService;
+import cn.iselab.mooctest.site.service.SubmitRecordService;
+import cn.iselab.mooctest.site.service.TargetGraphService;
+import cn.iselab.mooctest.site.service.common.MongoAPIService;
+import cn.iselab.mooctest.site.service.fromDev.AnalysisService;
+import cn.iselab.mooctest.site.web.logic.CalculateSocreLogic;
+import cn.iselab.mooctest.site.web.logic.GeneralCalculateScoreLogic;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Iterator;
+import java.util.Map;
+
+
+/**
+ * Created by tangshanshan on 2018/3/6.
+ */
+@Component
+public class ScriptAnalysisCallBack implements AsyncTaskCallBack {
+
+    protected final Logger LOG = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    SubmitRecordService submitRecordService;
+
+    @Autowired
+    CalculateScoreService calculateScoreService;
+
+    @Autowired
+    CalculateSocreLogic calculateSocreLogic;
+
+    @Autowired
+    MongoAPIService mongoAPIService;
+
+    @Autowired
+    AnalysisService analysisService;
+
+    @Autowired
+    TargetGraphService targetGraphService;
+
+    @Autowired
+    GeneralCalculateScoreService generalCalculateScoreService;
+
+    @Autowired
+    GeneralCalculateScoreLogic generalCalculateScoreLogic;
+
+    @Override
+    public void onSuccess(Map<String, String> context, String result) throws Exception {
+        LOG.info("------------------- scriptAnalysis onSuccess -------------------");
+        Long userId = 0L;
+        Long examId = 0L;
+        Long caseId = 0L;
+        Long targetId = 0L;
+        Long uploadId = 0L;
+        if (context.containsKey("userId")) {
+            userId = Long.parseLong(context.get("userId"));
+        }
+        if (context.containsKey("examId")) {
+            examId = Long.parseLong(context.get("examId"));
+        }
+        if (context.containsKey("caseId")) {
+            caseId = Long.parseLong(context.get("caseId"));
+        }
+        if (context.containsKey("targetId")) {
+            targetId = Long.parseLong(context.get("targetId"));
+        }
+        if (context.containsKey("uploadId")) {
+            uploadId = Long.parseLong(context.get("uploadId"));
+        }
+        processScriptAnalysisResult(result, userId, examId, caseId, uploadId);
+    }
+
+    private void processScriptAnalysisResult(String result, long userId, long examId, long caseId, long uploadId) {
+        JSONObject jsonObject = new JSONObject(result);
+        System.out.println("jsonObject:" + jsonObject);
+
+        Iterator<String> sIterator = jsonObject.keys();
+        while (sIterator.hasNext()) {
+            String type = sIterator.next();
+            double score = jsonObject.getDouble(type);
+            generalCalculateScoreService.updateTypeGrade(uploadId, type, score);
+        }
+    }
+
+    @Override
+    public void onError(Map<String, String> context, String error) {
+        LOG.info("------------------- mutation onError:" + error + " -------------------");
+    }
+}

+ 122 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/aspect/LogAspect.java

@@ -0,0 +1,122 @@
+package cn.iselab.mooctest.site.common.aspect;
+
+import com.google.common.base.Stopwatch;
+import com.google.gson.ExclusionStrategy;
+import com.google.gson.FieldAttributes;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.*;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.util.StringJoiner;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @program: mooctest-site
+ * @mail: menduo96@gmail.com
+ * @author: menduo
+ * @create: 2019-10-15 14:18
+ **/
+@Aspect
+@Component
+@Slf4j
+public class LogAspect {
+
+    @Pointcut("execution(public * cn.iselab.mooctest.site.web..*(..))")
+    private void logicPointCut(){}
+
+    @Pointcut("execution(public * cn.iselab.mooctest.site.web.data..*(..))")
+    private void wrapperPointCut(){}
+
+    @Pointcut("execution(public * cn.iselab.mooctest.site.web.SessionCounter.*(..))")
+    private void sessionCounter(){}
+
+    @Pointcut("execution(public * cn.iselab.mooctest.site.web.ctrl.MessageController.*(..)))")
+    private void messageController(){}
+
+    @Pointcut("execution(public * cn.iselab.mooctest.site.web.logic.impl.MessageLogicImpl.*(..)))")
+    private void messageLogic(){}
+
+    @Around("logicPointCut() && !wrapperPointCut() && !sessionCounter() && !messageController() && !messageLogic()")
+    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
+        beforeMethod(joinPoint);
+        Stopwatch stopwatch = Stopwatch.createStarted();
+        Object result = null;
+        try {
+            result = joinPoint.proceed();
+            stopwatch.stop();
+            return result;
+        } finally {
+            afterMethod(joinPoint,stopwatch,result);
+        }
+    }
+
+
+    private void beforeMethod(JoinPoint joinPoint) {
+        MethodSignature signature = (MethodSignature)joinPoint.getSignature();
+        Method method = signature.getMethod();
+        Object[] args = joinPoint.getArgs();
+        String[] names = signature.getParameterNames();
+        Class[] classes = signature.getParameterTypes();
+        StringJoiner stringJoiner = new StringJoiner(",","[","]");
+        for (int i = 0; i < names.length; i++) {
+            if(isString(args[i]) || isPrimitive(args[i]) || classes[i].getName().contains("cn.iselab")) {
+                stringJoiner.add(names[i] + ":"+ createFilterGson().toJson(args[i]));
+            } else {
+                stringJoiner.add(names[i]);
+            }
+        }
+
+        log.info("方法名: [" + method.getDeclaringClass() + "." + method.getName() + "]"
+                + "--参数列表: " + stringJoiner.toString());
+    }
+
+
+    private void afterMethod(JoinPoint joinPoint,Stopwatch stopwatch,Object result) {
+        MethodSignature signature = (MethodSignature)joinPoint.getSignature();
+        Method method = signature.getMethod();
+        log.info("方法名: [" + method.getDeclaringClass() + "." + method.getName() + "]"
+                + "--返回值: [" + object2String(result)  + "]"
+                + "--执行时间: [" + stopwatch.elapsed(TimeUnit.MILLISECONDS) + "ms].");
+
+    }
+
+    private String object2String(Object result) {
+        if(result ==null) {
+            return null;
+        } else {
+            return result.toString();
+        }
+    }
+
+    private static boolean isPrimitive(Object obj) {
+        try {
+            return ((Class<?>) obj.getClass().getField("TYPE").get(null)).isPrimitive();
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    private static boolean isString(Object obj) {
+        return obj instanceof String;
+    }
+
+
+    private Gson createFilterGson() {
+       return  new GsonBuilder().setExclusionStrategies(new ExclusionStrategy() {
+            @Override
+            public boolean shouldSkipField(FieldAttributes f) {
+                return f.getName().contains("password");
+            }
+           @Override
+           public boolean shouldSkipClass(Class<?> aClass) {
+               return false;
+           }
+       }).create();
+    }
+}

+ 10 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/AddOns2QualificationTypeConstants.java

@@ -0,0 +1,10 @@
+package cn.iselab.mooctest.site.common.constant;
+
+/**
+ * @author sunjh
+ * @date 2019/12/12 12:59
+ */
+public class AddOns2QualificationTypeConstants {
+    public static final Integer TEACHER = 0;
+    public static final Integer STUDENT = 1;
+}

+ 3 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/CaseBlockConstants.java

@@ -28,4 +28,7 @@ public class CaseBlockConstants {
 
     //缺陷评分
     public static final int BUG_MARK=6;
+
+    //上传附件
+    public static final int UPLOAD_FILE=7;
 }

+ 3 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/Constants.java

@@ -28,8 +28,11 @@ public class Constants {
 
     public static final Integer DEFAULT_ROWS_ON_PAGE = 10;
 
+    public static final Integer DEFAULT_RECOURSE_ROWS_ON_PAGE = 7;
+
     public static final String TARGET_PATH = "target";
 
+    public static final String CROWD_SAVE_PATH = "crowd_save";
 
     public static final String MAIN_NAME = "main.py";
 

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/DevLanguageConstants.java

@@ -11,4 +11,6 @@ public class DevLanguageConstants {
     public static final String JAVA="Java";
 
     public static final String PYTHON="Python";
+
+    public static final String CPP = "C++";
 }

+ 11 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/Exam2CasePropertiesConstant.java

@@ -0,0 +1,11 @@
+package cn.iselab.mooctest.site.common.constant;
+
+/**
+ * @author yyy
+ * @date 2019/11/14 16:02
+ */
+public class Exam2CasePropertiesConstant {
+
+    //嵌入式附件链接
+    public static final String ANNEX_URL = "annexUrl";
+}

+ 48 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/ThirdPartToolJobStatusConstants.java

@@ -0,0 +1,48 @@
+package cn.iselab.mooctest.site.common.constant;
+
+/**
+ * @author sunjh
+ * @date 2020/2/10 13:38
+ */
+public class ThirdPartToolJobStatusConstants {
+    /**
+     * 任务初始状态
+     */
+    public static final Integer CREATE = 0;
+    /**
+     * 任务开始后先进入排队状态
+     */
+    public static final Integer PENDING = 1;
+    /**
+     * 当服务器有空闲时,排队中的任务进入执行状态
+     */
+    public static final Integer RUNNING = 2;
+    /**
+     * 任务执行完成后进入运行完成状态
+     */
+    public static final Integer RUN_FINISH = 3;
+    /**
+     * 运行完成状态进入回写成绩状态
+     */
+    public static final Integer WRITE_SCORE = 4;
+    /**
+     * 回写玩成绩后进入写完成状态
+     */
+    public static final Integer WRITE_FINISH = 5;
+    /**
+     * 生成报告时先进入生成报告排队状态
+     */
+    public static final Integer GENERATE_REPORT_PENDING = 6;
+    /**
+     * 报告服务空闲时排队状态的任务进入生成报告运行状态
+     */
+    public static final Integer GENERATE_REPORTING = 7;
+    /**
+     * 报告生成成功状态
+     */
+    public static final Integer GENERATE_REPORT_FINISH = 8;
+    /**
+     * 失败状态
+     */
+    public static final Integer RUN_FAIL = 9;
+}

+ 10 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/ThirdPartToolJobTypeConstants.java

@@ -0,0 +1,10 @@
+package cn.iselab.mooctest.site.common.constant;
+
+/**
+ * @author sunjh
+ * @date 2020/2/10 16:27
+ */
+public class ThirdPartToolJobTypeConstants {
+    public final static String APP = "app";
+    public final static String WEB = "web";
+}

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/AsyncJobTool.java

@@ -7,7 +7,8 @@ import lombok.Getter;
  */
 public enum AsyncJobTool {
     MOCKTOOL("mockTool",(short)1),PDF("pdf",(short)2),MUTATION("mutation",(short)3),MCNODE("mcnode",(short)4),
-    PYTHON_NODE("python-node",(short)5),ONLINEJUDGE("onlinejudge",(short)6);
+    PYTHON_NODE("python-node",(short)5),ONLINEJUDGE("onlinejudge",(short)6),SCRIPTANALYSIS("scriptanalysis",(short)7),
+    RUNTIME("runtime",(short)8),KIBUG_EVALUATE("kibug_evaluate",(short)9),COMPATIBILITY("compatibility",(short)10);
 
     @Getter
     private String name;

+ 25 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/CourseType.java

@@ -0,0 +1,25 @@
+package cn.iselab.mooctest.site.common.enums;
+
+
+import lombok.Getter;
+
+/**
+ * @author guochao
+ * @date 2020-03-07 12:15
+ */
+public enum CourseType {
+
+    WEB(1),
+    DEV(2),
+    APP(3),
+    EMB(4),
+    AUTO(5),
+    CUSTOM(6),
+    OTHER(7);
+    //1-Web安全测试 2-开发者测试 3-移动应用测试 4-嵌入式测试 5-自主可控测试 6-自定义课程 7-其他
+
+    @Getter
+    private int type;
+
+    CourseType(int type){this.type = type;}
+}

+ 22 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/CourseVisibility.java

@@ -0,0 +1,22 @@
+package cn.iselab.mooctest.site.common.enums;
+
+import lombok.Getter;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2020-02-12 00:11
+ */
+public enum CourseVisibility {
+
+    OPEN(0),
+    PART_OPEN(1),
+    NONE_OPEN(2);
+
+    @Getter
+    private int visibility;
+
+    CourseVisibility(int visibility){
+        this.visibility = visibility;
+    }
+}

+ 14 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/DownloadStatus.java

@@ -0,0 +1,14 @@
+package cn.iselab.mooctest.site.common.enums;
+
+/**
+ * @author yyy
+ * @date 2019/11/14 15:40
+ */
+public enum DownloadStatus {
+
+    NO_TASK(0),
+    TASKING(1);
+
+    DownloadStatus(int status){
+    }
+}

+ 4 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/validation/EntityTypeEnum.java → mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/EntityTypeEnum.java

@@ -1,4 +1,4 @@
-package cn.iselab.mooctest.site.service.validation;
+package cn.iselab.mooctest.site.common.enums;
 
 import lombok.Data;
 
@@ -14,7 +14,9 @@ public enum EntityTypeEnum {
   CASE("case"),
   PAPER("paper"),
   EXAM("exam"),
-  PAPER_PYTHON("paper_python");
+  PAPER_PYTHON("paper_python"),
+  THEME("theme"),
+  COURSE_RESOURCE("course_resource");
 
   private String name;
 

+ 22 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/ProductType.java

@@ -0,0 +1,22 @@
+package cn.iselab.mooctest.site.common.enums;
+
+import lombok.Getter;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2020-02-09 21:30
+ */
+public enum ProductType {
+
+    THEME("THEME");
+
+    @Getter
+    private String type;
+
+    ProductType(String type){
+        this.type = type;
+    }
+
+
+}

+ 24 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/RoleType.java

@@ -0,0 +1,24 @@
+package cn.iselab.mooctest.site.common.enums;
+
+/**
+ * Created on 2019/4/26
+ */
+public enum RoleType {
+
+    ADMIN(1),
+    MANAGER(2),
+    WORKER(3),
+    CONTENST_MENTOR(4),
+    COMMUNITY_TEACHER(5),
+    MOOCTEST_TEACHER(6);
+
+    private int code;
+
+    RoleType(int code){
+        this.code = code;
+    }
+
+    public int getCode(){
+        return this.code;
+    }
+}

+ 19 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/TestType.java

@@ -0,0 +1,19 @@
+package cn.iselab.mooctest.site.common.enums;
+
+/**
+ * 测试案例类型枚举
+ * @author yyy
+ * @date 2019/11/19 14:44
+ */
+public enum TestType {
+    CROWD_TEST("13");
+
+    private String id;
+    TestType(String id){
+        this.id = id;
+    }
+
+    public String getId(){
+        return this.id;
+    }
+}

+ 13 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/EventsListener.java

@@ -78,4 +78,17 @@ public class EventsListener implements InitializingBean {
             }
         }
     }
+
+    @Subscribe
+    public void afterQuitCompetition(QuitCompetitionEvent quitCompetitionEvent) throws Exception {
+        Competition competition = competitionService.getCompetiton(quitCompetitionEvent.getCompetitionId());
+        if (competition.getStatus() > 0) {
+            Competition2Exam competition2Exam = competitionService.getCompetition2TaskbyCompetitionIdAndIndex(
+                    quitCompetitionEvent.getCompetitionId(), competition.getStatus());
+            Long groupId = examLogic.getExamById(competition2Exam.getExamId()).getGroupIds().get(0);
+            if (groupService.isUserInGroup(quitCompetitionEvent.getUserId(), groupId)) {
+                groupService.deleteUserFromGroup(quitCompetitionEvent.getUserId(), groupId);
+            }
+        }
+    }
 }

+ 21 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/QuitCompetitionEvent.java

@@ -0,0 +1,21 @@
+package cn.iselab.mooctest.site.common.event;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-09-11 17:38
+ */
+@Getter
+@AllArgsConstructor
+public class QuitCompetitionEvent implements Event {
+    private Long userId;
+    private Long competitionId;
+
+    @Override
+    public String getDescription() {
+        return String.format("user %s quit competition %s", userId,competitionId);
+    }
+}

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/CaptchaConfiguration.java

@@ -23,7 +23,7 @@ public class CaptchaConfiguration {
 //        properties.setProperty(Constants.KAPTCHA_BORDER, "yes");
 //        properties.setProperty(Constants.KAPTCHA_BORDER_COLOR, "105,179,90");
         properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_COLOR, "blue");
-        properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, "125");
+        properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, "140");
         properties.setProperty(Constants.KAPTCHA_IMAGE_HEIGHT, "45");
         properties.setProperty(Constants.KAPTCHA_SESSION_KEY, "code");
         properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_STRING, "0123456789");

+ 14 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ClientFeatureConfiguration.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.site.configure;
 
 import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.stereotype.Component;
@@ -12,13 +13,25 @@ import java.io.Serializable;
  */
 @Data
 @Component
-@ConfigurationProperties(prefix="featureSwitch.client")
 public class ClientFeatureConfiguration{
+    @Value("${featureSwitch.client.sms}")
     private boolean sms;
+
+    @Value("${featureSwitch.client.email}")
     private boolean email;
+
+    @Value("${featureSwitch.client.oss}")
     private boolean oss;
+
+    @Value("${featureSwitch.client.webide}")
     private boolean webide;
+
+    @Value("${featureSwitch.client.wechat}")
     private boolean wechat;
+
+    @Value("${featureSwitch.client.medal}")
     private boolean medal;
+
+    @Value("${featureSwitch.client.loginByUserCenter}")
     private boolean loginByUserCenter;
 }

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/DefaultFeatureConfiguration.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.site.configure;
 
 import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
@@ -9,8 +10,8 @@ import org.springframework.stereotype.Component;
  */
 @Data
 @Component
-@ConfigurationProperties(prefix = "featureSwitch.default")
 public class DefaultFeatureConfiguration {
 
+    @Value("${featureSwitch.default.role}")
     private String role;
 }

+ 23 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/EvaluationConfiguration.java

@@ -0,0 +1,23 @@
+package cn.iselab.mooctest.site.configure;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created on 2019/12/31
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "evaluation")
+public class EvaluationConfiguration {
+
+    // 评估项目后端baseUrl
+    private String backEndUrl;
+
+    // 评估项目前端baseUrl
+    private String frontEndUrl;
+
+    // radar页面路由
+    private String radarUrl;
+}

+ 24 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ExecutorConfig.java

@@ -46,5 +46,29 @@ public class ExecutorConfig {
     return executor;
   }
 
+  @Bean
+  public Executor generateAnnexUrlAsync(){
+    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+    executor.setCorePoolSize(20);
+    executor.setMaxPoolSize(25);
+    executor.setQueueCapacity(20);
+    executor.setThreadNamePrefix("GenerateAnnexUrlExecutor-");
+    executor.initialize();
+    log.info("executor is : {}",executor);
+    return executor;
+  }
+
+  @Bean
+  public Executor generateUpload2Oss(){
+    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+    executor.setCorePoolSize(4);
+    executor.setMaxPoolSize(4);
+    executor.setQueueCapacity(2000);
+    executor.setThreadNamePrefix("Upload2Oss-");
+    executor.initialize();
+    log.info("executor is : {}",executor);
+    return executor;
+  }
+
 
 }

+ 4 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/FileUploadConfiguration.java

@@ -1,8 +1,9 @@
 package cn.iselab.mooctest.site.configure;
 
-import org.springframework.boot.context.embedded.MultipartConfigFactory;
+import org.springframework.boot.web.servlet.MultipartConfigFactory;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.util.unit.DataSize;
 
 import javax.servlet.MultipartConfigElement;
 
@@ -19,9 +20,9 @@ public class FileUploadConfiguration {
     public MultipartConfigElement multipartConfigElement() {
         MultipartConfigFactory factory = new MultipartConfigFactory();
         //单个文件最大
-        factory.setMaxFileSize("100MB"); //KB,MB
+        factory.setMaxFileSize(DataSize.ofMegabytes(100)); //KB,MB
         /// 设置总上传数据总大小
-        factory.setMaxRequestSize("500MB");
+        factory.setMaxRequestSize(DataSize.ofMegabytes(500));
         return factory.createMultipartConfig();
     }
 }

+ 7 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/OSSConfiguration.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.site.configure;
 
 import cn.iselab.mooctest.site.data.config.OSSClientConfig;
+import cn.iselab.mooctest.site.data.config.STSConfig;
 import com.aliyun.oss.OSSClient;
 import com.aliyuncs.DefaultAcsClient;
 import com.aliyuncs.profile.DefaultProfile;
@@ -37,4 +38,10 @@ public class OSSConfiguration {
         OSSClient client = new OSSClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
         return client;
     }
+
+    @Bean
+    @ConfigurationProperties(prefix = "sts")
+    public STSConfig createSTSConfig() {
+        return new STSConfig();
+    }
 }

+ 11 - 11
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/RedisSessionConfiguration.java

@@ -5,7 +5,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
-import org.springframework.session.web.http.CookieHttpSessionStrategy;
 import org.springframework.session.web.http.CookieSerializer;
 import org.springframework.session.web.http.DefaultCookieSerializer;
 
@@ -20,15 +19,16 @@ public class RedisSessionConfiguration {
         return new SessionCounter();
     }
 
-    @ConditionalOnProperty(prefix = "featureSwitch", name = "client.loginByUserCenter", matchIfMissing = false)
-    @Bean
-    public CookieSerializer cookieSerializer() {
-        DefaultCookieSerializer serializer = new DefaultCookieSerializer();
-//        serializer.setCookieName("SESSION");
-        serializer.setCookiePath("/");
-        serializer.setDomainName(".mooctest.net");
-//        serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
-        return serializer;
-    }
+     @Bean
+     public CookieSerializer cookieSerializer() {
+         DefaultCookieSerializer serializer = new DefaultCookieSerializer();
+ //        serializer.setCookieName("SESSION");
+         serializer.setCookiePath("/");
+         serializer.setDomainName("mooctest.net");
+         serializer.setUseBase64Encoding(false);
+ //        serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
+         return serializer;
+
+     }
 
 }

+ 2 - 4
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/RequestLoggerAutoConfiguration.java

@@ -5,8 +5,8 @@ import cn.iselab.mooctest.site.web.filter.RequestLoggingFilter;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
-import org.springframework.boot.context.embedded.FilterRegistrationBean;
 import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -24,9 +24,7 @@ public class RequestLoggerAutoConfiguration {
             name = {"requestLoger.enabled"},
             matchIfMissing = true
     )
-    @ConfigurationProperties(
-            prefix = "requestLogger"
-    )
+    @ConfigurationProperties(prefix = "request-logger")
     public RequestLogger requestLogger() {
         return new RequestLogger();
     }

+ 19 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ScriptConfiguration.java

@@ -0,0 +1,19 @@
+package cn.iselab.mooctest.site.configure;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created on 2019/3/19
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "scripts")
+public class ScriptConfiguration {
+    private String path;
+    private String dbIp;
+    private String dbName;
+    private String userDbName;
+
+}

+ 10 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ShiroConfiguration.java

@@ -101,14 +101,18 @@ public class ShiroConfiguration {
 
         Map<String, String> filterChainDefinitionManager = new LinkedHashMap<String, String>();
 
+        filterChainDefinitionManager.put("/api/cookie/set", "anon");
         filterChainDefinitionManager.put("/api/test/login", "anon");
         filterChainDefinitionManager.put("/api/test/register", "anon");
         filterChainDefinitionManager.put("/api/featureSwitch", "anon");
+        filterChainDefinitionManager.put("/api/ossConfiguration","anon");
         filterChainDefinitionManager.put("/api/common/tag/**", "authc");
         filterChainDefinitionManager.put("/api/common/**", "anon");
         filterChainDefinitionManager.put("/api/mobileLogin", "anon");
         filterChainDefinitionManager.put("/api/case/nodeList", "anon");
+        filterChainDefinitionManager.put("/api/exam/**/info","anon");
         filterChainDefinitionManager.put("/api/payEmail", "anon");
+        filterChainDefinitionManager.put("/api/product/send", "anon");
 
         filterChainDefinitionManager.put("/logout", "anon");
         filterChainDefinitionManager.put("/api/dev/**", "anon");
@@ -116,11 +120,16 @@ public class ShiroConfiguration {
         filterChainDefinitionManager.put("/api/wechat/**", "anon");
 
         filterChainDefinitionManager.put("/api/pythonCommunity/exercise/**", "anon");
+        filterChainDefinitionManager.put("/api/pythonCommunity/statistic/**", "authc");
         filterChainDefinitionManager.put("/api/support/**", "anon");
+        filterChainDefinitionManager.put("/api/evaluation/**", "authc");
 
         filterChainDefinitionManager.put("/api/onlinejudge/**","anon");
 
+        filterChainDefinitionManager.put("/api/codeVisualize/**", "anon");
+
         filterChainDefinitionManager.put("/api/onlinejudge/u/**","authc");
+        filterChainDefinitionManager.put("/api/sendGetHelpEmail", "anon");
         filterChainDefinitionManager.put("/**", "authc");
         filterChainDefinitionManager.put("/api/caseExport", "anon");
         filterChainDefinitionManager.put("/api/caseImport", "anon");
@@ -129,6 +138,7 @@ public class ShiroConfiguration {
 
 
 
+
         shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionManager);
 
         shiroFilterFactoryBean.setSuccessUrl("/");

+ 20 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AddOns2QualificationDao.java

@@ -1,6 +1,10 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.AddOns2Qualification;
+import cn.iselab.mooctest.site.models.Qualification;
+import cn.iselab.mooctest.site.models.User;
+import java.math.BigInteger;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.query.Param;
@@ -12,7 +16,7 @@ import java.util.List;
  * Created by tangshanshan on 2017/11/7.
  */
 @Transactional
-public interface AddOns2QualificationDao  extends CrudRepository<AddOns2Qualification, Long> {
+public interface AddOns2QualificationDao  extends UpdateAdapter<AddOns2Qualification, Long> {
     List<AddOns2Qualification> findByQualificationId(Long qualificationId);
 
     List<AddOns2Qualification> findByQualificationIdAndAddonsType(Long qualificationId, Integer type);
@@ -26,4 +30,19 @@ public interface AddOns2QualificationDao  extends CrudRepository<AddOns2Qualific
 
     @Query("select q.competitionId from AddOns2Qualification aq,Qualification q where aq.email=:userEmail and aq.qualificationId=q.id")
     List<Long> findSupervisedCompetitionId(@Param("userEmail")String userEmail);
+
+    @Query(nativeQuery = true, value = "select u.* from add_ons_2_qualification a2q "
+            + "JOIN qualification q on a2q.qualification_id = q.id "
+            + "JOIN `user` u on u.id = q.user_id "
+            + "where q.competition_id=:competitionId and a2q.add_ons_type=0 and a2q.email= "
+            + ":teacherEmail")
+    List<Object[]> findTeacherCompetitionStudents(@Param("competitionId") long competitionId, @Param
+            ("teacherEmail")String teacherEmail);
+
+    @Query(nativeQuery = true, value = "select q.id from add_ons_2_qualification a2q "
+            + "left JOIN qualification q on a2q.qualification_id = q.id "
+            + "where q.competition_id=:competitionId and a2q.add_ons_type=0 and a2q"
+            + ".email=:teacherEmail")
+    List<BigInteger> findTeachderTeamLeaderQid(@Param("competitionId") long competitionId, @Param
+            ("teacherEmail")String teacherEmail);
 }

+ 19 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AnswerAnnexDao.java

@@ -0,0 +1,19 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.AnswerAnnex;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-09-25 17:31
+ */
+@Transactional
+public interface AnswerAnnexDao extends CrudRepository<AnswerAnnex, Long> {
+    List<AnswerAnnex> findAllByUserId(Long userId);
+
+    List<AnswerAnnex> findAllByUserIdAndExamIdAndCaseId(Long userId, Long examId, Long caseId);
+}

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ApplyUploadRecordDao.java

@@ -1,12 +1,13 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.ApplyUploadRecord;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 /**
  * Created on 2018/10/22
  */
-public interface ApplyUploadRecordDao extends JpaRepository<ApplyUploadRecord, Long>{
+public interface ApplyUploadRecordDao extends JpaRepository<ApplyUploadRecord, Long>, UpdateAdapter<ApplyUploadRecord, Long> {
 
     ApplyUploadRecord findTopByWorkerIdAndExamIdOrderByIdDesc(long workerId, long examId);
 

+ 11 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Case2DimensionDao.java

@@ -0,0 +1,11 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.Case2Dimension;
+import org.springframework.data.repository.CrudRepository;
+
+import java.util.List;
+
+public interface Case2DimensionDao extends CrudRepository<Case2Dimension, Long> {
+
+    List<Case2Dimension> findByTestTypeAndTargetType(Integer testType, Long targetType);
+}

+ 7 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CaseExtendsDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.CaseExtends;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
@@ -13,7 +14,12 @@ import java.util.List;
  * Created by sean on 16/12/24.
  */
 @Transactional
-public interface CaseExtendsDao extends PagingAndSortingRepository<CaseExtends, Long>,JpaSpecificationExecutor<CaseExtends> {
+public interface CaseExtendsDao extends PagingAndSortingRepository<CaseExtends, Long>,JpaSpecificationExecutor<CaseExtends> , UpdateAdapter<CaseExtends, Long> {
 
     List<CaseExtends> findByAppId(long appId);
+
+    @Query(nativeQuery = true, value = "select case_.id,case_.name,case_.properties,target.subsite_id as target_type, " +
+            "case_.difficulty from target,(select id,name,properties,app_id,difficulty from case_entity where id =:caseId) case_ " +
+            "where target.id=case_.app_id;")
+    List<Object[]> getCaseInfoById(@Param("caseId") long caseId);
 }

+ 17 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CodeCovDao.java

@@ -0,0 +1,17 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.CodeCov;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+/**
+ * @author yyy
+ * @date 2020/3/14 14:29
+ */
+public interface CodeCovDao extends JpaRepository<CodeCov, Long> {
+
+    List<CodeCov> findByExamIdAndCaseIdAndWorkerIdOrderByRunTimeAsc(long examId, long caseId, long workerId);
+
+    List<CodeCov> findByExamIdAndWorkerIdOrderByRunTimeAsc(long examId, long workerId);
+}

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Competition2ExamDao.java

@@ -20,4 +20,6 @@ public interface Competition2ExamDao extends CrudRepository<Competition2Exam, Lo
     ArrayList<Competition2Exam> findByCompetitionId(Long competitionId);
 
     void deleteByCompetitionIdAndIndex(Long competitionId, Integer index);
+
+    ArrayList<Competition2Exam> findByExamIdOrderByIdDesc(Long examId);
 }

+ 2 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CompetitionDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Competition;
 import org.springframework.data.repository.CrudRepository;
 
@@ -10,7 +11,6 @@ import java.util.List;
  * Created by tangshanshan on 2017/11/3.
  */
 @Transactional
-public interface CompetitionDao extends CrudRepository<Competition, Long> {
+public interface CompetitionDao extends UpdateAdapter<Competition, Long> {
     List<Competition> findByIsActiveOrderByRankWeightDesc(boolean isActive);
-    Competition findById(Long id);
 }

+ 28 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CourseResourceDao.java

@@ -0,0 +1,28 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
+import cn.iselab.mooctest.site.models.CourseResource;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import java.util.List;
+
+/**
+ * @program: mooctest-site
+ * @mail: menduo96@gmail.com
+ * @author: duomen
+ * @create: 2020/1/28
+ **/
+public interface CourseResourceDao extends PagingAndSortingRepository<CourseResource,Long>, JpaSpecificationExecutor<CourseResource>, UpdateAdapter<CourseResource,Long> {
+    List<CourseResource> findAllByIdIn(List<Long> ids);
+
+    List<CourseResource> findAllByOwnerIdAndDeleted(Long userId, int isDeleted);
+
+//    Page<CourseResource> findAllAndDeleted(Pageable pageable, int deletedStatus);
+
+//    @Override
+//    Page<CourseResource> findAll(Pageable pageable);
+}

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/DevCaseDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.DevCase;
 import org.springframework.data.repository.CrudRepository;
 
@@ -9,6 +10,6 @@ import javax.transaction.Transactional;
  * @author Alan on 2017/2/20
  */
 @Transactional
-public interface DevCaseDao extends CrudRepository<DevCase, Long> {
+public interface DevCaseDao extends UpdateAdapter<DevCase, Long> {
     DevCase findByName(String name);
 }

+ 8 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/DimensionDao.java

@@ -0,0 +1,8 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.Dimension;
+import org.springframework.data.repository.CrudRepository;
+
+public interface DimensionDao  extends CrudRepository<Dimension, Long> {
+    Dimension findById(long id);
+}

+ 21 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/DroolsDao.java

@@ -0,0 +1,21 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.DroolsRule;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @program: mooctest-site
+ * @mail: menduo96@gmail.com
+ * @author: menduo
+ * @create: 2019-05-29 19:51
+ **/
+@Repository
+public interface DroolsDao extends CrudRepository<DroolsRule, Long> {
+    List<DroolsRule> findAllByDeleted(boolean deleted);
+    List<DroolsRule> findAll();
+    DroolsRule findByBaseNameAndPackageNameAndRuleName(String baseName, String packageName, String ruleName);
+
+}

+ 8 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/EvaluationPermissionDao.java

@@ -0,0 +1,8 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.EvaluationPermission;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+public interface EvaluationPermissionDao extends PagingAndSortingRepository<EvaluationPermission, Long> {
+    EvaluationPermission findByTargetTypeAndTestType(Long targetType, Integer testType);
+}

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Exam2AssistantManagerDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Exam2AssistantManager;
 import org.springframework.data.repository.CrudRepository;
 
@@ -10,7 +11,7 @@ import java.util.List;
  * Created by Liu on 2016/12/27.
  */
 @Transactional
-public interface Exam2AssistantManagerDao extends CrudRepository<Exam2AssistantManager, Long> {
+public interface Exam2AssistantManagerDao extends UpdateAdapter<Exam2AssistantManager, Long> {
 
     List<Exam2AssistantManager> findByExamId(long examId);
 

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Exam2CaseDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Exam2Case;
 import cn.iselab.mooctest.site.models.Exam2Paper;
 import org.springframework.data.jpa.repository.Query;
@@ -14,7 +15,7 @@ import org.springframework.data.repository.query.Param;
  * Created by HenryLee on 2017/7/19.
  */
 @Transactional
-public interface Exam2CaseDao extends CrudRepository<Exam2Case, Long> {
+public interface Exam2CaseDao extends UpdateAdapter<Exam2Case, Long> {
     List<Exam2Case> findByExamIdAndCaseId(long examId, long caseId);
     List<Exam2Case> findByExamIdAndPaperId(long examId,long paperId);
     Exam2Case findByExamIdAndPaperIdAndCaseId(long examId,long paperId,long caseId);

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Exam2PaperDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Exam2Paper;
 import org.springframework.data.repository.CrudRepository;
 
@@ -10,7 +11,7 @@ import java.util.List;
  * Created by major on 2017/7/9.
  */
 @Transactional
-public interface Exam2PaperDao extends CrudRepository<Exam2Paper, Long> {
+public interface Exam2PaperDao extends UpdateAdapter<Exam2Paper, Long> {
     List<Exam2Paper> findByPaperId(long paperId);
     List<Exam2Paper> findByExamId(long paperId);
 

+ 7 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ExamDao.java

@@ -1,6 +1,8 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Exam;
+import cn.iselab.mooctest.site.models.ExamForUserSituation;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specifications;
@@ -18,7 +20,7 @@ import java.util.List;
  * Created by major on 2017/6/23.
  */
 @Transactional
-public interface ExamDao extends PagingAndSortingRepository<Exam, Long>, JpaSpecificationExecutor<Exam> {
+public interface ExamDao extends PagingAndSortingRepository<Exam, Long>, UpdateAdapter<Exam, Long>, JpaSpecificationExecutor<Exam> {
 
     Page<Exam> findBygroupSet_Id(Long groupId, Pageable pageable);
 
@@ -54,4 +56,8 @@ public interface ExamDao extends PagingAndSortingRepository<Exam, Long>, JpaSpec
             "AND t.id = t2g.examId")
     List<Exam> findTaskListInGroup(@Param("groupId") long groupId);
 
+    @Query(value = "select owner_id as ownerId, count(owner_id) as examCount, max(begin_time) as lastStartExam " +
+            "from exam e group by e.owner_id order by e.owner_id", nativeQuery = true)
+    List<Object[]> queryUserSituation();
+
 }

+ 11 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ExamPythonCommunityDao.java

@@ -1,14 +1,24 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.ExamPythonCommunity;
 import java.util.List;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
 
 /**
  * Created on 2018/8/30
  */
 public interface ExamPythonCommunityDao extends
-        JpaRepository<ExamPythonCommunity, Long>, JpaSpecificationExecutor<ExamPythonCommunity>{
+        JpaRepository<ExamPythonCommunity, Long>, JpaSpecificationExecutor<ExamPythonCommunity>, UpdateAdapter<ExamPythonCommunity, Long> {
     List<ExamPythonCommunity> findByType(int type);
+
+    @Query(value = "select count(*) from exam_2_case "
+            + "where exam_id in (select id from exam_python_community) ", nativeQuery = true)
+    long getCommunityCasesNum();
+
+    @Query(value = "select e.id from ExamPythonCommunity e")
+    List<Long> getCommunityExerciseIds();
+
 }

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/GradeDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Grade;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
@@ -11,7 +12,7 @@ import java.util.List;
  * @author Alan on 2017/3/15
  */
 @Transactional
-public interface GradeDao extends CrudRepository<Grade, Long> {
+public interface GradeDao extends UpdateAdapter<Grade, Long> {
     @Query("select g from Grade g where g.examId=?1 and g.workerId = ?2")
     List<Grade> findByExamIdAndWorkerId(long examId, long workerId);
 

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/GradeGeneralDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Grade;
 import cn.iselab.mooctest.site.models.GradeGeneral;
 import java.util.List;
@@ -16,7 +17,7 @@ import org.springframework.data.repository.query.Param;
  * @create 2018-03-12 8:13
  */
 @Transactional
-public interface GradeGeneralDao extends JpaRepository<GradeGeneral,Long> {
+public interface GradeGeneralDao extends JpaRepository<GradeGeneral,Long>, UpdateAdapter<GradeGeneral, Long> {
 
 //  GradeGeneral findByWorkerIdAndExamIdAndCaseIdAndType(long workerId, long examId, long caseId, String type);
 

+ 4 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Group2WorkerDao.java

@@ -1,7 +1,9 @@
 package cn.iselab.mooctest.site.dao;
 
 import cn.iselab.mooctest.site.models.Group2Worker;
+import cn.iselab.mooctest.site.models.GroupWorkerCount;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.transaction.annotation.Transactional;
@@ -23,4 +25,6 @@ public interface Group2WorkerDao extends CrudRepository<Group2Worker, Long>,Pagi
 
     List<Group2Worker> findByParticipantId(long participantId);
 
+    @Query(value = "select group_id as groupId,count(group_id) as workersCount from group_2_worker group by group_id", nativeQuery = true)
+    List<Object[]> getGroupWorkerCount();
 }

+ 4 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/GroupDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Group;
 import cn.iselab.mooctest.site.models.User;
 import org.springframework.data.domain.Page;
@@ -18,7 +19,7 @@ import java.util.List;
  */
 
 @Transactional
-public interface GroupDao extends PagingAndSortingRepository<Group, Long> {
+public interface GroupDao extends PagingAndSortingRepository<Group, Long>, UpdateAdapter<Group, Long> {
 
     List<Group> findByOwnerId(long ownerId);
 
@@ -67,6 +68,8 @@ public interface GroupDao extends PagingAndSortingRepository<Group, Long> {
 
     List<Group> findByOwnerIdAndIsActiveAndIsDeleted(long ownerId, boolean isActive, boolean isDeleted);
 
+    List<Group> findByOwnerIdInAndIsActiveAndIsDeleted(List<Long> ownerIds, boolean isActive, boolean isDeleted);
+
     List<Group> findByOwnerIdAndIsActive(long ownerId, boolean isActive);
 
     @Query("select case when COUNT(e2g.groupId)>0 then true else false end " +

+ 5 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ManagerPropertyDao.java

@@ -4,6 +4,7 @@ import cn.iselab.mooctest.site.models.ManagerProperty;
 import org.springframework.data.repository.CrudRepository;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 /**
  * @author sean
@@ -13,4 +14,8 @@ import javax.transaction.Transactional;
 public interface ManagerPropertyDao extends CrudRepository<ManagerProperty, Long> {
 
     ManagerProperty findByUserId(Long userId);
+
+    List<ManagerProperty> findByUserIdIn(List<Long> userIds);
+
+    List<ManagerProperty> findAllBy();
 }

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/MessageDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Message;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -15,7 +16,7 @@ import java.util.List;
  * @date 2017-11-05.
  */
 @Transactional
-public interface MessageDao extends PagingAndSortingRepository<Message, Long> {
+public interface MessageDao extends PagingAndSortingRepository<Message, Long>, UpdateAdapter<Message, Long> {
 
     @Query("SELECT m FROM Message m WHERE m.participantId = :participantId " +
             "AND isPushed = FALSE")

+ 21 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/OperationCourseDao.java

@@ -0,0 +1,21 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.OperationCourse;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * @author guochao
+ * @date 2020-02-16 10:55
+ */
+@Transactional
+public interface OperationCourseDao extends PagingAndSortingRepository<OperationCourse, Long>, JpaSpecificationExecutor<OperationCourse> {
+    List<OperationCourse> findAllByUserId(Long userId);
+
+    List<OperationCourse> findAllByUserIdAndOperationNotAndIsDeleted(Long userId, String operation, int isDeleted);
+
+    List<OperationCourse> findAllByUserIdAndOperationAndIsDeleted(Long userId, String operation, int isDeleted);
+}

+ 23 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/OperationResourceDao.java

@@ -0,0 +1,23 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
+import cn.iselab.mooctest.site.models.OperationResource;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * @author guochao
+ * @date 2020-03-14 16:09
+ */
+@Transactional
+public interface OperationResourceDao extends PagingAndSortingRepository<OperationResource,Long>, CrudRepository<OperationResource,Long>,JpaSpecificationExecutor<OperationResource>, UpdateAdapter<OperationResource,Long> {
+
+
+    List<OperationResource> findAllByUserIdAndOperationNotAndResourceIdAndResDeletedAndResPublicStatusAndPublicStatusAndTypeAndIsDeleted(Long userId, String operation, Long resourceId, int resDeleted, int resIsPublic, int courseIsPublic, int type, int courseDeleted);
+
+    List<OperationResource> findAllByResourceId(Long resourceId);
+}

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Paper2CaseDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Paper2Case;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
@@ -13,7 +14,7 @@ import java.util.List;
  * @date 2017-03-08.
  */
 @Transactional
-public interface Paper2CaseDao extends CrudRepository<Paper2Case, Long> {
+public interface Paper2CaseDao extends UpdateAdapter<Paper2Case, Long> {
 
     Paper2Case findByPaperIdAndCaseId(long paperId, long caseId);
 

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/PaperDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Paper;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -16,7 +17,7 @@ import java.util.List;
  */
 
 @Transactional
-public interface PaperDao extends PagingAndSortingRepository<Paper, Long>, JpaSpecificationExecutor<Paper> {
+public interface PaperDao extends PagingAndSortingRepository<Paper, Long>, JpaSpecificationExecutor<Paper>, UpdateAdapter<Paper, Long> {
 
     Paper findById(long paperId);
 

+ 20 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ParticipantCourseDao.java

@@ -0,0 +1,20 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.ParticipantCourse;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2020-02-12 21:54
+ */
+@Transactional
+public interface ParticipantCourseDao extends PagingAndSortingRepository<ParticipantCourse, Long>, JpaSpecificationExecutor<ParticipantCourse> {
+    List<ParticipantCourse> findAllByParticipantId(Long participantId);
+
+    ParticipantCourse findByIdAndParticipantId(Long courseId, Long participantId);
+}

+ 4 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/PermissionDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Permission;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
@@ -12,11 +13,11 @@ import java.util.List;
  * @author liuzicong
  */
 @Transactional
-public interface PermissionDao extends CrudRepository<Permission, Long> {
+public interface PermissionDao extends UpdateAdapter<Permission, Long> {
 
     @Query("SELECT p FROM Permission p " +
             "WHERE p.id in " +
-            "(SELECT r2p.permissionId FROM Role2Permission r2p, User2Role u2r, User u " +
-            "WHERE u.id = :userId AND u2r.roleId = r2p.roleId AND u.id = u2r.userId)")
+            "(SELECT r2p.permissionId FROM Role2Permission r2p, User2Role u2r " +
+            "WHERE u2r.roleId = r2p.roleId AND u2r.userId = :userId)")
     List<Permission> findByUserId(@Param("userId") Long userId);
 }

+ 17 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Product2EntityDao.java

@@ -0,0 +1,17 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.Product2Entity;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.stereotype.Component;
+
+import java.util.Optional;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2020-02-09 21:15
+ */
+@Component
+public interface Product2EntityDao extends PagingAndSortingRepository<Product2Entity, Long> {
+    Optional<Product2Entity> findByEntityIdAndEntityType(Long entityId, String entityType);
+}

+ 5 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/QualificationDao.java

@@ -1,6 +1,8 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Qualification;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.query.Param;
@@ -12,13 +14,14 @@ import java.util.List;
  * Created by tangshanshan on 2017/11/6.
  */
 @Transactional
-public interface QualificationDao extends CrudRepository<Qualification, Long> {
+public interface QualificationDao extends UpdateAdapter<Qualification, Long>, JpaSpecificationExecutor<Qualification> {
     Qualification findByCompetitionIdAndUserId(Long competitionId, Long userId);
     List<Qualification> findByCompetitionIdAndStatus(Long competitionId, Integer status);
     Qualification findByCompetitionIdAndUserIdAndStatus(Long competitionId, Long userId, Integer status);
     List<Qualification> findByCompetitionIdAndStatusAndNextRound(Long competitionId, Integer status, boolean nextround);
-
+    List<Qualification> findAll();
     //获取状态最新的qualification
     @Query(value="select * from qualification q where q.competition_id=:competitionId and q.user_id=:userId order by q.status desc limit 1",nativeQuery = true)
     Qualification findLatestQulificationByCompetitionIdAndUserId(@Param("competitionId")Long competitionId, @Param("userId")Long userId);
+    List<Qualification> findByCompetitionId(Long competitionId);
 }

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/RoleDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Role;
 import org.springframework.data.repository.CrudRepository;
 
@@ -9,7 +10,7 @@ import javax.transaction.Transactional;
  * @author liuzicong
  */
 @Transactional
-public interface RoleDao extends CrudRepository<Role, Long> {
+public interface RoleDao extends UpdateAdapter<Role, Long> {
 
     Role findByName(String name);
 }

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SalesPackageDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.SalesPackage;
 import org.springframework.data.repository.CrudRepository;
 
@@ -9,5 +10,5 @@ import javax.transaction.Transactional;
  * Created by tangshanshan on 2017/12/13.
  */
 @Transactional
-public interface SalesPackageDao extends CrudRepository<SalesPackage, Long> {
+public interface SalesPackageDao extends UpdateAdapter<SalesPackage, Long> {
 }

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SalesServiceDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.SalesService;
 import org.springframework.data.repository.CrudRepository;
 
@@ -9,5 +10,5 @@ import javax.transaction.Transactional;
  * Created by tangshanshan on 2017/12/13.
  */
 @Transactional
-public interface SalesServiceDao extends CrudRepository<SalesService, Long> {
+public interface SalesServiceDao extends UpdateAdapter<SalesService, Long> {
 }

+ 31 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/StudyRecordDao.java

@@ -0,0 +1,31 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.common.enums.EntityTypeEnum;
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
+import cn.iselab.mooctest.site.models.Group2Worker;
+import cn.iselab.mooctest.site.models.StudyRecord;
+import org.mockito.internal.matchers.Find;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Component;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * @author guochao
+ * @date 2020-02-12 19:59
+ */
+@Transactional
+public interface StudyRecordDao extends CrudRepository<StudyRecord, Long>, JpaSpecificationExecutor<StudyRecord>, UpdateAdapter<StudyRecord, Long> {
+    @Query("select s from StudyRecord s where s.themeId =:themeId and s.userId in (:studentsIds) and s.entityId in (:courseIds) and s.entityType =:entityType")
+    List<StudyRecord> countByThemeId(@Param("themeId") Long themeId, @Param("courseIds") List<Long> courseIds, @Param("studentsIds") List<Long> studentsIds,@Param("entityType") EntityTypeEnum entityType);
+
+    StudyRecord findByThemeIdAndEntityIdAndUserIdAndEntityType(Long themeId, Long entityId, Long userId, EntityTypeEnum entityType);
+
+    List<StudyRecord> findByThemeIdAndUserIdAndEntityType(Long themeId, Long userId, EntityTypeEnum entityType);
+//    @Query("SELECT count(distinct tp.userId) FROM ExamPermission tp WHERE tp.instanceId = :instanceId and tp.operation=:operation")
+//    Integer countByHasPermission(@Param("instanceId")Long instanceId, @Param("operation")String operation);
+}

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SubjectDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Subject;
 import org.springframework.data.repository.CrudRepository;
 
@@ -10,7 +11,7 @@ import java.util.List;
  * Created by Liu on 2016/12/27.
  */
 @Transactional
-public interface SubjectDao extends CrudRepository<Subject, Long> {
+public interface SubjectDao extends UpdateAdapter<Subject, Long> {
 
     Subject findBySubsiteIdAndTypeName(long subsiteId, String typeName);
 

+ 10 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SubmitRecordDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.SubmitRecord;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -14,7 +15,7 @@ import java.util.List;
  * Created by Liu on 2016/12/27.
  */
 @Transactional()
-public interface SubmitRecordDao extends PagingAndSortingRepository<SubmitRecord, Long> {
+public interface SubmitRecordDao extends PagingAndSortingRepository<SubmitRecord, Long> , UpdateAdapter<SubmitRecord, Long> {
 
     List<SubmitRecord> findByExamId(long examId);
 
@@ -30,4 +31,12 @@ public interface SubmitRecordDao extends PagingAndSortingRepository<SubmitRecord
 
     List<SubmitRecord> findByExamIdAndScoreGreaterThanEqual(Long examId, Double score);
 
+    @Query(value = "SELECT s from SubmitRecord s "
+            + "where s.participantId = :userId and s.examId in (:examIds)")
+    List<SubmitRecord> getCommunityRecordByUserId(@Param("userId")long userId, @Param("examIds")
+            List<Long> examIds);
+
+    @Query(nativeQuery = true, value = "SELECT score, participant_id from submit_record where exam_id = :examId")
+    List<Object[]> getScoresAndUserIdsByExamId(@Param("examId") Long examId);
+
 }

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SubsiteDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Subsite;
 import org.springframework.data.repository.CrudRepository;
 
@@ -9,5 +10,5 @@ import javax.transaction.Transactional;
  * Created by Liu on 2016/12/27.
  */
 @Transactional
-public interface SubsiteDao extends CrudRepository<Subsite, Long> {
+public interface SubsiteDao extends UpdateAdapter<Subsite, Long> {
 }

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TagDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Tag;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.repository.CrudRepository;
@@ -11,7 +12,7 @@ import java.util.List;
  * @author csc
  */
 @Transactional
-public interface TagDao extends JpaRepository<Tag, Integer> {
+public interface TagDao extends JpaRepository<Tag, Integer>, UpdateAdapter<Tag, Integer> {
 
     Tag findById(int id);
     List<Tag> findByParentId(int parentId);

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetDao.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.site.dao;
 
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.Target;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -17,7 +18,7 @@ import java.util.List;
  * Created by ROGK on 2017/6/26.
  */
 @Transactional
-public interface TargetDao extends PagingAndSortingRepository<Target,Long>, JpaSpecificationExecutor<Target>, CrudRepository<Target,Long> {
+public interface TargetDao extends PagingAndSortingRepository<Target,Long>, JpaSpecificationExecutor<Target>, UpdateAdapter<Target,Long> {
 
     @Query("SELECT a from Target a WHERE a.ownerId=:ownerId OR a.visible= 1")
     Page<Target> findByOwnerId(@Param("ownerId")long ownerId, Pageable pageable);

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetExtendsDao.java

@@ -1,11 +1,12 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.TargetExtends;
 import org.springframework.data.repository.CrudRepository;
 
 import java.util.List;
 
-public interface TargetExtendsDao extends CrudRepository<TargetExtends, Long> {
+public interface TargetExtendsDao extends UpdateAdapter<TargetExtends, Long> {
     List<TargetExtends> findByTargetId(Long targetId);
 
     TargetExtends findByTargetIdAndPropertyName(long targetId, String propertyName);

+ 21 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Theme2GroupDao.java

@@ -0,0 +1,21 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.Theme2Group;
+import cn.iselab.mooctest.site.models.User2Theme;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @author guochao
+ * @date 2020-02-09 18:41
+ */
+@Component
+public interface Theme2GroupDao extends CrudRepository<Theme2Group, Long> {
+    Theme2Group findByThemeIdAndGroupId(Long themeId, Long groupId);
+    Theme2Group findByThemeId(Long themeId);
+    List<Theme2Group> findByGroupId(Long groupId);
+//    List<Theme2Group> findByUserId(Long userId);
+}
+

+ 42 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ThemeDetailDao.java

@@ -0,0 +1,42 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
+import cn.iselab.mooctest.site.models.ThemeDetail;
+
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.data.repository.query.Param;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * @program: mooctest-site
+ * @mail: menduo96@gmail.com
+ * @author: menduo
+ * @create: 2019-04-23 13:13
+ **/
+@Transactional
+public interface ThemeDetailDao extends PagingAndSortingRepository<ThemeDetail,Long>, CrudRepository<ThemeDetail, Long>,JpaSpecificationExecutor<ThemeDetail>, UpdateAdapter<ThemeDetail,Long> {
+    Page<ThemeDetail> findAllBy(Pageable pageable);
+    List<ThemeDetail> findAll();
+
+    Iterable<ThemeDetail> findAllByIdAndType(Iterable<Long> iterable, int type);
+
+    List<ThemeDetail> findAllByOwnerIdAndIsDeleted(Long ownerId, int isDeleted);
+    List<ThemeDetail> findAllByOwnerId(Long ownerId);
+    Page<ThemeDetail> findAllByTypeAndAndPublicStatus(Pageable pageable,int type, int publicStatus);
+
+    @Modifying
+    @Query("update ThemeDetail t set t.status = :status where t.id= :id")
+    void updateStatusById(@Param("id") Long id, @Param("status") int status);
+
+    List<ThemeDetail> findAllByTitleLikeAndTypeAndPublicStatusAndVisibilityNotAndReleasedAndIsDeleted(String courseName,int type, int publicStatus, int visibility,int released, int isDeleted);
+
+    List<ThemeDetail> findAllByVisibilityIsNot(int visibility);
+}

+ 36 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ThemeEntityRelationsDao.java

@@ -0,0 +1,36 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.common.enums.EntityTypeEnum;
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
+import cn.iselab.mooctest.site.models.CourseResource;
+import cn.iselab.mooctest.site.models.ThemeEntityRelations;
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Component;
+
+import javax.transaction.Transactional;
+
+/**
+ * @program: mooctest-site
+ * @mail: menduo96@gmail.com
+ * @author: menduo
+ * @create: 2019-04-23 13:26
+ **/
+@Transactional
+public interface ThemeEntityRelationsDao extends PagingAndSortingRepository<ThemeEntityRelations,Long>, JpaSpecificationExecutor<ThemeEntityRelations>, UpdateAdapter<ThemeEntityRelations,Long> {
+    List<ThemeEntityRelations> findAllByThemeId(long themeId);
+    List<ThemeEntityRelations> findAllByThemeIdAndEntityType(long themeId, EntityTypeEnum entityTypeEnum);
+    ThemeEntityRelations findByThemeIdAndEntityIdAndEntityType(long themeId, long entityId, EntityTypeEnum entityTypeEnum);
+    List<ThemeEntityRelations> findAllByEntityIdAndEntityType(long entityId, EntityTypeEnum entityTypeEnum);
+    void deleteByThemeId(Long themeId);
+
+    @Modifying
+    @Query("update ThemeEntityRelations t set t.releaseStatus = :status where t.id= :id")
+    void updateStatusById(@Param("id") Long id, @Param("status") int status);
+}

+ 28 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ThirdPartToolJobDao.java

@@ -0,0 +1,28 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
+import cn.iselab.mooctest.site.models.ThirdPartToolJob;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.data.repository.query.Param;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * @author sunjh
+ * @date 2020/2/10 9:47
+ */
+@Transactional
+public interface ThirdPartToolJobDao extends UpdateAdapter<ThirdPartToolJob, Long>, PagingAndSortingRepository<ThirdPartToolJob, Long> {
+    List<ThirdPartToolJob> findByGroupId(Long groupId);
+
+    List<ThirdPartToolJob> findByStatusAndTypeOrderByStartTime(Integer status, String type);
+
+    ThirdPartToolJob findThirdPartToolJobByOwnerIdAndGroupId(Long userId, Long GroupId);
+
+    @Query("SELECT a FROM ThirdPartToolJob a, User u WHERE a.groupId = :examId AND a.ownerId = u.id and u.name like concat('%',:keyword,'%') ")
+    Page<ThirdPartToolJob> findByExamId(@Param("examId") Long examId, @Param("keyword") String keyword, Pageable pageable);
+}

+ 11 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/UploadRecordDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.UploadRecord;
 import java.util.List;
 import org.springframework.data.jpa.repository.JpaRepository;
@@ -9,7 +10,7 @@ import org.springframework.data.repository.query.Param;
 /**
  * Created on 2018/10/10
  */
-public interface UploadRecordDao extends JpaRepository<UploadRecord, Long> {
+public interface UploadRecordDao extends JpaRepository<UploadRecord, Long>, UpdateAdapter<UploadRecord, Long> {
 
     UploadRecord findByWorkerIdAndExamIdAndCaseIdAndUploadTime(long workerId, long examId, long
             caseId, String uploadTime);
@@ -27,4 +28,13 @@ public interface UploadRecordDao extends JpaRepository<UploadRecord, Long> {
       + "where u.examId = :examId and u.caseId = :caseId")
     List<Long> retrieveUserIdsByExamIdAndCaseId(@Param("examId") long examId, @Param("caseId") long
       caseId);
+
+    UploadRecord findByApplyUploadId(long applyUploadId);
+
+    @Query("select distinct u.workerId from UploadRecord u where u.examId = :examId")
+    List<Long> retrieveUserIdsByExamId(@Param("examId") long examId);
+
+    @Query(nativeQuery = true, value = "select u.case_id,u.worker_id,g.type,g.score,u.upload_time,u.id " +
+            "from upload_record u inner join grade_general g on u.id=g.upload_id and u.exam_id=:examId")
+    List<Object[]> findAllRecordsByExamId(@Param("examId") long examId);
 }

+ 32 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/User2ThemeDao.java

@@ -0,0 +1,32 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.User2Theme;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.query.Param;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * @program: mooctest-site
+ * @mail: menduo96@gmail.com
+ * @author: menduo
+ * @create: 2019-06-03 15:04
+ **/
+@Transactional
+public interface User2ThemeDao extends CrudRepository<User2Theme,Long> {
+    User2Theme findByUserIdAndThemeId(long userId,long themeId);
+    List<User2Theme> findAllByUserIdAndThemeId(long userId, long themeId);
+    List<User2Theme> findByUserId(long userId);
+
+    @Modifying
+    @Query("update User2Theme u2t set u2t.operation = :operation where u2t.id= :id")
+    void updateOperationById(@Param("id") long id, @Param("operation") String operation);
+
+    User2Theme findByUserIdAndThemeIdAndOperation(long userId, long themeId, String operation);
+
+    List<User2Theme> findByUserIdAndThemeIdAndOperationNot(long userId, long themeId, String operation);
+}
+

+ 2 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/UserDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.User;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -13,7 +14,7 @@ import java.util.List;
 
 
 @Transactional
-public interface UserDao extends PagingAndSortingRepository<User, Long>, JpaSpecificationExecutor<User> {
+public interface UserDao extends PagingAndSortingRepository<User, Long>, JpaSpecificationExecutor<User>, UpdateAdapter<User, Long> {
 
     User findByEmail(String email);
 
@@ -22,7 +23,6 @@ public interface UserDao extends PagingAndSortingRepository<User, Long>, JpaSpec
     @Query("SELECT u FROM User u WHERE u.email = :username or u.mobile = :username")
     User findByUsername(@Param("username") String username);
 
-    User findById(Long id);
 
     @Query("SELECT u FROM User u, User2Role u2r WHERE u.id = u2r.userId AND u2r.roleId = :roleId")
     Page<User> findByRoleId(@Param("roleId") Long roleId, Pageable pageable);

+ 34 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/adapter/UpdateAdapter.java

@@ -0,0 +1,34 @@
+package cn.iselab.mooctest.site.dao.adapter;
+
+import com.google.common.collect.Lists;
+import org.springframework.data.repository.CrudRepository;
+
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2020-01-03 21:16
+ */
+public interface UpdateAdapter<T, ID> extends CrudRepository<T, ID> {
+
+    default T findOne(ID id){
+        return findById(id).orElse(null);
+    }
+
+    @Override
+    Optional<T> findById(ID id);
+
+    default List<T> findAll(List<ID> ids){
+        return Lists.newArrayList(findAllById(ids));
+    }
+
+    default List<T> save(List<T> ts){
+        return Lists.newArrayList(saveAll(ts));
+    }
+
+    default void delete(List<T> ts){
+        deleteAll(ts);
+    }
+}

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/BugDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao.fromKibug;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.fromKibug.Bug;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.PagingAndSortingRepository;
@@ -9,7 +10,7 @@ import java.util.List;
 /**
  * Created by shanshan on 2017/7/3.
  */
-public interface BugDao  extends PagingAndSortingRepository<Bug, Long>,JpaSpecificationExecutor<Bug> {
+public interface BugDao  extends PagingAndSortingRepository<Bug, Long>,JpaSpecificationExecutor<Bug>, UpdateAdapter<Bug, Long> {
 
     List<Bug> findByReportId(Long reportId);
 }

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/CaseTakeDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao.fromKibug;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.fromKibug.CaseTake;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -15,7 +16,7 @@ import java.util.List;
  * Created by NJUta on 2017/6/7.
  */
 @Transactional
-public interface CaseTakeDao  extends PagingAndSortingRepository<CaseTake, Long>{
+public interface CaseTakeDao  extends PagingAndSortingRepository<CaseTake, Long>, UpdateAdapter<CaseTake, Long> {
 
     Page<CaseTake> findByExamIdAndCaseId(long examId, long caseId, Pageable page);
 

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ReportDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao.fromKibug;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.fromKibug.Report;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -16,7 +17,7 @@ import java.util.List;
  * Created by NJUta on 2017/6/7.
  */
 @Transactional
-public interface ReportDao extends PagingAndSortingRepository<Report, Long>, JpaSpecificationExecutor{
+public interface ReportDao extends PagingAndSortingRepository<Report, Long>, UpdateAdapter<Report, Long>,JpaSpecificationExecutor{
     @Query("select new Report(caseTakeId,min(createTimeMillis),max(name),sum(bugAmount)) from Report where caseTakeId in ?1 and status>0 group by caseTakeId")
     List<Report> mergeReportByCaseTakeIds(Long[] caseTakeIds);
     @Query(value = "select * from report where case_take_id= :caseTakeId and status>0 order by create_time_millis desc limit 0,1",nativeQuery = true)

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ScoreRuleDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao.fromKibug;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.fromKibug.ScoreRule;
 import cn.iselab.mooctest.site.models.fromKibug.ScoreRulePK;
 import org.springframework.data.jpa.repository.Query;
@@ -12,5 +13,5 @@ import java.util.List;
  * Created by NJUta on 2017/6/7.
  */
 @Transactional
-public interface ScoreRuleDao  extends CrudRepository<ScoreRule, ScoreRulePK> {
+public interface ScoreRuleDao  extends UpdateAdapter<ScoreRule, ScoreRulePK> {
 }

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/instancePermission/ExamPermissionDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao.instancePermission;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.instancePermission.ExamPermission;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
@@ -13,7 +14,7 @@ import java.util.List;
  * @date 2017-07-07.
  */
 @Transactional
-public interface ExamPermissionDao extends CrudRepository<ExamPermission, Long> {
+public interface ExamPermissionDao extends UpdateAdapter<ExamPermission, Long> {
 
 //    @Query("SELECT tp FROM ExamPermission tp WHERE tp.userId = :userId OR tp.userId = 0")
     @Query("SELECT tp FROM ExamPermission tp WHERE tp.userId = :userId")

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/instancePermission/TargetPermissionDao.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.dao.instancePermission;
 
+import cn.iselab.mooctest.site.dao.adapter.UpdateAdapter;
 import cn.iselab.mooctest.site.models.instancePermission.TargetPermission;
 import org.springframework.data.repository.CrudRepository;
 
@@ -11,7 +12,7 @@ import java.util.List;
  * @date 2017-07-12.
  */
 @Transactional
-public interface TargetPermissionDao extends CrudRepository<TargetPermission, Long> {
+public interface TargetPermissionDao extends UpdateAdapter<TargetPermission, Long> {
 
     List<TargetPermission> findByUserId(Long userId);
 

+ 12 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/GetHelpEmailDTO.java

@@ -0,0 +1,12 @@
+package cn.iselab.mooctest.site.data;
+
+import lombok.Data;
+
+@Data
+public class GetHelpEmailDTO {
+    private long userId;
+
+    private String currentUrl;
+
+    private String problemDescription;
+}

+ 1 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/OnlineJudgeResultDTO.java

@@ -22,6 +22,7 @@ public class OnlineJudgeResultDTO {
     private List<String> expectOutput;
     private List<String> realOutput;
     private List<String> errorLog;
+    private int[] cov;
     public OnlineJudgeResultDTO(String state,int resultCode) {
         this.state = state;
         this.resultCode = resultCode;

+ 17 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/OwnerAndWorkersCountDTO.java

@@ -0,0 +1,17 @@
+package cn.iselab.mooctest.site.data;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+/**
+ * @program: mooctest-site
+ * @mail: menduo96@gmail.com
+ * @author: menduo
+ * @create: 2019-11-28 19:05
+ **/
+@Data
+@AllArgsConstructor
+public class OwnerAndWorkersCountDTO {
+    private long ownerId;
+    private long workersCount;
+}

+ 1 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/UploadRecordDTO.java

@@ -21,6 +21,7 @@ public class UploadRecordDTO {
     String OSSUrl;
     String source;
     String uploadTime;
+    Long applyUploadId;
 
     public UploadRecordDTO(UploadRecord uploadRecord) {
         BeanUtils.copyProperties(uploadRecord, this);

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/config/OSSClientConfig.java

@@ -9,7 +9,7 @@ public class OSSClientConfig {
     private String endpoint;
     private String accessKeyId;
     private String accessKeySecret;
-    private String bucket;
+    private String bucket; // == oss.bucket.main
     private long expireTime;
     private String roleArn;
     private String region;

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.