SchedulingTaskService.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package cn.cslg.pas.service.importPatent;
  2. import cn.cslg.pas.common.core.base.Constants;
  3. import cn.cslg.pas.common.vo.ImportTaskAMVO;
  4. import cn.cslg.pas.common.vo.ProgressVO;
  5. import cn.cslg.pas.domain.business.ImportTask;
  6. import cn.cslg.pas.domain.business.ImportTaskCondition;
  7. import cn.cslg.pas.domain.business.ReportProject;
  8. import cn.cslg.pas.service.business.ImportTaskConditionService;
  9. import cn.cslg.pas.service.business.ImportTaskService;
  10. import cn.cslg.pas.service.business.ReportProjectService;
  11. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  12. import org.springframework.beans.BeanUtils;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.context.ApplicationContext;
  15. import org.springframework.stereotype.Service;
  16. import java.util.ArrayList;
  17. import java.util.Arrays;
  18. import java.util.List;
  19. import java.util.concurrent.Executors;
  20. import java.util.concurrent.ThreadPoolExecutor;
  21. import java.util.stream.Collectors;
  22. @Service
  23. public class SchedulingTaskService {
  24. @Autowired
  25. private ImportTaskService importTaskService;
  26. @Autowired
  27. private ApplicationContext applicationContext;
  28. private ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(Constants.MAX_IMPORT_TASK_COUNT);
  29. @Autowired
  30. private ImportTaskConditionService importTaskConditionService;
  31. @Autowired
  32. private ReportProjectService reportProjectService;
  33. private List<ImportTaskAMVO> importTaskAMVOS;
  34. public void startTask() {
  35. Integer freeCount = Constants.MAX_IMPORT_TASK_COUNT - executor.getActiveCount();
  36. // 当正在活跃的线程数小于最大线程数时
  37. if (freeCount > 0) {
  38. //查找任务
  39. LambdaQueryWrapper<ImportTask> queryWrapper = new LambdaQueryWrapper<>();
  40. queryWrapper.in(ImportTask::getState, new ArrayList<>(Arrays.asList(0)))
  41. .in((ImportTask::getType),new ArrayList<>(Arrays.asList(1,2,3,4,5)))
  42. .orderByDesc(ImportTask::getState);
  43. List<ImportTask> importTaskList = importTaskService.list(queryWrapper);
  44. if (importTaskList.size() > freeCount) {
  45. importTaskList = importTaskList.subList(0, freeCount - 1);
  46. }
  47. if (importTaskList.size() > 0) {
  48. // 装载任务信息
  49. importTaskAMVOS = this.loadTaskAMVOS(importTaskList);
  50. for (int i = 0; i < importTaskAMVOS.size(); i++) {
  51. importTaskList.get(i).setState(1);
  52. importTaskList.get(i).updateById();
  53. importTaskAMVOS.get(i).setState(1);
  54. importTaskAMVOS.get(i).setThreadCounter(0);
  55. TaskThread taskThread = new TaskThread(importTaskAMVOS.get(i), applicationContext);
  56. executor.execute(taskThread);
  57. }
  58. }
  59. }
  60. }
  61. public List<ImportTaskAMVO> loadTaskAMVOS(List<ImportTask> importTaskList) {
  62. //根据projectId 获得报告类型
  63. List<ImportTaskAMVO> importTaskAMVOS = new ArrayList<>();
  64. List<Integer> taskConditionIds = new ArrayList<>();
  65. List<ImportTaskCondition> importTaskConditions = new ArrayList<>();
  66. taskConditionIds = importTaskList.stream().map(ImportTask::getImportTaskConditionId).collect(Collectors.toList());
  67. //根据taskid查询taskCondition
  68. if (taskConditionIds.size() != 0) {
  69. LambdaQueryWrapper<ImportTaskCondition> queryWrapper = new LambdaQueryWrapper<>();
  70. queryWrapper.in(ImportTaskCondition::getId, taskConditionIds);
  71. importTaskConditions = importTaskConditionService.list(queryWrapper);
  72. }
  73. for (ImportTask importTask : importTaskList) {
  74. ImportTaskCondition importTaskCondition = importTaskConditions.stream().filter(item -> item.getId().equals(importTask.getImportTaskConditionId())).findFirst().orElse(null);
  75. ImportTaskAMVO importTaskAMVO = new ImportTaskAMVO();
  76. BeanUtils.copyProperties(importTask,importTaskAMVO);
  77. if (importTaskCondition != null) {
  78. importTaskAMVO.setFileGuid(importTaskCondition.getFileGuid());
  79. importTaskAMVO.setSourceId(importTaskCondition.getSourceId());
  80. importTaskAMVO.setProjectId(importTaskCondition.getProjectId());
  81. importTaskAMVO.setProductId(importTaskCondition.getProductId());
  82. importTaskAMVO.setImportContent(importTaskCondition.getImportContent());
  83. importTaskAMVO.setDbType(importTaskCondition.getDbType());
  84. importTaskAMVO.setOrderBy(importTaskCondition.getOrderBy());
  85. importTaskAMVO.setOrderByType(importTaskCondition.getOrderByType());
  86. importTaskAMVO.setProjectType(importTaskCondition.getProjectType());
  87. importTaskAMVO.setPatentNoStr(importTaskCondition.getPatentNos());
  88. LambdaQueryWrapper<ReportProject> rQueryWrapper = new LambdaQueryWrapper<>();
  89. rQueryWrapper.eq(ReportProject::getProjectId, importTaskCondition.getProjectId());
  90. ReportProject reportProject = reportProjectService.getOne(rQueryWrapper, false);
  91. if (reportProject != null) {
  92. importTaskAMVO.setReportType(reportProject.getReportType());
  93. }
  94. }
  95. ProgressVO progressVO = new ProgressVO();
  96. progressVO.setState(0);
  97. importTaskAMVO.setProgressVO(progressVO);
  98. importTaskAMVOS.add(importTaskAMVO);
  99. }
  100. return importTaskAMVOS;
  101. }
  102. public void pauseTask(Integer taskId, Integer state) {
  103. //根据id获得
  104. ImportTaskAMVO importTaskAMVO = importTaskAMVOS.stream().filter(item -> item.getId().equals(taskId)).findFirst().orElse(null);
  105. importTaskAMVO.setState(state);
  106. }
  107. public List<ImportTaskAMVO> getImportTaskAMVOs() {
  108. return this.importTaskAMVOS;
  109. }
  110. }