浏览代码

3.4.0 update

xiaofei 1 年之前
父节点
当前提交
7a0bfbaabb
共有 27 个文件被更改,包括 472 次插入425 次删除
  1. 4 0
      distributed-print/install/mysql/upgrade/3.4.0.sql
  2. 4 0
      distributed-print/pom.xml
  3. 11 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysAdminSetController.java
  4. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkClassController.java
  5. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkGroupController.java
  6. 14 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkSettingController.java
  7. 102 23
      distributed-print/src/main/java/com/qmth/distributed/print/start/StartRunning.java
  8. 35 1
      distributed-print/src/main/resources/application.properties
  9. 1 0
      pom.xml
  10. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/group/GroupPictureConfigParams.java
  11. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/group/MarkClassUserParams.java
  12. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/group/MarkGroupClassUserParams.java
  13. 80 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/setting/MarkPaperSettingConfig.java
  14. 23 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/setting/MarkPaperSettingList.java
  15. 25 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/setting/MarkPaperSettingParam.java
  16. 1 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  17. 96 95
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java
  18. 1 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/RedisUtil.java
  19. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkGroupService.java
  20. 3 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkPaperService.java
  21. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkUserClassService.java
  22. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java
  23. 62 20
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java
  24. 2 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserClassServiceImpl.java
  25. 0 36
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/TeachcloudTaskApplication.java
  26. 0 121
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/start/StartRunning.java
  27. 0 116
      teachcloud-task/src/main/resources/application-base.properties

+ 4 - 0
distributed-print/install/mysql/upgrade/3.4.0.sql

@@ -175,6 +175,10 @@ DROP COLUMN `course_code`,
 DROP INDEX `index3` ,
 ADD INDEX `index3` USING BTREE (`exam_id`, `course_id`, `upload_time`);
 
+UPDATE `sys_privilege` SET `related` = '184,414' WHERE (`id` = '408');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('1149', '评卷设置(批量)', 'BatchMarkConfig', 'BUTTON', '897', '8', 'AUTH', '1150', '1', '0', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1150', '评卷设置保存', '/api/admin/mark/setting/paper/batch_save', 'URL', '897', '19', 'AUTH', '1', '1', '1');
+
 
 -- drop table if exists exam_detail_course_paper_type;
 -- drop table if exists basic_template_org;

+ 4 - 0
distributed-print/pom.xml

@@ -32,6 +32,10 @@
             <groupId>com.qmth.teachcloud.mark</groupId>
             <artifactId>teachcloud-mark</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.qmth.teachcloud.task</groupId>
+            <artifactId>teachcloud-task</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.qmth.teachcloud.common.api</groupId>
             <artifactId>teachcloud-common-api</artifactId>

+ 11 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/SysAdminSetController.java

@@ -15,6 +15,7 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.FlowMsgTypeEnum;
 import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
 import com.qmth.teachcloud.common.service.*;
+import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import io.swagger.annotations.*;
@@ -73,6 +74,8 @@ public class SysAdminSetController {
     TSchoolRoleService tSchoolRoleService;
     @Resource
     private FileUploadService fileUploadService;
+    @Resource
+    private RedisUtil redisUtil;
 
     @ApiOperation(value = "数据还原")
     @ApiResponses({@ApiResponse(code = 200, message = "数据还原信息", response = ResultUtil.class)})
@@ -326,6 +329,14 @@ public class SysAdminSetController {
                 }
             }
         }
+
+        // 更新用户菜单缓存
+        Set<String> userMenuCacheKeySet = (Set<String>) redisUtil.getKeyPatterns(SystemConstant.USER_MENU_CACHE_LIKE);
+        for (String key : userMenuCacheKeySet) {
+            String userId = key.substring(key.lastIndexOf(":") + 1);
+            commonCacheService.updateUserMenuCache(Long.valueOf(userId));
+            commonCacheService.updateUserAuthCache(Long.valueOf(userId));
+        }
         return ResultUtil.ok(true);
     }
 

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkClassController.java

@@ -4,7 +4,7 @@ package com.qmth.distributed.print.api.mark;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.mark.dto.mark.setting.MarkUserClassDto;
-import com.qmth.teachcloud.common.bean.params.mark.setting.MarkClassUserParams;
+import com.qmth.teachcloud.common.bean.params.mark.group.MarkClassUserParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
 import com.qmth.teachcloud.common.util.Result;

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkGroupController.java

@@ -10,7 +10,7 @@ import com.qmth.teachcloud.mark.dto.mark.manage.MarkGroupQuestionsDto;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkGroupSummaryProgressDto;
 import com.qmth.teachcloud.mark.dto.mark.setting.MarkGroupSingleDto;
 import com.qmth.teachcloud.mark.dto.mark.setting.MarkGroupTaskDto;
-import com.qmth.teachcloud.common.bean.params.mark.setting.GroupPictureConfigParams;
+import com.qmth.teachcloud.common.bean.params.mark.group.GroupPictureConfigParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
 import com.qmth.teachcloud.common.util.Result;

+ 14 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkSettingController.java

@@ -9,6 +9,7 @@ import com.qmth.distributed.print.business.templete.execute.SyncObjectiveStructI
 import com.qmth.distributed.print.business.templete.execute.SyncSubjectiveStructImportService;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.bean.dto.mark.MarkSettingDto;
+import com.qmth.teachcloud.common.bean.params.mark.setting.MarkPaperSettingParam;
 import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
@@ -108,8 +109,19 @@ public class MarkSettingController {
     @ApiOperation(value = "评卷设置数据保存")
     @RequestMapping(value = "/paper/save", method = RequestMethod.POST)
     @OperationLogDetail(operationType = OperationTypeEnum.SAVE)
-    public Result paperSave(@RequestBody List<MarkPaper> markPaperList) {
-        markPaperService.savePaperSetting(markPaperList);
+    public Result paperSave(@RequestBody MarkPaper markPaper) {
+        markPaperService.savePaperSetting(markPaper);
+        return ResultUtil.ok(true);
+    }
+
+    /**
+     * 评判设置数据保存
+     */
+    @ApiOperation(value = "评卷设置数据批量保存")
+    @RequestMapping(value = "/paper/batch_save", method = RequestMethod.POST)
+    @OperationLogDetail(operationType = OperationTypeEnum.SAVE)
+    public Result paperBatchSave(@RequestBody MarkPaperSettingParam markPaperSettingParam) {
+        markPaperService.saveBatchPaperSetting(markPaperSettingParam);
         return ResultUtil.ok(true);
     }
 

+ 102 - 23
distributed-print/src/main/java/com/qmth/distributed/print/start/StartRunning.java

@@ -2,12 +2,18 @@ package com.qmth.distributed.print.start;
 
 import com.qmth.teachcloud.common.service.AuthInfoService;
 import com.qmth.teachcloud.common.service.SysConfigService;
+import com.qmth.teachcloud.task.enums.JobEnum;
+import com.qmth.teachcloud.task.job.*;
+import com.qmth.teachcloud.task.job.service.JobService;
+import com.qmth.teachcloud.task.service.QuartzService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @Description: 服务启动时初始化运行,哪个微服务模块需要则拿此模版去用
@@ -21,36 +27,109 @@ public class StartRunning implements CommandLineRunner {
     private final static Logger log = LoggerFactory.getLogger(StartRunning.class);
 
     @Resource
-    AuthInfoService authInfoService;
-
+    private AuthInfoService authInfoService;
+    @Resource
+    private SysConfigService sysConfigService;
+    @Resource
+    private QuartzService quartzService;
     @Resource
-    SysConfigService sysConfigService;
+    private JobService jobService;
 
     @Override
     public void run(String... args) throws Exception {
         log.info("服务器启动时执行 start");
+
+        log.info("服务器启动时执行,配置参数缓存 start");
         sysConfigService.selectAll();
+        log.info("服务器启动时执行,配置参数缓存 end");
+        log.info("服务器启动时执行,读取授权信息 start");
         authInfoService.selectAuthInfo();
+        log.info("服务器启动时执行,读取授权信息 end");
+
+        log.info("服务器启动时执行,机器心跳 start");
+        jobService.machineHeart();
+        log.info("服务器启动时执行,机器心跳 end");
+
+        log.info("服务器启动时执行,任务到期提醒定时任务 start");
+        Map expireJobMap = new HashMap();
+        expireJobMap.computeIfAbsent("name", v -> SendSmsExpireJob.class.getName());
+        quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.name(), JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.getGroupName());
+        // 每天15点定时任务
+        quartzService.addJob(SendSmsExpireJob.class, JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.name(), JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.getGroupName(), "0 0 15 * * ?", expireJobMap);
+        log.info("服务器启动时执行,任务到期提醒定时任务 end");
+
+        log.info("服务器启动时执行,任务逾期提醒定时任务 start");
+        Map orverdueJobMap = new HashMap();
+        orverdueJobMap.computeIfAbsent("name", v -> SendSmsOverdueJob.class.getName());
+        quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.name(), JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.getGroupName());
+        // 每天9点定时任务
+        quartzService.addJob(SendSmsOverdueJob.class, JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.name(), JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.getGroupName(), "0 0 9 * * ?", orverdueJobMap);
+        log.info("服务器启动时执行,任务逾期提醒定时任务 end");
+
+        log.info("服务器启动时执行,短信发送失败重发定时任务 start");
+        Map rensendJobMap = new HashMap();
+        rensendJobMap.computeIfAbsent("name", v -> ResendSmsJob.class.getName());
+        quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_RESEND_JOB.name(), JobEnum.SMS_NOTICE_TASK_RESEND_JOB.getGroupName());
+        // 每隔1小时定时任务
+        quartzService.addJob(ResendSmsJob.class, JobEnum.SMS_NOTICE_TASK_RESEND_JOB.name(), JobEnum.SMS_NOTICE_TASK_RESEND_JOB.getGroupName(), "0 0/30 * * * ?", rensendJobMap);
+        log.info("服务器启动时执行,短信发送失败重发定时任务 end");
+
+        log.info("服务器启动时执行,MQ信息同步定时任务 start");
+        Map redisMqJobMap = new HashMap();
+        redisMqJobMap.computeIfAbsent("name", v -> RedisMqSyncJob.class.getName());
+        quartzService.deleteJob(JobEnum.REDIS_MQ_JOB.name(), JobEnum.REDIS_MQ_JOB.getGroupName());
+        // 每分钟定时任务
+        quartzService.addJob(RedisMqSyncJob.class, JobEnum.REDIS_MQ_JOB.name(), JobEnum.REDIS_MQ_JOB.getGroupName(), "0 0/1 * * * ?", redisMqJobMap);
+        log.info("服务器启动时执行,MQ信息同步定时任务 end");
+
+        // 每天0点开始,每2小时一次
+        log.info("服务器启动时执行,自动统分定时任务 start");
+        Map reunifyJobMap = new HashMap();
+        reunifyJobMap.computeIfAbsent("name", v -> SubjectCalculateJob.class.getName());
+        quartzService.deleteJob(JobEnum.SYNC_REUNIFY_JOB.name(), JobEnum.SYNC_REUNIFY_JOB.getGroupName());
+        quartzService.addJob(SubjectCalculateJob.class, JobEnum.SYNC_REUNIFY_JOB.name(), JobEnum.SYNC_REUNIFY_JOB.getGroupName(), "0 0 0/2 * * ?", reunifyJobMap);
+        log.info("服务器启动时执行,自动统分定时任务 end");
+
+        // 每1分钟一次
+        log.info("服务器启动时执行,更新评卷员质量监控指标定时任务 start");
+        Map qualityJobMap = new HashMap();
+        qualityJobMap.computeIfAbsent("name", v -> UpdateMarkerQualityJob.class.getName());
+        quartzService.deleteJob(JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY.getGroupName());
+        quartzService.addJob(UpdateMarkerQualityJob.class, JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY.getGroupName(), "0 */1 * * * ?", qualityJobMap);
+        log.info("服务器启动时执行,更新评卷员质量监控指标定时任务 end");
+
+        // 每1分钟一次
+        log.info("服务器启动时执行,评卷任务生成定时任务 start");
+        Map buildMarkTaskJobMap = new HashMap();
+        buildMarkTaskJobMap.computeIfAbsent("name", v -> BuildMarkTaskJob.class.getName());
+        quartzService.deleteJob(JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK.getGroupName());
+        quartzService.addJob(BuildMarkTaskJob.class, JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK.getGroupName(), "0 */1 * * * ?", buildMarkTaskJobMap);
+        log.info("服务器启动时执行,评卷任务生成定时任务 end");
+
+        // 每1分钟一次
+        log.info("服务器启动时执行,初始化阅卷数据定时任务 start");
+        Map initMarkDataJobMap = new HashMap();
+        initMarkDataJobMap.computeIfAbsent("name", v -> InitMarkDataJob.class.getName());
+        quartzService.deleteJob(JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA.getGroupName());
+        quartzService.addJob(InitMarkDataJob.class, JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA.getGroupName(), "0 */1 * * * ?", initMarkDataJobMap);
+        log.info("服务器启动时执行,初始化阅卷数据定时任务 end");
+
+        // 每10分钟一次
+        log.info("服务器启动时执行,清空过期任务定时任务 start");
+        Map clearTimeoutTaskJobMap = new HashMap();
+        clearTimeoutTaskJobMap.computeIfAbsent("name", v -> ClearTimeoutTaskJob.class.getName());
+        quartzService.deleteJob(JobEnum.CLEAR_TIMEOUT_TASK.name(), JobEnum.CLEAR_TIMEOUT_TASK.getGroupName());
+        quartzService.addJob(ClearTimeoutTaskJob.class, JobEnum.CLEAR_TIMEOUT_TASK.name(), JobEnum.CLEAR_TIMEOUT_TASK.getGroupName(), "0 0/1 6-23 * * ?", clearTimeoutTaskJobMap);
+        log.info("服务器启动时执行,清空过期任务定时任务 end");
+
+        // 每2分钟一次
+        log.info("服务器启动时执行,PDF生成定时任务 start");
+        Map createPdfJobMap = new HashMap();
+        createPdfJobMap.computeIfAbsent("name", v -> CreatePdfTaskJob.class.getName());
+        quartzService.deleteJob(JobEnum.CREATE_PDF_JOB.name(), JobEnum.CREATE_PDF_JOB.getGroupName());
+        quartzService.addJob(CreatePdfTaskJob.class, JobEnum.CREATE_PDF_JOB.name(), JobEnum.CREATE_PDF_JOB.getGroupName(), "0 0/2 * * * ?", createPdfJobMap);
+        log.info("服务器启动时执行,PDF生成定时任务 end");
+
         log.info("服务器启动时执行 end");
     }
-
-//    public static void main(String[] args) {
-//        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
-//        //加密所需的salt(盐)
-//        textEncryptor.setPassword("NFf5S9aVEmrEzJ5M3L6W1");
-//        //要加密的数据(数据库的用户名或密码)
-//        String username = textEncryptor.encrypt("root");
-//        String password = textEncryptor.encrypt("123456789");
-//        String redisPassword = textEncryptor.encrypt("qmth87863577");
-//        System.out.println("username:" + username);
-//        System.out.println("password:" + password);
-//        System.out.println("redisPassword:" + redisPassword);
-//
-//        String usernameDecrypt = textEncryptor.decrypt("vfaatAlDIcsdgGug2iATvQ==");
-//        String passwordDecrypt = textEncryptor.decrypt("BfDtvzvWkywnFGKnxelLAMVaxyFl+Sle");
-//        String redisPasswordDecrypt = textEncryptor.decrypt("54A9TS0Lw/36A2wI2sCjbSxR5lhJRlvd");
-//        System.out.println("usernameDecrypt:" + usernameDecrypt);
-//        System.out.println("passwordDecrypt:" + passwordDecrypt);
-//        System.out.println("redisPasswordDecrypt:" + redisPasswordDecrypt);
-//    }
 }

+ 35 - 1
distributed-print/src/main/resources/application.properties

@@ -93,4 +93,38 @@ com.qmth.logging.file-path=/Users/xiaofei/qmth/temporary/zxzk/log/distributed-pr
 #com.qmth.solar.access-key=274f823e5f59410f8b3bb6edcd8e2b6e
 #com.qmth.solar.access-secret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr
 
-com.qmth.sms.server=https://solar.qmth.com.cn
+com.qmth.sms.server=https://solar.qmth.com.cn
+
+spring.quartz.job-store-type=jdbc
+spring.quartz.jdbc.initialize-schema=never
+# JobDataMaps\u662F\u5426\u90FD\u4E3AString\u7C7B\u578B\uFF0C\u9ED8\u8BA4false
+spring.quartz.properties.org.quartz.jobStore.useProperties=false
+# \u8868\u7684\u524D\u7F00\uFF0C\u9ED8\u8BA4QRTZ_
+spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_
+# \u662F\u5426\u52A0\u5165\u96C6\u7FA4
+spring.quartz.properties.org.quartz.jobStore.isClustered=true
+# \u8C03\u5EA6\u5B9E\u4F8B\u5931\u6548\u7684\u68C0\u67E5\u65F6\u95F4\u95F4\u9694 ms
+spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=5000
+# \u5F53\u8BBE\u7F6E\u4E3A\u201Ctrue\u201D\u65F6\uFF0C\u6B64\u5C5E\u6027\u544A\u8BC9Quartz \u5728\u975E\u6258\u7BA1JDBC\u8FDE\u63A5\u4E0A\u8C03\u7528setTransactionIsolation\uFF08Connection.TRANSACTION_READ_COMMITTED\uFF09\u3002
+spring.quartz.properties.org.quartz.jobStore.txIsolationLevelReadCommitted=true
+# \u6570\u636E\u4FDD\u5B58\u65B9\u5F0F\u4E3A\u6570\u636E\u5E93\u6301\u4E45\u5316
+spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
+# \u6570\u636E\u5E93\u4EE3\u7406\u7C7B\uFF0C\u4E00\u822Corg.quartz.impl.jdbcjobstore.StdJDBCDelegate\u53EF\u4EE5\u6EE1\u8DB3\u5927\u90E8\u5206\u6570\u636E\u5E93
+spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
+#============================================================================
+# Scheduler \u8C03\u5EA6\u5668\u5C5E\u6027\u914D\u7F6E
+#============================================================================
+# \u8C03\u5EA6\u6807\u8BC6\u540D \u96C6\u7FA4\u4E2D\u6BCF\u4E00\u4E2A\u5B9E\u4F8B\u90FD\u5FC5\u987B\u4F7F\u7528\u76F8\u540C\u7684\u540D\u79F0
+spring.quartz.properties.org.quartz.scheduler.instanceName=ClusterQuartz
+# ID\u8BBE\u7F6E\u4E3A\u81EA\u52A8\u83B7\u53D6 \u6BCF\u4E00\u4E2A\u5FC5\u987B\u4E0D\u540C
+spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO
+
+#============================================================================
+# \u914D\u7F6EThreadPool
+#============================================================================
+# \u7EBF\u7A0B\u6C60\u7684\u5B9E\u73B0\u7C7B\uFF08\u4E00\u822C\u4F7F\u7528SimpleThreadPool\u5373\u53EF\u6EE1\u8DB3\u51E0\u4E4E\u6240\u6709\u7528\u6237\u7684\u9700\u6C42\uFF09
+spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
+# \u6307\u5B9A\u7EBF\u7A0B\u6570\uFF0C\u4E00\u822C\u8BBE\u7F6E\u4E3A1-100\u76F4\u63A5\u7684\u6574\u6570\uFF0C\u6839\u636E\u7CFB\u7EDF\u8D44\u6E90\u914D\u7F6E
+spring.quartz.properties.org.quartz.threadPool.threadCount=10
+# \u8BBE\u7F6E\u7EBF\u7A0B\u7684\u4F18\u5148\u7EA7(\u53EF\u4EE5\u662FThread.MIN_PRIORITY\uFF08\u53731\uFF09\u548CThread.MAX_PRIORITY\uFF08\u8FD9\u662F10\uFF09\u4E4B\u95F4\u7684\u4EFB\u4F55int \u3002\u9ED8\u8BA4\u503C\u4E3AThread.NORM_PRIORITY\uFF085\uFF09\u3002)
+spring.quartz.properties.org.quartz.threadPool.threadPriority=5

+ 1 - 0
pom.xml

@@ -16,6 +16,7 @@
         <module>teachcloud-task</module>
         <module>teachcloud-report</module>
         <module>teachcloud-report-business</module>
+        <module>teachcloud-task</module>
     </modules>
 
     <properties>

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/setting/GroupPictureConfigParams.java → teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/group/GroupPictureConfigParams.java

@@ -1,4 +1,4 @@
-package com.qmth.teachcloud.common.bean.params.mark.setting;
+package com.qmth.teachcloud.common.bean.params.mark.group;
 
 import com.qmth.teachcloud.common.bean.dto.mark.PictureConfig;
 

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/setting/MarkClassUserParams.java → teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/group/MarkClassUserParams.java

@@ -1,4 +1,4 @@
-package com.qmth.teachcloud.common.bean.params.mark.setting;
+package com.qmth.teachcloud.common.bean.params.mark.group;
 
 import java.io.Serializable;
 import java.util.List;

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/setting/MarkGroupClassUserParams.java → teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/group/MarkGroupClassUserParams.java

@@ -1,4 +1,4 @@
-package com.qmth.teachcloud.common.bean.params.mark.setting;
+package com.qmth.teachcloud.common.bean.params.mark.group;
 
 import com.qmth.teachcloud.common.bean.dto.mark.MarkUser;
 

+ 80 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/setting/MarkPaperSettingConfig.java

@@ -0,0 +1,80 @@
+package com.qmth.teachcloud.common.bean.params.mark.setting;
+
+import com.qmth.teachcloud.common.enums.mark.MarkMode;
+import io.swagger.annotations.ApiModelProperty;
+
+public class MarkPaperSettingConfig {
+
+    private MarkMode markMode;
+    private Long markStartTime;
+    private Long markEndTime;
+    private Double passScore;
+    private Double excellentScore;
+    private Boolean showObjectScore;
+    private Boolean autoScroll;
+    private Boolean openDoubleMarking;
+
+    public MarkMode getMarkMode() {
+        return markMode;
+    }
+
+    public void setMarkMode(MarkMode markMode) {
+        this.markMode = markMode;
+    }
+
+    public Long getMarkStartTime() {
+        return markStartTime;
+    }
+
+    public void setMarkStartTime(Long markStartTime) {
+        this.markStartTime = markStartTime;
+    }
+
+    public Long getMarkEndTime() {
+        return markEndTime;
+    }
+
+    public void setMarkEndTime(Long markEndTime) {
+        this.markEndTime = markEndTime;
+    }
+
+    public Double getPassScore() {
+        return passScore;
+    }
+
+    public void setPassScore(Double passScore) {
+        this.passScore = passScore;
+    }
+
+    public Double getExcellentScore() {
+        return excellentScore;
+    }
+
+    public void setExcellentScore(Double excellentScore) {
+        this.excellentScore = excellentScore;
+    }
+
+    public Boolean getShowObjectScore() {
+        return showObjectScore;
+    }
+
+    public void setShowObjectScore(Boolean showObjectScore) {
+        this.showObjectScore = showObjectScore;
+    }
+
+    public Boolean getAutoScroll() {
+        return autoScroll;
+    }
+
+    public void setAutoScroll(Boolean autoScroll) {
+        this.autoScroll = autoScroll;
+    }
+
+    public Boolean getOpenDoubleMarking() {
+        return openDoubleMarking;
+    }
+
+    public void setOpenDoubleMarking(Boolean openDoubleMarking) {
+        this.openDoubleMarking = openDoubleMarking;
+    }
+}

+ 23 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/setting/MarkPaperSettingList.java

@@ -0,0 +1,23 @@
+package com.qmth.teachcloud.common.bean.params.mark.setting;
+
+public class MarkPaperSettingList {
+
+    private Long examId;
+    private String paperNumber;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+}

+ 25 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/setting/MarkPaperSettingParam.java

@@ -0,0 +1,25 @@
+package com.qmth.teachcloud.common.bean.params.mark.setting;
+
+import java.util.List;
+
+public class MarkPaperSettingParam {
+
+    private MarkPaperSettingConfig config;
+    private List<MarkPaperSettingList> list;
+
+    public MarkPaperSettingConfig getConfig() {
+        return config;
+    }
+
+    public void setConfig(MarkPaperSettingConfig config) {
+        this.config = config;
+    }
+
+    public List<MarkPaperSettingList> getList() {
+        return list;
+    }
+
+    public void setList(List<MarkPaperSettingList> list) {
+        this.list = list;
+    }
+}

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -361,6 +361,7 @@ public class SystemConstant {
     public static final String USER_OAUTH_CACHE = "user:oauth:cache";
     public static final String USER_ACCOUNT_CACHE = "user:account:cache";
     public static final String USER_MENU_CACHE = "user:menu:cache";
+    public static final String USER_MENU_CACHE_LIKE = "$cache:user:menu:cache:*";
     public static final String SCHOOL_CACHE = "school:cache";
     public static final String SCHOOL_CODE_CACHE = "school:code:cache";
     public static final String ORG_CACHE = "org:cache";

+ 96 - 95
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -1,6 +1,5 @@
 package com.qmth.teachcloud.common.service.impl;
 
-import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -22,13 +21,13 @@ import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.*;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
 import org.springframework.util.FileCopyUtils;
 import org.springframework.util.LinkedMultiValueMap;
 
@@ -54,50 +53,30 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
 
     @Resource
     CommonCacheService commonCacheService;
-
     @Resource
     SysUserRoleService sysUserRoleService;
-
     @Resource
     SysPrivilegeService sysPrivilegeService;
-
     @Resource
     SysRolePrivilegeService sysRolePrivilegeService;
-
     @Resource
     SysRoleService sysRoleService;
-
     @Resource
     TBSessionService tbSessionService;
-
     @Resource
     RedisUtil redisUtil;
-
     @Resource
     DictionaryConfig dictionaryConfig;
-
-//    @Resource
-//    OssUtil ossUtil;
-
     @Autowired
     private SysOrgService sysOrgService;
-
     @Resource
     TeachcloudCommonService commonService;
-
     @Resource
     BasicAttachmentService basicAttachmentService;
-
     @Resource
     FileStoreUtil fileStoreUtil;
-
     @Resource
     SysUserService sysUserService;
-    @Resource
-    BasicCourseService basicCourseService;
-
-    @Resource
-    RedisCounterUtil redisCounterUtil;
 
     /**
      * 获取用户菜单
@@ -107,68 +86,78 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
      */
     @Override
     public MenuResult getUserMenu(Long userId) {
-        SysUser sysUser = commonCacheService.userCache(userId);
-        List<SysUserRole> sysUserRoleList = commonCacheService.userRolePrivilegeCache(userId);
-        List<SysRolePrivilege> sysRolePrivilegeList = new ArrayList<>();
-        for (SysUserRole s : sysUserRoleList) {
-            SysRole sysRole = commonCacheService.roleCache(s.getRoleId());
-            if (Objects.nonNull(sysRole) && sysRole.getEnable()) {
-                sysRolePrivilegeList.addAll(commonCacheService.rolePrivilegeCache(sysUser.getSchoolId(), s.getRoleId()));
-            }
-        }
-        Set<Long> privilegeIds = sysRolePrivilegeList.stream().map(s -> s.getPrivilegeId()).collect(Collectors.toSet());
-        QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
-        sysPrivilegeQueryWrapper.lambda()
-                .eq(SysPrivilege::getEnable, true).eq(SysPrivilege::getFrontDisplay, true)
-                .orderByAsc(SysPrivilege::getSequence);
-
-        if (!privilegeIds.isEmpty()) {
-            sysPrivilegeQueryWrapper.lambda().in(SysPrivilege::getId, privilegeIds);
-        }
-        List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.list(sysPrivilegeQueryWrapper);
-        Gson gson = new Gson();
-        List<MenuDto> menuDtoList = gson.fromJson(JacksonUtil.parseJson(sysPrivilegeList), new TypeToken<List<MenuDto>>() {
-        }.getType());
-        LinkedMultiValueMap<Long, MenuDto> linkedMultiValueMap = new LinkedMultiValueMap<>();
         List<MenuPrivilegeDto> menuPrivilegeDtoList = new ArrayList<>();
-        for (MenuDto m : menuDtoList) {
-            if (Objects.isNull(m.getParentId()) || m.getType() == PrivilegeEnum.MENU) {
-                menuPrivilegeDtoList.add(gson.fromJson(gson.toJson(m), MenuPrivilegeDto.class));
-            } else {
-                if (!linkedMultiValueMap.containsKey(m.getParentId())) {
-                    linkedMultiValueMap.add(m.getParentId(), m);
-                } else {
-                    List<MenuDto> menuDtos = linkedMultiValueMap.get(m.getParentId());
-                    menuDtos.add(m);
-                    linkedMultiValueMap.put(m.getParentId(), menuDtos);
+        SysUser sysUser = commonCacheService.userCache(userId);
+        // 查询学校权限
+        List<TSchoolPrivilege> schoolPrivilegeList = commonCacheService.addSchoolPrivilegeCache(sysUser.getSchoolId());
+        if (CollectionUtils.isNotEmpty(schoolPrivilegeList)) {
+            List<SysUserRole> sysUserRoleList = commonCacheService.userRolePrivilegeCache(userId);
+            List<SysRolePrivilege> sysRolePrivilegeList = new ArrayList<>();
+            for (SysUserRole s : sysUserRoleList) {
+                SysRole sysRole = commonCacheService.roleCache(s.getRoleId());
+                if (Objects.nonNull(sysRole) && sysRole.getEnable()) {
+                    sysRolePrivilegeList.addAll(commonCacheService.rolePrivilegeCache(sysUser.getSchoolId(), s.getRoleId()));
                 }
             }
-        }
-        for (MenuPrivilegeDto m : menuPrivilegeDtoList) {
-            List<MenuDto> menuDtos = linkedMultiValueMap.get(m.getId());
-            List<MenuDto> urls = null, buttons = null, links = null, lists = null, conditions = null;
-            if (Objects.nonNull(menuDtos)) {
-                for (MenuDto menuDto : menuDtos) {
-                    if (menuDto.getType() == PrivilegeEnum.BUTTON) {
-                        buttons = Objects.isNull(buttons) ? new ArrayList<>() : buttons;
-                        buttons.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
-                        m.setButtons(buttons);
-                    } else if (menuDto.getType() == PrivilegeEnum.LINK) {
-                        links = Objects.isNull(links) ? new ArrayList<>() : links;
-                        links.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
-                        m.setLinks(links);
-                    } else if (menuDto.getType() == PrivilegeEnum.URL) {
-                        urls = Objects.isNull(urls) ? new ArrayList<>() : urls;
-                        urls.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
-                        m.setUrls(urls);
-                    } else if (menuDto.getType() == PrivilegeEnum.LIST) {
-                        lists = Objects.isNull(lists) ? new ArrayList<>() : lists;
-                        lists.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
-                        m.setLists(lists);
-                    } else if (menuDto.getType() == PrivilegeEnum.CONDITION) {
-                        conditions = Objects.isNull(conditions) ? new ArrayList<>() : conditions;
-                        conditions.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
-                        m.setConditions(conditions);
+
+            Set<Long> privilegeIds = sysRolePrivilegeList.stream().map(s -> s.getPrivilegeId()).collect(Collectors.toSet());
+            if (CollectionUtils.isNotEmpty(privilegeIds)) {
+                List<Long> schoolPrivilegeIds = schoolPrivilegeList.stream().map(s -> s.getPrivilegeId()).collect(Collectors.toList());
+                List<Long> intersectionIds = (List<Long>) CollectionUtils.intersection(privilegeIds, schoolPrivilegeIds);
+
+                if (CollectionUtils.isNotEmpty(intersectionIds)) {
+                    QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
+                    sysPrivilegeQueryWrapper.lambda()
+                            .in(SysPrivilege::getId, intersectionIds)
+                            .eq(SysPrivilege::getEnable, true).eq(SysPrivilege::getFrontDisplay, true)
+                            .orderByAsc(SysPrivilege::getSequence);
+                    List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.list(sysPrivilegeQueryWrapper);
+                    Gson gson = new Gson();
+                    List<MenuDto> menuDtoList = gson.fromJson(JacksonUtil.parseJson(sysPrivilegeList), new TypeToken<List<MenuDto>>() {
+                    }.getType());
+                    LinkedMultiValueMap<Long, MenuDto> linkedMultiValueMap = new LinkedMultiValueMap<>();
+
+                    for (MenuDto m : menuDtoList) {
+                        if (Objects.isNull(m.getParentId()) || m.getType() == PrivilegeEnum.MENU) {
+                            menuPrivilegeDtoList.add(gson.fromJson(gson.toJson(m), MenuPrivilegeDto.class));
+                        } else {
+                            if (!linkedMultiValueMap.containsKey(m.getParentId())) {
+                                linkedMultiValueMap.add(m.getParentId(), m);
+                            } else {
+                                List<MenuDto> menuDtos = linkedMultiValueMap.get(m.getParentId());
+                                menuDtos.add(m);
+                                linkedMultiValueMap.put(m.getParentId(), menuDtos);
+                            }
+                        }
+                    }
+                    for (MenuPrivilegeDto m : menuPrivilegeDtoList) {
+                        List<MenuDto> menuDtos = linkedMultiValueMap.get(m.getId());
+                        List<MenuDto> urls = null, buttons = null, links = null, lists = null, conditions = null;
+                        if (Objects.nonNull(menuDtos)) {
+                            for (MenuDto menuDto : menuDtos) {
+                                if (menuDto.getType() == PrivilegeEnum.BUTTON) {
+                                    buttons = Objects.isNull(buttons) ? new ArrayList<>() : buttons;
+                                    buttons.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
+                                    m.setButtons(buttons);
+                                } else if (menuDto.getType() == PrivilegeEnum.LINK) {
+                                    links = Objects.isNull(links) ? new ArrayList<>() : links;
+                                    links.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
+                                    m.setLinks(links);
+                                } else if (menuDto.getType() == PrivilegeEnum.URL) {
+                                    urls = Objects.isNull(urls) ? new ArrayList<>() : urls;
+                                    urls.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
+                                    m.setUrls(urls);
+                                } else if (menuDto.getType() == PrivilegeEnum.LIST) {
+                                    lists = Objects.isNull(lists) ? new ArrayList<>() : lists;
+                                    lists.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
+                                    m.setLists(lists);
+                                } else if (menuDto.getType() == PrivilegeEnum.CONDITION) {
+                                    conditions = Objects.isNull(conditions) ? new ArrayList<>() : conditions;
+                                    conditions.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
+                                    m.setConditions(conditions);
+                                }
+                            }
+                        }
                     }
                 }
             }
@@ -266,7 +255,7 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
             }
             //查询用户角色和权限
             List<SysUserRole> sysUserRoleList = commonCacheService.userRolePrivilegeCache(user.getId());
-            if (Objects.nonNull(sysUserRoleList) && sysUserRoleList.size() > 0) {
+            if (CollectionUtils.isNotEmpty(sysUserRoleList)) {
                 Set<Long> roleIds = sysUserRoleList.stream().map(s -> s.getRoleId()).collect(Collectors.toSet());
                 List<SysRolePrivilege> sysRolePrivilegeList = new ArrayList<>();
                 for (Long l : roleIds) {
@@ -278,30 +267,42 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
                         .eq(SysRole::getEnable, true);
                 List<SysRole> sysRoleList = sysRoleService.list(sysRoleQueryWrapper);
                 int count = Objects.nonNull(sysRoleList) && sysRoleList.size() > 0 ? (int) sysRoleList.stream().filter(s -> Objects.equals(s.getName(), RoleTypeEnum.ADMIN.getName())).count() : 0;
-                QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
                 if (count > 0) {//超级系统管理员
-//                    Long schoolId = Long.parseLong(ServletUtil.getRequestSchoolByNotVaild().toString());
+                    QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
                     sysPrivilegeQueryWrapper.lambda()
-//                            .eq(SysPrivilege::getSchoolId, schoolId)
                             .eq(SysPrivilege::getType, PrivilegeEnum.URL)
                             .eq(SysPrivilege::getProperty, PrivilegePropertyEnum.AUTH);
                     List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.list(sysPrivilegeQueryWrapper);
                     authBean = new AuthBean(sysRoleList, sysPrivilegeList.stream().map(s -> s.getUrl()).collect(Collectors.toSet()));
                 } else {
+                    List<TSchoolPrivilege> tSchoolPrivilegeList = commonCacheService.addSchoolPrivilegeCache(user.getSchoolId());
                     BasicSchool tbSchool = Objects.nonNull(user.getSchoolId()) ? commonCacheService.schoolCache(user.getSchoolId()) : null;
                     SysOrg org = Objects.nonNull(user.getOrgId()) ? commonCacheService.orgCache(user.getOrgId()) : null;
                     List<SysPrivilege> sysPrivilegeList = new ArrayList<>();
-                    if (privilegeIds.size() > 0) {
-                        sysPrivilegeQueryWrapper.lambda().in(SysPrivilege::getId, privilegeIds)
-                                .eq(SysPrivilege::getType, PrivilegeEnum.URL)
-                                .eq(SysPrivilege::getProperty, PrivilegePropertyEnum.AUTH);
-                        sysPrivilegeList = sysPrivilegeService.list(sysPrivilegeQueryWrapper);
+                    if(CollectionUtils.isNotEmpty(tSchoolPrivilegeList)) {
+                        List<Long> schoolPrivilegeIds = tSchoolPrivilegeList.stream().map(s -> s.getPrivilegeId()).collect(Collectors.toList());
+                        if (CollectionUtils.isNotEmpty(schoolPrivilegeIds) && CollectionUtils.isNotEmpty(privilegeIds)) {
+                            // 查询url
+                            QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
+                            sysPrivilegeQueryWrapper.lambda().in(SysPrivilege::getId, schoolPrivilegeIds);
+                            List<SysPrivilege> schoolPrivilegeList = sysPrivilegeService.list(sysPrivilegeQueryWrapper);
+                            Set<Long> relateIds = new HashSet<>();
+                            if(CollectionUtils.isNotEmpty(schoolPrivilegeList)){
+                                schoolPrivilegeList.stream().filter(m->StringUtils.isNotBlank(m.getRelated())).forEach(m->{
+                                    for (String s : m.getRelated().split(",")) {
+                                        relateIds.add(Long.parseLong(s.trim()));
+                                    }
+                                });
+                            }
+
+                            List<Long> intersectionPrivilegeIds = (List<Long>) CollectionUtils.intersection(relateIds, privilegeIds);
+                            QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper1 = new QueryWrapper<>();
+                            sysPrivilegeQueryWrapper1.lambda().in(SysPrivilege::getId, intersectionPrivilegeIds)
+                                    .eq(SysPrivilege::getType, PrivilegeEnum.URL)
+                                    .eq(SysPrivilege::getProperty, PrivilegePropertyEnum.AUTH);
+                            sysPrivilegeList = sysPrivilegeService.list(sysPrivilegeQueryWrapper1);
+                        }
                     }
-//                    if (Objects.isNull(tbSchool)) {
-//                        sysPrivilegeQueryWrapper.lambda().isNull(SysPrivilege::getSchoolId);
-//                    } else {
-//                        sysPrivilegeQueryWrapper.lambda().eq(SysPrivilege::getSchoolId, user.getSchoolId());
-//                    }
                     authBean = new AuthBean(sysRoleList, sysPrivilegeList.stream().map(s -> s.getUrl()).collect(Collectors.toSet()), tbSchool, org);
                 }
             }

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/RedisUtil.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.common.util;
 
 import com.qmth.teachcloud.common.bean.dto.MqDto;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkGroupService.java

@@ -7,7 +7,7 @@ import com.qmth.teachcloud.mark.dto.mark.manage.MarkGroupQuestionsDto;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkGroupSummaryProgressDto;
 import com.qmth.teachcloud.mark.dto.mark.setting.MarkGroupSingleDto;
 import com.qmth.teachcloud.mark.dto.mark.setting.MarkGroupTaskDto;
-import com.qmth.teachcloud.common.bean.params.mark.setting.GroupPictureConfigParams;
+import com.qmth.teachcloud.common.bean.params.mark.group.GroupPictureConfigParams;
 import com.qmth.teachcloud.mark.entity.MarkGroup;
 
 import java.util.List;

+ 3 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkPaperService.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.dto.mark.MarkSettingDto;
+import com.qmth.teachcloud.common.bean.params.mark.setting.MarkPaperSettingParam;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.mark.bean.document.ArchivePaperQuery;
 import com.qmth.teachcloud.mark.bean.document.ArchivePaperVo;
@@ -32,7 +33,8 @@ public interface MarkPaperService extends IService<MarkPaper> {
 
     MarkPaper getByExamIdAndPaperNumberAndPaperType(Long examId, String paperNumber, String paperType);
 
-    void savePaperSetting(List<MarkPaper> markPaperList);
+    void savePaperSetting(MarkPaper markPaper);
+    void saveBatchPaperSetting(MarkPaperSettingParam markPaperSettingParam);
 
     Boolean finishPaper(Long examId, List<String> paperNumbers, MarkPaperStatus status);
 

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkUserClassService.java

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkGroupClassProgressDto;
 import com.qmth.teachcloud.common.bean.dto.mark.MarkUser;
 import com.qmth.teachcloud.mark.dto.mark.setting.MarkUserClassDto;
-import com.qmth.teachcloud.common.bean.params.mark.setting.MarkClassUserParams;
+import com.qmth.teachcloud.common.bean.params.mark.group.MarkClassUserParams;
 import com.qmth.teachcloud.mark.entity.MarkUserClass;
 import com.baomidou.mybatisplus.extension.service.IService;
 

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java

@@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
 import com.qmth.teachcloud.common.bean.dto.mark.MarkUser;
 import com.qmth.teachcloud.common.bean.dto.mark.PictureConfig;
-import com.qmth.teachcloud.common.bean.params.mark.setting.GroupPictureConfigParams;
+import com.qmth.teachcloud.common.bean.params.mark.group.GroupPictureConfigParams;
 import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;

+ 62 - 20
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java

@@ -8,6 +8,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.dto.mark.MarkSettingDto;
+import com.qmth.teachcloud.common.bean.params.mark.setting.MarkPaperSettingConfig;
+import com.qmth.teachcloud.common.bean.params.mark.setting.MarkPaperSettingList;
+import com.qmth.teachcloud.common.bean.params.mark.setting.MarkPaperSettingParam;
 import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
@@ -104,9 +107,52 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
 
     @Transactional
     @Override
-    public void savePaperSetting(List<MarkPaper> markPaperList) {
-        for (MarkPaper markPaper : markPaperList) {
-            MarkPaper markPaperOld = this.getByExamIdAndPaperNumber(markPaper.getExamId(), markPaper.getPaperNumber());
+    public void savePaperSetting(MarkPaper markPaper) {
+        MarkPaper markPaperOld = this.getByExamIdAndPaperNumber(markPaper.getExamId(), markPaper.getPaperNumber());
+        if (markPaperOld == null) {
+            throw ExceptionResultEnum.ERROR.exception("评卷设置数据不存在");
+        }
+        // 评卷是否结束
+        if (MarkPaperStatus.FINISH.equals(markPaperOld.getStatus())) {
+            throw ExceptionResultEnum.ERROR.exception("科目已结束评卷,无法修改参数");
+        }
+        UpdateWrapper<MarkPaper> updateWrapper = new UpdateWrapper<>();
+        LambdaUpdateWrapper<MarkPaper> lambda = updateWrapper.lambda();
+        lambda.set(MarkPaper::getMarkMode, markPaper.getMarkMode())
+                .set(MarkPaper::getForceMode, !MarkMode.UNLIMITED.equals(markPaper.getMarkMode()))
+                .set(MarkPaper::getMarkStartTime, markPaper.getMarkStartTime())
+                .set(MarkPaper::getMarkEndTime, markPaper.getMarkEndTime())
+                .set(MarkPaper::getPassScore, markPaper.getPassScore())
+                .set(MarkPaper::getExcellentScore, markPaper.getExcellentScore())
+                .set(MarkPaper::getSheetView, markPaper.getSheetView())
+                .set(MarkPaper::getShowObjectScore, markPaper.getShowObjectScore())
+                .set(MarkPaper::getAutoScroll, markPaper.getAutoScroll())
+                .set(MarkPaper::getOpenDoubleMarking, markPaper.getOpenDoubleMarking())
+                .eq(MarkPaper::getExamId, markPaper.getExamId())
+                .eq(MarkPaper::getPaperNumber, markPaper.getPaperNumber());
+        if (StringUtils.isNotBlank(markPaper.getSheetConfig())) {
+            lambda.set(MarkPaper::getSheetConfig, markPaper.getSheetConfig());
+        }
+        // 更新评卷员模式
+        markUserGroupService.updateMode(markPaper.getExamId(), markPaper.getPaperNumber(), null, null, MarkMode.UNLIMITED.equals(markPaper.getMarkMode()) ? MarkMode.TRACK : markPaper.getMarkMode());
+        this.update(updateWrapper);
+    }
+
+    @Transactional
+    @Override
+    public void saveBatchPaperSetting(MarkPaperSettingParam markPaperSettingParam) {
+        List<MarkPaperSettingList> list = markPaperSettingParam.getList();
+        if (CollectionUtils.isEmpty(list)) {
+            throw ExceptionResultEnum.ERROR.exception("请选择要设置的数据");
+        }
+
+        MarkPaperSettingConfig config = markPaperSettingParam.getConfig();
+        if (config == null) {
+            throw ExceptionResultEnum.ERROR.exception("未找到参数值,请先设置");
+        }
+
+        for (MarkPaperSettingList markPaperSettingList : list) {
+            MarkPaper markPaperOld = this.getByExamIdAndPaperNumber(markPaperSettingList.getExamId(), markPaperSettingList.getPaperNumber());
             if (markPaperOld == null) {
                 throw ExceptionResultEnum.ERROR.exception("评卷设置数据不存在");
             }
@@ -114,26 +160,22 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
             if (MarkPaperStatus.FINISH.equals(markPaperOld.getStatus())) {
                 throw ExceptionResultEnum.ERROR.exception("科目已结束评卷,无法修改参数");
             }
+
             UpdateWrapper<MarkPaper> updateWrapper = new UpdateWrapper<>();
             LambdaUpdateWrapper<MarkPaper> lambda = updateWrapper.lambda();
-            lambda.set(MarkPaper::getMarkMode, markPaper.getMarkMode())
-                    .set(MarkPaper::getForceMode, !MarkMode.UNLIMITED.equals(markPaper.getMarkMode()))
-                    .set(MarkPaper::getMarkStartTime, markPaper.getMarkStartTime())
-                    .set(MarkPaper::getMarkEndTime, markPaper.getMarkEndTime())
-                    .set(MarkPaper::getSheetView, markPaper.getSheetView())
-                    .set(MarkPaper::getShowObjectScore, markPaper.getShowObjectScore())
-                    .set(MarkPaper::getAutoScroll, markPaper.getAutoScroll())
-                    .set(MarkPaper::getOpenDoubleMarking, markPaper.getOpenDoubleMarking())
-                    .set(MarkPaper::getPassScore, markPaper.getPassScore())
-                    .set(MarkPaper::getExcellentScore, markPaper.getExcellentScore())
-                    .eq(MarkPaper::getExamId, markPaper.getExamId())
-                    .eq(MarkPaper::getPaperNumber, markPaper.getPaperNumber());
-            if (StringUtils.isNotBlank(markPaper.getSheetConfig())) {
-                lambda.set(MarkPaper::getSheetConfig, markPaper.getSheetConfig());
-            }
-
+            lambda.set(MarkPaper::getMarkMode, config.getMarkMode())
+                    .set(MarkPaper::getForceMode, !MarkMode.UNLIMITED.equals(config.getMarkMode()))
+                    .set(MarkPaper::getMarkStartTime, config.getMarkStartTime())
+                    .set(MarkPaper::getMarkEndTime, config.getMarkEndTime())
+                    .set(MarkPaper::getPassScore, config.getPassScore())
+                    .set(MarkPaper::getExcellentScore, config.getExcellentScore())
+                    .set(MarkPaper::getShowObjectScore, config.getShowObjectScore())
+                    .set(MarkPaper::getAutoScroll, config.getAutoScroll())
+                    .set(MarkPaper::getOpenDoubleMarking, config.getOpenDoubleMarking())
+                    .eq(MarkPaper::getExamId, markPaperSettingList.getExamId())
+                    .eq(MarkPaper::getPaperNumber, markPaperSettingList.getPaperNumber());
             // 更新评卷员模式
-            markUserGroupService.updateMode(markPaper.getExamId(), markPaper.getPaperNumber(), null, null, MarkMode.UNLIMITED.equals(markPaper.getMarkMode()) ? MarkMode.TRACK : markPaper.getMarkMode());
+            markUserGroupService.updateMode(markPaperSettingList.getExamId(), markPaperSettingList.getPaperNumber(), null, null, MarkMode.UNLIMITED.equals(config.getMarkMode()) ? MarkMode.TRACK : config.getMarkMode());
             this.update(updateWrapper);
         }
     }

+ 2 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserClassServiceImpl.java

@@ -7,8 +7,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.common.bean.dto.mark.MarkUser;
-import com.qmth.teachcloud.common.bean.params.mark.setting.MarkClassUserParams;
-import com.qmth.teachcloud.common.bean.params.mark.setting.MarkGroupClassUserParams;
+import com.qmth.teachcloud.common.bean.params.mark.group.MarkClassUserParams;
+import com.qmth.teachcloud.common.bean.params.mark.group.MarkGroupClassUserParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkGroupClassProgressDto;

+ 0 - 36
teachcloud-task/src/main/java/com/qmth/teachcloud/task/TeachcloudTaskApplication.java

@@ -1,36 +0,0 @@
-package com.qmth.teachcloud.task;
-
-import com.github.jeffreyning.mybatisplus.conf.EnableMPP;
-import com.qmth.teachcloud.common.threadPool.MyThreadPool;
-import org.activiti.spring.boot.SecurityAutoConfiguration;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.domain.EntityScan;
-import org.springframework.cache.annotation.EnableCaching;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Primary;
-import org.springframework.core.task.TaskExecutor;
-import org.springframework.scheduling.annotation.EnableAsync;
-import org.springframework.transaction.annotation.EnableTransactionManagement;
-
-@EnableMPP
-@SpringBootApplication(scanBasePackages = "com.qmth.*", exclude = {SecurityAutoConfiguration.class})
-@MapperScan({"com.qmth.distributed.print.business.mapper","com.qmth.teachcloud.report.business.mapper","com.qmth.teachcloud.common.mapper", "com.qmth.teachcloud.mark.mapper"})
-//主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中,做过web开发的同学一定都有用过@Controller,@Service,@Repository注解,查看其源码你会发现,他们中有一个共同的注解@Component,没错@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中
-@EntityScan(basePackages = {"com.qmth.distributed.print.business.entity","com.qmth.teachcloud.report.business.entity","com.qmth.teachcloud.common.entity", "com.qmth.teachcloud.mark.entity"}) // 用来扫描和发现指定包及其子包中的Entity定义
-@EnableTransactionManagement // spring开启事务支持
-@EnableAsync // 开启异步任务
-@EnableCaching // 开启缓存注解
-public class TeachcloudTaskApplication {
-
-    public static void main(String[] args) {
-        SpringApplication.run(TeachcloudTaskApplication.class, args);
-    }
-
-    @Primary
-    @Bean
-    public TaskExecutor primaryTaskExecutor() {
-        return new MyThreadPool();
-    }
-}

+ 0 - 121
teachcloud-task/src/main/java/com/qmth/teachcloud/task/start/StartRunning.java

@@ -1,121 +0,0 @@
-package com.qmth.teachcloud.task.start;
-
-import com.qmth.distributed.print.business.service.PrintCommonService;
-import com.qmth.teachcloud.task.enums.JobEnum;
-import com.qmth.teachcloud.task.job.*;
-import com.qmth.teachcloud.task.job.service.JobService;
-import com.qmth.teachcloud.task.service.QuartzService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @Description: 服务启动时初始化运行,哪个微服务模块需要则拿此模版去用
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2020/7/3
- */
-@Component
-public class StartRunning implements CommandLineRunner {
-    private final static Logger log = LoggerFactory.getLogger(StartRunning.class);
-
-    @Resource
-    QuartzService quartzService;
-
-    @Resource
-    JobService jobService;
-
-    @Override
-    public void run(String... args) {
-        log.info("服务器启动时执行 start");
-        jobService.machineHeart();
-
-        log.info("增加任务到期提醒定时任务 start");
-        Map expireJobMap = new HashMap();
-        expireJobMap.computeIfAbsent("name", v -> SendSmsExpireJob.class.getName());
-        quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.name(), JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.getGroupName());
-        // 每天15点定时任务
-        quartzService.addJob(SendSmsExpireJob.class, JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.name(), JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.getGroupName(), "0 0 15 * * ?", expireJobMap);
-        log.info("增加任务到期提醒定时任务 end");
-
-        log.info("增加任务逾期提醒定时任务 start");
-        Map orverdueJobMap = new HashMap();
-        orverdueJobMap.computeIfAbsent("name", v -> SendSmsOverdueJob.class.getName());
-        quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.name(), JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.getGroupName());
-        // 每天9点定时任务
-        quartzService.addJob(SendSmsOverdueJob.class, JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.name(), JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.getGroupName(), "0 0 9 * * ?", orverdueJobMap);
-        log.info("增加任务逾期提醒定时任务 end");
-
-        log.info("增加短信发送失败重发定时任务 start");
-        Map rensendJobMap = new HashMap();
-        rensendJobMap.computeIfAbsent("name", v -> ResendSmsJob.class.getName());
-        quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_RESEND_JOB.name(), JobEnum.SMS_NOTICE_TASK_RESEND_JOB.getGroupName());
-        // 每隔1小时定时任务
-        quartzService.addJob(ResendSmsJob.class, JobEnum.SMS_NOTICE_TASK_RESEND_JOB.name(), JobEnum.SMS_NOTICE_TASK_RESEND_JOB.getGroupName(), "0 0/30 * * * ?", rensendJobMap);
-        log.info("增加短信发送失败重发定时任务 end");
-
-        log.info("增加mq信息同步定时任务 start");
-        Map redisMqJobMap = new HashMap();
-        redisMqJobMap.computeIfAbsent("name", v -> RedisMqSyncJob.class.getName());
-        quartzService.deleteJob(JobEnum.REDIS_MQ_JOB.name(), JobEnum.REDIS_MQ_JOB.getGroupName());
-        // 每分钟定时任务
-        quartzService.addJob(RedisMqSyncJob.class, JobEnum.REDIS_MQ_JOB.name(), JobEnum.REDIS_MQ_JOB.getGroupName(), "0 0/1 * * * ?", redisMqJobMap);
-        log.info("增加mq信息同步定时任务 end");
-
-        // 每天0点开始,每2小时一次
-        log.info("增加自动统分定时任务 start");
-        Map reunifyJobMap = new HashMap();
-        reunifyJobMap.computeIfAbsent("name", v -> SubjectCalculateJob.class.getName());
-        quartzService.deleteJob(JobEnum.SYNC_REUNIFY_JOB.name(), JobEnum.SYNC_REUNIFY_JOB.getGroupName());
-        quartzService.addJob(SubjectCalculateJob.class, JobEnum.SYNC_REUNIFY_JOB.name(), JobEnum.SYNC_REUNIFY_JOB.getGroupName(), "0 0 0/2 * * ?", reunifyJobMap);
-        log.info("增加自动统分定时任务 end");
-
-        // 每1分钟一次
-        log.info("增加更新评卷员质量监控指标定时任务 start");
-        Map qualityJobMap = new HashMap();
-        qualityJobMap.computeIfAbsent("name", v -> UpdateMarkerQualityJob.class.getName());
-        quartzService.deleteJob(JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY.getGroupName());
-        quartzService.addJob(UpdateMarkerQualityJob.class, JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY.getGroupName(), "0 */1 * * * ?", qualityJobMap);
-        log.info("增加更新评卷员质量监控指标定时任务 end");
-
-        // 每1分钟一次
-        log.info("增加评卷任务生成定时任务 start");
-        Map buildMarkTaskJobMap = new HashMap();
-        buildMarkTaskJobMap.computeIfAbsent("name", v -> BuildMarkTaskJob.class.getName());
-        quartzService.deleteJob(JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK.getGroupName());
-        quartzService.addJob(BuildMarkTaskJob.class, JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK.getGroupName(), "0 */1 * * * ?", buildMarkTaskJobMap);
-        log.info("增加评卷任务生成定时任务 end");
-
-        // 每1分钟一次
-        log.info("增加初始化阅卷数据定时任务 start");
-        Map initMarkDataJobMap = new HashMap();
-        initMarkDataJobMap.computeIfAbsent("name", v -> InitMarkDataJob.class.getName());
-        quartzService.deleteJob(JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA.getGroupName());
-        quartzService.addJob(InitMarkDataJob.class, JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA.getGroupName(), "0 */1 * * * ?", initMarkDataJobMap);
-        log.info("增加初始化阅卷数据定时任务 end");
-
-        // 每10分钟一次
-        log.info("增加清空过期任务定时任务 start");
-        Map clearTimeoutTaskJobMap = new HashMap();
-        clearTimeoutTaskJobMap.computeIfAbsent("name", v -> ClearTimeoutTaskJob.class.getName());
-        quartzService.deleteJob(JobEnum.CLEAR_TIMEOUT_TASK.name(), JobEnum.CLEAR_TIMEOUT_TASK.getGroupName());
-        quartzService.addJob(ClearTimeoutTaskJob.class, JobEnum.CLEAR_TIMEOUT_TASK.name(), JobEnum.CLEAR_TIMEOUT_TASK.getGroupName(), "0 0/10 6-23 * * ?", clearTimeoutTaskJobMap);
-        log.info("增加清空过期任务定时任务 end");
-
-        // 每2分钟一次
-        log.info("增加PDF生成定时任务 start");
-        Map createPdfJobMap = new HashMap();
-        createPdfJobMap.computeIfAbsent("name", v -> CreatePdfTaskJob.class.getName());
-        quartzService.deleteJob(JobEnum.CREATE_PDF_JOB.name(), JobEnum.CREATE_PDF_JOB.getGroupName());
-        quartzService.addJob(CreatePdfTaskJob.class, JobEnum.CREATE_PDF_JOB.name(), JobEnum.CREATE_PDF_JOB.getGroupName(), "0 0/2 * * * ?", createPdfJobMap);
-        log.info("增加清空过期任务定时任务 end");
-
-        log.info("服务器启动时执行 end");
-    }
-}

+ 0 - 116
teachcloud-task/src/main/resources/application-base.properties

@@ -1,116 +0,0 @@
-#\u7AEF\u53E3\u914D\u7F6E
-server.port=7701
-#tomcat\u6700\u5927\u7EBF\u7A0B\u6570\uFF0C\u9ED8\u8BA4\u4E3A200
-server.tomcat.threads.max=2500
-#tomcat\u6700\u5927\u8FDE\u63A5\u6570
-server.tomcat.max-connections=2500
-#tomcat\u7684URI\u7F16\u7801
-server.tomcat.uri-encoding=UTF-8
-
-#\u9879\u76EE\u540D\u79F0
-spring.application.name=teachcloud-task
-
-#\u6570\u636E\u6E90\u914D\u7F6E
-db.host=localhost
-db.port=3309
-db.name=teachcloud_db
-db.username=teachcloud
-db.password=teachcloud
-
-#redis\u6570\u636E\u6E90\u914D\u7F6E
-com.qmth.redis.host=${db.host}
-com.qmth.redis.port=6379
-com.qmth.redis.db=1
-com.qmth.redis.password=87863577
-
-#mysql\u914D\u7F6E
-com.qmth.datasource.url=jdbc:mysql://${db.host}:${db.port}/${db.name}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&nullCatalogMeansCurrent=true
-com.qmth.datasource.username=${db.username}
-com.qmth.datasource.password=${db.password}
-com.qmth.mybatis.log-level=debug
-com.qmth.datasource.max-pool-size=50
-
-#activiti\u914D\u7F6E
-#activiti\u4F1A\u5BF9\u6570\u636E\u5E93\u4E2D\u6240\u6709\u8868\u8FDB\u884C\u66F4\u65B0\u64CD\u4F5C\u3002\u5982\u679C\u8868\u4E0D\u5B58\u5728\uFF0C\u5219\u81EA\u52A8\u521B\u5EFA
-#false\uFF1Afalse\u4E3A\u9ED8\u8BA4\u503C\uFF0C\u8BBE\u7F6E\u4E3A\u8BE5\u503C\u540E\uFF0CActiviti\u5728\u542F\u52A8\u65F6\uFF0C\u4F1A\u5BF9\u6BD4\u6570\u636E\u5E93\u8868\u4E2D\u4FDD\u5B58\u7684\u7248\u672C\uFF0C\u5982\u679C\u6CA1\u6709\u8868\u6216\u8005\u7248\u672C\u4E0D\u5339\u914D\u65F6\uFF0C\u5C06\u5728\u542F\u52A8\u65F6\u629B\u51FA\u5F02\u5E38\u3002
-#true\uFF1A\u8BBE\u7F6E\u4E3A\u8BE5\u503C\u540E\uFF0CActiviti\u4F1A\u5BF9\u6570\u636E\u5E93\u4E2D\u6240\u6709\u7684\u8868\u8FDB\u884C\u66F4\u65B0\uFF0C\u5982\u679C\u8868\u4E0D\u5B58\u5728\uFF0C\u5219Activiti\u4F1A\u81EA\u52A8\u521B\u5EFA\u3002
-#create-drop\uFF1AActiviti\u542F\u52A8\u65F6\uFF0C\u4F1A\u6267\u884C\u6570\u636E\u5E93\u8868\u7684\u521B\u5EFA\u64CD\u4F5C\uFF0C\u5728Activiti\u5173\u95ED\u65F6\uFF0C\u6267\u884C\u6570\u636E\u5E93\u8868\u7684\u5220\u9664\u64CD\u4F5C\u3002
-#drop-create\uFF1AActiviti\u542F\u52A8\u65F6\uFF0C\u6267\u884C\u6570\u636E\u5E93\u8868\u7684\u5220\u9664\u64CD\u4F5C\u5728Activiti\u5173\u95ED\u65F6\uFF0C\u4F1A\u6267\u884C\u6570\u636E\u5E93\u8868\u7684\u521B\u5EFA\u64CD\u4F5C\u3002
-spring.activiti.database-schema-update=true
-#\u68C0\u6D4B\u5386\u53F2\u8868\u662F\u5426\u5B58\u5728
-spring.activiti.db-history-used=true
-#\u81EA\u52A8\u90E8\u7F72\u9A8C\u8BC1\u8BBE\u7F6E:true-\u5F00\u542F\uFF08\u9ED8\u8BA4\uFF09\u3001false-\u5173\u95ED
-spring.activiti.check-process-definitions=false
-#spring.activiti.process-definition-location-prefix=classpath:/processes/
-#\u5BF9\u4E8E\u5386\u53F2\u6570\u636E\uFF0C\u4FDD\u5B58\u5230\u4F55\u79CD\u7C92\u5EA6\uFF0CActiviti\u63D0\u4F9B\u4E86history-level\u5C5E\u6027\u5BF9\u5176\u8FDB\u884C\u914D\u7F6E\u3002history-level\u5C5E\u6027\u6709\u70B9\u50CFlog4j\u7684\u65E5\u5FD7\u8F93\u51FA\u7EA7\u522B\uFF0C\u8BE5\u5C5E\u6027\u6709\u4EE5\u4E0B\u56DB\u4E2A\u503C\uFF1A
-#none\uFF1A\u4E0D\u4FDD\u5B58\u4EFB\u4F55\u7684\u5386\u53F2\u6570\u636E\uFF0C\u56E0\u6B64\uFF0C\u5728\u6D41\u7A0B\u6267\u884C\u8FC7\u7A0B\u4E2D\uFF0C\u8FD9\u662F\u6700\u9AD8\u6548\u7684\u3002
-#activity\uFF1A\u7EA7\u522B\u9AD8\u4E8Enone\uFF0C\u4FDD\u5B58\u6D41\u7A0B\u5B9E\u4F8B\u4E0E\u6D41\u7A0B\u884C\u4E3A\uFF0C\u5176\u4ED6\u6570\u636E\u4E0D\u4FDD\u5B58\u3002
-#audit\uFF1A\u9664activity\u7EA7\u522B\u4F1A\u4FDD\u5B58\u7684\u6570\u636E\u5916\uFF0C\u8FD8\u4F1A\u4FDD\u5B58\u5168\u90E8\u7684\u6D41\u7A0B\u4EFB\u52A1\u53CA\u5176\u5C5E\u6027\u3002audit\u4E3Ahistory\u7684\u9ED8\u8BA4\u503C\u3002
-#full\uFF1A\u4FDD\u5B58\u5386\u53F2\u6570\u636E\u7684\u6700\u9AD8\u7EA7\u522B\uFF0C\u9664\u4E86\u4F1A\u4FDD\u5B58audit\u7EA7\u522B\u7684\u6570\u636E\u5916\uFF0C\u8FD8\u4F1A\u4FDD\u5B58\u5176\u4ED6\u5168\u90E8\u6D41\u7A0B\u76F8\u5173\u7684\u7EC6\u8282\u6570\u636E\uFF0C\u5305\u62EC\u4E00\u4E9B\u6D41\u7A0B\u53C2\u6570\u7B49\u3002
-spring.activiti.history-level=audit
-
-#com.qmth.fss.private.config=oss://key:secret@teachcloud-dps-dev-private.oss-api.qmth.com.cn
-#com.qmth.fss.private.server=https://oss-file.qmth.com.cn/teachcloud-dps-dev-private
-#com.qmth.fss.public.config=oss://key:secret@teachcloud-dps-dev-public.oss-api.qmth.com.cn
-#com.qmth.fss.public.server=https://oss-file.qmth.com.cn/teachcloud-dps-dev-public
-
-com.qmth.fss.public.config=..\\static\\
-com.qmth.fss.public.server=/static/
-com.qmth.fss.private.config=..\\static\\
-com.qmth.fss.private.server=/static/
-
-#com.qmth.fss.public.config=/Users/king/Downloads/file-temp
-#com.qmth.fss.public.server=/file-temp/
-#com.qmth.fss.private.config=/Users/king/Downloads/pdf-temp
-#com.qmth.fss.private.server=/pdf-temp/
-
-#\u7CFB\u7EDF\u914D\u7F6E
-sys.config.oss=true
-sys.config.htmlToPdfUrl=/usr/local/bin/wkhtmltopdf
-#sys.config.serverUpload=
-#spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
-
-#\u65E5\u671F\u683C\u5F0F\u5316
-spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
-spring.jackson.time-zone=GMT+8
-
-#\u65E5\u5FD7\u914D\u7F6E
-com.qmth.logging.root-level=info
-com.qmth.logging.file-path=/opt/logs/distributed-task.log
-
-#============================================================================
-# \u914D\u7F6EJobStore
-#============================================================================
-spring.quartz.job-store-type=jdbc
-spring.quartz.jdbc.initialize-schema=never
-# JobDataMaps\u662F\u5426\u90FD\u4E3AString\u7C7B\u578B\uFF0C\u9ED8\u8BA4false
-spring.quartz.properties.org.quartz.jobStore.useProperties=false
-# \u8868\u7684\u524D\u7F00\uFF0C\u9ED8\u8BA4QRTZ_
-spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_
-# \u662F\u5426\u52A0\u5165\u96C6\u7FA4
-spring.quartz.properties.org.quartz.jobStore.isClustered=true
-# \u8C03\u5EA6\u5B9E\u4F8B\u5931\u6548\u7684\u68C0\u67E5\u65F6\u95F4\u95F4\u9694 ms
-spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=5000
-# \u5F53\u8BBE\u7F6E\u4E3A\u201Ctrue\u201D\u65F6\uFF0C\u6B64\u5C5E\u6027\u544A\u8BC9Quartz \u5728\u975E\u6258\u7BA1JDBC\u8FDE\u63A5\u4E0A\u8C03\u7528setTransactionIsolation\uFF08Connection.TRANSACTION_READ_COMMITTED\uFF09\u3002
-spring.quartz.properties.org.quartz.jobStore.txIsolationLevelReadCommitted=true
-# \u6570\u636E\u4FDD\u5B58\u65B9\u5F0F\u4E3A\u6570\u636E\u5E93\u6301\u4E45\u5316
-spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
-# \u6570\u636E\u5E93\u4EE3\u7406\u7C7B\uFF0C\u4E00\u822Corg.quartz.impl.jdbcjobstore.StdJDBCDelegate\u53EF\u4EE5\u6EE1\u8DB3\u5927\u90E8\u5206\u6570\u636E\u5E93
-spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
-#============================================================================
-# Scheduler \u8C03\u5EA6\u5668\u5C5E\u6027\u914D\u7F6E
-#============================================================================
-# \u8C03\u5EA6\u6807\u8BC6\u540D \u96C6\u7FA4\u4E2D\u6BCF\u4E00\u4E2A\u5B9E\u4F8B\u90FD\u5FC5\u987B\u4F7F\u7528\u76F8\u540C\u7684\u540D\u79F0
-spring.quartz.properties.org.quartz.scheduler.instanceName=ClusterQuartz
-# ID\u8BBE\u7F6E\u4E3A\u81EA\u52A8\u83B7\u53D6 \u6BCF\u4E00\u4E2A\u5FC5\u987B\u4E0D\u540C
-spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO
-
-#============================================================================
-# \u914D\u7F6EThreadPool
-#============================================================================
-# \u7EBF\u7A0B\u6C60\u7684\u5B9E\u73B0\u7C7B\uFF08\u4E00\u822C\u4F7F\u7528SimpleThreadPool\u5373\u53EF\u6EE1\u8DB3\u51E0\u4E4E\u6240\u6709\u7528\u6237\u7684\u9700\u6C42\uFF09
-spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
-# \u6307\u5B9A\u7EBF\u7A0B\u6570\uFF0C\u4E00\u822C\u8BBE\u7F6E\u4E3A1-100\u76F4\u63A5\u7684\u6574\u6570\uFF0C\u6839\u636E\u7CFB\u7EDF\u8D44\u6E90\u914D\u7F6E
-spring.quartz.properties.org.quartz.threadPool.threadCount=10
-# \u8BBE\u7F6E\u7EBF\u7A0B\u7684\u4F18\u5148\u7EA7(\u53EF\u4EE5\u662FThread.MIN_PRIORITY\uFF08\u53731\uFF09\u548CThread.MAX_PRIORITY\uFF08\u8FD9\u662F10\uFF09\u4E4B\u95F4\u7684\u4EFB\u4F55int \u3002\u9ED8\u8BA4\u503C\u4E3AThread.NORM_PRIORITY\uFF085\uFF09\u3002)
-spring.quartz.properties.org.quartz.threadPool.threadPriority=5