package cn.cslg.pas.service.importPatent; import cn.cslg.pas.common.core.base.Constants; import cn.cslg.pas.common.model.cronModel.ImportTaskConfig; import cn.cslg.pas.common.model.cronModel.OrderConfig; import cn.cslg.pas.common.vo.ImportTaskAMVO; import cn.cslg.pas.factorys.PatentImportFactory.PatentImportFactory; import cn.cslg.pas.factorys.PatentImportFactory.PatentImportImp; import cn.cslg.pas.service.business.CommonService; import cn.cslg.pas.service.business.ImportTaskService; import com.alibaba.fastjson.JSON; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Configurable; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @Configurable public class TaskThread extends Thread { @Autowired SchedulingTaskService importTaskAdd; private ApplicationContext applicationContext; private final Lock taskThreadLock = new ReentrantLock(); private final Condition taskThreadCondition = taskThreadLock.newCondition(); private final List importTaskQueue = new ArrayList<>(); private ImportTaskAMVO importTaskAMVO; /** * 从任务队列取出并执行任务 */ public TaskThread(ImportTaskAMVO importTaskAMVO,ApplicationContext applicationContext) { this.importTaskAMVO = importTaskAMVO; this.applicationContext =applicationContext; } @Override public void run() { //TODO 判断任务的类型 调用不同线程(可做工厂类) String json = CommonService.readJsonFile(Constants.IMPORT_TASK_CONFIG + ".json"); List configs = JSON.parseArray(json, ImportTaskConfig.class); PatentImportFactory patentImportFactory =applicationContext.getBean(PatentImportFactory.class); //根据任务类型使用不同的导入类 ImportTaskConfig config = configs.stream().filter(item -> item.getTaskType().equals(importTaskAMVO.getType()) && item.getImportTo().equals(Constants.IMPORT_PATENT_TO)).findFirst().orElse(null); PatentImportImp patentImportImp= patentImportFactory.getClass(config.getImportClass()); patentImportImp.setTaskThread(this); patentImportImp.startPatentThread(); taskThreadLock.lock(); try { taskThreadCondition.await(); } catch (InterruptedException e) { e.printStackTrace(); } // importTaskAdd.startTask(); System.out.println("任务结束"); } public void awakeTaskThread() { if (taskThreadLock.tryLock()) { //taskLock.lock(); taskThreadCondition.signalAll(); taskThreadLock.unlock(); } } public ImportTaskAMVO getImportTaskAMVO() { return this.importTaskAMVO; } public ApplicationContext getApplicationContext() { return this.applicationContext; } ; }