|
@@ -22,8 +22,9 @@ import java.util.concurrent.locks.Lock;
|
|
import java.util.concurrent.locks.ReentrantLock;
|
|
import java.util.concurrent.locks.ReentrantLock;
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 1.生产专利(生产者从任务队列取出任务并解析任务生成专利数据,分配给消费者,唤醒消费者)
|
|
|
|
- * 2.消费专利(消费者从专利队列中取出专利并保存专利入库)
|
|
|
|
|
|
+ * 1.生产者线程生产专利(根据任务类型调用对应工厂方法执行获取专利数据)
|
|
|
|
+ * 2.装载者线程装载专利(将专利数据装载到专利实体类)
|
|
|
|
+ * 3.消费者线程消费专利(将专利入库)
|
|
*/
|
|
*/
|
|
@Service
|
|
@Service
|
|
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
|
|
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
|
|
@@ -78,7 +79,7 @@ public class PantentQueueService {
|
|
while (true) {
|
|
while (true) {
|
|
Task task = new Task();
|
|
Task task = new Task();
|
|
try {
|
|
try {
|
|
- //判断任务队列是否有任务,若没有则该生产者线程睡眠
|
|
|
|
|
|
+ //判断任务队列是否有任务,若没有则线程等待唤醒
|
|
if (taskQueueList.size() == 0) {
|
|
if (taskQueueList.size() == 0) {
|
|
taskLock.lock();
|
|
taskLock.lock();
|
|
taskCondition.await();
|
|
taskCondition.await();
|
|
@@ -86,18 +87,17 @@ public class PantentQueueService {
|
|
|
|
|
|
//线程被唤醒后 ↓
|
|
//线程被唤醒后 ↓
|
|
if (taskQueueList.size() > 0) {
|
|
if (taskQueueList.size() > 0) {
|
|
- //从任务队列中取出一个task任务同时将其从任务队列中剔除
|
|
|
|
|
|
+ //从任务队列中取出第一个task任务,同时将其从任务队列中剔除
|
|
task = taskService.getById(taskQueueList.remove(0));
|
|
task = taskService.getById(taskQueueList.remove(0));
|
|
- //若任务已不存在或任务状态为已暂停,则跳过当前,进行下一个任务
|
|
|
|
|
|
+ //判断任务状态,若已不存在或已暂停,则跳过继续取下一个任务
|
|
if (task == null || task.getStatus() == 4) {
|
|
if (task == null || task.getStatus() == 4) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
- //TODO 调用工厂方法并将任务扔进去,工厂方法会根据任务的类型创建并返回对应的生产专利方法的对象
|
|
|
|
- //1.用工厂方法根据任务类型创建对应的获取专利数据的对象
|
|
|
|
|
|
+ //TODO 调用工厂方法,工厂方法会根据任务类型创建并返回对应的生产专利方法的对象
|
|
IExcutePatentData excutePatentDataObject = createObject(task);
|
|
IExcutePatentData excutePatentDataObject = createObject(task);
|
|
if (excutePatentDataObject != null) {
|
|
if (excutePatentDataObject != null) {
|
|
- //执行生产专利方法
|
|
|
|
|
|
+ //执行方法
|
|
excutePatentDataObject.startExcute(task);
|
|
excutePatentDataObject.startExcute(task);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -105,7 +105,7 @@ public class PantentQueueService {
|
|
|
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
- //任务表更新状态为失败
|
|
|
|
|
|
+ //任务表更新状态失败
|
|
task.setStatus(2);
|
|
task.setStatus(2);
|
|
task.setEndTime(DateUtils.getDateTime());
|
|
task.setEndTime(DateUtils.getDateTime());
|
|
taskService.updateById(task);
|
|
taskService.updateById(task);
|
|
@@ -298,9 +298,9 @@ public class PantentQueueService {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 消费者1:将专利从队列取出,摘要附图入库
|
|
|
|
|
|
+ * 消费者1:摘要附图入库
|
|
*/
|
|
*/
|
|
- public void pushPatentImageToDB() throws InterruptedException, IOException {
|
|
|
|
|
|
+ public void pushPatentImageToDB() {
|
|
while (true) {
|
|
while (true) {
|
|
QueueData queueData = new QueueData();
|
|
QueueData queueData = new QueueData();
|
|
try {
|
|
try {
|
|
@@ -333,7 +333,7 @@ public class PantentQueueService {
|
|
/**
|
|
/**
|
|
* 消费者2:将专利从队列取出,著录项目入库
|
|
* 消费者2:将专利从队列取出,著录项目入库
|
|
*/
|
|
*/
|
|
- public void pushPatentZhuLuToDB() throws InterruptedException, IOException {
|
|
|
|
|
|
+ public void pushPatentZhuLuToDB() {
|
|
while (true) {
|
|
while (true) {
|
|
QueueData queueData = new QueueData();
|
|
QueueData queueData = new QueueData();
|
|
try {
|
|
try {
|
|
@@ -366,7 +366,7 @@ public class PantentQueueService {
|
|
/**
|
|
/**
|
|
* 消费者3:将专利从队列取出,权利要求文本入库
|
|
* 消费者3:将专利从队列取出,权利要求文本入库
|
|
*/
|
|
*/
|
|
- public void pushPatentRightToDB() throws InterruptedException, IOException {
|
|
|
|
|
|
+ public void pushPatentRightToDB() {
|
|
while (true) {
|
|
while (true) {
|
|
QueueData queueData = new QueueData();
|
|
QueueData queueData = new QueueData();
|
|
try {
|
|
try {
|
|
@@ -393,7 +393,7 @@ public class PantentQueueService {
|
|
/**
|
|
/**
|
|
* 消费者4:将专利从队列取出,说明书文本入库
|
|
* 消费者4:将专利从队列取出,说明书文本入库
|
|
*/
|
|
*/
|
|
- public void pushPatentInstructionTextToDB() throws InterruptedException, IOException {
|
|
|
|
|
|
+ public void pushPatentInstructionTextToDB() {
|
|
while (true) {
|
|
while (true) {
|
|
QueueData queueData = new QueueData();
|
|
QueueData queueData = new QueueData();
|
|
try {
|
|
try {
|
|
@@ -420,7 +420,7 @@ public class PantentQueueService {
|
|
/**
|
|
/**
|
|
* 消费者5:将专利从队列取出,说明书pdf地址入库
|
|
* 消费者5:将专利从队列取出,说明书pdf地址入库
|
|
*/
|
|
*/
|
|
- public void pushPatentInstructionPDFToDB() throws InterruptedException, IOException {
|
|
|
|
|
|
+ public void pushPatentInstructionPDFToDB() {
|
|
while (true) {
|
|
while (true) {
|
|
QueueData queueData = new QueueData();
|
|
QueueData queueData = new QueueData();
|
|
try {
|
|
try {
|
|
@@ -660,9 +660,9 @@ public class PantentQueueService {
|
|
private IExcutePatentData createObject(Task task) {
|
|
private IExcutePatentData createObject(Task task) {
|
|
//根据任务的类型创建并返回对应的解析获取专利数据的对象
|
|
//根据任务的类型创建并返回对应的解析获取专利数据的对象
|
|
switch (task.getType()) {
|
|
switch (task.getType()) {
|
|
- case 1: //Excel导入专利任务
|
|
|
|
|
|
+ case 1: //Excel导入专利
|
|
return excutePatentDataExcel;
|
|
return excutePatentDataExcel;
|
|
- case 3: //Epo欧专局网站导入
|
|
|
|
|
|
+ case 3: //欧专局网站导入
|
|
return excutePatentDataEpo;
|
|
return excutePatentDataEpo;
|
|
case 4: //专利之星网站导入
|
|
case 4: //专利之星网站导入
|
|
return excutePatentDataStar;
|
|
return excutePatentDataStar;
|