Kaynağa Gözat

Excel导入专利接口代码升级

chendayu 2 yıl önce
ebeveyn
işleme
21719fda60

+ 2 - 2
PAS/src/main/java/cn/cslg/pas/common/core/CreateTaskThread.java

@@ -35,13 +35,13 @@ public class CreateTaskThread implements InitializingBean {
         //查找任务状态为0(队列中)和1(进行中)的任务
         List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().in(Task::getStatus, new ArrayList<>(Arrays.asList(0, 1))));
         if (tasks.size() > 0) {
-            //过滤出任务ids
+            //过滤出任务ids
             List<Integer> taskIds = tasks.stream().map(Task::getId).collect(Collectors.toList());
             //过滤出进行中的任务的id
             List<Task> doingTasks = tasks.stream().filter(item -> item.getStatus() == 1).collect(Collectors.toList());
             List<Integer> doingTaskIds = doingTasks.stream().map(Task::getId).collect(Collectors.toList());
             if (doingTaskIds.size() > 0) {
-                //先将进行中的任务的id存入任务队列,再将其余存入
+                //先将进行中的任务(项目重启后进行中的任务仅会有1个)的id存入任务队列,再将其余存入
                 pantentQueueService.queueAddTask(Arrays.asList(doingTaskIds.get(0)));
                 taskIds.removeAll(doingTaskIds);
             }

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/domain/Task.java

@@ -20,7 +20,7 @@ import lombok.experimental.Accessors;
 public class Task extends BaseEntity<Task> {
 
     /**
-     * 任务类型 1上传 2导出 3网站导入
+     * 任务类型 1.Excel导入专利任务 2.导出 3.Epo欧专局网站导入
      */
     @TableField("type")
     private Integer type;

+ 4 - 5
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/ExcutePatentDataExcel.java

@@ -42,21 +42,20 @@ public class ExcutePatentDataExcel implements IExcutePatentData {
         filePath = fileUtils.getPath(filePath);  //绝对路径
         Integer total = task.getTotal();
 
-        int lastIndex = task.getSuccessNum();
+        int lastIndex = task.getSuccessNum();  //成功条数(即上一次遍历到的专利位置)
         String json = task.getPramJson();
         ProjectImportPatentVO projectImportPatentVO = JsonUtils.jsonToPojo(json, ProjectImportPatentVO.class);
         //解析数据源类,通过数据来源id(如1:智慧芽)解析数据源配置文件,获得数据源配置文件对象jsonData
         List<UploadSettingVO.Column> jsonData = excuteUploadSettingService.ExcuteUploadSetting(projectImportPatentVO.getSourceId());
         //解析Excel文件获得工作簿
         Sheet sheet = ReadExcelUtils.readExcel(filePath);
-        //遍历专利总数量,在循环中保存专利
+        //遍历专利总数量,在循环中将专利一个一个存入消费者专利队列
         for (int i = lastIndex; i < total; i++) {
             PatentData patentData = ReadExcelUtils.readExcelOneRow(filePath, sheet, i + 1);
-            //调用装载数据类,专利数据转换为VO对象
+            //调用装载数据类(根据数据源配置文件对象和专利源数据生成专利数据)
             UploadParamsVO uploadParamsVO = excuteDataToVOService.fileToPatentVO(patentData, jsonData);
 
-            //专利入消费者队列,并唤醒消费者执行专利入库
-            //patentToQueueAwakeConsumer(uploadParamsVO, projectImportPatentVO);
+            //专利入消费者队列,并唤醒消费者
             pantentQueueService.patentToQueue(task, uploadParamsVO, projectImportPatentVO);
         }
     }

+ 9 - 11
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/PantentQueueService.java

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

+ 2 - 10
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/UploadTaskService.java

@@ -66,13 +66,9 @@ public class UploadTaskService {
         Integer total = ReadExcelUtils.textExcel(filePath);
         //新增任务(专利导入导出任务表)
         Integer taskId = taskService.addTask2(fileDTO, total, json);
-        //任务存入生产者任务队列并唤醒生产者线程(判断若没有进行中的任务则唤醒)
+        //任务存入生产者任务队列并唤醒生产者线程
         pantentQueueService.queueAddTask(Arrays.asList(taskId));
         pantentQueueService.awakeTasktch();
-//        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getStatus, 1));
-//        if (tasks == null || tasks.size() == 0) {
-//            pantentQueueService.awakeTasktch();
-//        }
     }
 
     /**
@@ -120,13 +116,9 @@ public class UploadTaskService {
         assoOsTaskQrtzTask.setTaskId(taskId);
         assoOsTaskQrtzTaskService.updateById(assoOsTaskQrtzTask);
 
-        //任务存入生产者任务队列并唤醒生产者线程(判断若没有进行中的任务则唤醒)
+        //任务存入生产者任务队列并唤醒生产者线程
         pantentQueueService.queueAddTask(Arrays.asList(taskId));
         pantentQueueService.awakeTasktch();
-//        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getStatus, 1));
-//        if (tasks == null || tasks.size() == 0) {
-//            pantentQueueService.awakeTasktch();
-//        }
 
         return assoOsTaskQrtzTask;
     }