Jelajahi Sumber

分配任务

lwhhszx 2 tahun lalu
induk
melakukan
7284ad6a46

+ 17 - 0
src/main/java/cn/cslg/pas/common/dto/business/MarkTaskDTO.java

@@ -0,0 +1,17 @@
+package cn.cslg.pas.common.dto.business;
+
+import cn.cslg.pas.common.model.request.StringRequest;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class MarkTaskDTO {
+private String name;
+private Date deadLine;
+private String description;
+private List<PersonAssignedDTO> personAssignedDTOList;
+private StringRequest stringRequest;
+private Integer taskType;
+}

+ 11 - 0
src/main/java/cn/cslg/pas/common/dto/business/PersonAssignedDTO.java

@@ -0,0 +1,11 @@
+package cn.cslg.pas.common.dto.business;
+
+import lombok.Data;
+
+import java.util.List;
+@Data
+public class PersonAssignedDTO {
+    private String personId;
+    private Integer patentNum;
+    private List<String> patentNos;
+}

+ 0 - 1
src/main/java/cn/cslg/pas/common/model/request/QueryRequest.java

@@ -18,5 +18,4 @@ public class QueryRequest {
     private List<OrderDTO> orderDTOList;
     private Integer projectId;
     private List<EsCustomFieldValueDTO> customFields;
-
 }

+ 5 - 0
src/main/java/cn/cslg/pas/controller/ProjectTaskController.java

@@ -46,6 +46,7 @@ public class ProjectTaskController {
         return Response.success(id);
     }
 
+
     @Operation(summary = "添加任务")
     @PostMapping("/addTask")
     public Response addTask(@RequestBody ProjectTaskDTO projectTaskDTO) throws Exception {
@@ -53,6 +54,7 @@ public class ProjectTaskController {
         return Response.success(id);
     }
 
+
     @Operation(summary = "添加任务处理结果")
     @PostMapping("/addTaskAuditResult")
     public Response addTaskAuditResult(@RequestBody TaskHandleResultDTO taskHandleResultDTO) throws Exception {
@@ -60,6 +62,7 @@ public class ProjectTaskController {
         return Response.success(id);
     }
 
+
     @Operation(summary = "查询任务处理结果")
     @GetMapping("/getTaskHandleResult")
     public Response getTaskHandleResult(Integer taskId) throws IOException {
@@ -75,6 +78,7 @@ public class ProjectTaskController {
         return Response.success(records);
     }
 
+
     @Operation(summary = "查询审核历史")
     @GetMapping("/queryAuditHistory")
     public Response queryAuditHistory(Integer taskId) throws IOException {
@@ -91,6 +95,7 @@ public class ProjectTaskController {
         return Response.success();
     }
 
+
     @Operation(summary = "更改任务状态:0完成,1取消,2缺少资料")
     @GetMapping("/updateTaskStatus")
     public Response updateTaskStatus(Integer taskId, Integer type){

+ 2 - 0
src/main/java/cn/cslg/pas/domain/business/CompareLiterature.java

@@ -21,6 +21,8 @@ import org.joda.time.DateTime;
 public class CompareLiterature extends BaseEntity<CompareLiterature> {
     @TableField(value = "project_id")
     private Integer projectId;
+    @TableField(value = "project_task_id")
+    private Integer projectTaskId;
     @TableField(value = "literature_no")
     private String literatureNo;
     @TableField(value = "remark")

+ 1 - 1
src/main/java/cn/cslg/pas/domain/es/Patent.java

@@ -210,7 +210,7 @@ public class Patent {
      * pct进入日期
      */
     @JsonProperty("pctenterdate")
-    private Integer pctEnterDate;
+    private Date pctEnterDate;
 
     /**
      * pct公开日

+ 71 - 1
src/main/java/cn/cslg/pas/service/business/ProjectTaskService.java

@@ -7,14 +7,17 @@ import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.cronModel.SystemFile;
 import cn.cslg.pas.common.model.request.GroupRequest;
 import cn.cslg.pas.common.model.request.QueryRequest;
+import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.vo.business.*;
 import cn.cslg.pas.domain.business.*;
+import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.exception.UnLoginException;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.factorys.businessFactory.Business;
 import cn.cslg.pas.mapper.ProjectTaskMapper;
+import cn.cslg.pas.service.business.es.EsPatentService;
 import cn.cslg.pas.service.common.FileManagerService;
 import cn.cslg.pas.service.permissions.PermissionService;
 import cn.cslg.pas.service.query.FormatQueryService;
@@ -32,6 +35,7 @@ import java.util.stream.Collectors;
 
 /**
  * 专利挖掘任务模块
+ *
  * @Author xiexiang
  * @Date 2023/11/21
  */
@@ -83,6 +87,8 @@ public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTa
     @Autowired
     private ReportProjectService reportProjectService;
 
+    @Autowired
+    private EsPatentService esPatentService;
 
     /**
      * 项目开卷审核任务
@@ -179,7 +185,7 @@ public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTa
             assoTaskFileService.addTaskFile(assoTaskFileDTO);
         }
         //根据新增的审核任务的lastTaskId,将上一级任务状态改为审核中
-        if (projectTask.getLastTaskId() != null) {
+        if (projectTask.getLastTaskId() != null && projectTask.getType().equals(5)) {
             LambdaQueryWrapper<ProjectTask> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.eq(ProjectTask::getId, projectTask.getLastTaskId());
             List<ProjectTask> projectTasks = this.list(queryWrapper);
@@ -772,4 +778,68 @@ public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTa
             throw new XiaoShiException("projectTask为空");
         }
     }
+
+
+    private void addMarkTask(MarkTaskDTO markTaskDTO) throws Exception {
+        StringRequest stringRequest = markTaskDTO.getStringRequest();
+        //获取人员专利
+        List<PersonAssignedDTO> personAssignedDTOList = new ArrayList<>();
+        //过滤出已经添加的专利
+        List<String> patentNos = new ArrayList<>();
+        List<Integer> nums = new ArrayList<>();
+        personAssignedDTOList.forEach(item -> {
+            if (item.getPatentNos() == null || item.getPatentNos().size() == 0) {
+                patentNos.addAll(item.getPatentNos());
+            } else {
+                if (item.getPatentNum() != null) {
+                    nums.add(item.getPatentNum());
+                }
+            }
+        });
+        Integer current = 0;
+        for (PersonAssignedDTO item : personAssignedDTOList) {
+            List<String> addPatentNos =new ArrayList<>();
+            //创建任务
+            ProjectTaskDTO projectTaskDTO = new ProjectTaskDTO();
+           Integer taskId= this.addTask(projectTaskDTO);
+            //根据检索式和已经添加的专利以及位置获得专利
+            if (item.getPatentNos() == null || item.getPatentNos().size() == 0) {
+                Integer num = nums.remove(0);
+                stringRequest.setCurrent(Long.parseLong(current.toString()));
+                stringRequest.setSize(Long.parseLong(num.toString()));
+                current += num;
+                List<Patent> patentList = esPatentService.getPatentsWithNotNo(stringRequest, patentNos);
+                 addPatentNos =patentList.stream().map(Patent::getPatentNo).collect(Collectors.toList());
+
+            }
+            else {
+                addPatentNos=item.getPatentNos();
+            }
+            //添加专利
+            this.addCompareLiteratureByNos(addPatentNos,taskId);
+        }
+    }
+
+    private void addAssignTask(MarkTaskDTO markTaskDTO) {
+        //获取人员专利
+        //过滤出已经添加的专利
+        //根据检索式和已经添加的专利,以及自定义栏位过滤和位置获得专利
+        //创建任务
+        //添加专利
+    }
+
+
+    private void addCompareLiteratureByNos(List<String> patentNos, Integer taskId) {
+        List<CompareLiterature> compareLiteratures = new ArrayList<>();
+        if (patentNos == null || patentNos.size() == 0) {
+            return;
+        } else {
+            patentNos.forEach(item -> {
+                CompareLiterature compareLiterature = new CompareLiterature();
+                compareLiterature.setLiteratureNo(item);
+                compareLiterature.setName(item);
+                compareLiterature.setProjectTaskId(taskId);
+            });
+        }
+    }
 }

+ 132 - 33
src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java

@@ -261,46 +261,75 @@ public class EsPatentService {
      * @return
      */
     public List<PatentPageMessageVO> getPatentPageMessage(QueryRequest queryRequest) throws Exception {
-        List<PatentPageMessageVO> patentPageMessageVOS= new ArrayList<>();
-        PatentDTO dto = new PatentDTO();
-        String searchCondition = "";
-        Integer projectId = queryRequest.getProjectId();
+        List<PatentPageMessageVO> patentPageMessageVOS = new ArrayList<>();
+
         Long current = queryRequest.getCurrent();
         Long size = queryRequest.getSize();
-
-        //判断表达式
-        if (queryRequest instanceof StringRequest) {
-            searchCondition = ((StringRequest) queryRequest).getSearchQuery();
-        } else if (queryRequest instanceof MapRequest) {
-            Map<String, Object> map = ((MapRequest) queryRequest).getSearchQuery();
-            StringBuilder stringBuilder = new StringBuilder();
-            for (String key : map.keySet()) {
-                Object value = map.get(key);
-                if (!"".contentEquals(stringBuilder)) {
-                    stringBuilder = stringBuilder.append(" AND ").append(key).append("=").append(value);
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        Query q = this.getQuery(queryRequest);
+        //4. 返回数据
+        builder.query(q);
+        //排序
+        List<OrderDTO> dtoList = queryRequest.getOrderDTOList();
+        if (!CollectionUtils.isEmpty(dtoList)) {
+            for (OrderDTO orderDTO : dtoList) {
+                if (orderDTO.getOrderType().equals(IfConstant.NO)) {
+                    builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                            .field(fieldSortBuilder -> fieldSortBuilder
+                                    .field(orderDTO.getOrderBy()).order(SortOrder.Asc)));
                 } else {
-                    stringBuilder = stringBuilder.append(key).append("=").append(value);
+                    builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                            .field(fieldSortBuilder -> fieldSortBuilder
+                                    .field(orderDTO.getOrderBy()).order(SortOrder.Desc)));
                 }
             }
-            searchCondition = stringBuilder.toString();
+        } else {
+            builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                    .field(fieldSortBuilder -> fieldSortBuilder
+                            .field("patent_no.keyword").order(SortOrder.Desc)));
         }
-        if (projectId != null) {
-            if (searchCondition != null && !"".equals(searchCondition.trim())) {
-                searchCondition = "projectId = " + projectId + " AND " + searchCondition;
-            } else {
-                searchCondition = "projectId = " + projectId;
-            }
+        //分页
+        if (current > 0 && size > 0) {
+            builder.from(current.intValue()).size(size.intValue());
+        }
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        List<Hit<Patent>> hits = response.hits().hits();
+        for (Hit<Patent> hit : hits) {
+            PatentPageMessageVO patentPageMessageVO = new PatentPageMessageVO();
+            patentPageMessageVO.setPatentNo(hit.source().getPatentNo());
+            patentPageMessageVOS.add(patentPageMessageVO);
         }
+        return patentPageMessageVOS;
+    }
+
+
+    /**
+     * 检索上一页下一页信息
+     *
+     * @param queryRequest 检索条件
+     * @return
+     */
+    public List<Patent> getPatentsWithNotNo(QueryRequest queryRequest, List<String> patentNos) throws Exception {
+        List<Patent> patentList = new ArrayList<>();
+        Long current = queryRequest.getCurrent();
+        Long size = queryRequest.getSize();
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent");
-        //1. 解析检索条件
-        treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
-        //格式化检索式
-        //3. 从es中检索数据
-        Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
+        Query q = this.getQuery(queryRequest);
+
+        Query reQuery =null;
+        if(patentNos!=null&&patentNos.size()>0){
+            List<Query> notInQuery = this.getNoNotInQuery(patentNos);
+            reQuery = QueryBuilders.bool(i -> i.must(q).mustNot(notInQuery));
+        }
+        else {
+            reQuery = QueryBuilders.bool(i -> i.must(q));
+        }
         //4. 返回数据
-        builder.query(q);
+        builder.query(reQuery);
         //排序
         List<OrderDTO> dtoList = queryRequest.getOrderDTOList();
         if (!CollectionUtils.isEmpty(dtoList)) {
@@ -320,6 +349,12 @@ public class EsPatentService {
                     .field(fieldSortBuilder -> fieldSortBuilder
                             .field("patent_no.keyword").order(SortOrder.Desc)));
         }
+
+        List<String> reSources = this.rePatentSource();
+        builder.source(sourceOptionsBuilder -> sourceOptionsBuilder
+                .filter(fieldSourceBuilder -> fieldSourceBuilder
+                        .includes(reSources)));
+
         //分页
         if (current > 0 && size > 0) {
             builder.from(current.intValue()).size(size.intValue());
@@ -327,10 +362,74 @@ public class EsPatentService {
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         List<Hit<Patent>> hits = response.hits().hits();
         for (Hit<Patent> hit : hits) {
-     PatentPageMessageVO patentPageMessageVO =new PatentPageMessageVO();
-     patentPageMessageVO.setPatentNo(hit.source().getPatentNo());
-   patentPageMessageVOS.add(patentPageMessageVO);
+            if (hits != null && hits.size() > 0) {
+                Patent patent = hits.get(0).source();
+                patentList.add(patent);
+            }
         }
-        return patentPageMessageVOS;
+        return patentList;
+    }
+
+    public Long getTotalNum(QueryRequest queryRequest) throws Exception {
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        Query q = this.getQuery(queryRequest);
+        //4. 返回数据
+        Query reQuery = QueryBuilders.bool(i -> i.must(q));
+        builder.query(reQuery);
+
+        List<String> reSources = this.rePatentSource();
+        builder.source(sourceOptionsBuilder -> sourceOptionsBuilder
+                .filter(fieldSourceBuilder -> fieldSourceBuilder
+                        .includes(reSources)));
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        return response.hits().total().value();
+    }
+
+
+    public Query getQuery(QueryRequest queryRequest) throws Exception {
+        String searchCondition = "";
+        Integer projectId = queryRequest.getProjectId();
+        //判断表达式
+        if (queryRequest instanceof StringRequest) {
+            searchCondition = ((StringRequest) queryRequest).getSearchQuery();
+        } else if (queryRequest instanceof MapRequest) {
+            Map<String, Object> map = ((MapRequest) queryRequest).getSearchQuery();
+            StringBuilder stringBuilder = new StringBuilder();
+            for (String key : map.keySet()) {
+                Object value = map.get(key);
+                if (!"".contentEquals(stringBuilder)) {
+                    stringBuilder = stringBuilder.append(" AND ").append(key).append("=").append(value);
+                } else {
+                    stringBuilder = stringBuilder.append(key).append("=").append(value);
+                }
+            }
+            searchCondition = stringBuilder.toString();
+        }
+        if (projectId != null) {
+            if (searchCondition != null && !"".equals(searchCondition.trim())) {
+                searchCondition = "projectId = " + projectId + " AND " + searchCondition;
+            } else {
+                searchCondition = "projectId = " + projectId;
+            }
+        }
+
+        //1. 解析检索条件
+        treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
+        //格式化检索式
+        //3. 从es中检索数据
+        Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
+
+        return q;
+    }
+
+    private List<Query> getNoNotInQuery(List<String> patentNos) {
+        List<Query> queryList = new ArrayList<>();
+        for (String patentNo : patentNos) {
+            Query q1 = QueryBuilders.term(t -> t.field("patent_no.keyword").value(patentNo));
+            queryList.add(q1);
+        }
+        return queryList;
     }
 }

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

@@ -428,7 +428,6 @@ public class EsService {
         return list;
     }
 
-
     public Integer updatePatent(Patent patent, String id) {
         UpdateRequest<Patent, Patent> req;
         req = UpdateRequest.of(

+ 41 - 0
src/test/java/cn/cslg/pas/service/EsPatentServiceTests.java

@@ -0,0 +1,41 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.controller.AvoidDesignController;
+import cn.cslg.pas.service.business.AvoidDesignService;
+import cn.cslg.pas.service.business.es.EsPatentService;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/12/5
+ */
+@SpringBootTest
+public class EsPatentServiceTests {
+    @Autowired
+    private EsPatentService  esPatentService;
+
+
+    @Test
+    public void test() throws Exception {
+
+    }
+
+    @Test
+    public void testUpdate() {
+
+    }
+
+    @Test
+    public void getPatentsByNo() throws Exception {
+        List<String> patentNos =new ArrayList<>();
+        patentNos.add("CN201910069334.7");
+        patentNos.add("CN201110286649.0");
+        esPatentService.getPatentsByNo(patentNos);
+    }
+}