|
@@ -19,7 +19,8 @@ import java.util.concurrent.locks.Lock;
|
|
import java.util.concurrent.locks.ReentrantLock;
|
|
import java.util.concurrent.locks.ReentrantLock;
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 将专利信息存入队列或从队列取出
|
|
|
|
|
|
+ * 1.生产专利(生产者从任务队列取出任务并解析任务生成专利数据,分配给消费者,唤醒消费者)
|
|
|
|
+ * 2.消费专利(消费者从专利队列中取出专利并保存专利入库)
|
|
*/
|
|
*/
|
|
@Service
|
|
@Service
|
|
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
|
|
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
|
|
@@ -31,7 +32,6 @@ public class PantentQueueService {
|
|
private final ExcutePatentDataExcel excutePatentDataExcel;
|
|
private final ExcutePatentDataExcel excutePatentDataExcel;
|
|
private final ExcutePatentDataEpo excutePatentDataEpo;
|
|
private final ExcutePatentDataEpo excutePatentDataEpo;
|
|
private final List<Integer> taskQueueList = new ArrayList<>();
|
|
private final List<Integer> taskQueueList = new ArrayList<>();
|
|
- //private Task task = null;
|
|
|
|
private Boolean flag = false;
|
|
private Boolean flag = false;
|
|
private final Queue<QueueData> patentImageQueue = new LinkedList<>();
|
|
private final Queue<QueueData> patentImageQueue = new LinkedList<>();
|
|
private final Queue<QueueData> patentZhuluQueue = new LinkedList<>();
|
|
private final Queue<QueueData> patentZhuluQueue = new LinkedList<>();
|
|
@@ -53,31 +53,29 @@ public class PantentQueueService {
|
|
private final HashMap<String, Integer> patentIdMap = new HashMap<>();
|
|
private final HashMap<String, Integer> patentIdMap = new HashMap<>();
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 生产者:从任务队列取出任务解析专利,将专利分配给消费者消费
|
|
|
|
|
|
+ * 生产者:从任务队列取出任务,再调用工厂方法根据任务类型返回对应的生产专利方法的对象将专利分配给消费者
|
|
*/
|
|
*/
|
|
public void addPatnetToQueue() {
|
|
public void addPatnetToQueue() {
|
|
Task task = null;
|
|
Task task = null;
|
|
try {
|
|
try {
|
|
while (true) {
|
|
while (true) {
|
|
- //判断任务队列是否有任务,若没有则生产者线程睡眠
|
|
|
|
|
|
+ //判断任务队列是否有任务,若没有则该生产者线程睡眠
|
|
if (taskQueueList.size() == 0) {
|
|
if (taskQueueList.size() == 0) {
|
|
taskLock.lock();
|
|
taskLock.lock();
|
|
taskCondition.await();
|
|
taskCondition.await();
|
|
}
|
|
}
|
|
|
|
|
|
//线程被唤醒后 ↓
|
|
//线程被唤醒后 ↓
|
|
- //List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getStatus, 1));
|
|
|
|
- //if (taskQueueList.size() > 0 && (tasks == null || tasks.size() == 0)) {
|
|
|
|
if (taskQueueList.size() > 0) {
|
|
if (taskQueueList.size() > 0) {
|
|
- //1.从任务队列中取出一个task
|
|
|
|
|
|
+ //1.从任务队列中取出一个task任务
|
|
task = taskService.getById(taskQueueList.get(0));
|
|
task = taskService.getById(taskQueueList.get(0));
|
|
- //从队列中剔除该任务
|
|
|
|
|
|
+ //同时将其从任务队列中剔除
|
|
taskQueueList.remove(0);
|
|
taskQueueList.remove(0);
|
|
|
|
|
|
//TODO 调用工厂方法,将任务扔进去,工厂方法根据任务类型返回对应的生产专利方法对象
|
|
//TODO 调用工厂方法,将任务扔进去,工厂方法根据任务类型返回对应的生产专利方法对象
|
|
//1.用工厂方法根据任务类型创建对应的获取专利数据的对象
|
|
//1.用工厂方法根据任务类型创建对应的获取专利数据的对象
|
|
IExcutePatentData excutePatentDataObject = createObject(task);
|
|
IExcutePatentData excutePatentDataObject = createObject(task);
|
|
- //2.开始执行方法(解析获取专利并丢入消费者专利队列,唤醒消费者线程)
|
|
|
|
|
|
+ //2.开始执行生产专利方法(解析任务生产专利并丢入消费者专利队列,唤醒消费者线程)
|
|
if (excutePatentDataObject != null) {
|
|
if (excutePatentDataObject != null) {
|
|
excutePatentDataObject.startExcute(task);
|
|
excutePatentDataObject.startExcute(task);
|
|
}
|
|
}
|
|
@@ -361,9 +359,9 @@ public class PantentQueueService {
|
|
private IExcutePatentData createObject(Task task) {
|
|
private IExcutePatentData createObject(Task task) {
|
|
//根据任务的类型创建并返回对应的解析获取专利数据的对象
|
|
//根据任务的类型创建并返回对应的解析获取专利数据的对象
|
|
switch (task.getType()) {
|
|
switch (task.getType()) {
|
|
- case 1:
|
|
|
|
|
|
+ case 1: //Excel导入专利任务
|
|
return excutePatentDataExcel;
|
|
return excutePatentDataExcel;
|
|
- case 3:
|
|
|
|
|
|
+ case 3: //Epo欧专局网站导入
|
|
return excutePatentDataEpo;
|
|
return excutePatentDataEpo;
|
|
default:
|
|
default:
|
|
return null;
|
|
return null;
|