|
@@ -14,6 +14,8 @@ import com.qmth.teachcloud.common.enums.TaskResultEnum;
|
|
|
import com.qmth.teachcloud.common.enums.TaskStatusEnum;
|
|
|
import com.qmth.teachcloud.common.util.Result;
|
|
|
import com.qmth.teachcloud.common.util.ResultUtil;
|
|
|
+import com.qmth.teachcloud.mark.enums.LockType;
|
|
|
+import com.qmth.teachcloud.mark.lock.LockService;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -49,35 +51,42 @@ public class AsyncCreatePdfTemplateService extends AsyncCreateTaskTemplete {
|
|
|
*/
|
|
|
@Override
|
|
|
public Result createPdf(TBTaskPdf tbTaskPdf, CallbackCreatePdf callbackCreatePdf) {
|
|
|
- StringJoiner stringJoinerSummary = new StringJoiner("\n").add(MessageFormat.format("{0}{1}{2}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), BEGIN_TITLE, OBJ_TITLE));
|
|
|
- SystemConstant.addSummary(stringJoinerSummary, "开始处理PDF文件生成数据");
|
|
|
- TBTaskPdfService tbTaskPdfService = SpringContextHolder.getBean(TBTaskPdfService.class);
|
|
|
- // 任务状态为进行中,直接结束
|
|
|
- if (TaskStatusEnum.RUNNING.equals(tbTaskPdf.getStatus())) {
|
|
|
- return ResultUtil.ok();
|
|
|
- }
|
|
|
- tbTaskPdf.setStatus(TaskStatusEnum.RUNNING);
|
|
|
- tbTaskPdfService.updateById(tbTaskPdf);
|
|
|
- List<ExamDetailCourse> examDetailCourseList = null;
|
|
|
- try {
|
|
|
- PdfTaskLogicService pdfTaskLogicService = SpringContextHolder.getBean(PdfTaskLogicService.class);
|
|
|
- examDetailCourseList = pdfTaskLogicService.executeCreatePdfLogic(tbTaskPdf, stringJoinerSummary);
|
|
|
- tbTaskPdf.setResult(TaskResultEnum.SUCCESS);
|
|
|
- } catch (Exception e) {
|
|
|
- SystemConstant.addSummary(stringJoinerSummary, "数据处理完成且发生异常。异常信息为[" + e.getMessage() + "]");
|
|
|
- tbTaskPdf.setResult(TaskResultEnum.ERROR);
|
|
|
- } finally {
|
|
|
- tbTaskPdf.setStatus(TaskStatusEnum.FINISH);
|
|
|
- tbTaskPdf.setSummary(stringJoinerSummary.toString());
|
|
|
- tbTaskPdf.setUpdateTime(System.currentTimeMillis());
|
|
|
- tbTaskPdfService.updateById(tbTaskPdf);
|
|
|
+ LockService lockService = SpringContextHolder.getBean(LockService.class);
|
|
|
+ if (lockService.trylock(LockType.CREATE_PDF, tbTaskPdf.getId())) {
|
|
|
+ try {
|
|
|
+ StringJoiner stringJoinerSummary = new StringJoiner("\n").add(MessageFormat.format("{0}{1}{2}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), BEGIN_TITLE, OBJ_TITLE));
|
|
|
+ SystemConstant.addSummary(stringJoinerSummary, "开始处理PDF文件生成数据");
|
|
|
+ TBTaskPdfService tbTaskPdfService = SpringContextHolder.getBean(TBTaskPdfService.class);
|
|
|
+ // 任务状态为进行中,直接结束
|
|
|
+ if (TaskStatusEnum.RUNNING.equals(tbTaskPdf.getStatus())) {
|
|
|
+ return ResultUtil.ok();
|
|
|
+ }
|
|
|
+ tbTaskPdf.setStatus(TaskStatusEnum.RUNNING);
|
|
|
+ tbTaskPdfService.updateById(tbTaskPdf);
|
|
|
+ List<ExamDetailCourse> examDetailCourseList = null;
|
|
|
+ try {
|
|
|
+ PdfTaskLogicService pdfTaskLogicService = SpringContextHolder.getBean(PdfTaskLogicService.class);
|
|
|
+ examDetailCourseList = pdfTaskLogicService.executeCreatePdfLogic(tbTaskPdf, stringJoinerSummary);
|
|
|
+ tbTaskPdf.setResult(TaskResultEnum.SUCCESS);
|
|
|
+ } catch (Exception e) {
|
|
|
+ SystemConstant.addSummary(stringJoinerSummary, "数据处理完成且发生异常。异常信息为[" + e.getMessage() + "]");
|
|
|
+ tbTaskPdf.setResult(TaskResultEnum.ERROR);
|
|
|
+ } finally {
|
|
|
+ tbTaskPdf.setStatus(TaskStatusEnum.FINISH);
|
|
|
+ tbTaskPdf.setSummary(stringJoinerSummary.toString());
|
|
|
+ tbTaskPdf.setUpdateTime(System.currentTimeMillis());
|
|
|
+ tbTaskPdfService.updateById(tbTaskPdf);
|
|
|
|
|
|
- if (TaskResultEnum.SUCCESS.equals(tbTaskPdf.getResult()) && CollectionUtils.isNotEmpty(examDetailCourseList)) {
|
|
|
- ExamTaskWholeService examTaskWholeService = SpringContextHolder.getBean(ExamTaskWholeService.class);
|
|
|
- for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
|
|
|
- // 生成合并文件
|
|
|
- examTaskWholeService.checkAndCreateTask(tbTaskPdf.getExamId(), examDetailCourse.getCourseId(), examDetailCourse.getPaperNumber());
|
|
|
+ if (TaskResultEnum.SUCCESS.equals(tbTaskPdf.getResult()) && CollectionUtils.isNotEmpty(examDetailCourseList)) {
|
|
|
+ ExamTaskWholeService examTaskWholeService = SpringContextHolder.getBean(ExamTaskWholeService.class);
|
|
|
+ for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
|
|
|
+ // 生成合并文件
|
|
|
+ examTaskWholeService.checkAndCreateTask(tbTaskPdf.getExamId(), examDetailCourse.getCourseId(), examDetailCourse.getPaperNumber());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ } finally {
|
|
|
+ lockService.unlock(LockType.CREATE_PDF, tbTaskPdf.getId());
|
|
|
}
|
|
|
}
|
|
|
return ResultUtil.ok(tbTaskPdf);
|