SchedulingTaskService.java 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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. public void startTask() {
  39. Integer freeCount = Constants.MAX_IMPORT_TASK_COUNT - threadPoolTaskExecutor.getActiveCount();
  40. if(importTaskAMVOS==null){
  41. importTaskAMVOS=new ArrayList<>();
  42. }
  43. // 当正在活跃的线程数小于最大线程数时
  44. if (freeCount > 0) {
  45. //查找任务
  46. LambdaQueryWrapper<ImportTask> queryWrapper = new LambdaQueryWrapper<>();
  47. queryWrapper.in(ImportTask::getState, new ArrayList<>(Arrays.asList(0)))
  48. .in((ImportTask::getType),new ArrayList<>(Arrays.asList(1,2,3,4,5)))
  49. .orderByDesc(ImportTask::getState);
  50. List<ImportTask> importTaskList = importTaskService.list(queryWrapper);
  51. if (importTaskList.size() > freeCount) {
  52. importTaskList = importTaskList.subList(0, freeCount - 1);
  53. }
  54. if (importTaskList.size() > 0) {
  55. // 装载任务信息
  56. List<ImportTaskAMVO> importTaskAMVOFromDbs = this.loadTaskAMVOS(importTaskList);
  57. for (int i = 0; i < importTaskAMVOFromDbs.size(); i++) {
  58. importTaskList.get(i).setState(1);
  59. importTaskList.get(i).updateById();
  60. importTaskAMVOFromDbs.get(i).setState(1);
  61. importTaskAMVOFromDbs.get(i).setThreadCounter(0);
  62. TaskThread taskThread = new TaskThread(importTaskAMVOFromDbs.get(i), applicationContext);
  63. threadPoolTaskExecutor.execute(taskThread);
  64. importTaskAMVOS.add(importTaskAMVOFromDbs.get(i));
  65. }
  66. }
  67. }
  68. }
  69. public List<ImportTaskAMVO> loadTaskAMVOS(List<ImportTask> importTaskList) {
  70. //根据projectId 获得报告类型
  71. List<ImportTaskAMVO> importTaskAMVOS = new ArrayList<>();
  72. List<Integer> taskConditionIds = new ArrayList<>();
  73. List<ImportTaskCondition> importTaskConditions = new ArrayList<>();
  74. taskConditionIds = importTaskList.stream().map(ImportTask::getImportTaskConditionId).collect(Collectors.toList());
  75. //根据taskid查询taskCondition
  76. if (taskConditionIds.size() != 0) {
  77. LambdaQueryWrapper<ImportTaskCondition> queryWrapper = new LambdaQueryWrapper<>();
  78. queryWrapper.in(ImportTaskCondition::getId, taskConditionIds);
  79. importTaskConditions = importTaskConditionService.list(queryWrapper);
  80. }
  81. for (ImportTask importTask : importTaskList) {
  82. ImportTaskCondition importTaskCondition = importTaskConditions.stream().filter(item -> item.getId().equals(importTask.getImportTaskConditionId())).findFirst().orElse(null);
  83. ImportTaskAMVO importTaskAMVO = new ImportTaskAMVO();
  84. BeanUtils.copyProperties(importTask,importTaskAMVO);
  85. if (importTaskCondition != null) {
  86. importTaskAMVO.setFileGuid(importTaskCondition.getFileGuid());
  87. importTaskAMVO.setSourceId(importTaskCondition.getSourceId());
  88. importTaskAMVO.setProjectId(importTaskCondition.getProjectId());
  89. importTaskAMVO.setProductId(importTaskCondition.getProductId());
  90. importTaskAMVO.setImportContent(importTaskCondition.getImportContent());
  91. importTaskAMVO.setDbType(importTaskCondition.getDbType());
  92. importTaskAMVO.setOrderBy(importTaskCondition.getOrderBy());
  93. importTaskAMVO.setOrderByType(importTaskCondition.getOrderByType());
  94. importTaskAMVO.setProjectType(importTaskCondition.getProjectType());
  95. importTaskAMVO.setPatentNoStr(importTaskCondition.getPatentNos());
  96. if(importTaskCondition.getCustomFields()!=null) {
  97. List<EsCustomFieldDTO> dtos = JSONArray.parseArray(importTaskCondition.getCustomFields());
  98. importTaskAMVO.setFieldDTOS(dtos);
  99. }
  100. LambdaQueryWrapper<ReportProject> rQueryWrapper = new LambdaQueryWrapper<>();
  101. rQueryWrapper.eq(ReportProject::getProjectId, importTaskCondition.getProjectId());
  102. ReportProject reportProject = reportProjectService.getOne(rQueryWrapper, false);
  103. if (reportProject != null) {
  104. importTaskAMVO.setReportType(reportProject.getReportType());
  105. }
  106. }
  107. ProgressVO progressVO = new ProgressVO();
  108. progressVO.setState(0);
  109. importTaskAMVO.setProgressVO(progressVO);
  110. importTaskAMVOS.add(importTaskAMVO);
  111. }
  112. return importTaskAMVOS;
  113. }
  114. public void pauseTask(Integer taskId, Integer state) {
  115. //根据id获得
  116. ImportTaskAMVO importTaskAMVO = importTaskAMVOS.stream().filter(item -> item.getId().equals(taskId)).findFirst().orElse(null);
  117. if(importTaskAMVO!=null) {
  118. importTaskAMVO.setState(state);
  119. }
  120. }
  121. public List<ImportTaskAMVO> getImportTaskAMVOs() {
  122. return this.importTaskAMVOS;
  123. }
  124. public void removeTaskAMVO(Integer taskId){
  125. if(importTaskAMVOS!=null&&importTaskAMVOS.size()>0){
  126. importTaskAMVOS.removeIf(i->i.getId().equals(taskId));
  127. }
  128. }
  129. }