wangliang 3 месяцев назад
Родитель
Сommit
0087e2a353
18 измененных файлов с 255 добавлено и 585 удалено
  1. 0 119
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TSJobLog.java
  2. 0 16
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TSJobLogMapper.java
  3. 0 16
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TSJobLogService.java
  4. 0 20
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSJobLogServiceImpl.java
  5. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/create/AsyncCreateTaskTemplete.java
  6. 0 0
      distributed-print-business/src/main/resources/db/log/czx.sql
  7. 0 5
      distributed-print-business/src/main/resources/mapper/TSJobLogMapper.xml
  8. 3 0
      distributed-print/install/mysql/upgrade/3.4.4.sql
  9. 6 8
      distributed-print/src/main/java/com/qmth/distributed/print/DistributedPrintApplication.java
  10. 0 57
      distributed-print/src/main/java/com/qmth/distributed/print/api/job/JobController.java
  11. 3 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/BaseController.java
  12. 90 94
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkTrackController.java
  13. 88 88
      distributed-print/src/main/java/com/qmth/distributed/print/aspect/TeachCloudControllerAspect.java
  14. 0 67
      distributed-print/src/main/java/com/qmth/distributed/print/listener/MyJobListener.java
  15. 33 23
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java
  16. 12 20
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/CreatePdfTaskJob.java
  17. 1 1
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/JobService.java
  18. 18 48
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java

+ 0 - 119
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TSJobLog.java

@@ -1,119 +0,0 @@
-package com.qmth.distributed.print.business.entity;
-
-import java.io.Serializable;
-
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import com.qmth.teachcloud.common.contant.SystemConstant;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * <p>
- * 任务日志表
- * </p>
- *
- * @author wangliang
- * @since 2024-08-30
- */
-@ApiModel(value = "TSJobLog对象", description = "任务日志表")
-public class TSJobLog implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "主键")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long id;
-
-    @ApiModelProperty(value = "类型,CREATE_PDF_JOB:创建pdf")
-    private String type;
-
-    @ApiModelProperty(value = "实体id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long objId;
-
-    @ApiModelProperty(value = "实体名称")
-    private String objName;
-
-    @ApiModelProperty(value = "执行时间")
-    private String jobExecTime;
-
-    @ApiModelProperty(value = "创建人id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long createId;
-
-    @ApiModelProperty(value = "创建时间")
-    private Long createTime;
-
-    public TSJobLog() {
-
-    }
-
-    public TSJobLog(String type, String objName, String jobExecTime) {
-        this.id = SystemConstant.getDbUuid();
-        this.type = type;
-        this.objName = objName;
-        this.jobExecTime = jobExecTime;
-        this.createId = -1L;
-        this.createTime = System.currentTimeMillis();
-    }
-
-    public String getJobExecTime() {
-        return jobExecTime;
-    }
-
-    public void setJobExecTime(String jobExecTime) {
-        this.jobExecTime = jobExecTime;
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public Long getObjId() {
-        return objId;
-    }
-
-    public void setObjId(Long objId) {
-        this.objId = objId;
-    }
-
-    public String getObjName() {
-        return objName;
-    }
-
-    public void setObjName(String objName) {
-        this.objName = objName;
-    }
-
-    public Long getCreateId() {
-        return createId;
-    }
-
-    public void setCreateId(Long createId) {
-        this.createId = createId;
-    }
-
-    public Long getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Long createTime) {
-        this.createTime = createTime;
-    }
-}

+ 0 - 16
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TSJobLogMapper.java

@@ -1,16 +0,0 @@
-package com.qmth.distributed.print.business.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.qmth.distributed.print.business.entity.TSJobLog;
-
-/**
- * <p>
- * 任务日志表 Mapper 接口
- * </p>
- *
- * @author wangliang
- * @since 2024-08-30
- */
-public interface TSJobLogMapper extends BaseMapper<TSJobLog> {
-
-}

+ 0 - 16
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TSJobLogService.java

@@ -1,16 +0,0 @@
-package com.qmth.distributed.print.business.service;
-
-import com.qmth.distributed.print.business.entity.TSJobLog;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * <p>
- * 任务日志表 服务类
- * </p>
- *
- * @author wangliang
- * @since 2024-08-30
- */
-public interface TSJobLogService extends IService<TSJobLog> {
-
-}

+ 0 - 20
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSJobLogServiceImpl.java

@@ -1,20 +0,0 @@
-package com.qmth.distributed.print.business.service.impl;
-
-import com.qmth.distributed.print.business.entity.TSJobLog;
-import com.qmth.distributed.print.business.mapper.TSJobLogMapper;
-import com.qmth.distributed.print.business.service.TSJobLogService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- * 任务日志表 服务实现类
- * </p>
- *
- * @author wangliang
- * @since 2024-08-30
- */
-@Service
-public class TSJobLogServiceImpl extends ServiceImpl<TSJobLogMapper, TSJobLog> implements TSJobLogService {
-
-}

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/create/AsyncCreateTaskTemplete.java

@@ -23,7 +23,7 @@ public abstract class AsyncCreateTaskTemplete extends AsyncImportTaskTemplete {
     /**
      * 创建pdf
      */
-    @Async("taskThreadPool")
+//    @Async("taskThreadPool")
     public Result createPdf(TBTaskPdf tbTaskPdf, CallbackCreatePdf callbackCreatePdf) {
         return null;
     }

+ 0 - 0
distributed-print-business/src/main/resources/db/log/czx.sql


+ 0 - 5
distributed-print-business/src/main/resources/mapper/TSJobLogMapper.xml

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.qmth.distributed.print.business.mapper.TSJobLogMapper">
-
-</mapper>

+ 3 - 0
distributed-print/install/mysql/upgrade/3.4.4.sql

@@ -92,3 +92,6 @@ ADD COLUMN `sub_number` INT NULL COMMENT '小题号' AFTER `main_number`;
 
 ALTER TABLE `mark_paper`
     CHANGE COLUMN `open_mark_class` `class_mark` TINYINT NULL DEFAULT '0' COMMENT '是否开启分班阅' AFTER `paper_type`;
+
+-- 2025/2/27
+drop table if exists t_s_job_log;

+ 6 - 8
distributed-print/src/main/java/com/qmth/distributed/print/DistributedPrintApplication.java

@@ -3,11 +3,9 @@ package com.qmth.distributed.print;
 import com.github.jeffreyning.mybatisplus.conf.EnableMPP;
 import com.qmth.boot.core.security.service.CustomizeAuthorizationService;
 import com.qmth.distributed.print.auth.DistributedPrintAuthenticationService;
-import com.qmth.distributed.print.listener.MyJobListener;
 import com.qmth.teachcloud.common.threadPool.DynamicMyThreadPool;
 import org.activiti.spring.boot.SecurityAutoConfiguration;
 import org.mybatis.spring.annotation.MapperScan;
-import org.quartz.Scheduler;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
@@ -56,10 +54,10 @@ public class DistributedPrintApplication {
 //        return new CustomizedSqlInjector();
 //    }
 
-    @Bean
-    public Scheduler scheduler(Scheduler scheduler) throws Exception {
-        // 添加Scheduler 监听器
-        scheduler.getListenerManager().addJobListener(new MyJobListener());
-        return scheduler;
-    }
+//    @Bean
+//    public Scheduler scheduler(Scheduler scheduler) throws Exception {
+//        // 添加Scheduler 监听器
+//        scheduler.getListenerManager().addJobListener(new MyJobListener());
+//        return scheduler;
+//    }
 }

+ 0 - 57
distributed-print/src/main/java/com/qmth/distributed/print/api/job/JobController.java

@@ -1,57 +0,0 @@
-package com.qmth.distributed.print.api.job;
-
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.qmth.boot.api.annotation.Aac;
-import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.boot.core.rateLimit.annotation.RateLimit;
-import com.qmth.distributed.print.business.entity.TSJobLog;
-import com.qmth.distributed.print.business.service.TSJobLogService;
-import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.util.Result;
-import com.qmth.teachcloud.common.util.ResultUtil;
-import io.swagger.annotations.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import java.util.Objects;
-
-/**
- * <p>
- * job 前端控制器
- * </p>
- *
- * @author wangliang
- * @since 2024-02-18
- */
-@Api(tags = "job-运行情况Controller")
-@RestController
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_JOB)
-public class JobController {
-    private final static Logger log = LoggerFactory.getLogger(JobController.class);
-
-    @Resource
-    TSJobLogService tsJobLogService;
-
-    @ApiOperation(value = "job列表")
-    @RequestMapping(value = "/list/{type}/{date}", method = RequestMethod.GET)
-    @ApiResponses({@ApiResponse(code = 200, message = "分页查询", response = Objects.class)})
-    @Aac(auth = false, rateLimit = @RateLimit(count = 1, period = 1000L))
-    public Result reportList(@ApiParam(value = "类型", required = true) @PathVariable String type,
-                             @ApiParam(value = "日期", required = true) @PathVariable String date) {
-        String startTime = date.trim() + " 00:00:00";
-        String endTime = date.trim() + " 23:59:59";
-        DateTime dateStartTime = DateUtil.parse(startTime, SystemConstant.DEFAULT_DATE_PATTERN);
-        DateTime dateEndTime = DateUtil.parse(endTime, SystemConstant.DEFAULT_DATE_PATTERN);
-        return ResultUtil.ok(tsJobLogService.list(new QueryWrapper<TSJobLog>().lambda()
-                .eq(TSJobLog::getType, type)
-                .ge(TSJobLog::getCreateTime, dateStartTime.getTime())
-                .le(TSJobLog::getCreateTime, dateEndTime.getTime()).orderByAsc(TSJobLog::getCreateTime)));
-    }
-}

+ 3 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/BaseController.java

@@ -22,12 +22,13 @@ public class BaseController {
      * @param paperNumber
      */
     public void validMarkPaperForMark(Long examId, String paperNumber) {
+        //校验是否有阅卷试卷
         MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
         if (markPaper == null) {
             throw ExceptionResultEnum.DATA_ERROR.exception();
         }
-        validMarkPaperStatus(markPaper);
-        validMarkPaperMarkTime(markPaper);
+        validMarkPaperStatus(markPaper);//校验科目是否已结束评卷
+        validMarkPaperMarkTime(markPaper);//校验是否在评卷时间范围
     }
 
     public void validMarkPaperForInspect(Long examId, String paperNumber) {

+ 90 - 94
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkTrackController.java

@@ -1,94 +1,90 @@
-package com.qmth.distributed.print.api.mark;
-
-
-import javax.annotation.Resource;
-
-import com.qmth.teachcloud.mark.enums.CardSource;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.distributed.print.business.entity.ExamCard;
-import com.qmth.distributed.print.business.service.ExamCardService;
-import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.util.Result;
-import com.qmth.teachcloud.common.util.ResultUtil;
-import com.qmth.teachcloud.mark.dto.mark.manage.Task;
-import com.qmth.teachcloud.mark.entity.MarkStudent;
-import com.qmth.teachcloud.mark.entity.ScanAnswerCard;
-import com.qmth.teachcloud.mark.service.MarkStudentService;
-import com.qmth.teachcloud.mark.service.MarkTrackService;
-import com.qmth.teachcloud.mark.service.ScanAnswerCardService;
-import com.qmth.teachcloud.mark.service.TaskService;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-
-import java.util.List;
-
-/**
- * <p>
- * 轨迹给分表 前端控制器
- * </p>
- *
- * @author xf
- * @since 2023-09-22
- */
-@Api(tags = "评卷-评卷轨迹")
-@RestController
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/track")
-public class MarkTrackController {
-    @Resource
-    private TaskService taskService;
-    @Resource
-    private ExamCardService examCardService;
-    @Resource
-    private MarkStudentService markStudentService;
-    @Resource
-    private ScanAnswerCardService scanAnswerCardService;
-
-
-    /**
-     * 轨迹图
-     */
-    @ApiOperation(value = "轨迹图")
-    @RequestMapping(value = "/getTask", method = RequestMethod.POST)
-    public Result listStudentScore(@ApiParam(value = "考生ID", required = true) @RequestParam Long studentId) {
-        Task task = taskService.build(studentId);
-        return ResultUtil.ok(task);
-    }
-
-    @ApiOperation(value = "考生扫描的电子卡格式")
-    @RequestMapping(value = "/getCard", method = RequestMethod.POST)
-    public Result getCard(@ApiParam(value = "考生ID", required = true) @RequestParam Long studentId) {
-        MarkStudent student = markStudentService.getById(studentId);
-        if (student.getCardNumber() != null) {
-            ScanAnswerCard scanAnswerCard = scanAnswerCardService.findByExamAndNumber(student.getExamId(), student.getCardNumber());
-            if (scanAnswerCard != null) {
-                if (StringUtils.isNotBlank(scanAnswerCard.getContent())) {
-                    ExamCard examCard = new ExamCard();
-                    examCard.setContent(scanAnswerCard.getContent());
-                    return ResultUtil.ok(examCard);
-                } else {
-                    // 自定义卡格式,取电子卡格式的cardId
-                    if (scanAnswerCard.getCardId() == null) {
-                        List<ScanAnswerCard> scanAnswerCardList = scanAnswerCardService.listByExamIdAndCoursePaperIdAndSource(scanAnswerCard.getExamId(), scanAnswerCard.getCoursePaperId(), CardSource.WEB);
-                        if (CollectionUtils.isNotEmpty(scanAnswerCardList)) {
-                            return ResultUtil.ok(examCardService.getById(scanAnswerCardList.get(0).getCardId()));
-                        }
-                    } else {
-                        return ResultUtil.ok(examCardService.getById(scanAnswerCard.getCardId()));
-                    }
-
-                }
-            }
-        }
-        return ResultUtil.ok();
-    }
-
-}
+package com.qmth.distributed.print.api.mark;
+
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.entity.ExamCard;
+import com.qmth.distributed.print.business.service.ExamCardService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.mark.dto.mark.manage.Task;
+import com.qmth.teachcloud.mark.entity.MarkStudent;
+import com.qmth.teachcloud.mark.entity.ScanAnswerCard;
+import com.qmth.teachcloud.mark.enums.CardSource;
+import com.qmth.teachcloud.mark.service.MarkStudentService;
+import com.qmth.teachcloud.mark.service.ScanAnswerCardService;
+import com.qmth.teachcloud.mark.service.TaskService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ * 轨迹给分表 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2023-09-22
+ */
+@Api(tags = "评卷-评卷轨迹")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/track")
+public class MarkTrackController {
+    @Resource
+    private TaskService taskService;
+    @Resource
+    private ExamCardService examCardService;
+    @Resource
+    private MarkStudentService markStudentService;
+    @Resource
+    private ScanAnswerCardService scanAnswerCardService;
+
+
+    /**
+     * 轨迹图
+     */
+    @ApiOperation(value = "轨迹图")
+    @RequestMapping(value = "/getTask", method = RequestMethod.POST)
+    public Result listStudentScore(@ApiParam(value = "考生ID", required = true) @RequestParam Long studentId) {
+        Task task = taskService.build(studentId);
+        return ResultUtil.ok(task);
+    }
+
+    @ApiOperation(value = "考生扫描的电子卡格式")
+    @RequestMapping(value = "/getCard", method = RequestMethod.POST)
+    public Result getCard(@ApiParam(value = "考生ID", required = true) @RequestParam Long studentId) {
+        MarkStudent student = markStudentService.getById(studentId);
+        if (student.getCardNumber() != null) {
+            ScanAnswerCard scanAnswerCard = scanAnswerCardService.findByExamAndNumber(student.getExamId(), student.getCardNumber());
+            if (scanAnswerCard != null) {
+                if (StringUtils.isNotBlank(scanAnswerCard.getContent())) {
+                    ExamCard examCard = new ExamCard();
+                    examCard.setContent(scanAnswerCard.getContent());
+                    return ResultUtil.ok(examCard);
+                } else {
+                    // 自定义卡格式,取电子卡格式的cardId
+                    if (scanAnswerCard.getCardId() == null) {
+                        List<ScanAnswerCard> scanAnswerCardList = scanAnswerCardService.listByExamIdAndCoursePaperIdAndSource(scanAnswerCard.getExamId(), scanAnswerCard.getCoursePaperId(), CardSource.WEB);
+                        if (CollectionUtils.isNotEmpty(scanAnswerCardList)) {
+                            return ResultUtil.ok(examCardService.getById(scanAnswerCardList.get(0).getCardId()));
+                        }
+                    } else {
+                        return ResultUtil.ok(examCardService.getById(scanAnswerCard.getCardId()));
+                    }
+
+                }
+            }
+        }
+        return ResultUtil.ok();
+    }
+
+}

+ 88 - 88
distributed-print/src/main/java/com/qmth/distributed/print/aspect/TeachCloudControllerAspect.java

@@ -1,88 +1,88 @@
-package com.qmth.distributed.print.aspect;
-
-import com.qmth.boot.api.exception.ApiException;
-import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.util.JacksonUtil;
-import com.qmth.teachcloud.common.util.ResultUtil;
-import com.qmth.teachcloud.common.util.ServletUtil;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-import org.springframework.validation.BeanPropertyBindingResult;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.commons.CommonsMultipartFile;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.Objects;
-import java.util.StringJoiner;
-
-/**
- * @Description: api aspect
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2020/5/12
- */
-@Aspect
-@Component
-public class TeachCloudControllerAspect {
-    private final static Logger log = LoggerFactory.getLogger(TeachCloudControllerAspect.class);
-
-    /**
-     * api切入点
-     */
-    @Pointcut("execution(public * com.qmth.distributed.print.api.*.*(..))")
-    public void apiAspect() {
-    }
-
-    /**
-     * 后台环绕切入
-     *
-     * @param joinPoint
-     * @return
-     * @throws Throwable
-     */
-    @Around(value = "apiAspect()")
-    public Object aroundApiPoint(ProceedingJoinPoint joinPoint) throws Throwable {
-        long start = System.currentTimeMillis();
-        StringJoiner stringJoiner = new StringJoiner("");
-        try {
-            MethodSignature msig = (MethodSignature) joinPoint.getSignature();
-            String className = msig.getDeclaringTypeName();
-            String methodName = msig.getName();
-            Object[] args = joinPoint.getArgs();
-            String[] paramsName = msig.getParameterNames();
-            HttpServletRequest request = ServletUtil.getRequest();
-            stringJoiner.add("============请求地址============:").add(request.getServletPath()).add("\r\n");
-            stringJoiner.add("============类============:").add(className).add("\r\n");
-            stringJoiner.add("============方法============:").add(methodName).add("\r\n");
-            if (Objects.nonNull(args) && args.length > 0) {
-                for (int i = 0; i < args.length; i++) {
-                    if (Objects.nonNull(args[i]) && (args[i] instanceof HttpServletRequest || args[i] instanceof HttpServletResponse || args[i] instanceof CommonsMultipartFile || args[i] instanceof MultipartFile || args[i] instanceof BeanPropertyBindingResult)) {
-                        continue;
-                    } else {
-                        stringJoiner.add("参数key:").add(JacksonUtil.parseJson(paramsName[i])).add(",参数value:").add(JacksonUtil.parseJson(args[i])).add("\r\n");
-                    }
-                }
-            }
-            return joinPoint.proceed();
-        } catch (Exception e) {
-            log.error(SystemConstant.LOG_ERROR, e);
-            if (e instanceof ApiException) {
-                return ResultUtil.error((ApiException) e, ((ApiException) e).getCode(), e.getMessage());
-            } else {
-                return ResultUtil.error(e.getMessage());
-            }
-        } finally {
-            long end = System.currentTimeMillis();
-            stringJoiner.add("============耗时============:").add((end - start) / 1000 + "").add("秒");
-            log.info("request:{}", stringJoiner.toString());
-        }
-    }
-}
+//package com.qmth.distributed.print.aspect;
+//
+//import com.qmth.boot.api.exception.ApiException;
+//import com.qmth.teachcloud.common.contant.SystemConstant;
+//import com.qmth.teachcloud.common.util.JacksonUtil;
+//import com.qmth.teachcloud.common.util.ResultUtil;
+//import com.qmth.teachcloud.common.util.ServletUtil;
+//import org.aspectj.lang.ProceedingJoinPoint;
+//import org.aspectj.lang.annotation.Around;
+//import org.aspectj.lang.annotation.Aspect;
+//import org.aspectj.lang.annotation.Pointcut;
+//import org.aspectj.lang.reflect.MethodSignature;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.stereotype.Component;
+//import org.springframework.validation.BeanPropertyBindingResult;
+//import org.springframework.web.multipart.MultipartFile;
+//import org.springframework.web.multipart.commons.CommonsMultipartFile;
+//
+//import javax.servlet.http.HttpServletRequest;
+//import javax.servlet.http.HttpServletResponse;
+//import java.util.Objects;
+//import java.util.StringJoiner;
+//
+///**
+// * @Description: api aspect
+// * @Param:
+// * @return:
+// * @Author: wangliang
+// * @Date: 2020/5/12
+// */
+//@Aspect
+//@Component
+//public class TeachCloudControllerAspect {
+//    private final static Logger log = LoggerFactory.getLogger(TeachCloudControllerAspect.class);
+//
+//    /**
+//     * api切入点
+//     */
+//    @Pointcut("execution(public * com.qmth.distributed.print.api.*.*(..))")
+//    public void apiAspect() {
+//    }
+//
+//    /**
+//     * 后台环绕切入
+//     *
+//     * @param joinPoint
+//     * @return
+//     * @throws Throwable
+//     */
+//    @Around(value = "apiAspect()")
+//    public Object aroundApiPoint(ProceedingJoinPoint joinPoint) throws Throwable {
+//        long start = System.currentTimeMillis();
+//        StringJoiner stringJoiner = new StringJoiner("");
+//        try {
+//            MethodSignature msig = (MethodSignature) joinPoint.getSignature();
+//            String className = msig.getDeclaringTypeName();
+//            String methodName = msig.getName();
+//            Object[] args = joinPoint.getArgs();
+//            String[] paramsName = msig.getParameterNames();
+//            HttpServletRequest request = ServletUtil.getRequest();
+//            stringJoiner.add("============请求地址============:").add(request.getServletPath()).add("\r\n");
+//            stringJoiner.add("============类============:").add(className).add("\r\n");
+//            stringJoiner.add("============方法============:").add(methodName).add("\r\n");
+//            if (Objects.nonNull(args) && args.length > 0) {
+//                for (int i = 0; i < args.length; i++) {
+//                    if (Objects.nonNull(args[i]) && (args[i] instanceof HttpServletRequest || args[i] instanceof HttpServletResponse || args[i] instanceof CommonsMultipartFile || args[i] instanceof MultipartFile || args[i] instanceof BeanPropertyBindingResult)) {
+//                        continue;
+//                    } else {
+//                        stringJoiner.add("参数key:").add(JacksonUtil.parseJson(paramsName[i])).add(",参数value:").add(JacksonUtil.parseJson(args[i])).add("\r\n");
+//                    }
+//                }
+//            }
+//            return joinPoint.proceed();
+//        } catch (Exception e) {
+//            log.error(SystemConstant.LOG_ERROR, e);
+//            if (e instanceof ApiException) {
+//                return ResultUtil.error((ApiException) e, ((ApiException) e).getCode(), e.getMessage());
+//            } else {
+//                return ResultUtil.error(e.getMessage());
+//            }
+//        } finally {
+//            long end = System.currentTimeMillis();
+//            stringJoiner.add("============耗时============:").add((end - start) / 1000 + "").add("秒");
+//            log.info("request:{}", stringJoiner.toString());
+//        }
+//    }
+//}

+ 0 - 67
distributed-print/src/main/java/com/qmth/distributed/print/listener/MyJobListener.java

@@ -1,67 +0,0 @@
-package com.qmth.distributed.print.listener;
-
-import cn.hutool.core.date.DateUtil;
-import com.qmth.distributed.print.business.entity.TSJobLog;
-import com.qmth.distributed.print.business.service.TSJobLogService;
-import com.qmth.teachcloud.common.contant.SpringContextHolder;
-import com.qmth.teachcloud.common.contant.SystemConstant;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
-import org.quartz.JobListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.Objects;
-import java.util.StringJoiner;
-
-/**
- * @Description: job监听
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2022/9/22
- */
-public class MyJobListener implements JobListener {
-
-    private final static Logger log = LoggerFactory.getLogger(MyJobListener.class);
-
-    @Override
-    public String getName() {
-        return "myJobListener";
-    }
-
-    @Override
-    public void jobToBeExecuted(JobExecutionContext context) {
-        log.info("定时任务:{}-开始执行", context.getTrigger().getJobKey());
-    }
-
-    @Override
-    public void jobExecutionVetoed(JobExecutionContext context) {
-
-    }
-
-    @Override
-    @Transactional
-    public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
-        String jobEnum = context.getTrigger().getJobKey().getGroup();
-        switch (jobEnum) {
-            case "CREATE_PDF_JOB_GROUP":
-                StringJoiner stringJoiner = new StringJoiner(",");
-                stringJoiner.add("当前执行时间:" + DateUtil.format(context.getFireTime(), SystemConstant.DEFAULT_DATE_PATTERN));
-                if (Objects.nonNull(context.getPreviousFireTime())) {
-                    stringJoiner.add("上次执行时间:" + DateUtil.format(context.getPreviousFireTime(), SystemConstant.DEFAULT_DATE_PATTERN));
-                }
-                if (Objects.nonNull(context.getNextFireTime())) {
-                    stringJoiner.add("下次执行时间:" + DateUtil.format(context.getNextFireTime(), SystemConstant.DEFAULT_DATE_PATTERN));
-                }
-                TSJobLogService tsJobLogService = SpringContextHolder.getBean(TSJobLogService.class);
-                TSJobLog tsJobLog = new TSJobLog(jobEnum, context.getResult().toString(), stringJoiner.toString());
-                tsJobLogService.save(tsJobLog);
-                break;
-            default:
-                break;
-        }
-        log.info("定时任务:{}-执行结束", context.getTrigger().getJobKey());
-    }
-}

+ 33 - 23
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -194,8 +194,10 @@ public class MarkServiceImpl implements MarkService {
     @Override
     public void updateMarkedCount(Long examId, String paperNumber, Long questionId) {
         List<MarkTaskStatus> markTaskStatuses = Arrays.asList(MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED);
+        //查询已评和已仲裁的任务数
         int count = markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndStatusIn(examId, paperNumber,
                 questionId, markTaskStatuses);
+        //更新当前组的已评数量
         markQuestionService.updateMarkedCount(questionId, count);
     }
 
@@ -358,8 +360,9 @@ public class MarkServiceImpl implements MarkService {
      */
     private void checkStudentGroup(Long studentId, MarkQuestion markQuestion) {
         if (calculateGroup(markQuestion, studentId)) {
+            //更新考生分组分数
             updateStudentGroupScore(studentId, markQuestion);
-            // 未分组的题目
+            //未分组的题目
             long unGroupQuestionCount = markQuestionService.countByExamIdAndPaperNumberAndObjectiveAndGroupNumberIsNull(
                     markQuestion.getExamId(), markQuestion.getPaperNumber(), false);
             checkStudentSubjective(studentId, unGroupQuestionCount);
@@ -373,7 +376,7 @@ public class MarkServiceImpl implements MarkService {
         // todo 所有任务是否已完成
         if (unGroupQuestionCount == 0) {
             scoreCalculate(studentId);
-        } else {
+        } else {//否则更新该学生主观题状态为未阅卷
             markStudentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.UNMARK, null, null);
         }
     }
@@ -619,16 +622,16 @@ public class MarkServiceImpl implements MarkService {
         MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
 
         MarkSettingDto dto = new MarkSettingDto();
-        dto.setExamType(ExamType.SCAN_IMAGE);
+        dto.setExamType(ExamType.SCAN_IMAGE);//考试类型,默认SCAN_IMAGE
         dto.setMode(markUserPaper != null && markUserPaper.getMode() != null ? markUserPaper.getMode()
-                : MarkMode.UNLIMITED.equals(markPaper.getMarkMode()) ? MarkMode.TRACK : markPaper.getMarkMode());
+                : MarkMode.UNLIMITED.equals(markPaper.getMarkMode()) ? MarkMode.TRACK : markPaper.getMarkMode());//模式 TRACK/COMMON
         dto.setQuestionModel(markUserPaper != null && markUserPaper.getQuestionModel() != null ? markUserPaper.getQuestionModel() : QuestionModel.MULTI);
-        dto.setForceMode(markPaper.getForceMode());
-        dto.setSheetView(markPaper.getSheetView());
-        dto.setSheetConfig(markPaper.getSheetConfig());
-        dto.setEnableAllZore(false);
-        dto.setFileServer(null);
-        dto.setUserName(user.getRealName());
+        dto.setForceMode(markPaper.getForceMode());//强制模式切换
+        dto.setSheetView(markPaper.getSheetView());//是否显示原图功能
+        dto.setSheetConfig(markPaper.getSheetConfig());//原图遮盖规则
+        dto.setEnableAllZore(false);//是否开启全零分(知学知考阅卷默认false)
+        dto.setFileServer(null);//图片服务地址
+        dto.setUserName(user.getRealName());//评卷员名称
         dto.getSubject().setAnswerUrl(StringUtils.isBlank(markPaper.getAnswerFilePath()) ? null
                 : teachcloudCommonService.filePreview(markPaper.getAnswerFilePath()));
 //        dto.getSubject().setPaperUrl(StringUtils.isBlank(markPaper.getPaperFilePath()) ? null
@@ -636,19 +639,19 @@ public class MarkServiceImpl implements MarkService {
         BasicCourse basicCourse = basicCourseService.getById(markPaper.getCourseId());
         dto.getSubject().setCode(markPaper.getPaperNumber());
         dto.getSubject().setName(basicCourse != null ? basicCourse.getName() : null);
-        dto.setForceSpecialTag(false);
-        dto.setUiSetting(user.getUiSetting());
-        dto.setStatusValue(markPaper.getStatus());
-        dto.setProblemTypes(MarkProblemType.listTypes());
+        dto.setForceSpecialTag(false);//强制标记是否开启 必须要有标记(分数轨迹或特殊标记)(知学知考阅卷默认true)
+        dto.setUiSetting(user.getUiSetting());//新交互模式下,以下字段要重新定义或新增(初始值为空,按评卷员保存)
+        dto.setStatusValue(markPaper.getStatus());//只显示试评名称 FORMAL("正评"), FINISH("结束")
+        dto.setProblemTypes(MarkProblemType.listTypes());//问题卷类型
 //        dto.setTopCount(markUserGroup != null && markUserGroup.getTopCount() != null ? markUserGroup.getTopCount() : 0);
-        dto.setSplitConfig(new Double[0]);
-        dto.setPrefetchCount(3);
-        dto.setStartTime(markPaper.getMarkStartTime());
-        dto.setEndTime(markPaper.getMarkEndTime());
-        dto.setSelective(false);
-        dto.setAutoScroll(markPaper.getAutoScroll());
-        dto.setEnableSplit(false);
-        dto.setShowObjectScore(markPaper.getShowObjectScore());
+        dto.setSplitConfig(new Double[0]);//使用裁切整图时的裁切配置
+        dto.setPrefetchCount(3);//预加载任务数量
+        dto.setStartTime(markPaper.getMarkStartTime());//评卷开始时间
+        dto.setEndTime(markPaper.getMarkEndTime());//评卷结束时间
+        dto.setSelective(false);//是否为选做题(默认false)
+        dto.setAutoScroll(markPaper.getAutoScroll());//是否自动跳转
+        dto.setEnableSplit(false);//是否裁切(默认false)
+        dto.setShowObjectScore(markPaper.getShowObjectScore());//是否显示客观分
         return dto;
     }
 
@@ -664,19 +667,25 @@ public class MarkServiceImpl implements MarkService {
             questionId = markTaskService.minQuestionIdByExamIdAndPaperNumber(examId, paperNumber, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED);
         }
         List<String> classNames = null;
+        //校验是否有分班阅
         if (markPaper != null && markPaper.getClassMark() != null && markPaper.getClassMark().booleanValue()) {
             List<MarkUserClass> markUserClassList = markUserClassService.listByExamIdAndPaperNumberAndUserId(examId, paperNumber, userId);
             if (CollectionUtils.isNotEmpty(markUserClassList)) {
                 classNames = markUserClassList.stream().map(MarkUserClass::getClassName).collect(Collectors.toList());
             }
         }
+        //待仲裁卷数量
         dto.setArbitrateCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndUserIdAndAndClassNameStatusIn(examId,
                 paperNumber, null, null, classNames, MarkTaskStatus.WAIT_ARBITRATE));
+        //总数量
         dto.setTotalCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndUserIdAndAndClassNameStatusIn(examId, paperNumber, questionId, null, classNames));
+        //总评卷数量(已评)
         dto.setMarkedCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndUserIdAndAndClassNameStatusIn(examId, paperNumber, questionId, null, classNames, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED));
+        //个人评卷数量
         dto.setPersonCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndUserIdAndAndClassNameStatusIn(examId,
                 paperNumber, questionId, userId, classNames, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED,
                 MarkTaskStatus.WAIT_ARBITRATE));
+        //问题卷数量
         dto.setProblemCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndUserIdAndAndClassNameStatusIn(examId,
                 paperNumber, questionId, null, classNames, MarkTaskStatus.PROBLEM));
         return dto;
@@ -1065,7 +1074,7 @@ public class MarkServiceImpl implements MarkService {
                         return SubmitResult.success(task);
                     }
                 }
-                if (markResultQuestion.getMarkerScore() <= markQuestion.getTotalScore()) {
+                if (markResultQuestion.getMarkerScore() <= markQuestion.getTotalScore()) {//阅卷分是否小于等于该组总分
                     if (submitTask(task, userId, markQuestion, markUserQuestion, markResultQuestion)) {
                         updateMarkedCount(markUserQuestion.getExamId(), markUserQuestion.getPaperNumber(),
                                 markUserQuestion.getQuestionId());
@@ -1119,6 +1128,7 @@ public class MarkServiceImpl implements MarkService {
         }
         // 尝试提交评卷结果
         Long now = System.currentTimeMillis();
+        //更新阅卷任务状态为已阅卷[阅卷分数,给分明细,阅卷时间,评卷时长]
         if (!markTaskService.updateMarkerResult(task.getId(), MarkTaskStatus.MARKED, userId,
                 result, now, null, null, null, MarkTaskStatus.WAITING,
                 MarkTaskStatus.MARKED, MarkTaskStatus.REJECTED)) {

+ 12 - 20
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/CreatePdfTaskJob.java

@@ -1,10 +1,7 @@
 package com.qmth.teachcloud.task.job;
 
-import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.threadPool.DynamicMyThreadPool;
-import com.qmth.teachcloud.mark.enums.LockType;
-import com.qmth.teachcloud.mark.lock.LockService;
 import com.qmth.teachcloud.task.job.service.JobService;
+import org.quartz.DisallowConcurrentExecution;
 import org.quartz.JobExecutionContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -13,31 +10,26 @@ import org.springframework.scheduling.quartz.QuartzJobBean;
 import javax.annotation.Resource;
 
 /**
- * pdf自动生成任务
+ * @Description: pdf自动生成任务
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2025/2/27
  */
+@DisallowConcurrentExecution//串行执行
 public class CreatePdfTaskJob extends QuartzJobBean {
     private final static Logger log = LoggerFactory.getLogger(CreatePdfTaskJob.class);
 
     @Resource
     JobService jobService;
 
-    @Resource
-    LockService lockService;
-
-    @Resource
-    DynamicMyThreadPool dynamicMyThreadPool;
-
     @Override
     protected void executeInternal(JobExecutionContext jobExecutionContext) {
-        if (lockService.trylock(LockType.CREATE_PDF, LockType.CREATE_PDF.name())) {
-            try {
-                jobService.createPdfTask();
-                jobExecutionContext.setResult(dynamicMyThreadPool.toString());
-            } catch (Exception e) {
-                log.error(SystemConstant.LOG_ERROR, e);
-            } finally {
-                lockService.unlock(LockType.CREATE_PDF, LockType.CREATE_PDF.name());
-            }
+        try {
+            jobService.createPdfTask();
+//            jobExecutionContext.setResult("最后执行时间:" + DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN));
+        } catch (InterruptedException e) {
+            e.printStackTrace();
         }
     }
 }

+ 1 - 1
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/JobService.java

@@ -50,7 +50,7 @@ public interface JobService {
 
     void clearTimeoutTask();
 
-    void createPdfTask();
+    void createPdfTask() throws InterruptedException;
 
     void sentDataSync(String name, String s);
 }

+ 18 - 48
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java

@@ -1,6 +1,5 @@
 package com.qmth.teachcloud.task.job.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.boot.redis.uid.RedisMachineService;
 import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
 import com.qmth.distributed.print.business.entity.*;
@@ -13,15 +12,11 @@ import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.MarkQuestion;
-import com.qmth.teachcloud.common.entity.TSAuth;
-import com.qmth.teachcloud.common.enums.AuthEnum;
 import com.qmth.teachcloud.common.enums.PushTypeEnum;
 import com.qmth.teachcloud.common.enums.TaskResultEnum;
 import com.qmth.teachcloud.common.enums.TaskStatusEnum;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.service.BasicCourseService;
-import com.qmth.teachcloud.common.service.TSAuthService;
-import com.qmth.teachcloud.common.threadPool.DynamicMyThreadPool;
 import com.qmth.teachcloud.common.util.DateDisposeUtils;
 import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.data.service.TSyncDataService;
@@ -45,9 +40,9 @@ import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
 
 /**
  * @Description: job service impl
@@ -93,11 +88,6 @@ public class JobServiceImpl implements JobService {
     @Resource
     LockService lockService;
 
-    @Resource
-    DynamicMyThreadPool dynamicMyThreadPool;
-
-    @Resource
-    TSAuthService tsAuthService;
     @Resource
     private ExamTaskService examTaskService;
     @Resource
@@ -220,34 +210,24 @@ public class JobServiceImpl implements JobService {
     }
 
     @Override
-    public void createPdfTask() {
-        if (this.getMyThreadPoolPercent()) {
-            List<TBTaskPdf> tbTaskPdfList = tbTaskPdfService.listWaitingTask();
-            if (CollectionUtils.isNotEmpty(tbTaskPdfList)) {
-                Set<Long> setSchoolId = tbTaskPdfList.stream().map(s -> s.getSchoolId()).collect(Collectors.toSet());
-                List<TSAuth> tsAuthList = tsAuthService.list(new QueryWrapper<TSAuth>().lambda().in(TSAuth::getSchoolId, setSchoolId));
-                if (CollectionUtils.isNotEmpty(tsAuthList)) {
-                    List<TSAuth> tsAuths = tsAuthList.stream().filter(s -> s.getType() == AuthEnum.ON_LINE).collect(Collectors.toList());
-                    if (CollectionUtils.isNotEmpty(tsAuths) && dynamicMyThreadPool.getCpuNum() != dynamicMyThreadPool.getCoreThreadSize()) {
-                        dynamicMyThreadPool.refresh(dynamicMyThreadPool.getCpuNum());
-                    } else {
-                        int coreSize = Math.abs(dynamicMyThreadPool.getCpuNum() / 2);
-                        if (coreSize != dynamicMyThreadPool.getCoreThreadSize()) {
-                            dynamicMyThreadPool.refresh(coreSize);
-                        }
-                    }
-                }
-                for (TBTaskPdf tbTaskPdf : tbTaskPdfList) {
-                    if (this.getMyThreadPoolPercent()) {
-                        int count = tbTaskPdfService.updateStatus(TaskStatusEnum.RUNNING, TaskStatusEnum.INIT, tbTaskPdf.getId());
-                        if (count == 1) {
-                            asyncCreatePdfTemplateService.createPdf(tbTaskPdf, null);
-                        }
-                    } else {
-                        break;
-                    }
+    public void createPdfTask() throws InterruptedException {
+        List<TBTaskPdf> tbTaskPdfList = tbTaskPdfService.listWaitingTask();
+        if (CollectionUtils.isNotEmpty(tbTaskPdfList)) {
+            int cpuNum = Runtime.getRuntime().availableProcessors();
+            ExecutorService executor = Executors.newFixedThreadPool(cpuNum);
+            for (TBTaskPdf tbTaskPdf : tbTaskPdfList) {
+                int count = tbTaskPdfService.updateStatus(TaskStatusEnum.RUNNING, TaskStatusEnum.INIT, tbTaskPdf.getId());
+                if (count == 1) {
+                    executor.submit(() -> {
+                        asyncCreatePdfTemplateService.createPdf(tbTaskPdf, null);
+                    });
                 }
             }
+            executor.shutdown();
+            while (!executor.awaitTermination(1, TimeUnit.MINUTES)) {
+                log.info("线程池没有关闭");
+            }
+            log.info("线程池已经关闭");
         }
         //补救running状态
         List<TBTaskPdf> tbTaskPdfRunningList = tbTaskPdfService.listRunningTimeOutTask(TaskStatusEnum.RUNNING);
@@ -263,16 +243,6 @@ public class JobServiceImpl implements JobService {
         tSyncDataService.syncData(Long.valueOf(schoolId), Long.valueOf(examId));
     }
 
-    /**
-     * 获取线程使用率
-     *
-     * @return
-     */
-    protected Boolean getMyThreadPoolPercent() {
-        int queue = dynamicMyThreadPool.getDynamicThreadPoolTaskExecutor().getThreadPoolExecutor().getQueue().size();
-        return queue < SystemConstant.THREAD_POOL_QUEUE_CAPACITY ? true : false;
-    }
-
     /**
      * 组装job
      *