SchedulingTaskService.java 5.1 KB

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