Преглед изворни кода

Merge remote-tracking branch 'origin/master'

xiexiang пре 1 година
родитељ
комит
4c24f31179
18 измењених фајлова са 370 додато и 69 уклоњено
  1. 8 0
      src/main/java/cn/cslg/pas/common/utils/parseQueryToTree/expressManager.java
  2. 14 0
      src/main/java/cn/cslg/pas/common/vo/QuartzVO.java
  3. 3 3
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/DateQueryBuilder.java
  4. 10 4
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/NestedPersonQueryBuilder.java
  5. 14 6
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/NestedQueryBuilder.java
  6. 60 0
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/TermOrWildcardQueryBuilder.java
  7. 6 6
      src/main/java/cn/cslg/pas/factorys/EsCountAnalyseBuilderFactory/DateCountAnalyssBuilder.java
  8. 137 0
      src/main/java/cn/cslg/pas/service/JobService.java
  9. 43 0
      src/main/java/cn/cslg/pas/service/TaskAddJob.java
  10. 4 1
      src/main/java/cn/cslg/pas/service/business/MergePersonService.java
  11. 2 2
      src/main/java/cn/cslg/pas/service/business/es/EsCountService.java
  12. 2 1
      src/main/java/cn/cslg/pas/service/business/es/EsService.java
  13. 31 29
      src/main/java/cn/cslg/pas/service/business/invalidReport/AssoGroupFeatureService.java
  14. 3 4
      src/main/java/cn/cslg/pas/service/business/invalidReport/EvidenceReasonService.java
  15. 3 0
      src/main/java/cn/cslg/pas/service/importPatent/GetPatentFromExcelThread.java
  16. 9 1
      src/main/java/cn/cslg/pas/service/importPatent/GetPatentPictureFromExcelThread.java
  17. 19 10
      src/main/java/cn/cslg/pas/service/importPatent/SavePatentToEsThread.java
  18. 2 2
      src/main/resources/jsons/patent.json

+ 8 - 0
src/main/java/cn/cslg/pas/common/utils/parseQueryToTree/expressManager.java

@@ -99,6 +99,14 @@ public class expressManager {
         oOR.priorityVale = 20;
         oOR.operateValue = 2;
         hSymbols.put(oOR.Code, oOR);
+
+        oOR = new operate();
+        oOR.Code = "≡";
+        oOR.ShowName = " LIKE ";
+        oOR.type = enuType.Assignment;
+        oOR.priorityVale = 20;
+        oOR.operateValue = 2;
+        hSymbols.put(oOR.Code, oOR);
         //#endregion
 
         //#region 添加成对出现的符号

+ 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;
+}

+ 3 - 3
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/DateQueryBuilder.java

@@ -55,7 +55,7 @@ public class DateQueryBuilder implements IQueryBuilder {
                         break;
                     default:
                         query = QueryBuilders
-                                .range(range -> range.field(field).gte(JsonData.of(yearTime)).lte(JsonData.of(yearNextTime)));
+                                .range(range -> range.field(field).gte(JsonData.of(yearTime)).lt(JsonData.of(yearNextTime)));
                         break;
                 }
             } else if (value.length() == MONTH || value.length() == MONTHONE) {
@@ -93,7 +93,7 @@ public class DateQueryBuilder implements IQueryBuilder {
                         break;
                     default:
                         query = QueryBuilders
-                                .range(range -> range.field(field).gte(JsonData.of(monthTime)).lte(JsonData.of(monthNextTime)));
+                                .range(range -> range.field(field).gte(JsonData.of(monthTime)).lt(JsonData.of(monthNextTime)));
                         break;
                 }
             } else if (value.length() == DAY || value.length() == DAYONE) {
@@ -131,7 +131,7 @@ public class DateQueryBuilder implements IQueryBuilder {
                         break;
                     default:
                         query = QueryBuilders
-                                .range(range -> range.field(field).gte(JsonData.of(dayTime)).lte(JsonData.of(nextDayTime)));
+                                .range(range -> range.field(field).gte(JsonData.of(dayTime)).lt(JsonData.of(nextDayTime)));
                         break;
                 }
             } else {

+ 10 - 4
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/NestedPersonQueryBuilder.java

@@ -16,10 +16,16 @@ public class NestedPersonQueryBuilder implements IQueryBuilder{
 
     @Override
     public Query creteQuery() throws ParseException {
-        String str = "*";
-        String s = str.concat(value).concat("*");
-        Query query =  QueryBuilders.wildcard(i -> i.field(field).value(s));
-        Query nestedQuery = QueryBuilders.nested(z -> z.path(path).query(query));
+        Query query = null;
+        if (operator.equals("=")) {
+            String str = "*";
+            String s = str.concat(value).concat("*");
+            query = QueryBuilders.wildcard(i -> i.field(field).value(s));
+        } else {
+            query = QueryBuilders.term(i -> i.field(field).value(value));
+        }
+        Query finalQuery = query;
+        Query nestedQuery = QueryBuilders.nested(z -> z.path(path).query(finalQuery));
         return nestedQuery;
     }
 

+ 14 - 6
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/NestedQueryBuilder.java

@@ -13,15 +13,23 @@ public class NestedQueryBuilder implements IQueryBuilder {
 
     @Override
     public Query creteQuery() {
-        String str = "*";
-        String s = str.concat(value).concat("*");
-        Query query =  QueryBuilders.wildcard(i -> i.field(field).value(s));
-        Query nestedQuery = QueryBuilders.nested(z -> z.path(path).query(query));
+        Query nestedQuery = null;
+        if (operator.equals("=")) {
+            String str = "*";
+            String s = str.concat(value).concat("*");
+            Query query =  QueryBuilders.wildcard(i -> i.field(field).value(s));
+            nestedQuery = QueryBuilders.nested(z -> z.path(path).query(query));
+        } else {
+            Query query = QueryBuilders.term(i -> i.field(field).value(value));
+            nestedQuery = QueryBuilders.nested(z -> z.path(path).query(query));
+        }
         Query childQuery = null;
         if (path.equals("merge_applicant")) {
-            childQuery = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(nestedQuery));
+            Query finalNestedQuery = nestedQuery;
+            childQuery = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(finalNestedQuery));
         } else {
-            childQuery = QueryBuilders.hasChild(i -> i.type(path).query(nestedQuery));
+            Query finalNestedQuery1 = nestedQuery;
+            childQuery = QueryBuilders.hasChild(i -> i.type(path).query(finalNestedQuery1));
         }
         return childQuery;
     }

+ 60 - 0
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/TermOrWildcardQueryBuilder.java

@@ -0,0 +1,60 @@
+package cn.cslg.pas.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class TermOrWildcardQueryBuilder implements IQueryBuilder{
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        Query query = null;
+        if (operator.equals("=")) {
+            String str = "*";
+            String s = str.concat(value).concat("*");
+            query =  QueryBuilders.wildcard(i -> i.field(field).value(s));
+        } else {
+            query = QueryBuilders.term(i -> i.field(field).value(value));
+        }
+        return query;
+    }
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getOperator() {
+        return operator;
+    }
+
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+}

+ 6 - 6
src/main/java/cn/cslg/pas/factorys/EsCountAnalyseBuilderFactory/DateCountAnalyssBuilder.java

@@ -40,7 +40,7 @@ public class DateCountAnalyssBuilder implements IEsCountAnalysisBuilder {
             Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
             aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
                     .field(field).format("yyyy")
-                    .calendarInterval(CalendarInterval.Year).build())
+                    .calendarInterval(CalendarInterval.Year).timeZone("+08:00").build())
                     .aggregations(new HashMap() {{
                         put("filter_agg", filter);
                     }}).build();
@@ -167,9 +167,9 @@ public class DateCountAnalyssBuilder implements IEsCountAnalysisBuilder {
             aggregation = AggregationBuilders.dateRange(i -> i.field(field).format("yyyy-MM").ranges(rangeExpressions));
         } else if (StringUtils.isNotEmpty(format) && CollectionUtils.isEmpty(values)) {
             if (format.equals("年")) {
-                aggregation = AggregationBuilders.dateHistogram(i -> i.field(field).format("yyyy").calendarInterval(CalendarInterval.Year));
+                aggregation = AggregationBuilders.dateHistogram(i -> i.field(field).format("yyyy").calendarInterval(CalendarInterval.Year).timeZone("+08:00"));
             } else if (format.equals("半年")) {
-                Aggregation halfYearAgg = AggregationBuilders.dateHistogram(i -> i.field(field).format("yyyy-MM").calendarInterval(CalendarInterval.Month));
+                Aggregation halfYearAgg = AggregationBuilders.dateHistogram(i -> i.field(field).format("yyyy-MM").calendarInterval(CalendarInterval.Month).timeZone("+08:00"));
                 aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
                         .field(field).format("yyyy")
                         .calendarInterval(CalendarInterval.Year).build())
@@ -177,12 +177,12 @@ public class DateCountAnalyssBuilder implements IEsCountAnalysisBuilder {
                             put("halfYearAgg", halfYearAgg);
                         }}).build();
             } else if (format.equals("季")) {
-                aggregation = AggregationBuilders.dateHistogram(i -> i.field(field).format("yyyy-MM").calendarInterval(CalendarInterval.Quarter));
+                aggregation = AggregationBuilders.dateHistogram(i -> i.field(field).format("yyyy-MM").calendarInterval(CalendarInterval.Quarter).timeZone("+08:00"));
             } else if (format.equals("月")) {
-                aggregation = AggregationBuilders.dateHistogram(i -> i.field(field).format("yyyy-MM").calendarInterval(CalendarInterval.Month));
+                aggregation = AggregationBuilders.dateHistogram(i -> i.field(field).format("yyyy-MM").calendarInterval(CalendarInterval.Month).timeZone("+08:00"));
             }
         } else {
-            aggregation = AggregationBuilders.dateHistogram(i -> i.field(field).format("yyyy").calendarInterval(CalendarInterval.Year));
+            aggregation = AggregationBuilders.dateHistogram(i -> i.field(field).format("yyyy").calendarInterval(CalendarInterval.Year).timeZone("+08:00"));
 
         }
         return aggregation;

+ 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);
+    }
+
+}

+ 4 - 1
src/main/java/cn/cslg/pas/service/business/MergePersonService.java

@@ -641,6 +641,7 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
      */
     public Records getMergePerson(GetAllPersonVO vo) throws Exception {
         Integer projectId = vo.getProjectId();
+        Integer taskId = vo.getTaskId();
         Long pageNum = vo.getPageNum();
         Long pageSize = vo.getPageSize();
         Integer type = vo.getType();
@@ -661,6 +662,7 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent");
+        Query mustQ = QueryBuilders.hasChild(i -> i.type("project").query(j -> j.term(n -> n.field("project_id").value(projectId))));
         if (!CollectionUtils.isEmpty(conditionList)) {
             for (String name : conditionList) {
                 List<Query> queries = new ArrayList<>();
@@ -687,7 +689,8 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
                     Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
                     queries.add(childQ);
                 }
-                Query bool = QueryBuilders.bool(i -> i.should(queries));
+                Query bool = QueryBuilders.bool(i -> i.must(mustQ).should(queries));
+                builder.size(99999);
                 builder.query(bool);
                 //分页
 //        if (pageNum > 0 && pageSize > 0) {

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

@@ -85,7 +85,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);
@@ -97,7 +97,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

@@ -628,7 +628,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();
+            }
         }
     }
 

+ 2 - 2
src/main/resources/jsons/patent.json

@@ -326,7 +326,7 @@
     "value": "agency",
     "field": "AGN",
     "esField": "agency.key",
-    "esClass": "wildcardQueryBuilder",
+    "esClass": "termOrWildcardQueryBuilder",
     "ifSearch": "true",
     "ifGroup": "true",
     "ifShow": "true",
@@ -341,7 +341,7 @@
     "value": "agent",
     "field": "AG",
     "esField": "agent.key",
-    "esClass": "wildcardQueryBuilder",
+    "esClass": "termOrWildcardQueryBuilder",
     "ifSearch": "true",
     "ifGroup": "true",
     "ifShow": "true",