SchedulingTaskService.java 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. package cn.cslg.pas.service.importPatent;
  2. import cn.cslg.pas.common.core.base.Constants;
  3. import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
  4. import cn.cslg.pas.common.vo.ImportTaskAMVO;
  5. import cn.cslg.pas.common.vo.ProgressVO;
  6. import cn.cslg.pas.domain.business.ImportTask;
  7. import cn.cslg.pas.domain.business.ImportTaskCondition;
  8. import cn.cslg.pas.domain.business.ReportProject;
  9. import cn.cslg.pas.service.business.ImportTaskConditionService;
  10. import cn.cslg.pas.service.business.ImportTaskService;
  11. import cn.cslg.pas.service.business.ReportProjectService;
  12. import com.alibaba.fastjson.JSONArray;
  13. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  14. import org.springframework.beans.BeanUtils;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.context.ApplicationContext;
  17. import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
  18. import org.springframework.stereotype.Service;
  19. import java.util.ArrayList;
  20. import java.util.Arrays;
  21. import java.util.List;
  22. import java.util.concurrent.Executors;
  23. import java.util.concurrent.ThreadPoolExecutor;
  24. import java.util.stream.Collectors;
  25. @Service
  26. public class SchedulingTaskService {
  27. @Autowired
  28. private ImportTaskService importTaskService;
  29. @Autowired
  30. private ApplicationContext applicationContext;
  31. @Autowired
  32. private ThreadPoolTaskExecutor threadPoolTaskExecutor;
  33. @Autowired
  34. private ImportTaskConditionService importTaskConditionService;
  35. @Autowired
  36. private ReportProjectService reportProjectService;
  37. private List<ImportTaskAMVO> importTaskAMVOS;
  38. @Autowired
  39. private WebVOTransformService webVOTransformService;
  40. public void startTask() {
  41. Integer freeCount = Constants.MAX_IMPORT_TASK_COUNT - threadPoolTaskExecutor.getActiveCount();
  42. if (importTaskAMVOS == null) {
  43. importTaskAMVOS = new ArrayList<>();
  44. }
  45. // 当正在活跃的线程数小于最大线程数时
  46. List<Integer> ids = importTaskAMVOS.stream().map(ImportTaskAMVO::getId).collect(Collectors.toList());
  47. if (freeCount > 0) {
  48. //查找任务
  49. LambdaQueryWrapper<ImportTask> queryWrapper = new LambdaQueryWrapper<>();
  50. queryWrapper.in(ImportTask::getState, new ArrayList<>(Arrays.asList(0)))
  51. .in((ImportTask::getType), new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5)))
  52. .orderByDesc(ImportTask::getState);
  53. if (ids.size() > 0) {
  54. queryWrapper.notIn(ImportTask::getId, ids);
  55. }
  56. List<ImportTask> importTaskList = importTaskService.list(queryWrapper);
  57. if (importTaskList.size() > freeCount) {
  58. importTaskList = importTaskList.subList(0, freeCount - 1);
  59. }
  60. if (importTaskList.size() > 0) {
  61. // 装载任务信息
  62. List<ImportTaskAMVO> importTaskAMVOFromDbs = this.loadTaskAMVOS(importTaskList);
  63. for (int i = 0; i < importTaskAMVOFromDbs.size(); i++) {
  64. importTaskList.get(i).setState(1);
  65. importTaskList.get(i).updateById();
  66. importTaskAMVOFromDbs.get(i).setState(1);
  67. importTaskAMVOFromDbs.get(i).setThreadCounter(0);
  68. TaskThread taskThread = new TaskThread(importTaskAMVOFromDbs.get(i), applicationContext);
  69. threadPoolTaskExecutor.execute(taskThread);
  70. importTaskAMVOS.add(importTaskAMVOFromDbs.get(i));
  71. }
  72. }
  73. }
  74. }
  75. public List<ImportTaskAMVO> loadTaskAMVOS(List<ImportTask> importTaskList) {
  76. //根据projectId 获得报告类型
  77. List<ImportTaskAMVO> importTaskAMVOS = new ArrayList<>();
  78. List<Integer> taskConditionIds = new ArrayList<>();
  79. List<ImportTaskCondition> importTaskConditions = new ArrayList<>();
  80. taskConditionIds = importTaskList.stream().map(ImportTask::getImportTaskConditionId).collect(Collectors.toList());
  81. //根据taskid查询taskCondition
  82. if (taskConditionIds.size() != 0) {
  83. LambdaQueryWrapper<ImportTaskCondition> queryWrapper = new LambdaQueryWrapper<>();
  84. queryWrapper.in(ImportTaskCondition::getId, taskConditionIds);
  85. importTaskConditions = importTaskConditionService.list(queryWrapper);
  86. }
  87. for (ImportTask importTask : importTaskList) {
  88. ImportTaskCondition importTaskCondition = importTaskConditions.stream().filter(item -> item.getId().equals(importTask.getImportTaskConditionId())).findFirst().orElse(null);
  89. ImportTaskAMVO importTaskAMVO = new ImportTaskAMVO();
  90. BeanUtils.copyProperties(importTask, importTaskAMVO);
  91. if (importTaskCondition != null) {
  92. importTaskAMVO.setFileGuid(importTaskCondition.getFileGuid());
  93. importTaskAMVO.setSourceId(importTaskCondition.getSourceId());
  94. importTaskAMVO.setProjectId(importTaskCondition.getProjectId());
  95. importTaskAMVO.setProductId(importTaskCondition.getProductId());
  96. importTaskAMVO.setImportContent(importTaskCondition.getImportContent());
  97. importTaskAMVO.setDbType(importTaskCondition.getDbType());
  98. importTaskAMVO.setOrderBy(importTaskCondition.getOrderBy());
  99. importTaskAMVO.setOrderByType(importTaskCondition.getOrderByType());
  100. importTaskAMVO.setProjectType(importTaskCondition.getProjectType());
  101. importTaskAMVO.setPatentNoStr(importTaskCondition.getPatentNos());
  102. importTaskAMVO.setPdfType(importTaskCondition.getPdfType());
  103. if (importTaskCondition.getCustomFields() != null) {
  104. JSONArray jsonArray = JSONArray.parseArray(importTaskCondition.getCustomFields());
  105. List<EsCustomFieldDTO> dtos = jsonArray.toJavaList(EsCustomFieldDTO.class);
  106. importTaskAMVO.setFieldDTOS(dtos);
  107. }
  108. //定时任务
  109. if (importTaskCondition.getIfCycle() != null && importTaskCondition.getIfCycle()) {
  110. List<EsCustomFieldDTO> dtoList = webVOTransformService.getEsCustomFieldDTOList(importTaskAMVO);
  111. if (importTaskAMVO.getFieldDTOS() == null) {
  112. importTaskAMVO.setFieldDTOS(dtoList);
  113. } else {
  114. importTaskAMVO.getFieldDTOS().addAll(dtoList);
  115. }
  116. }
  117. LambdaQueryWrapper<ReportProject> rQueryWrapper = new LambdaQueryWrapper<>();
  118. rQueryWrapper.eq(ReportProject::getProjectId, importTaskCondition.getProjectId());
  119. ReportProject reportProject = reportProjectService.getOne(rQueryWrapper, false);
  120. if (reportProject != null) {
  121. importTaskAMVO.setReportType(reportProject.getReportType());
  122. }
  123. }
  124. ProgressVO progressVO = new ProgressVO();
  125. progressVO.setState(0);
  126. importTaskAMVO.setProgressVO(progressVO);
  127. importTaskAMVOS.add(importTaskAMVO);
  128. }
  129. return importTaskAMVOS;
  130. }
  131. public void pauseTask(Integer taskId, Integer state) {
  132. //根据id获得
  133. if (importTaskAMVOS != null) {
  134. ImportTaskAMVO importTaskAMVO = importTaskAMVOS.stream().filter(item -> item.getId().equals(taskId)).findFirst().orElse(null);
  135. if (importTaskAMVO != null) {
  136. importTaskAMVO.setState(state);
  137. }
  138. }
  139. }
  140. public List<ImportTaskAMVO> getImportTaskAMVOs() {
  141. return this.importTaskAMVOS;
  142. }
  143. public void removeTaskAMVO(Integer taskId) {
  144. if (importTaskAMVOS != null && importTaskAMVOS.size() > 0) {
  145. importTaskAMVOS.removeIf(i -> i.getId().equals(taskId));
  146. }
  147. }
  148. public void startPdfTask() {
  149. }
  150. }