package cn.cslg.pas.service.importPatent; import cn.cslg.pas.common.core.base.Constants; import cn.cslg.pas.common.vo.ImportTaskAMVO; import cn.cslg.pas.common.vo.ProgressVO; import cn.cslg.pas.domain.business.ImportTask; import cn.cslg.pas.domain.business.ImportTaskCondition; import cn.cslg.pas.service.business.ImportTaskConditionService; import cn.cslg.pas.service.business.ImportTaskService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.stream.Collectors; @Service public class SchedulingTaskService { @Autowired private ImportTaskService importTaskService; @Autowired private ApplicationContext applicationContext; private ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(Constants.MAX_IMPORT_TASK_COUNT); @Autowired private ImportTaskConditionService importTaskConditionService; private List importTaskAMVOS; public void startTask() { Integer freeCount = Constants.MAX_IMPORT_TASK_COUNT - executor.getActiveCount(); // 当正在活跃的线程数小于最大线程数时 if (freeCount > 0) { //查找任务 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(ImportTask::getState, new ArrayList<>(Arrays.asList(0))) .orderByDesc(ImportTask::getState); List importTaskList = importTaskService.list(queryWrapper); if (importTaskList.size() > freeCount) { importTaskList = importTaskList.subList(0, freeCount - 1); } if (importTaskList.size() > 0) { // 装载任务信息 importTaskAMVOS = this.loadTaskAMVOS(importTaskList); for (int i = 0; i < importTaskAMVOS.size(); i++) { importTaskList.get(i).setState(1); importTaskList.get(i).updateById(); importTaskAMVOS.get(i).setState(1); importTaskAMVOS.get(i).setHaveSaveCounter(0); importTaskAMVOS.get(i).setMessageDoneNum(0); importTaskAMVOS.get(i).setPictureDoneNum(0); importTaskAMVOS.get(i).setPdfDoneNum(0); TaskThread taskThread = new TaskThread(importTaskAMVOS.get(i), applicationContext); executor.execute(taskThread); } } } } public List loadTaskAMVOS(List importTaskList) { List importTaskAMVOS = new ArrayList<>(); List taskConditionIds = new ArrayList<>(); List importTaskConditions = new ArrayList<>(); taskConditionIds = importTaskList.stream().map(ImportTask::getImportTaskConditionId).collect(Collectors.toList()); //根据taskid查询taskCondition if (taskConditionIds.size() != 0) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(ImportTaskCondition::getId, taskConditionIds); importTaskConditions = importTaskConditionService.list(queryWrapper); } for (ImportTask importTask : importTaskList) { ImportTaskCondition importTaskCondition = importTaskConditions.stream().filter(item -> item.getId().equals(importTask.getImportTaskConditionId())).findFirst().orElse(null); ImportTaskAMVO importTaskAMVO = new ImportTaskAMVO(); BeanUtils.copyProperties(importTask, importTaskAMVO); if (importTaskCondition != null) { importTaskAMVO.setFileGuid(importTaskCondition.getFileGuid()); importTaskAMVO.setSourceId(importTaskCondition.getSourceId()); importTaskAMVO.setProjectId(importTaskCondition.getProjectId()); importTaskAMVO.setProductId(importTaskCondition.getProductId()); importTaskAMVO.setImportContent(importTaskCondition.getImportContent()); importTaskAMVO.setDbType(importTaskCondition.getDbType()); importTaskAMVO.setOrderBy(importTaskCondition.getOrderBy()); importTaskAMVO.setOrderByType(importTaskCondition.getOrderByType()); } ProgressVO progressVO = new ProgressVO(); progressVO.setState(0); importTaskAMVO.setProgressVO(progressVO); importTaskAMVOS.add(importTaskAMVO); } return importTaskAMVOS; } public void pauseTask(Integer taskId, Integer state) { //根据id获得 ImportTaskAMVO importTaskAMVO = importTaskAMVOS.stream().filter(item -> item.getId().equals(taskId)).findFirst().orElse(null); importTaskAMVO.setState(state); } }