|
@@ -5,15 +5,18 @@ import cn.cslg.pas.common.model.vo.UploadParamsVO;
|
|
|
import cn.cslg.pas.common.utils.DateUtils;
|
|
|
import cn.cslg.pas.common.utils.JsonUtils;
|
|
|
import cn.cslg.pas.domain.PQueueData;
|
|
|
+import cn.cslg.pas.domain.QuestionRecord;
|
|
|
import cn.cslg.pas.domain.QueueData;
|
|
|
import cn.cslg.pas.domain.Task;
|
|
|
import cn.cslg.pas.domain.asso.TaskCondition;
|
|
|
+import cn.cslg.pas.mapper.QuestionRecordMapper;
|
|
|
import cn.cslg.pas.service.OutInterfaceService;
|
|
|
import cn.cslg.pas.service.PatentInstructionService;
|
|
|
import cn.cslg.pas.service.TaskService;
|
|
|
import cn.cslg.pas.service.UploadPatentBatchService;
|
|
|
-import cn.cslg.pas.service.asso.AssoOsTaskQrtzTaskService;
|
|
|
+import cn.cslg.pas.service.asso.TaskConditionService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
@@ -27,6 +30,7 @@ import java.util.concurrent.locks.ReentrantLock;
|
|
|
* 2.装载者线程装载专利(将专利数据装载到专利实体类)
|
|
|
* 3.消费者线程消费专利(将专利入库)
|
|
|
*/
|
|
|
+@Slf4j
|
|
|
@Service
|
|
|
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
|
|
|
public class PantentQueueService {
|
|
@@ -34,12 +38,14 @@ public class PantentQueueService {
|
|
|
private final UploadPatentBatchService uploadPatentBatchService;
|
|
|
private final MessageService messageService;
|
|
|
private final TaskService taskService;
|
|
|
- private final AssoOsTaskQrtzTaskService assoOsTaskQrtzTaskService;
|
|
|
+ private final TaskConditionService taskConditionService;
|
|
|
private final ExcutePatentDataExcel excutePatentDataExcel;
|
|
|
private final ExcutePatentDataEpo excutePatentDataEpo;
|
|
|
private final ExcutePatentDataStar excutePatentDataStar;
|
|
|
private final PatentInstructionService patentInstructionService;
|
|
|
private final OutInterfaceService outInterfaceService;
|
|
|
+ private final QuestionRecordService questionRecordService;
|
|
|
+ private final QuestionRecordMapper questionRecordMapper;
|
|
|
private final List<Integer> taskQueueList = new ArrayList<>();
|
|
|
private final List<PQueueData> setPatentImageQueueList = new ArrayList<>();
|
|
|
private final List<PQueueData> setPatentZhuluQueueList = new ArrayList<>();
|
|
@@ -99,7 +105,7 @@ public class PantentQueueService {
|
|
|
|
|
|
//若是网站导入任务,则将网站导入相关信息存入task对象中(方便生产与消费时使用)
|
|
|
if (task.getType().equals(3) || task.getType().equals(4)) {
|
|
|
- TaskCondition taskCondition = assoOsTaskQrtzTaskService.getById(task.getTaskConditionId());
|
|
|
+ TaskCondition taskCondition = taskConditionService.getById(task.getTaskConditionId());
|
|
|
List<String> configCells = Arrays.asList(taskCondition.getConfigCells().split(","));
|
|
|
task.setConfigCellsNum(configCells.size()); //将下载字段数量存入task对象中(为了在后面发送进度时可以根据下载字段的数量来对应消费者数量,从而确定是否完成了一个专利的下载)
|
|
|
task.setConfigCells(configCells);
|
|
@@ -108,7 +114,6 @@ public class PantentQueueService {
|
|
|
task.setDBType(taskCondition.getDBType());
|
|
|
task.setStartNumber(taskCondition.getStartNumber());
|
|
|
task.setEndNumber(taskCondition.getEndNumber());
|
|
|
- task.setEndTime(taskCondition.getEndNumber());
|
|
|
if (taskCondition.getIsAddPatentNos() != null && !taskCondition.getIsAddPatentNos().equals("")) {
|
|
|
task.setIsAddPatentNos(Arrays.asList(taskCondition.getIsAddPatentNos().split(",")));
|
|
|
}
|
|
@@ -129,7 +134,7 @@ public class PantentQueueService {
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
- //任务表更新状态失败
|
|
|
+ //任务表更新状态完成
|
|
|
task.setStatus(2);
|
|
|
task.setEndTime(DateUtils.getDateTime());
|
|
|
taskService.updateById(task);
|
|
@@ -143,17 +148,21 @@ public class PantentQueueService {
|
|
|
*/
|
|
|
public void setPatentZhuLu() {
|
|
|
while (true) {
|
|
|
+ QueueData queueData = new QueueData();
|
|
|
try {
|
|
|
if (setPatentZhuluQueueList.size() > 0) {
|
|
|
PQueueData pQueueData = setPatentZhuluQueueList.remove(0);
|
|
|
Task task = pQueueData.getTask();
|
|
|
- //专利之星
|
|
|
- //if (task.getType() == 4) {
|
|
|
- //excutePatentDataStar.setPatentZhuLu(pQueueData.getStarPatent(), pQueueData.getUploadParamsVO());
|
|
|
- //}
|
|
|
- QueueData queueData = new QueueData()
|
|
|
+ queueData
|
|
|
.setTask(task)
|
|
|
.setUploadParamsVO(pQueueData.getUploadParamsVO());
|
|
|
+
|
|
|
+ //专利之星
|
|
|
+ if (task.getType() == 4) {
|
|
|
+ excutePatentDataStar.setPatentZhuLu(pQueueData.getStarPatent(), pQueueData.getUploadParamsVO());
|
|
|
+ }
|
|
|
+
|
|
|
+ queueData.setUploadParamsVO(pQueueData.getUploadParamsVO());
|
|
|
//装载完成,将其丢入著录消费者队列,并唤醒著录消费者线程
|
|
|
patentZhuluQueueList.add(queueData);
|
|
|
patentZhuluLock.lock();
|
|
@@ -168,64 +177,35 @@ public class PantentQueueService {
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 装载线程2:摘要附图
|
|
|
- */
|
|
|
- public void setPatentImage() {
|
|
|
- while (true) {
|
|
|
- try {
|
|
|
- if (setPatentImageQueueList.size() > 0) {
|
|
|
- PQueueData pQueueData = setPatentImageQueueList.remove(0);
|
|
|
- Task task = pQueueData.getTask();
|
|
|
- //专利之星
|
|
|
- if (task.getType() == 4) {
|
|
|
- excutePatentDataStar.setPatentPicture(pQueueData.getStarPatent(), pQueueData.getUploadParamsVO());
|
|
|
- }
|
|
|
- QueueData queueData = new QueueData()
|
|
|
- .setTask(task)
|
|
|
- .setUploadParamsVO(pQueueData.getUploadParamsVO());
|
|
|
- //装载完成,将其丢入摘要附图消费者队列,并唤醒摘要附图消费者线程
|
|
|
- patentImageQueueList.add(queueData);
|
|
|
- patentImageLock.lock();
|
|
|
- patentImageCondition.signalAll();
|
|
|
- patentImageLock.unlock();
|
|
|
-
|
|
|
- } else {
|
|
|
- setPatentImageLock.lock();
|
|
|
- setPatentImageCondition.await();
|
|
|
- setPatentImageLock.unlock();
|
|
|
- }
|
|
|
-
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
-
|
|
|
+ //记录该任务该专利该部分的失败记录
|
|
|
+ saveQuestionRecord(queueData, 1);
|
|
|
+ sendMessage(queueData);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 装载线程3:权要
|
|
|
+ * 装载线程2:权要
|
|
|
*/
|
|
|
public void setPatentRight() {
|
|
|
while (true) {
|
|
|
+ QueueData queueData = new QueueData();
|
|
|
try {
|
|
|
if (setPatentRightQueueList.size() > 0) {
|
|
|
PQueueData pQueueData = setPatentRightQueueList.remove(0);
|
|
|
Task task = pQueueData.getTask();
|
|
|
+ queueData
|
|
|
+ .setTask(task)
|
|
|
+ .setUploadParamsVO(pQueueData.getUploadParamsVO());
|
|
|
+
|
|
|
//专利之星
|
|
|
if (task.getType() == 4) {
|
|
|
excutePatentDataStar.setPatentClaim(pQueueData.getStarPatent(), pQueueData.getUploadParamsVO());
|
|
|
}
|
|
|
- QueueData queueData = new QueueData()
|
|
|
- .setTask(task)
|
|
|
- .setUploadParamsVO(pQueueData.getUploadParamsVO());
|
|
|
+
|
|
|
+ queueData.setUploadParamsVO(pQueueData.getUploadParamsVO());
|
|
|
+
|
|
|
//装载完成,将其丢入权要消费者队列,并唤醒权要消费者线程
|
|
|
patentRightQueueList.add(queueData);
|
|
|
patentRightLock.lock();
|
|
@@ -240,28 +220,35 @@ public class PantentQueueService {
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
-
|
|
|
+ //记录该任务该专利该部分的失败记录
|
|
|
+ saveQuestionRecord(queueData, 2);
|
|
|
+ sendMessage(queueData);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 装载线程4:说明书文本
|
|
|
+ * 装载线程3:说明书文本
|
|
|
*/
|
|
|
public void setPatentInstructionText() {
|
|
|
while (true) {
|
|
|
+ QueueData queueData = new QueueData();
|
|
|
try {
|
|
|
if (setPatentInstructionTextQueueList.size() > 0) {
|
|
|
PQueueData pQueueData = setPatentInstructionTextQueueList.remove(0);
|
|
|
Task task = pQueueData.getTask();
|
|
|
+ queueData
|
|
|
+ .setTask(task)
|
|
|
+ .setUploadParamsVO(pQueueData.getUploadParamsVO());
|
|
|
+
|
|
|
//专利之星
|
|
|
if (task.getType() == 4) {
|
|
|
excutePatentDataStar.setPatentInstructionText(pQueueData.getStarPatent(), pQueueData.getUploadParamsVO());
|
|
|
}
|
|
|
- QueueData queueData = new QueueData()
|
|
|
- .setTask(task)
|
|
|
- .setUploadParamsVO(pQueueData.getUploadParamsVO());
|
|
|
+
|
|
|
+ queueData.setUploadParamsVO(pQueueData.getUploadParamsVO());
|
|
|
+
|
|
|
//装载完成,将其丢入说明书文本消费者队列,并唤醒说明书文本消费者线程
|
|
|
patentInstructionTextQueueList.add(queueData);
|
|
|
patentInstructionTextLock.lock();
|
|
@@ -276,28 +263,35 @@ public class PantentQueueService {
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
-
|
|
|
+ //记录该任务该专利该部分的失败记录
|
|
|
+ saveQuestionRecord(queueData, 3);
|
|
|
+ sendMessage(queueData);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 装载线程5:说明书pdf
|
|
|
+ * 装载线程4:说明书pdf
|
|
|
*/
|
|
|
public void setPatentInstructionPDF() {
|
|
|
while (true) {
|
|
|
+ QueueData queueData = new QueueData();
|
|
|
try {
|
|
|
if (setPatentInstructionPDFQueueList.size() > 0) {
|
|
|
PQueueData pQueueData = setPatentInstructionPDFQueueList.remove(0);
|
|
|
Task task = pQueueData.getTask();
|
|
|
+ queueData
|
|
|
+ .setTask(task)
|
|
|
+ .setUploadParamsVO(pQueueData.getUploadParamsVO());
|
|
|
+
|
|
|
//专利之星
|
|
|
if (task.getType() == 4) {
|
|
|
excutePatentDataStar.setPatentInstructionPDF(pQueueData.getStarPatent(), pQueueData.getUploadParamsVO());
|
|
|
}
|
|
|
- QueueData queueData = new QueueData()
|
|
|
- .setTask(task)
|
|
|
- .setUploadParamsVO(pQueueData.getUploadParamsVO());
|
|
|
+
|
|
|
+ queueData.setUploadParamsVO(pQueueData.getUploadParamsVO());
|
|
|
+
|
|
|
//装载完成,将其丢入说明书pdf消费者队列,并唤醒说明书pdf消费者线程
|
|
|
patentInstructionPDFQueueList.add(queueData);
|
|
|
patentInstructionPDFLock.lock();
|
|
@@ -312,47 +306,59 @@ public class PantentQueueService {
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
-
|
|
|
+ //记录该任务该专利该部分的失败记录
|
|
|
+ saveQuestionRecord(queueData, 4);
|
|
|
+ sendMessage(queueData);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 消费者1:摘要附图入库
|
|
|
+ * 装载线程5:摘要附图
|
|
|
*/
|
|
|
- public void pushPatentImageToDB() {
|
|
|
+ public void setPatentImage() {
|
|
|
while (true) {
|
|
|
QueueData queueData = new QueueData();
|
|
|
try {
|
|
|
- if (patentImageQueueList.size() > 0) {
|
|
|
- queueData = patentImageQueueList.remove(0);
|
|
|
- UploadParamsVO uploadParamsVO = queueData.getUploadParamsVO();
|
|
|
- //摘要附图入库(两种方式:1.Excel摘要附图方式 2.网站导入摘要附图方式)
|
|
|
- if (queueData.getTask().getType().equals(1)) {
|
|
|
- uploadPatentToDBService.uploadPatentImage(uploadParamsVO);
|
|
|
- } else {
|
|
|
- uploadPatentToDBService.uploadPatentImage2(uploadParamsVO);
|
|
|
+ if (setPatentImageQueueList.size() > 0) {
|
|
|
+ PQueueData pQueueData = setPatentImageQueueList.remove(0);
|
|
|
+ Task task = pQueueData.getTask();
|
|
|
+ queueData
|
|
|
+ .setTask(task)
|
|
|
+ .setUploadParamsVO(pQueueData.getUploadParamsVO());
|
|
|
+
|
|
|
+ //专利之星
|
|
|
+ if (task.getType() == 4) {
|
|
|
+ excutePatentDataStar.setPatentPicture(pQueueData.getStarPatent(), pQueueData.getUploadParamsVO());
|
|
|
}
|
|
|
- //Websocket发送message:通过WebSocket 在每一次循环结束后 向前端发送完成进度
|
|
|
- sendMessage(queueData);
|
|
|
- } else {
|
|
|
+
|
|
|
+ queueData.setUploadParamsVO(pQueueData.getUploadParamsVO());
|
|
|
+
|
|
|
+ //装载完成,将其丢入摘要附图消费者队列,并唤醒摘要附图消费者线程
|
|
|
+ patentImageQueueList.add(queueData);
|
|
|
patentImageLock.lock();
|
|
|
- patentImageCondition.await();
|
|
|
+ patentImageCondition.signalAll();
|
|
|
patentImageLock.unlock();
|
|
|
+
|
|
|
+ } else {
|
|
|
+ setPatentImageLock.lock();
|
|
|
+ setPatentImageCondition.await();
|
|
|
+ setPatentImageLock.unlock();
|
|
|
}
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
+ //记录该任务该专利该部分的失败记录
|
|
|
+ saveQuestionRecord(queueData, 5);
|
|
|
sendMessage(queueData);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 消费者2:将专利从队列取出,著录项目入库
|
|
|
+ * 消费者1:著录项目入库
|
|
|
*/
|
|
|
public void pushPatentZhuLuToDB() {
|
|
|
while (true) {
|
|
@@ -377,7 +383,7 @@ public class PantentQueueService {
|
|
|
//文件夹与专利关联入库
|
|
|
uploadPatentToDBService.uploadAssoPorPat(queueData.getUploadParamsVO(), projectImportPatentVO);
|
|
|
}
|
|
|
- //Websocket发送message:通过WebSocket 在每一次循环结束后 向前端发送完成进度
|
|
|
+
|
|
|
sendMessage(queueData);
|
|
|
} else {
|
|
|
patentZhuluLock.lock();
|
|
@@ -387,6 +393,8 @@ public class PantentQueueService {
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
+ //记录该任务该专利该部分的失败记录
|
|
|
+ saveQuestionRecord(queueData, 1);
|
|
|
sendMessage(queueData);
|
|
|
}
|
|
|
|
|
@@ -394,7 +402,7 @@ public class PantentQueueService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 消费者3:将专利从队列取出,权利要求文本入库
|
|
|
+ * 消费者2:权利要求入库
|
|
|
*/
|
|
|
public void pushPatentRightToDB() {
|
|
|
while (true) {
|
|
@@ -404,7 +412,7 @@ public class PantentQueueService {
|
|
|
queueData = patentRightQueueList.remove(0);
|
|
|
//权要文本入库
|
|
|
uploadPatentToDBService.uploadPatentRight(queueData.getUploadParamsVO());
|
|
|
- //Websocket发送message:通过WebSocket 在每一次循环结束后 向前端发送完成进度
|
|
|
+
|
|
|
sendMessage(queueData);
|
|
|
} else {
|
|
|
patentRightLock.lock();
|
|
@@ -414,6 +422,8 @@ public class PantentQueueService {
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
+ //记录该任务该专利该部分的失败记录
|
|
|
+ saveQuestionRecord(queueData, 2);
|
|
|
sendMessage(queueData);
|
|
|
}
|
|
|
|
|
@@ -421,7 +431,7 @@ public class PantentQueueService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 消费者4:将专利从队列取出,说明书文本入库
|
|
|
+ * 消费者3:说明书文本入库
|
|
|
*/
|
|
|
public void pushPatentInstructionTextToDB() {
|
|
|
while (true) {
|
|
@@ -431,7 +441,7 @@ public class PantentQueueService {
|
|
|
queueData = patentInstructionTextQueueList.remove(0);
|
|
|
//说明书文本入库
|
|
|
uploadPatentToDBService.uploadPatentInstructionText(queueData.getUploadParamsVO());
|
|
|
- //Websocket发送message:通过WebSocket 在每一次循环结束后 向前端发送完成进度
|
|
|
+
|
|
|
sendMessage(queueData);
|
|
|
} else {
|
|
|
patentInstructionTextLock.lock();
|
|
@@ -441,6 +451,8 @@ public class PantentQueueService {
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
+ //记录该任务该专利该部分的失败记录
|
|
|
+ saveQuestionRecord(queueData, 3);
|
|
|
sendMessage(queueData);
|
|
|
}
|
|
|
|
|
@@ -448,7 +460,7 @@ public class PantentQueueService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 消费者5:将专利从队列取出,说明书pdf地址入库
|
|
|
+ * 消费者4:说明书pdf入库
|
|
|
*/
|
|
|
public void pushPatentInstructionPDFToDB() {
|
|
|
while (true) {
|
|
@@ -458,7 +470,7 @@ public class PantentQueueService {
|
|
|
queueData = patentInstructionPDFQueueList.remove(0);
|
|
|
//说明书pdf入库
|
|
|
patentInstructionService.edit(queueData.getUploadParamsVO().getPatent().getPatentNo(), queueData.getUploadParamsVO().getFileDTO());
|
|
|
- //Websocket发送message:通过WebSocket 在每一次循环结束后 向前端发送完成进度
|
|
|
+
|
|
|
sendMessage(queueData);
|
|
|
} else {
|
|
|
patentInstructionPDFLock.lock();
|
|
@@ -468,6 +480,8 @@ public class PantentQueueService {
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
+ //记录该任务该专利该部分的失败记录
|
|
|
+ saveQuestionRecord(queueData, 4);
|
|
|
sendMessage(queueData);
|
|
|
}
|
|
|
|
|
@@ -475,6 +489,41 @@ public class PantentQueueService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 消费者5:摘要附图入库
|
|
|
+ */
|
|
|
+ public void pushPatentImageToDB() {
|
|
|
+ while (true) {
|
|
|
+ QueueData queueData = new QueueData();
|
|
|
+ try {
|
|
|
+ if (patentImageQueueList.size() > 0) {
|
|
|
+ queueData = patentImageQueueList.remove(0);
|
|
|
+ UploadParamsVO uploadParamsVO = queueData.getUploadParamsVO();
|
|
|
+ //摘要附图入库(两种方式:1.Excel摘要附图方式 2.网站导入摘要附图方式)
|
|
|
+ if (queueData.getTask().getType().equals(1)) {
|
|
|
+ uploadPatentToDBService.uploadPatentImage(uploadParamsVO);
|
|
|
+ } else {
|
|
|
+ uploadPatentToDBService.uploadPatentImage2(uploadParamsVO);
|
|
|
+ }
|
|
|
+
|
|
|
+ sendMessage(queueData);
|
|
|
+ } else {
|
|
|
+ patentImageLock.lock();
|
|
|
+ patentImageCondition.await();
|
|
|
+ patentImageLock.unlock();
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ //记录该任务该专利该部分的失败记录
|
|
|
+ saveQuestionRecord(queueData, 5);
|
|
|
+ sendMessage(queueData);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 当一个消费者消费完其负责的专利部分,修改成功条数,计算发送进度
|
|
|
*
|
|
|
* @param queueData 任务专利队列对象
|
|
@@ -490,7 +539,7 @@ public class PantentQueueService {
|
|
|
//将任务id + "|" + 专利id,拼接成专利的标识(作为当前某一个消费者消费完的这个专利的数量标识)
|
|
|
String currentPatent = task.getId() + "|" + queueData.getUploadParamsVO().getPatent().getId();
|
|
|
Integer num = patentIdMap.get(currentPatent);
|
|
|
- int needNum = 4; //临界默认设为4(即Excel导入任务默认使用5个消费者)
|
|
|
+ int needNum = 3; //临界默认设为4(即Excel导入任务默认使用5个消费者)
|
|
|
if (task.getType().equals(3) || task.getType().equals(4)) { //若是网站导入任务,则临界默认设为下载字段类型数量 - 1
|
|
|
needNum = task.getConfigCellsNum() - 1;
|
|
|
}
|
|
@@ -498,54 +547,45 @@ public class PantentQueueService {
|
|
|
patentIdMap.put(currentPatent, 1);
|
|
|
} else if (num < needNum) {
|
|
|
patentIdMap.put(currentPatent, ++num);
|
|
|
- } else {
|
|
|
- /*
|
|
|
- 1)若是看当前任务,表示当前这个任务这个专利的4个消费者全都消费结束,即当前这个任务的这个专利已完成
|
|
|
- 2)若是看下一个任务,表示下一个任务的著录项目消费者终于第一次进来了(即表示上一个任务最慢的著录项目消费者也结束了即上一个任务完成了),就将这下一个任务的状态改为 1进行中
|
|
|
- */
|
|
|
+ } else { //表示当前这个任务这个专利的消费者全都消费结束
|
|
|
+
|
|
|
+ //若是第一次进来,即任务状态是等待中时, 将状态置为进行中
|
|
|
if (task.getStatus() == 0) {
|
|
|
task.setStatus(1);
|
|
|
task.setStartTime(DateUtils.getDateTime());
|
|
|
taskService.updateById(task);
|
|
|
}
|
|
|
patentIdMap.remove(currentPatent);
|
|
|
- long percentage = Math.round((task.getSuccessNum() + 1D) / total * 100D);
|
|
|
- //任务表更新数据(这里只更新成功条数和失败条数,注意不能更新状态等其他信息)
|
|
|
+
|
|
|
+ //任务表更新 完成条数+1
|
|
|
task.setSuccessNum(task.getSuccessNum() + 1);
|
|
|
- task.setDefaultNum(total - task.getSuccessNum());
|
|
|
Task updateTask = new Task();
|
|
|
updateTask.setId(task.getId());
|
|
|
+ updateTask.setDefaultNum(questionRecordMapper.selectDefaultNum(task.getId()));
|
|
|
+ updateTask.setTrueSuccessNum(task.getSuccessNum() - task.getDefaultNum());
|
|
|
updateTask.setSuccessNum(task.getSuccessNum());
|
|
|
- updateTask.setDefaultNum(total - task.getSuccessNum());
|
|
|
taskService.updateById(updateTask);
|
|
|
|
|
|
+ long percentage = Math.round((task.getSuccessNum() + 0D) / total * 100D);
|
|
|
+
|
|
|
//当全部完成时
|
|
|
if (task.getSuccessNum().equals(total)) {
|
|
|
percentage = 100L;
|
|
|
- //设置任务状态为成功
|
|
|
+ //任务表更新最终数据
|
|
|
+ task.setDefaultNum(questionRecordMapper.selectDefaultNum(task.getId()));
|
|
|
+ task.setTrueSuccessNum(task.getSuccessNum() - task.getDefaultNum());
|
|
|
task.setStatus(2);
|
|
|
- //设置任务结束时间为当前时间
|
|
|
task.setEndTime(DateUtils.getDateTime());
|
|
|
taskService.updateById(task);
|
|
|
}
|
|
|
|
|
|
+ //websocket发送进度
|
|
|
messageService.sendWebsocketMessage(task, total, task.getSuccessNum(), percentage);
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 数据丢入摘要附图生产队列并唤醒装载摘要附图线程
|
|
|
- *
|
|
|
- * @param pQueueData 装载生产队列实体类
|
|
|
- */
|
|
|
- public void imageToPQueue(PQueueData pQueueData) {
|
|
|
- setPatentImageQueueList.add(pQueueData);
|
|
|
- setPatentImageLock.lock();
|
|
|
- setPatentImageCondition.signalAll();
|
|
|
- setPatentImageLock.unlock();
|
|
|
- }
|
|
|
|
|
|
/**
|
|
|
* 数据丢入著录项目生产队列并唤醒装载著录项目线程
|
|
@@ -596,7 +636,19 @@ public class PantentQueueService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 专利丢入5个消费者队列,并唤醒5个消费者线程
|
|
|
+ * 数据丢入摘要附图生产队列并唤醒装载摘要附图线程
|
|
|
+ *
|
|
|
+ * @param pQueueData 装载生产队列实体类
|
|
|
+ */
|
|
|
+ public void imageToPQueue(PQueueData pQueueData) {
|
|
|
+ setPatentImageQueueList.add(pQueueData);
|
|
|
+ setPatentImageLock.lock();
|
|
|
+ setPatentImageCondition.signalAll();
|
|
|
+ setPatentImageLock.unlock();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Excel任务专利丢入消费者队列,并唤醒消费者线程
|
|
|
*
|
|
|
* @param task 任务对象
|
|
|
* @param uploadParamsVO 专利实体类对象
|
|
@@ -610,34 +662,30 @@ public class PantentQueueService {
|
|
|
.setTask(task)
|
|
|
.setUploadParamsVO(uploadParamsVO);
|
|
|
|
|
|
- //专利分别加入5个消费者队列
|
|
|
- patentImageQueueList.add(queueData);
|
|
|
+ //专利分别加入消费者队列
|
|
|
patentZhuluQueueList.add(queueData);
|
|
|
patentRightQueueList.add(queueData);
|
|
|
patentInstructionTextQueueList.add(queueData);
|
|
|
- patentInstructionPDFQueueList.add(queueData);
|
|
|
+ patentImageQueueList.add(queueData);
|
|
|
|
|
|
- //通知消费者线程(5个消费者:摘要附图、著录项目、权利要求文本、说明书文本、说明书pdf)
|
|
|
- //1.摘要附图
|
|
|
- patentImageLock.lock();
|
|
|
- patentImageCondition.signalAll();
|
|
|
- patentImageLock.unlock();
|
|
|
- //2.著录项目
|
|
|
+ //通知消费者线程
|
|
|
+ //1.著录项目
|
|
|
patentZhuluLock.lock();
|
|
|
patentZhuluCondition.signalAll();
|
|
|
patentZhuluLock.unlock();
|
|
|
- //3.权利要求文本
|
|
|
+ //2.权利要求文本
|
|
|
patentRightLock.lock();
|
|
|
patentRightCondition.signalAll();
|
|
|
patentRightLock.unlock();
|
|
|
- //4.说明书文本
|
|
|
+ //3.说明书文本
|
|
|
patentInstructionTextLock.lock();
|
|
|
patentInstructionTextCondition.signalAll();
|
|
|
patentInstructionTextLock.unlock();
|
|
|
- //5.说明书pdf
|
|
|
- patentInstructionPDFLock.lock();
|
|
|
- patentInstructionPDFCondition.signalAll();
|
|
|
- patentInstructionPDFLock.unlock();
|
|
|
+ //5.摘要附图
|
|
|
+ patentImageLock.lock();
|
|
|
+ patentImageCondition.signalAll();
|
|
|
+ patentImageLock.unlock();
|
|
|
+
|
|
|
|
|
|
}
|
|
|
|
|
@@ -651,18 +699,32 @@ public class PantentQueueService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 生产者生产队列剔除指定任务的所有专利
|
|
|
+ *
|
|
|
+ * @param taskId 任务id
|
|
|
+ */
|
|
|
+ public void setQueueRemoveTasks(Integer taskId) {
|
|
|
+ //任务暂停时清除生产者队列中已有的该任务的所有专利
|
|
|
+ this.setPatentZhuluQueueList.removeIf(pQueueData -> pQueueData.getTask().getId().equals(taskId));
|
|
|
+ this.setPatentRightQueueList.removeIf(pQueueData -> pQueueData.getTask().getId().equals(taskId));
|
|
|
+ this.setPatentInstructionTextQueueList.removeIf(pQueueData -> pQueueData.getTask().getId().equals(taskId));
|
|
|
+ this.setPatentInstructionPDFQueueList.removeIf(pQueueData -> pQueueData.getTask().getId().equals(taskId));
|
|
|
+ this.setPatentImageQueueList.removeIf(pQueueData -> pQueueData.getTask().getId().equals(taskId));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 消费者专利队列剔除指定任务的所有专利
|
|
|
*
|
|
|
* @param taskId 任务id
|
|
|
*/
|
|
|
- public void consumerQueueDeleteTasks(Integer taskId) {
|
|
|
- //任务暂停时清除4个消费者专利队列中该任务的专利
|
|
|
- this.patentImageQueueList.removeIf(queueData -> queueData.getTask().getId().equals(taskId));
|
|
|
+ public void consumerQueueRemoveTasks(Integer taskId) {
|
|
|
+ //任务暂停时清除消费者队列中已有的该任务的所有专利
|
|
|
this.patentZhuluQueueList.removeIf(queueData -> queueData.getTask().getId().equals(taskId));
|
|
|
this.patentRightQueueList.removeIf(queueData -> queueData.getTask().getId().equals(taskId));
|
|
|
this.patentInstructionTextQueueList.removeIf(queueData -> queueData.getTask().getId().equals(taskId));
|
|
|
this.patentInstructionPDFQueueList.removeIf(queueData -> queueData.getTask().getId().equals(taskId));
|
|
|
- //任务暂停时清除 patentIdMap(任务id + "|" + 专利id,拼接而成的专利的数量标识(作为当前某一个消费者消费完的这个专利的数量标识))中该任务的专利的数量标识
|
|
|
+ this.patentImageQueueList.removeIf(queueData -> queueData.getTask().getId().equals(taskId));
|
|
|
+ //任务暂停时清除 patentIdMap(任务id + "|" + 专利id,拼接而成的专利的数量标识(作为辨别某一任务的某一专利消费完成的消费者数量))中该任务的专利数量标识
|
|
|
Iterator<String> iterator = this.patentIdMap.keySet().iterator();
|
|
|
while (iterator.hasNext()) {
|
|
|
String key = iterator.next();
|
|
@@ -705,5 +767,18 @@ public class PantentQueueService {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 失败记录方法
|
|
|
+ *
|
|
|
+ * @param queueData 消费者专利队列
|
|
|
+ * @param cell 消费者代表的专利字段部分
|
|
|
+ */
|
|
|
+ public void saveQuestionRecord(QueueData queueData, Integer cell) {
|
|
|
+ QuestionRecord questionRecord = new QuestionRecord()
|
|
|
+ .setPatentNo(queueData.getUploadParamsVO().getPatent().getPatentNo())
|
|
|
+ .setTaskId(queueData.getTask().getId())
|
|
|
+ .setCell(cell);
|
|
|
+ questionRecordService.save(questionRecord);
|
|
|
+ }
|
|
|
|
|
|
}
|