Ver Fonte

2/26 导入修改

lwhhszx há 1 ano atrás
pai
commit
632399ca14

+ 14 - 0
src/main/java/cn/cslg/pas/common/vo/QuartzVO.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.common.vo;
+
+import lombok.Data;
+
+@Data
+public class QuartzVO {
+    /**
+     * 任务名称
+     */
+    private String jobName;
+    private String jobGroupName;
+    private String triggerName;
+    private String triggerGroupName;
+}

+ 137 - 0
src/main/java/cn/cslg/pas/service/JobService.java

@@ -0,0 +1,137 @@
+package cn.cslg.pas.service;
+
+
+import cn.cslg.pas.common.vo.QuartzVO;
+import cn.cslg.pas.domain.business.ImportTask;
+import cn.cslg.pas.domain.business.ImportTaskCondition;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.*;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class JobService {
+
+    private final Scheduler scheduler;
+
+
+    /**
+     * 删除job
+     *
+     * @throws SchedulerException
+     */
+    public void deleteJob(Integer taskConditionId) throws SchedulerException {
+        //删除job中的该定时任务条件
+        QuartzVO quartzVO = this.generateQuartzVO(taskConditionId);
+        TriggerKey triggerKey = TriggerKey.triggerKey(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName());
+        scheduler.pauseTrigger(triggerKey);
+        scheduler.unscheduleJob(triggerKey);
+        JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
+        scheduler.deleteJob(jobKey);
+
+//        qrTaskService.removeById(taskId);
+//        //同时删除该任务条件的所有任务执行情况记录
+//        LambdaQueryWrapper<Task> queryWrapper = new LambdaQueryWrapper<>();
+//        queryWrapper.eq(Task::getTaskConditionId, taskId);
+//        taskService.remove(queryWrapper);
+    }
+
+    /**
+     * 暂停job
+     *
+     * @throws SchedulerException
+     */
+//    public void pauseJob(Integer taskId) throws SchedulerException {
+//        QuartzVO quartzVO = this.generateQuartzVO(taskId);
+//        //更新任务条件状态
+//        qrTaskService.updateState(taskId, 6);
+//        JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
+//        scheduler.pauseJob(jobKey);
+//    }
+
+    /**
+     * 恢复job
+     *
+     * @throws SchedulerException
+     */
+//    public void resumeJob(Integer taskId) throws SchedulerException {
+//        QuartzVO quartzVO = this.generateQuartzVO(taskId);
+//        qrTaskService.updateState(taskId, 1);
+//        JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
+//        scheduler.resumeJob(jobKey);
+//    }
+
+    /**
+     * 修改定时任务
+     *
+     * @param
+     */
+    public void updateJob(ImportTask qrtzTask) {
+        //更新任务
+
+        QuartzVO quartzVO = this.generateQuartzVO(qrtzTask.getId());
+        JobDataMap jobDataMap = new JobDataMap();
+        jobDataMap.put("qrtzTask", qrtzTask);
+        TriggerKey oldTriggerKey = TriggerKey.triggerKey(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName());
+        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(qrtzTask.getName());
+        CronTrigger cronTrigger = TriggerBuilder.newTrigger()
+                .withIdentity(oldTriggerKey).usingJobData(jobDataMap).withSchedule(scheduleBuilder).build();
+        try {
+            scheduler.rescheduleJob(oldTriggerKey, cronTrigger);
+        } catch (SchedulerException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 新增job任务
+     *
+     * @throws SchedulerException
+     */
+    @Transactional
+    public void addJob(ImportTaskCondition taskCondition) throws SchedulerException {
+        //添加一条任务记录
+        QuartzVO quartzVO = this.generateQuartzVO(taskCondition.getId());
+        JobDataMap jobDataMap = new JobDataMap();
+        jobDataMap.put("taskCondition", taskCondition);
+        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(taskCondition.getCrons());
+        JobDetail jobDetail = JobBuilder
+                .newJob(TaskAddJob.class)
+                .withIdentity(quartzVO.getJobName(), quartzVO.getJobGroupName())
+                .build();
+        Trigger trigger = TriggerBuilder
+                .newTrigger()
+                .withIdentity(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName())
+                .withSchedule(cronScheduleBuilder)
+                .usingJobData(jobDataMap)
+                .build();
+        scheduler.scheduleJob(jobDetail, trigger);
+
+    }
+
+
+    public QuartzVO generateQuartzVO(Integer taskId) {
+        QuartzVO quartzVO = new QuartzVO();
+        quartzVO.setJobName("Job_" + taskId);
+        quartzVO.setJobGroupName("Default");
+        quartzVO.setTriggerName("Trigger_" + taskId);
+        quartzVO.setTriggerGroupName("Default");
+        return quartzVO;
+
+    }
+
+    /**
+     * 停止正在进行的job
+     *
+     * @throws SchedulerException
+     */
+    public void interruptJob(Integer taskId) throws SchedulerException {
+        QuartzVO quartzVO = this.generateQuartzVO(taskId);
+        JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
+        scheduler.interrupt(jobKey);
+    }
+}

+ 43 - 0
src/main/java/cn/cslg/pas/service/TaskAddJob.java

@@ -0,0 +1,43 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.domain.business.ImportTask;
+
+import cn.cslg.pas.domain.business.ImportTaskCondition;
+import cn.cslg.pas.service.business.ImportTaskService;
+import cn.cslg.pas.service.importPatent.SchedulingTaskService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.quartz.DisallowConcurrentExecution;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 定义任务
+ */
+@RequiredArgsConstructor
+@DisallowConcurrentExecution
+public class TaskAddJob extends QuartzJobBean {
+
+    private static final Log logger = LogFactory.getLog(TaskAddJob.class);
+    private boolean flag = true;
+    private final ImportTaskService importTaskService;
+    private final SchedulingTaskService schedulingTaskService;
+    @Override
+    public void executeInternal(JobExecutionContext context) throws JobExecutionException {
+        JobDataMap jobDataMap = context.getTrigger().getJobDataMap();
+        ImportTaskCondition taskCondition = (ImportTaskCondition) jobDataMap.get("taskCondition");
+        ImportTask task = new ImportTask();
+        //任务存入生产者任务队列并唤醒生产者线程
+        schedulingTaskService.startTask();
+
+        logger.info("添加任务" + "信息是" + task);
+    }
+
+}

+ 2 - 2
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -81,7 +81,7 @@ public class EsCountService {
                     for (String value : values) {
                         EsCustomFieldValueDTO valueDTO = new EsCustomFieldValueDTO();
                         valueDTO.setFieldId(countVO.getFieldId());
-                        valueDTO.setFieldValue(Arrays.asList(value));
+                        valueDTO.setFieldValue(Arrays.asList("\""+value+"\""));
                         customFields.add(valueDTO);
                         this.getReturnData(searchCondition, "",customFields, taskId, projectId,
                                 esCountVOS, detailDTOS, esCountDTO, value, map);
@@ -93,7 +93,7 @@ public class EsCountService {
                     if (dateList.contains(countVO.getField())) {
                         condition = this.getDateFormat(countVO.getField(), value);
                     } else {
-                        condition = countVO.getField() + " = " + value;
+                        condition = countVO.getField() + " = " + "\""+value+"\"";
                     }
                     this.getReturnData(searchCondition, condition, customFields, taskId, projectId,
                             esCountVOS, detailDTOS, esCountDTO, value, map);

+ 2 - 1
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -602,7 +602,8 @@ public class EsService {
         InlineScript inlineScript = InlineScript.of(i -> i.lang("painless").source(source));
         Script script = Script.of(i -> i.inline(inlineScript));
         Query query = QueryBuilders.term(i -> i.field("_id").value(id));
-        UpdateByQueryRequest request = UpdateByQueryRequest.of(i -> i.index("patent").script(script).refresh(true).waitForActiveShards(WaitForActiveShards.of(t -> t.count(1))).query(query));
+        //.waitForActiveShards(WaitForActiveShards.of(t -> t.count(1)))
+        UpdateByQueryRequest request = UpdateByQueryRequest.of(i -> i.index("patent").script(script).refresh(true).query(query));
         try {
             client.updateByQuery(request);
             return 1;

+ 31 - 29
src/main/java/cn/cslg/pas/service/business/invalidReport/AssoGroupFeatureService.java

@@ -154,39 +154,41 @@ public class AssoGroupFeatureService extends ServiceImpl<AssoGroupFeatureMapper,
         //根据特征id 查询世代及排序
         LambdaQueryWrapper<AssoGroupFeature> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(AssoGroupFeature::getFeatureId, featureId);
-        AssoGroupFeature assoGroupFeature = this.getOne(queryWrapper, false);
-        Integer featureOrder = assoGroupFeature.getFeatureOrder();
+        List<AssoGroupFeature> assoGroupFeatures = this.list(queryWrapper);
+        for(AssoGroupFeature assoGroupFeature: assoGroupFeatures) {
+            Integer featureOrder = assoGroupFeature.getFeatureOrder();
 
-        Boolean ifFirstEdit = removeGroupFeatureDTO.getIfFirstEdit();
-        Integer featureGen = 1;
-        if (ifFirstEdit != null && ifFirstEdit.equals(false)) {
-            featureGen = 2;
-        }
+            Boolean ifFirstEdit = removeGroupFeatureDTO.getIfFirstEdit();
+            Integer featureGen = 1;
+            if (ifFirstEdit != null && ifFirstEdit.equals(false)) {
+                featureGen = 2;
+            }
 
 
-        //根据特征id查询证据组合和特征关联
-        Integer genFeatureId = removeGroupFeatureDTO.getFeatureId();
-        Integer genGroupId = assoGroupFeature.getGroupId();
-        AssoGroupFeature assoGroupFeature1 = this.getGenGroupFeature(genGroupId, genFeatureId, featureGen);
-        if (assoGroupFeature1 == null) {
-            assoGroupFeature1 = new AssoGroupFeature();
-            assoGroupFeature1.setGroupId(genGroupId);
-            assoGroupFeature1.setFeatureGen(featureGen);
-            assoGroupFeature1.setOperateMode(1);
-            assoGroupFeature1.setFeaturePreId(genFeatureId);
-            assoGroupFeature1.setFeatureOrder(featureOrder);
-            assoGroupFeature1.setFeatureId(featureId);
-            assoGroupFeature1.insert();
-        } else {
-            assoGroupFeature1.setGroupId(genGroupId);
-            assoGroupFeature1.setFeatureGen(featureGen);
-            assoGroupFeature1.setOperateMode(1);
-            assoGroupFeature1.setFeaturePreId(genFeatureId);
-            featureOrder = assoGroupFeature1.getFeatureOrder();
-            assoGroupFeature1.updateById();
-        }
-        this.updateGroupFeatureOrder(genGroupId, featureOrder, featureGen);
+            //根据特征id查询证据组合和特征关联
+            Integer genFeatureId = removeGroupFeatureDTO.getFeatureId();
+            Integer genGroupId = assoGroupFeature.getGroupId();
+            AssoGroupFeature assoGroupFeature1 = this.getGenGroupFeature(genGroupId, genFeatureId, featureGen);
+            if (assoGroupFeature1 == null) {
+                assoGroupFeature1 = new AssoGroupFeature();
+                assoGroupFeature1.setGroupId(genGroupId);
+                assoGroupFeature1.setFeatureGen(featureGen);
+                assoGroupFeature1.setOperateMode(1);
+                assoGroupFeature1.setFeaturePreId(genFeatureId);
+                assoGroupFeature1.setFeatureOrder(featureOrder);
+                assoGroupFeature1.setFeatureId(featureId);
+                assoGroupFeature1.insert();
+            } else {
+                assoGroupFeature1.setGroupId(genGroupId);
+                assoGroupFeature1.setFeatureGen(featureGen);
+                assoGroupFeature1.setOperateMode(1);
+                assoGroupFeature1.setFeaturePreId(genFeatureId);
+                featureOrder = assoGroupFeature1.getFeatureOrder();
+                assoGroupFeature1.updateById();
+            }
+            this.updateGroupFeatureOrder(genGroupId, featureOrder, featureGen);
 
+        }
         return true;
     }
 

+ 3 - 4
src/main/java/cn/cslg/pas/service/business/invalidReport/EvidenceReasonService.java

@@ -69,7 +69,6 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
             if (tem == null) {
                 addEvidenceReasonsDTOList.add(item);
             }
-
         });
         //遍历插入无id特征
         addEvidenceReasonsDTOList.forEach(item -> {
@@ -85,7 +84,7 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
         List<Integer> notInAssoIds = new ArrayList<>();
         LambdaQueryWrapper<AssoGroupFeature> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(AssoGroupFeature::getGroupId, groupId)
-                .eq(AssoGroupFeature::getFeatureGen, 0);
+                .eq(AssoGroupFeature::getFeatureGen, gen);
         List<AssoGroupFeature> assoGroupFeatures = assoGroupFeatureService.list(queryWrapper);
         assoIds = assoGroupFeatures.stream().map(AssoGroupFeature::getId).collect(Collectors.toList());
 
@@ -109,7 +108,7 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
                 assoGroupFeature.setFeatureId(featureId);
                 assoGroupFeature.setFeatureOrder(featureOrder);
                 assoGroupFeature.setGroupId(groupId);
-                assoGroupFeature.setFeatureGen(0);
+                assoGroupFeature.setFeatureGen(gen);
                 assoGroupFeature.insert();
                 featureGroupId = assoGroupFeature.getId();
             } else {
@@ -200,7 +199,7 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
         //根据证据组合id 查询特征
         LambdaQueryWrapper<AssoGroupFeature> assFWrapper = new LambdaQueryWrapper<>();
         assFWrapper.eq(AssoGroupFeature::getGroupId, groupId)
-                .and(wrapper -> wrapper.eq(AssoGroupFeature::getFeatureGen, 0).or().eq(AssoGroupFeature::getOperateMode, 2));
+                .and(wrapper -> wrapper.eq(AssoGroupFeature::getFeatureGen, gen).or().eq(AssoGroupFeature::getOperateMode, 2));
 
         List<AssoGroupFeature> assoGroupFeatures = assoGroupFeatureService.list(assFWrapper);
         List<QueryEvidenceReasonVO> queryEvidenceReasonVOS = new ArrayList<>();

+ 3 - 0
src/main/java/cn/cslg/pas/service/importPatent/GetPatentFromExcelThread.java

@@ -68,6 +68,7 @@ public class GetPatentFromExcelThread extends Thread {
             List<UploadSettingVO.Column> jsonData = excuteUploadSettingService.ExcuteUploadSetting(sourceId.toString());
             //解析Excel文件获得工作簿
             Sheet sheet = ReadExcelUtils.readExcel(tempFile);
+            Integer x =0;
             //遍历专利总数量,在循环中将专利一个一个存入消费者专利队列
             for (int i = lastIndex; i < total; i++) {
                 if (!importTaskAMVO.getState().equals(1)) {
@@ -90,10 +91,12 @@ public class GetPatentFromExcelThread extends Thread {
                 }
                 //专利丢入消费者队列,并唤醒消费者线程
                 savePatentToEsThread.awakeTask(uploadPatentWebDTO);
+                     x++;
                 getPatentPictureFromExcelThread.awakeTask(uploadPatentWebDTO);
             }
             //专利取完通知消费者线程
             savePatentToEsThread.setIfProductAll(true);
+            System.out.println("从excel获取专利:"+x);
             getPatentPictureFromExcelThread.setIfProductAll(true);
             //删除临时文件tempFile
             new File(tempFile.getPath()).delete();

+ 9 - 1
src/main/java/cn/cslg/pas/service/importPatent/GetPatentPictureFromExcelThread.java

@@ -60,6 +60,9 @@ public class GetPatentPictureFromExcelThread extends Thread {
                     taskLock.lock();
                     taskCondition.await();
                 }
+                    if(uploadPatentWebDTOS.size()==0){
+                        break;
+                    }
                     uploadPatentWebDTO=  uploadPatentWebDTOS.remove(0);
                 String guid = FormatUtil.getPictureFormat(uploadPatentWebDTO.getPatent().getAppNo());
                 PictureData pictureData = uploadPatentWebDTO.getPictureData();
@@ -101,8 +104,13 @@ public class GetPatentPictureFromExcelThread extends Thread {
 
     //
     public void setIfProductAll(Boolean ifProductAll) {
-
         this.ifProductAll = ifProductAll;
+        System.out.println("专利导入全部结束" + this.ifProductAll + importTaskAMVO.getId());
+        if (taskLock.tryLock()) {
+            System.out.println("专利导入到excel图片解锁" + importTaskAMVO.getId());
+            taskCondition.signalAll();
+            taskLock.unlock();
+        }
 
     }
 

+ 19 - 10
src/main/java/cn/cslg/pas/service/importPatent/SavePatentToEsThread.java

@@ -25,20 +25,22 @@ import org.springframework.context.ApplicationContext;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
 public class SavePatentToEsThread extends Thread {
     private ApplicationContext applicationContext;
-    private List<UploadPatentWebDTO> uploadPatentWebDTOS = new ArrayList<>();
+    private List<UploadPatentWebDTO> uploadPatentWebDTOS = new CopyOnWriteArrayList<>();
     private Lock taskLock = new ReentrantLock();
     private Condition taskCondition = taskLock.newCondition();
     private TaskThread taskThread;
     private ImportTaskAMVO importTaskAMVO;
     private Boolean ifProductAll = false;
-
+    private Integer i=0;
     @Override
     public void run() {
         while ((!ifProductAll || uploadPatentWebDTOS.size() > 0) && importTaskAMVO.getState().equals(1)) {
@@ -61,9 +63,10 @@ public class SavePatentToEsThread extends Thread {
                 PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo(patent.getPatentNo());
                 String patentId = null;
                 // 若查出专利则更新
+                Patent orgPatent =null;
                 if (patentWithIdVO != null) {
                     patentId = patentWithIdVO.getId();
-                    Patent orgPatent = patentWithIdVO.getPatent();
+                   orgPatent = patentWithIdVO.getPatent();
                     BeanUtils.copyProperties(patent, orgPatent, FormatUtil.getNullPropertyNames(patent));
                     esService.updatePatent(orgPatent, patentWithIdVO.getId());
                 } else {
@@ -71,6 +74,7 @@ public class SavePatentToEsThread extends Thread {
                     patentJoin.setName("patent");
                     patent.setPatentJoin(patentJoin);
                     patentId = esService.addPatent(patent);
+                    orgPatent= patent;
                 }
                 //判断是否和专题库或报告关联
                 ImportTaskAMVO importTaskAMVO = taskThread.getImportTaskAMVO();
@@ -81,6 +85,7 @@ public class SavePatentToEsThread extends Thread {
                     if (patentId != null) {
                         Boolean ifInproject = esService.searchPatent(patentId, importTaskAMVO.getProjectId());
                         if (!ifInproject) {
+                            System.out.println("多添加的专利:"+patent.getPatentNo());
                             Patent patentChild = new Patent();
                             PatentJoin patentJoin = new PatentJoin();
                             patentJoin.setParent(patentId);
@@ -91,7 +96,7 @@ public class SavePatentToEsThread extends Thread {
                             //当导入专题库时添加默认合并申请人
                             if (importTaskAMVO.getProjectType() != null && importTaskAMVO.getProjectType().equals(0)) {
                                 EsMergePersonService esMergePersonService = applicationContext.getBean(EsMergePersonService.class);
-                                esMergePersonService.addDefaultMergePerson(patent, patentId, importTaskAMVO.getProjectId());
+                                esMergePersonService.addDefaultMergePerson(orgPatent, patentId, importTaskAMVO.getProjectId());
                             }
                         }
 
@@ -171,12 +176,16 @@ public class SavePatentToEsThread extends Thread {
     }
 
     public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
-        UploadPatentWebDTO uploadPatentWebDTO1 = new UploadPatentWebDTO();
-        BeanUtils.copyProperties(uploadPatentWebDTO, uploadPatentWebDTO1);
-        uploadPatentWebDTOS.add(uploadPatentWebDTO1);
-        if (taskLock.tryLock()) {
-            taskCondition.signalAll();
-            taskLock.unlock();
+        synchronized ("") {
+            UploadPatentWebDTO uploadPatentWebDTO1 = new UploadPatentWebDTO();
+            BeanUtils.copyProperties(uploadPatentWebDTO, uploadPatentWebDTO1);
+            i++;
+     System.out.println("添加了"+i);
+            uploadPatentWebDTOS.add(uploadPatentWebDTO1);
+            if (taskLock.tryLock()) {
+                taskCondition.signalAll();
+                taskLock.unlock();
+            }
         }
     }