SchedulingTaskService.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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, 1)))
  37. .orderByDesc(ImportTask::getState);
  38. List<ImportTask> importTaskList = importTaskService.list(queryWrapper);
  39. if (importTaskList.size() > 0) {
  40. // 装载任务信息
  41. importTaskAMVOS = this.loadTaskAMVOS(importTaskList);
  42. importTaskAMVOS.forEach(item -> {
  43. item.setState(1);
  44. TaskThread taskThread = new TaskThread(item,applicationContext);
  45. executor.execute(taskThread);
  46. });
  47. }
  48. }
  49. }
  50. public List<ImportTaskAMVO> loadTaskAMVOS(List<ImportTask> importTaskList) {
  51. List<ImportTaskAMVO> importTaskAMVOS = new ArrayList<>();
  52. List<Integer> taskConditionIds = new ArrayList<>();
  53. List<ImportTaskCondition> importTaskConditions = new ArrayList<>();
  54. taskConditionIds =importTaskList.stream().map(ImportTask::getImportTaskConditionId).collect(Collectors.toList());
  55. //根据taskid查询taskCondition
  56. if (taskConditionIds.size() != 0) {
  57. LambdaQueryWrapper<ImportTaskCondition> queryWrapper = new LambdaQueryWrapper<>();
  58. queryWrapper.in(ImportTaskCondition::getId, taskConditionIds);
  59. importTaskConditions = importTaskConditionService.list(queryWrapper);
  60. }
  61. for (ImportTask importTask : importTaskList) {
  62. ImportTaskCondition importTaskCondition = importTaskConditions.stream().filter(item -> item.getId().equals(importTask.getImportTaskConditionId())).findFirst().orElse(null);
  63. ImportTaskAMVO importTaskAMVO = new ImportTaskAMVO();
  64. BeanUtils.copyProperties(importTask, importTaskAMVO);
  65. if(importTaskCondition!=null) {
  66. importTaskAMVO.setFileGuid(importTaskCondition.getFileGuid());
  67. importTaskAMVO.setSourceId(importTaskCondition.getSourceId());
  68. importTaskAMVO.setProjectId(importTaskCondition.getProjectId());
  69. importTaskAMVO.setProductId(importTaskCondition.getProductId());
  70. importTaskAMVO.setImportContent(importTaskCondition.getImportContent());
  71. importTaskAMVO.setDbType(importTaskCondition.getDbType());
  72. importTaskAMVO.setOrderBy(importTaskCondition.getOrderBy());
  73. importTaskAMVO.setOrderByType(importTaskCondition.getOrderByType());
  74. }
  75. ProgressVO progressVO =new ProgressVO();
  76. progressVO.setState(0);
  77. importTaskAMVO.setProgressVO(progressVO);
  78. importTaskAMVOS.add(importTaskAMVO);
  79. }
  80. return importTaskAMVOS;
  81. }
  82. public void pauseTask(Integer taskId){
  83. //根据id获得
  84. ImportTaskAMVO importTaskAMVO = importTaskAMVOS.stream().filter(item->item.getId().equals(taskId)).findFirst().orElse(null);
  85. importTaskAMVO.getProgressVO().setState(1);
  86. }
  87. }