Ver código fonte

标注库功能的代码

chendayu 2 anos atrás
pai
commit
67c3b123da

+ 5 - 1
PAS/src/main/java/cn/cslg/pas/common/model/dto/GetPatentStarPartDTO.java

@@ -15,7 +15,7 @@ import java.io.Serializable;
 @Data
 public class GetPatentStarPartDTO extends PageDTO2 implements Serializable {
     /**
-     * 获取专利项(1.权要 2.说明书文本 3.说明书pdf 4.摘要附图 5.同族专利)
+     * 要检索的专利项(1.权要 2.说明书文本 3.说明书pdf 4.摘要附图 5.同族专利)
      */
     private Integer patentCell;
     /**
@@ -26,5 +26,9 @@ public class GetPatentStarPartDTO extends PageDTO2 implements Serializable {
      * 申请号
      */
     private String appNo;
+    /**
+     * 原始申请号
+     */
+    private String rowAppNo;
 
 }

+ 13 - 0
PAS/src/main/java/cn/cslg/pas/domain/ScratchWords.java

@@ -98,4 +98,17 @@ public class ScratchWords extends BaseEntity<ScratchWords> {
      */
     @TableField("range_type")
     private String rangeType;
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+
+    /**
+     * 创建人名称
+     */
+    @TableField(exist = false)
+    private String createName;
+
 }

+ 3 - 1
PAS/src/main/java/cn/cslg/pas/mapper/ProjectMapper.java

@@ -22,7 +22,9 @@ import java.util.List;
 @Repository
 public interface ProjectMapper extends BaseMapper<Project> {
 
-    IPage<Project>  getPageList(Page<Project> page, ProjectVO params);
+    IPage<Project> getPageList(Page<Project> page, ProjectVO params);
+
+    List<Project> getProjects(ProjectVO params);
 
     List<Project> getListForCount(@Param("params") ProjectVO params);
 

+ 9 - 1
PAS/src/main/java/cn/cslg/pas/mapper/ScratchWordsMapper.java

@@ -1,7 +1,11 @@
 package cn.cslg.pas.mapper;
 
+import cn.cslg.pas.common.model.dto.QueryGroupScratchsDTO;
+import cn.cslg.pas.common.model.dto.QueryScratchsDTO;
+import cn.cslg.pas.common.model.vo.ScratchWordVO;
 import cn.cslg.pas.common.model.vo.ScratchWordsVO;
 import cn.cslg.pas.domain.AdminUser;
+import cn.cslg.pas.domain.GroupName;
 import cn.cslg.pas.domain.ScratchWords;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -17,7 +21,6 @@ import java.util.List;
  */
 public interface ScratchWordsMapper extends BaseMapper<ScratchWords> {
     /**
-     *
      * @param patentNo
      * @param tenantId
      * @param createId
@@ -26,4 +29,9 @@ public interface ScratchWordsMapper extends BaseMapper<ScratchWords> {
      * @return
      */
     List<ScratchWordsVO> querySW(String patentNo, Integer tenantId, Integer createId, Integer projectId, Integer reportId);
+
+    List<ScratchWordVO> queryScratchWords(QueryScratchsDTO queryScratchsDTO, Integer tenantId, Integer personId, List<Integer> projectIds, List<Integer> reportIds);
+
+    List<GroupName> queryGroupScratchs(QueryGroupScratchsDTO queryGroupScratchsDTO, Integer tenantId, Integer personId, List<Integer> projectIds, List<Integer> reportIds);
+
 }

+ 208 - 17
PAS/src/main/java/cn/cslg/pas/service/ScratchWordsService.java

@@ -2,26 +2,38 @@ package cn.cslg.pas.service;
 
 
 import cn.cslg.pas.common.model.PersonnelVO;
-import cn.cslg.pas.common.model.dto.SWQueryDTO;
-import cn.cslg.pas.common.model.dto.ScratchWordsDTO;
-import cn.cslg.pas.common.model.dto.ScratchWordsUpdateDTO;
+import cn.cslg.pas.common.model.dto.*;
+import cn.cslg.pas.common.model.vo.PageVO;
+import cn.cslg.pas.common.model.vo.ProjectVO;
+import cn.cslg.pas.common.model.vo.ScratchWordVO;
 import cn.cslg.pas.common.model.vo.ScratchWordsVO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
-import cn.cslg.pas.domain.ScratchWords;
+import cn.cslg.pas.domain.*;
 
 import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.ProjectMapper;
 import cn.cslg.pas.mapper.ScratchWordsMapper;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.IPage;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
@@ -32,21 +44,27 @@ import java.util.List;
  * @author 李仁杰
  * @since 2023-06-13
  */
+@Slf4j
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, ScratchWords> {
     private final ScratchWordsMapper scratchWordsMapper;
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
+    private final ProjectService projectService;
+    private final ProjectMapper projectMapper;
+    private final OutInterfaceService outInterfaceService;
+    private final PatentService patentService;
 
     /**
      * 新增划词高亮
+     *
      * @param scratchWordsDTO
      */
-    public void add(ScratchWordsDTO scratchWordsDTO){
+    public void add(ScratchWordsDTO scratchWordsDTO) {
         //判断传入列表不为空
-        if(scratchWordsDTO != null){
-            if(scratchWordsDTO.getCreateFrom() == null){
+        if (scratchWordsDTO != null) {
+            if (scratchWordsDTO.getCreateFrom() == null) {
                 scratchWordsDTO.setCreateFrom(0);
             }
             ScratchWords scratchWords = new ScratchWords();
@@ -66,11 +84,12 @@ public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, Scratch
 
     /**
      * 更新划词高亮
+     *
      * @param scratchWordsUpdateDTO
      */
-    public void update(ScratchWordsUpdateDTO scratchWordsUpdateDTO){
+    public void update(ScratchWordsUpdateDTO scratchWordsUpdateDTO) {
         //判断传入列表不为空
-        if(scratchWordsUpdateDTO != null){
+        if (scratchWordsUpdateDTO != null) {
             ScratchWords scratchWords = this.getById(scratchWordsUpdateDTO.getId());
             BeanUtils.copyProperties(scratchWordsUpdateDTO, scratchWords);
             scratchWords.updateById();
@@ -81,36 +100,37 @@ public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, Scratch
 
     /**
      * 查询划词高亮
+     *
      * @param swQueryDTO
      * @return
      */
-    public List<ScratchWordsVO> queryAll(SWQueryDTO swQueryDTO){
-        if(swQueryDTO.getPatentNo() != null) {
+    public List<ScratchWordsVO> queryAll(SWQueryDTO swQueryDTO) {
+        if (swQueryDTO.getPatentNo() != null) {
             //获取当前登陆人信息
             PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
             Integer tenantId = personnelVO.getTenantId();
             Integer createId = personnelVO.getId();
             //创建来源(默认0/专题库1/报告2)
-            if(swQueryDTO.getCreateFrom().equals(1)){
+            if (swQueryDTO.getCreateFrom().equals(1)) {
                 Integer projectId = swQueryDTO.getId();
                 Integer reportId = -1;
                 List<ScratchWordsVO> scratchWords = scratchWordsMapper.querySW(swQueryDTO.getPatentNo(), tenantId, createId, projectId, reportId);
                 return scratchWords;
             }
             //创建来源(默认0/专题库1/报告2)
-           else if(swQueryDTO.getCreateFrom().equals(2)){
+            else if (swQueryDTO.getCreateFrom().equals(2)) {
                 Integer reportId = swQueryDTO.getId();
                 Integer projectId = -1;
                 List<ScratchWordsVO> scratchWords = scratchWordsMapper.querySW(swQueryDTO.getPatentNo(), tenantId, createId, projectId, reportId);
                 return scratchWords;
             }
             //创建来源(默认0/专题库1/报告2)
-           else if(swQueryDTO.getCreateFrom().equals(0)){
+            else if (swQueryDTO.getCreateFrom().equals(0)) {
                 Integer reportId = -1;
                 Integer projectId = -1;
                 List<ScratchWordsVO> scratchWords = scratchWordsMapper.querySW(swQueryDTO.getPatentNo(), tenantId, createId, projectId, reportId);
                 return scratchWords;
-            }else {
+            } else {
                 throw new XiaoShiException("暂无该情况");
             }
         } else {
@@ -118,12 +138,183 @@ public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, Scratch
         }
     }
 
+
+    public PageVO queryScratchs(QueryScratchsDTO queryScratchsDTO) throws IOException {
+        log.info("开始处理【查询标注清单】的业务,参数为:{}", queryScratchsDTO);
+
+        PageVO pageVO = new PageVO()
+                .setCurrent(queryScratchsDTO.getCurrent())
+                .setSize(queryScratchsDTO.getSize());
+
+        //若根据创建人名称模糊查询,调用权限系统根据人员名称获得人员ids并装载到参数中
+        if (queryScratchsDTO.getName() != null && !queryScratchsDTO.getName().equals("")) {
+            String res = outInterfaceService.getPersonIdByNamePCS(queryScratchsDTO.getName());
+            List<Integer> personIds = JSON.parseArray(res, Integer.class);
+            if (personIds.size() == 0) {
+                personIds.add(-1);
+            }
+            queryScratchsDTO.setPersonIds(personIds);
+        }
+
+        //获取登陆人id、所属租户id、token
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        Integer personId = personnelVO.getId();
+        Integer tenantId = personnelVO.getTenantId();
+        String token = "token=" + personnelVO.getToken();
+
+        //获取当前登陆人有权查看的专题库projectIds
+        ProjectVO params = new ProjectVO();
+        if (personnelVO.getRoleType() == null || personnelVO.getRoleType() != 1) {  //代码控制不同类型的角色查询权限
+            params.setPersonnelId(personId);
+            if (personnelVO.getRoleType() != null && personnelVO.getRoleType() == 2) {
+                params.setTenantId(personnelVO.getTenantId());
+            }
+        }
+        List<Project> projects = projectMapper.getProjects(params);
+        List<Integer> projectIds = new ArrayList<>();
+        if (projects == null || projects.size() == 0) {
+            projectIds.add(-1);
+        } else {
+            projectIds = projects.stream().map(Project::getId).collect(Collectors.toList());
+        }
+
+        //获取当前登陆人有权查看的报告reportIds
+        String res = outInterfaceService.getReportsFromRMS(token);
+        JSONObject jsonObject = JSONObject.parseObject(res);
+        List<Integer> reportIds = JSON.parseArray(jsonObject.get("data").toString(), Integer.class);
+
+
+        //开始分页(分组)查询标注表标注清单
+        if (queryScratchsDTO.getCurrent() != null && queryScratchsDTO.getSize() != null) {
+            PageHelper.startPage(queryScratchsDTO.getCurrent(), queryScratchsDTO.getSize());
+        }
+//        if (queryScratchsDTO.getGrouping() == null || queryScratchsDTO.getGrouping().equals("")) {  //不分组
+        List<ScratchWordVO> scratchWords = scratchWordsMapper.queryScratchWords(queryScratchsDTO, tenantId, personId, projectIds, reportIds);
+        PageInfo<ScratchWordVO> pageInfo = new PageInfo<>(scratchWords);
+        if (scratchWords.size() > 0) {
+            //装载创建人名称
+            List<Integer> createPersonIds = scratchWords.stream().map(ScratchWordVO::getCreateId).collect(Collectors.toList());
+            res = outInterfaceService.getPersonnelByIdsFromPCS(createPersonIds);
+            jsonObject = JSONObject.parseObject(res);
+            List<Personnel> personnels = JSON.parseArray(jsonObject.get("data").toString(), Personnel.class);
+            scratchWords.forEach(scratchWord -> {
+                personnels.forEach(personnel -> {
+                    if (personnel.getId().equals(scratchWord.getCreateId())) {
+                        scratchWord.setName(personnel.getPersonnelName());
+                    }
+                });
+            });
+            //装载专利id和专利标题
+            List<String> patentNos = scratchWords.stream().map(ScratchWordVO::getPatentNo).collect(Collectors.toList());
+            List<Patent> patents = patentService.list(new LambdaQueryWrapper<Patent>().in(Patent::getPatentNo, patentNos).or().in(Patent::getPublicNo, patentNos));
+            scratchWords.forEach(scratchWord -> {
+                patents.forEach(patent -> {
+                    if (patent.getPatentNo().equals(scratchWord.getPatentNo()) || patent.getPublicNo().equals(scratchWord.getPatentNo())) {
+                        scratchWord.setPatentId(patent.getId());
+                        scratchWord.setPatentTitle(patent.getName());
+                    }
+                });
+            });
+        }
+        pageVO.setRecords(scratchWords)
+                .setTotal((int) pageInfo.getTotal());
+//        } else {  //分组
+//            List<GroupName> groupNames = scratchWordsMapper.queryGroupScratchs(queryScratchsDTO, tenantId, personId, projectIds, reportIds);
+//            PageInfo<GroupName> pageInfo = new PageInfo<>(groupNames);
+//            if (groupNames.size() > 0) {
+//                //装载创建人名称
+//                List<Integer> createPersonIds = groupNames.stream().map(GroupName::getCreateId).collect(Collectors.toList());
+//                res = outInterfaceService.getPersonnelByIdsFromPCS(createPersonIds);
+//                jsonObject = JSONObject.parseObject(res);
+//                List<Personnel> personnels = JSON.parseArray(jsonObject.get("data").toString(), Personnel.class);
+//                groupNames.forEach(groupName -> {
+//                    personnels.forEach(personnel -> {
+//                        if (personnel.getId().equals(groupName.getCreateId())) {
+//                            groupName.setName(personnel.getPersonnelName());
+//                        }
+//                    });
+//                });
+//            }
+//            pageVO.setRecords(groupNames)
+//                    .setTotal((int) pageInfo.getTotal());
+//        }
+
+        return pageVO;
+    }
+
+    public PageVO queryGroupScratchs(QueryGroupScratchsDTO queryGroupScratchsDTO) throws IOException {
+        log.info("开始处理【分页分组查询标注清单】的业务,参数为:{}", queryGroupScratchsDTO);
+
+        //调用权限系统根据人员名称获得人员ids
+        if (queryGroupScratchsDTO.getName() != null && !queryGroupScratchsDTO.getName().equals("")) {
+            String res = outInterfaceService.getPersonIdByNamePCS(queryGroupScratchsDTO.getName());
+            //JSONObject jsonObject = JSONObject.parseObject(res);
+            List<Integer> personIds = JSON.parseArray(res, Integer.class);
+            if (personIds.size() == 0) {
+                personIds.add(-1);
+            }
+            queryGroupScratchsDTO.setPersonIds(personIds);
+        }
+
+        //获取登陆人id和所属租户id
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        Integer personId = personnelVO.getId();
+        Integer tenantId = personnelVO.getTenantId();
+        String token = "token=" + personnelVO.getToken();
+
+        //查询本系统的专题库表"os_thematic",获取当前登陆人有权查看的专题库projectIds
+        ProjectVO params = new ProjectVO();
+        //代码控制不同类型的角色查询权限
+        if (personnelVO.getRoleType() == null || personnelVO.getRoleType() != 1) {
+            params.setPersonnelId(personId);
+            if (personnelVO.getRoleType() != null && personnelVO.getRoleType() == 2) {
+                params.setTenantId(personnelVO.getTenantId());
+            }
+        }
+        List<Project> projects = projectMapper.getProjects(params);
+        List<Integer> projectIds = projects.stream().map(Project::getId).collect(Collectors.toList());
+        //查询报告系统,获取当前登陆人有权查看的报告reportIds
+        String res = outInterfaceService.getReportsFromRMS(token);
+        JSONObject jsonObject = JSONObject.parseObject(res);
+        List<Integer> reportIds = JSON.parseArray(jsonObject.get("data").toString(), Integer.class);
+
+        //开始查询标注表标注清单
+        if (queryGroupScratchsDTO.getCurrent() != null) {
+            PageHelper.startPage(queryGroupScratchsDTO.getCurrent(), queryGroupScratchsDTO.getSize());
+        }
+        List<GroupName> groupNames = scratchWordsMapper.queryGroupScratchs(queryGroupScratchsDTO, tenantId, personId, projectIds, reportIds);
+        PageInfo<GroupName> pageInfo = new PageInfo<>(groupNames);
+
+        if (groupNames.size() > 0) {
+            //装载创建人名称
+            List<Integer> createPersonIds = groupNames.stream().map(GroupName::getCreateId).collect(Collectors.toList());
+            res = outInterfaceService.getPersonnelByIdsFromPCS(createPersonIds);
+            jsonObject = JSONObject.parseObject(res);
+            List<Personnel> personnels = JSON.parseArray(jsonObject.get("data").toString(), Personnel.class);
+            groupNames.forEach(groupName -> {
+                personnels.forEach(personnel -> {
+                    if (personnel.getId().equals(groupName.getCreateId())) {
+                        groupName.setName(personnel.getPersonnelName());
+                    }
+                });
+            });
+        }
+        PageVO pageVO = new PageVO()
+                .setRecords(groupNames)
+                .setCurrent(queryGroupScratchsDTO.getCurrent())
+                .setSize(queryGroupScratchsDTO.getSize())
+                .setTotal((int) pageInfo.getTotal());
+        return pageVO;
+
+    }
+
     /**
      * 删除划词高亮
+     *
      * @param ids
      */
-    public void delete(List<Integer> ids){
-        for(int i = 0; i < ids.size(); i++){
+    public void delete(List<Integer> ids) {
+        for (int i = 0; i < ids.size(); i++) {
             LambdaQueryWrapper<ScratchWords> LW = new LambdaQueryWrapper<>();
             LW.eq(ScratchWords::getId, ids.get(i));
             ScratchWords scratchWords = this.getOne(LW);

+ 47 - 75
PAS/src/main/java/cn/cslg/pas/service/getPatentStarPart/GetPatentStarPartService.java

@@ -7,6 +7,7 @@ import cn.cslg.pas.common.model.vo.KeyValueVO;
 import cn.cslg.pas.common.model.vo.PageVO;
 import cn.cslg.pas.common.model.vo.UploadParamsVO;
 import cn.cslg.pas.common.model.vo.outApi.StarPatentVO;
+import cn.cslg.pas.common.utils.ThrowException;
 import cn.cslg.pas.domain.*;
 import cn.cslg.pas.service.outApi.PatentStarApiService;
 import cn.cslg.pas.service.upLoadPatent.ExcutePatentDataStar;
@@ -47,22 +48,35 @@ public class GetPatentStarPartService {
     public PatentDTO getPatentPart(GetPatentStarPartDTO getPatentStarPartDTO) throws IOException, SQLException {
         log.info("开始处理【根据专利号或申请号获取专利指定部分项】的业务,参数为:{}", getPatentStarPartDTO);
 
-        Integer patentCell = getPatentStarPartDTO.getPatentCell();
-        String appNo = getPatentStarPartDTO.getAppNo();
-        String patentNo = getPatentStarPartDTO.getPatentNo();
+        //先根据申请号 appNo 检索出专利,获得原始申请号 rowAppNo
+        PatentStarListDto patentStarListDto = new PatentStarListDto()
+                .setCurrentQuery("AN=" + getPatentStarPartDTO.getAppNo())
+                .setOrderBy("AD")
+                .setOrderByType("DESC")
+                .setPageNum(1)
+                .setRowCount(10)
+                .setDBType("CN");
+        //调用一般接口返回一批专利著录相关数据
+        Map<String, Object> resultMap = patentStarApiService.patentStarSearchApi(patentStarListDto);
+        if (resultMap == null || (Integer) resultMap.get("total") == 0) {
+            ThrowException.throwXiaoShiException("未检索到相关专利");
+        }
+        List<StarPatentVO> starPatents = (List<StarPatentVO>) resultMap.get("records");
+        getPatentStarPartDTO.setRowAppNo(starPatents.get(0).getRowApplicationNo());
+
         PatentDTO patentDTO;
-        if (patentCell == 1) {
-            patentDTO = getParentRight(appNo, patentNo);  //拿权要
-        } else if (patentCell == 2) {
-            patentDTO = getInstructionText(appNo, patentNo);  //拿说明书文本
-        } else if (patentCell == 3) {
-            patentDTO = getInstructionPDF(appNo, patentNo);  //拿说明书pdf
-        } else if (patentCell == 4) {
-            patentDTO = getPatentImage(appNo);  //拿摘要附图
-        } else if (patentCell == 5) {
+        if (getPatentStarPartDTO.getPatentCell() == 1) {
+            patentDTO = getParentRight(getPatentStarPartDTO);  //拿权要
+        } else if (getPatentStarPartDTO.getPatentCell() == 2) {
+            patentDTO = getInstructionText(getPatentStarPartDTO);  //拿说明书文本
+        } else if (getPatentStarPartDTO.getPatentCell() == 3) {
+            patentDTO = getInstructionPDF(getPatentStarPartDTO);  //拿说明书pdf
+        } else if (getPatentStarPartDTO.getPatentCell() == 4) {
+            patentDTO = getPatentImage(getPatentStarPartDTO);  //拿摘要附图
+        } else if (getPatentStarPartDTO.getPatentCell() == 5) {
             patentDTO = getSimpleFamily(getPatentStarPartDTO);  //拿同族专利信息
-        } else if (patentCell == 6) {
-            patentDTO = getAffair(appNo);  //拿法律事务信息
+        } else if (getPatentStarPartDTO.getPatentCell() == 6) {
+            patentDTO = getAffair(getPatentStarPartDTO);  //拿法律事务信息
         } else {
             patentDTO = new PatentDTO();
         }
@@ -70,16 +84,11 @@ public class GetPatentStarPartService {
         return patentDTO;
     }
 
-    /**
-     * 获取专利之星专利的权要
-     *
-     * @param appNo 申请号
-     * @return 返回装载着权要的对象
-     */
-    public PatentDTO getParentRight(String appNo, String patentNo) throws IOException {
+    public PatentDTO getParentRight(GetPatentStarPartDTO getPatentStarPartDTO) throws IOException {
         StarPatentVO starPatentVO = new StarPatentVO()
-                .setPublicNo(patentNo)
-                .setApplicationNo(appNo);
+                .setPublicNo(getPatentStarPartDTO.getPatentNo())
+                .setApplicationNo(getPatentStarPartDTO.getAppNo())
+                .setRowApplicationNo(getPatentStarPartDTO.getRowAppNo());
         UploadParamsVO uploadParamsVO = new UploadParamsVO();
         //调用"获得中国专利全文文本"接口,处理xml格式权要
         excutePatentDataStar.setPatentClaim(starPatentVO, uploadParamsVO, null);
@@ -92,16 +101,11 @@ public class GetPatentStarPartService {
         return patentDTO;
     }
 
-    /**
-     * 获取专利之星专利的说明书文本
-     *
-     * @param appNo 申请号
-     * @return 返回装载着说明书文本的对象
-     */
-    public PatentDTO getInstructionText(String appNo, String patentNo) throws IOException {
+    public PatentDTO getInstructionText(GetPatentStarPartDTO getPatentStarPartDTO) throws IOException {
         StarPatentVO starPatentVO = new StarPatentVO()
-                .setPublicNo(patentNo)
-                .setApplicationNo(appNo);
+                .setPublicNo(getPatentStarPartDTO.getPatentNo())
+                .setApplicationNo(getPatentStarPartDTO.getAppNo())
+                .setRowApplicationNo(getPatentStarPartDTO.getRowAppNo());
         UploadParamsVO uploadParamsVO = new UploadParamsVO();
         //调用"获得中国专利全文文本"接口,处理xml格式说明书文本
         excutePatentDataStar.setPatentInstructionText(starPatentVO, uploadParamsVO, null);
@@ -112,29 +116,18 @@ public class GetPatentStarPartService {
         return patentDTO;
     }
 
-    /**
-     * 获取专利之星专利的说明书pdf
-     *
-     * @param patentNo 专利号(公开号)
-     * @return 返回装载着说明书pdf的对象
-     */
-    public PatentDTO getInstructionPDF(String appNo, String patentNo) throws IOException, SQLException {
-        String applicationNo = appNo + "";
-        if (appNo.contains(".")) {
-            appNo = appNo.substring(0, appNo.lastIndexOf("."));
-        }
-
+    public PatentDTO getInstructionPDF(GetPatentStarPartDTO getPatentStarPartDTO) throws IOException, SQLException {
         ArrayList<PatentInstruction> patentInstructions = new ArrayList<>();
         PatentDTO patentDTO = new PatentDTO();
 
         String pdfUrl = "", pdfUrl1 = "", pdfUrl2 = "";
-        if (patentNo.contains("CN")) {
+        if (getPatentStarPartDTO.getPatentNo().contains("CN")) {
             //调用"获得中国专利pdf"接口,获得公开和授权中的1个或2个url
-            String pdfUrlStr = patentStarApiService.getCnPdfApi(appNo);
+            String pdfUrlStr = patentStarApiService.getCnPdfApi(getPatentStarPartDTO.getRowAppNo());
 
             //若没有取到说明书pdf,则将当前申请号和备注信息存入问题记录表,并返回空对象
             if (pdfUrlStr.equals("")) {
-                excutePatentDataStar.recordQuestionPatent(applicationNo, null, 4);
+                excutePatentDataStar.recordQuestionPatent(getPatentStarPartDTO.getAppNo(), null, 4);
                 return new PatentDTO();
             }
 
@@ -175,11 +168,11 @@ public class GetPatentStarPartService {
 
         } else {
             //根据专利号调用"获得世界专利pdf"接口,获得pdf的url地址
-            pdfUrl = patentStarApiService.getEnPdfApi(patentNo);
+            pdfUrl = patentStarApiService.getEnPdfApi(getPatentStarPartDTO.getPatentNo());
 
             //若没有取到说明书pdf,则将当前申请号和备注信息存入问题记录表,并返回空对象
             if (pdfUrl.equals("") || pdfUrl.equals("{}")) {
-                excutePatentDataStar.recordQuestionPatent(applicationNo, null, 4);
+                excutePatentDataStar.recordQuestionPatent(getPatentStarPartDTO.getAppNo(), null, 4);
                 return new PatentDTO();
             }
 
@@ -196,19 +189,9 @@ public class GetPatentStarPartService {
         return patentDTO;
     }
 
-    /**
-     * 获取专利之星专利的摘要附图
-     *
-     * @param appNo 申请号
-     * @return 返回装载着摘要附图的对象
-     */
-    public PatentDTO getPatentImage(String appNo) {
+    public PatentDTO getPatentImage(GetPatentStarPartDTO getPatentStarPartDTO) {
         //以下 ↓调用的是"获得中国专利摘要附图"接口,获得摘要附图的url地址
-        if (appNo.contains(".")) {
-            appNo = appNo.substring(0, appNo.lastIndexOf("."));
-        }
-
-        String pictureUrl = patentStarApiService.getPictureApi(appNo);
+        String pictureUrl = patentStarApiService.getPictureApi(getPatentStarPartDTO.getRowAppNo());
 
         PatentDTO patentDTO = new PatentDTO();
         ArrayList<PatentImage> patentImages = new ArrayList<>();
@@ -220,15 +203,8 @@ public class GetPatentStarPartService {
         return patentDTO;
     }
 
-    /**
-     * 获取专利之星专利的同族专利
-     *
-     * @param getPatentStarPartDTO 获取专利之星专利指定项DTO类
-     * @return 返回装载着同族专利的对象集合
-     */
     public PatentDTO getSimpleFamily(GetPatentStarPartDTO getPatentStarPartDTO) throws IOException {
         //从DTO中取出公开号、当前页、每页条数
-        String patentNo = getPatentStarPartDTO.getPatentNo();
         Integer current = getPatentStarPartDTO.getCurrent();
         Integer size = getPatentStarPartDTO.getSize();
 
@@ -239,7 +215,7 @@ public class GetPatentStarPartService {
 
         try {
             //1.从同族接口获取同族号单
-            String familyPatentNoStr = patentStarApiService.getFamilyByPubNoApi(patentNo);
+            String familyPatentNoStr = patentStarApiService.getFamilyByPubNoApi(getPatentStarPartDTO.getPatentNo());
             //若接口返回"no data"即没有同族号,则返回空集合同族信息
             if (familyPatentNoStr.equals("no data")) {
                 pageVO.setRecords(new ArrayList<>())
@@ -359,15 +335,11 @@ public class GetPatentStarPartService {
         return patentDTO;
     }
 
-    public PatentDTO getAffair(String appNo) throws IOException {
+    public PatentDTO getAffair(GetPatentStarPartDTO getPatentStarPartDTO) throws IOException {
         PatentDTO patentDTO = new PatentDTO();
-
-        if (appNo.contains(".")) {
-            appNo = appNo.substring(0, appNo.lastIndexOf("."));
-        }
         //以下 ↓装载的是调用"获得中国专利法律状态"接口返回的专利相关数据
         try {
-            String cnLegalApiStr = patentStarApiService.getCnLegalApi(appNo);
+            String cnLegalApiStr = patentStarApiService.getCnLegalApi(getPatentStarPartDTO.getRowAppNo());
             if (!cnLegalApiStr.equals("")) {
                 List<ChinaLeagalStatus> chinaLeagalStatuses = JSON.parseArray(cnLegalApiStr, ChinaLeagalStatus.class);
                 if (chinaLeagalStatuses != null && chinaLeagalStatuses.size() > 0) {

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/service/outApi/PatentStarApiService.java

@@ -470,7 +470,7 @@ public class PatentStarApiService {
                 .build();
         // 创建一个请求对象
         Request request = new Request.Builder().url(url)
-                .addHeader("_appid", "2000041")
+                .addHeader("_appid", appId)
                 .addHeader("_timestamp", currentTimeMillis.toString())
                 .addHeader("_sign", signMd5)
                 .get().build();

+ 58 - 90
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/ExcutePatentDataStar.java

@@ -489,18 +489,10 @@ public class ExcutePatentDataStar implements IExcutePatentData {
             uploadParamsVO.getPatent().setBureau(starPatent.getBureau());
         }
 
-
-        String appNo;
-        if (starPatent.getApplicationNo().contains(".")) {
-            appNo = starPatent.getApplicationNo().substring(0, starPatent.getApplicationNo().lastIndexOf("."));
-        } else {
-            appNo = starPatent.getApplicationNo();
-        }
-
         try {
             //以下 ↓装载的是调用"获得中国专利著录"接口返回的专利相关数据
             if ((starPatent.getPublicNo() != null && starPatent.getPublicNo().contains("CN")) || (starPatent.getPublicNo() == null && starPatent.getPatentNo().contains("CN"))) {
-                String chinaPatentZhuLuStr = patentStarApiService.getCnBibApi(appNo);
+                String chinaPatentZhuLuStr = patentStarApiService.getCnBibApi(starPatent.getRowApplicationNo());
                 if (chinaPatentZhuLuStr != null && !chinaPatentZhuLuStr.trim().equals("") && !chinaPatentZhuLuStr.equals("{}") && !chinaPatentZhuLuStr.contains("请求不合法")) {
                     List<ChinaPatentZhuLu> chinaPatentZhuLus = JSON.parseArray(chinaPatentZhuLuStr, ChinaPatentZhuLu.class);
                     ChinaPatentZhuLu chinaPatentZhuLu = chinaPatentZhuLus.get(0);
@@ -654,7 +646,7 @@ public class ExcutePatentDataStar implements IExcutePatentData {
         try {
             if ((starPatent.getPublicNo() != null && starPatent.getPublicNo().contains("CN")) || (starPatent.getPublicNo() == null && starPatent.getPatentNo().contains("CN"))) {
                 PatentAffair patentAffair = new PatentAffair();
-                String cnLegalApiStr = patentStarApiService.getCnLegalApi(appNo);
+                String cnLegalApiStr = patentStarApiService.getCnLegalApi(starPatent.getRowApplicationNo());
                 if (!cnLegalApiStr.equals("")) {
                     List<ChinaLeagalStatus> chinaLeagalStatuses = JSON.parseArray(cnLegalApiStr, ChinaLeagalStatus.class);
                     if (chinaLeagalStatuses != null && chinaLeagalStatuses.size() > 0) {
@@ -707,26 +699,18 @@ public class ExcutePatentDataStar implements IExcutePatentData {
     public Boolean setPatentClaim(StarPatentVO starPatent, UploadParamsVO uploadParamsVO, PQueueData pQueueData) throws IOException {
         try {
             if ((starPatent.getPublicNo() != null && starPatent.getPublicNo().contains("CN")) || (starPatent.getPublicNo() == null && starPatent.getPatentNo().contains("CN"))) {
-                String applicationNo = starPatent.getApplicationNo() + "";
-                String appNo;
-                if (starPatent.getApplicationNo().contains(".")) {
-                    appNo = starPatent.getApplicationNo().substring(0, starPatent.getApplicationNo().lastIndexOf("."));
-                } else {
-                    appNo = starPatent.getApplicationNo();
-                }
-
                 //根据申请号调用"获得中国专利全文文本"接口,获得包含各种xml标签的专利全文内容的长字符串 cnFullXmlStr
-                String cnFullXmlStr = patentStarApiService.getCnFullXmlApi(appNo);
+                String cnFullXmlStr = patentStarApiService.getCnFullXmlApi(starPatent.getRowApplicationNo());
 
                 //若没有取到全文文本即取不到权要,则将该专利检索专利之星接口次数+1,重新丢入权要生产队列,将当前申请号或专利号和备注信息记录到问题记录表,返回false
                 if (cnFullXmlStr.equals("")) {
                     if (pQueueData != null && pQueueData.getCallNum() < 2) {
                         pQueueData.setCallNum(pQueueData.getCallNum() + 1);
                         pantentQueueService.rightToPQueue(pQueueData);
-                        recordQuestionPatent(applicationNo, pQueueData.getTask().getId(), 2);
+                        recordQuestionPatent(starPatent.getApplicationNo(), pQueueData.getTask().getId(), 2);
                         return false;
                     }
-                    recordQuestionPatent(applicationNo, null, 2);
+                    recordQuestionPatent(starPatent.getApplicationNo(), null, 2);
                     return true;
                 }
 
@@ -774,26 +758,19 @@ public class ExcutePatentDataStar implements IExcutePatentData {
     public Boolean setPatentInstructionText(StarPatentVO starPatent, UploadParamsVO uploadParamsVO, PQueueData pQueueData) throws IOException {
         try {
             if ((starPatent.getPublicNo() != null && starPatent.getPublicNo().contains("CN")) || (starPatent.getPublicNo() == null && starPatent.getPatentNo().contains("CN"))) {
-                String applicationNo = starPatent.getApplicationNo() + "";
-                String appNo;
-                if (starPatent.getApplicationNo().contains(".")) {
-                    appNo = starPatent.getApplicationNo().substring(0, starPatent.getApplicationNo().lastIndexOf("."));
-                } else {
-                    appNo = starPatent.getApplicationNo();
-                }
 
                 //根据申请号调用"获得中国专利全文文本"接口,获得包含各种xml标签的专利全文内容的长字符串 cnFullXmlStr
-                String cnFullXmlStr = patentStarApiService.getCnFullXmlApi(appNo);
+                String cnFullXmlStr = patentStarApiService.getCnFullXmlApi(starPatent.getRowApplicationNo());
 
                 //若没有取到全文文本,即取不到说明书文本,则将当前申请号或专利号和备注信息记录到问题记录表
                 if (cnFullXmlStr.equals("")) {
                     if (pQueueData != null && pQueueData.getCallNum() < 2) {
                         pQueueData.setCallNum(pQueueData.getCallNum() + 1);
                         pantentQueueService.rightToPQueue(pQueueData);
-                        recordQuestionPatent(applicationNo, pQueueData.getTask().getId(), 3);
+                        recordQuestionPatent(starPatent.getApplicationNo(), pQueueData.getTask().getId(), 3);
                         return false;
                     }
-                    recordQuestionPatent(applicationNo, null, 3);
+                    recordQuestionPatent(starPatent.getApplicationNo(), null, 3);
                     return true;
                 }
 
@@ -837,64 +814,59 @@ public class ExcutePatentDataStar implements IExcutePatentData {
         } else {
             usedPatentNo = starPatent.getPatentNo();
         }
+
         try {
             String pdfUrl = "", pdfUrl1 = "", pdfUrl2 = "";
-            if ((starPatent.getPatentNo() != null && !starPatent.getPatentNo().equals("")) || (starPatent.getApplicationNo() != null && !starPatent.getApplicationNo().equals(""))) {
-                //先根据公开号判断国家,若没有公开号再根据申请号判断,调用"获得中国专利pdf"接口,获得1个或2个pdf的url地址
-                if ((starPatent.getPublicNo() != null && starPatent.getPublicNo().contains("CN")) || (starPatent.getPublicNo() == null && starPatent.getPatentNo().contains("CN"))) {
-                    String appNo = starPatent.getApplicationNo();
-                    if (appNo.contains(".")) {
-                        appNo = appNo.substring(0, appNo.lastIndexOf("."));
-                    }
-                    String pdfUrlStr = patentStarApiService.getCnPdfApi(appNo);
+            //先根据公开号判断国家,若没有公开号再根据申请号判断,调用"获得中国专利pdf"接口,获得1个或2个pdf的url地址
+            if ((starPatent.getPublicNo() != null && starPatent.getPublicNo().contains("CN")) || (starPatent.getPublicNo() == null && starPatent.getPatentNo().contains("CN"))) {
+                String pdfUrlStr = patentStarApiService.getCnPdfApi(starPatent.getRowApplicationNo());
 
-                    //若没有取到说明书pdf,则将当前申请号和备注信息存入问题记录表,并返回空对象
-                    if (pdfUrlStr.equals("")) {
-                        recordQuestionPatent(starPatent.getApplicationNo(), task.getId(), 4);
-                        return;
-                    }
+                //若没有取到说明书pdf,则将当前申请号和备注信息存入问题记录表,并返回空对象
+                if (pdfUrlStr.equals("")) {
+                    recordQuestionPatent(starPatent.getApplicationNo(), task.getId(), 4);
+                    return;
+                }
 
-                    if (pdfUrlStr.contains("|http")) {  //若包含公开和授权两个pdf
-                        String[] pdfUrlArr = pdfUrlStr.split("\\|http");
-                        pdfUrl1 = pdfUrlArr[0].substring(pdfUrlArr[0].indexOf("http"), pdfUrlArr[0].indexOf("?"));
-                        pdfUrlArr[1] = "http" + pdfUrlArr[1];
-                        pdfUrl2 = pdfUrlArr[1].substring(pdfUrlArr[1].indexOf("http"), pdfUrlArr[1].indexOf("?"));
-
-                        UploadFileDTO fileDTO = downLoadPdf(pdfUrl1);
-                        UploadFileDTO fileDTO2 = downLoadPdf(pdfUrl2);
-
-                        if (pdfUrl1.contains("0A_CN_0.pdf")) {
-                            uploadParamsVO.setPdf1FileDTO(fileDTO);
-                            uploadParamsVO.setPdf2FileDTO(fileDTO2);
-                        } else {
-                            uploadParamsVO.setPdf1FileDTO(fileDTO2);
-                            uploadParamsVO.setPdf2FileDTO(fileDTO);
-                        }
-                    } else {  //若只有一个
-                        pdfUrl1 = pdfUrlStr.substring(pdfUrlStr.indexOf("http"), pdfUrlStr.indexOf("?"));
-                        UploadFileDTO fileDTO = downLoadPdf(pdfUrl1);
-                        if (pdfUrl1.contains("0A_CN_0.pdf")) {
-                            uploadParamsVO.setPdf1FileDTO(fileDTO);
-                        } else {
-                            uploadParamsVO.setPdf2FileDTO(fileDTO);
-                        }
+                if (pdfUrlStr.contains("|http")) {  //若包含公开和授权两个pdf
+                    String[] pdfUrlArr = pdfUrlStr.split("\\|http");
+                    pdfUrl1 = pdfUrlArr[0].substring(pdfUrlArr[0].indexOf("http"), pdfUrlArr[0].indexOf("?"));
+                    pdfUrlArr[1] = "http" + pdfUrlArr[1];
+                    pdfUrl2 = pdfUrlArr[1].substring(pdfUrlArr[1].indexOf("http"), pdfUrlArr[1].indexOf("?"));
+
+                    UploadFileDTO fileDTO = downLoadPdf(pdfUrl1);
+                    UploadFileDTO fileDTO2 = downLoadPdf(pdfUrl2);
+
+                    if (pdfUrl1.contains("0A_CN_0.pdf")) {
+                        uploadParamsVO.setPdf1FileDTO(fileDTO);
+                        uploadParamsVO.setPdf2FileDTO(fileDTO2);
+                    } else {
+                        uploadParamsVO.setPdf1FileDTO(fileDTO2);
+                        uploadParamsVO.setPdf2FileDTO(fileDTO);
                     }
-
-                    //根据专利号调用"获得世界专利pdf"接口,获得pdf的url地址
-                } else {
-                    pdfUrl = patentStarApiService.getEnPdfApi(usedPatentNo);
-
-                    //若没有取到说明书pdf,则将当前申请号和备注信息存入问题记录表,并返回空对象
-                    if (pdfUrl.equals("") || pdfUrl.equals("{}")) {
-                        recordQuestionPatent(starPatent.getApplicationNo(), task.getId(), 4);
-                        return;
+                } else {  //若只有一个
+                    pdfUrl1 = pdfUrlStr.substring(pdfUrlStr.indexOf("http"), pdfUrlStr.indexOf("?"));
+                    UploadFileDTO fileDTO = downLoadPdf(pdfUrl1);
+                    if (pdfUrl1.contains("0A_CN_0.pdf")) {
+                        uploadParamsVO.setPdf1FileDTO(fileDTO);
+                    } else {
+                        uploadParamsVO.setPdf2FileDTO(fileDTO);
                     }
+                }
+
+                //根据专利号调用"获得世界专利pdf"接口,获得pdf的url地址
+            } else {
+                pdfUrl = patentStarApiService.getEnPdfApi(usedPatentNo);
 
-                    UploadFileDTO fileDTO = downLoadPdf(pdfUrl);
-                    uploadParamsVO.setPdf1FileDTO(fileDTO);
+                //若没有取到说明书pdf,则将当前申请号和备注信息存入问题记录表,并返回空对象
+                if (pdfUrl.equals("") || pdfUrl.equals("{}")) {
+                    recordQuestionPatent(starPatent.getApplicationNo(), task.getId(), 4);
+                    return;
                 }
 
+                UploadFileDTO fileDTO = downLoadPdf(pdfUrl);
+                uploadParamsVO.setPdf1FileDTO(fileDTO);
             }
+
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -910,12 +882,8 @@ public class ExcutePatentDataStar implements IExcutePatentData {
     public void setPatentPicture(StarPatentVO starPatent, UploadParamsVO uploadParamsVO) throws IOException {
         try {
             //调用"获取中国专利摘要附图"接口
-            String appNo = starPatent.getApplicationNo();
-            if (appNo.contains(".")) {
-                appNo = appNo.substring(0, appNo.lastIndexOf("."));
-            }
             if ((starPatent.getPublicNo() != null && starPatent.getPublicNo().contains("CN")) || (starPatent.getPublicNo() == null && starPatent.getPatentNo().contains("CN"))) {
-                String pictureUrl = patentStarApiService.getPictureApi(appNo);
+                String pictureUrl = patentStarApiService.getPictureApi(starPatent.getRowApplicationNo());
                 URL url = new URL(pictureUrl);  //想要读取的url地址
                 InputStream in = url.openStream();
                 File file = File.createTempFile("new_url", ".jpg");  //创建文件
@@ -1125,17 +1093,17 @@ public class ExcutePatentDataStar implements IExcutePatentData {
     /**
      * 记录没有数据的专利信息
      *
-     * @param applicationNoOrPatentNo 公开号/申请号
-     * @param taskId                  任务id
-     * @param cell                    失败字段(1著录 2权要 3说明书文本 4说明书pdf 5摘要附图)
+     * @param applicationNo 申请号
+     * @param taskId        任务id
+     * @param cell          失败字段(1著录 2权要 3说明书文本 4说明书pdf 5摘要附图)
      */
-    public void recordQuestionPatent(String applicationNoOrPatentNo, Integer taskId, int cell) {
+    public void recordQuestionPatent(String applicationNo, Integer taskId, int cell) {
         QuestionRecord questionRecord = new QuestionRecord()
-                .setPatentNo(applicationNoOrPatentNo)
+                .setPatentNo(applicationNo)
                 .setCell(cell)
                 .setTaskId(taskId)
                 .setRemark("该申请号的该字段(2权要 3说明书文本 4说明书pdf)接口检索返回原始数据为空");
-        List<QuestionRecord> questionRecords = questionRecordService.list(new LambdaQueryWrapper<QuestionRecord>().eq(QuestionRecord::getPatentNo, applicationNoOrPatentNo).eq(QuestionRecord::getCell, cell));
+        List<QuestionRecord> questionRecords = questionRecordService.list(new LambdaQueryWrapper<QuestionRecord>().eq(QuestionRecord::getPatentNo, applicationNo).eq(QuestionRecord::getCell, cell));
         if (questionRecords == null || questionRecords.size() == 0) {
             questionRecordService.save(questionRecord);
         }

+ 18 - 0
PAS/src/main/resources/mapper/ProjectMapper.xml

@@ -57,6 +57,24 @@
         order by a.`${params.sort.prop}` ${params.sort.order}
     </select>
 
+
+    <select id="getProjects" parameterType="cn.cslg.pas.common.model.vo.ProjectVO"
+            resultType="cn.cslg.pas.domain.Project">
+        select a.id
+        from os_thematic a
+        left join os_distribution u on u.id = a.creat_id
+        <where>
+            <if test="PersonnelId!=null">
+                and (a.id in (select tid from os_distribution_doing where uid=#{PersonnelId} )
+                or a.creat_id = #{PersonnelId}
+                <if test="tenantId!=null">
+                    or a.tenantId = #{tenantId}
+                </if>
+                )
+            </if>
+        </where>
+    </select>
+
     <select id="getListForCount"
             resultType="cn.cslg.pas.domain.Project"
             parameterType="cn.cslg.pas.common.model.vo.ProjectVO">

+ 185 - 18
PAS/src/main/resources/mapper/ScratchWordsMapper.xml

@@ -8,24 +8,44 @@
             patent_no = #{patentNo}
             and(
             <if test="projectId != null and reportId != null and createId != null and tenantId != null">
-                    (range_type = "false" and permission_type = 1 and tenant_id = #{tenantId})
-                    or(range_type = "false" and permission_type = 0 and create_id = #{createId})
-                    or(range_type = "true" and create_from = 2   and range_id = #{reportId}  and permission_type = 1 and tenant_id = #{tenantId})
-                    or(range_type = "true" and create_from = 1   and range_id = #{projectId} and permission_type = 1 and tenant_id = #{tenantId})
-                    or(create_from = 0  and permission_type = 1  and tenant_id = #{tenantId})
-                    or(range_type = "true" and create_from = 2   and range_id = #{reportId}  and permission_type = 0 and create_id = #{createId})
-                    or(range_type = "true" and create_from = 1   and range_id = #{projectId} and permission_type = 0 and create_id = #{createId})
-                    or(create_from = 0  and permission_type = 0  and create_id = #{createId})
-
+                -- 所有地方可见/公开
+                (range_type = "false" and permission_type = 1 and tenant_id = #{tenantId})
+                -- 所有地方可见/私有
+                or(range_type = "false" and permission_type = 0 and create_id = #{createId})
+                -- 只在来源出可见/公开
+                or(range_type = "true" and create_from = 2 and range_id = #{reportId} and permission_type = 1 and
+                tenant_id = #{tenantId})
+                or(range_type = "true" and create_from = 1 and range_id = #{projectId} and permission_type = 1 and
+                tenant_id = #{tenantId})
+                or(create_from = 0 and permission_type = 1 and tenant_id = #{tenantId})
+                -- 只在来源出可见/私有
+                or(range_type = "true" and create_from = 2 and range_id = #{reportId} and permission_type = 0 and
+                create_id = #{createId})
+                or(range_type = "true" and create_from = 1 and range_id = #{projectId} and permission_type = 0 and
+                create_id = #{createId})
+                or(create_from = 0 and permission_type = 0 and create_id = #{createId})
             </if>
-                )
+            )
         </where>
     </select>
 
+    <resultMap id="querySWResultMap" type="cn.cslg.pas.common.model.vo.ScratchWordsVO">
+        <id column="id" property="id"/>
+        <result column="create_id" property="createId"/>
+        <result column="tenant_id" property="tenantId"/>
+        <result column="patent_no" property="patentNo"/>
+        <result column="position" property="position"/>
+        <result column="text" property="text"/>
+        <result column="scratch_field" property="scratchField"/>
+        <result column="scratch_type" property="scratchType"/>
+        <result column="color" property="color"/>
+        <result column="remark" property="remark"/>
+        <result column="create_from" property="createFrom"/>
+        <result column="range_id" property="rangeId"/>
+        <result column="permission_type" property="permissionType"/>
+        <result column="range_type" property="rangeType"/>
+    </resultMap>
+
 
     <select id="selectByConditions" resultMap="querySWResultMap">
         SELECT id, create_id, tenant_id, patent_no, create_from, range_id, permission_type, range_type
@@ -41,28 +61,171 @@
         </if>
         <!-- 如果公开范围为 T,创建来源为 2,抽象id为 reportId,公开类型为 1,公司名为 tenantId,则拼接该条件 -->
         <if test="rangeType == 'T' and createFrom == 2 and rangeId == 'reportId' and permissionType == 1 and tenantId != null">
-            AND range_type = 'T' AND create_from = 2 AND range_id = 'reportId' AND permission_type = 1 AND tenant_id = #{tenantId}
+            AND range_type = 'T' AND create_from = 2 AND range_id = 'reportId' AND permission_type = 1 AND tenant_id =
+            #{tenantId}
         </if>
         <!-- 如果公开范围为 T,创建来源为 2,抽象id为 reportId,公开类型为 0,创建人为 createId,则拼接该条件 -->
         <if test="rangeType == 'T' and createFrom == 2 and rangeId == 'reportId' and permissionType == 0 and createId != null">
-        AND range_type = 'T' AND create_from = 2 AND range_id = 'reportId' AND permission_type = 0 AND create_id = #{createId}
+            AND range_type = 'T' AND create_from = 2 AND range_id = 'reportId' AND permission_type = 0 AND create_id =
+            #{createId}
         </if>
     </select>
 
-    <resultMap id="querySWResultMap" type="cn.cslg.pas.common.model.vo.ScratchWordsVO">
+
+    <select id="queryScratchWords" resultMap="queryScratchWordsResultMap">
+        select * from scratch_words
+        <where>
+            <if test="true">
+                1 = 1
+                and(
+                -- 所有地方可见/公开
+                (range_type = "false" and permission_type = 1 and tenant_id = #{tenantId})
+                -- 所有地方可见/私有
+                or(range_type = "false" and permission_type = 0 and create_id = #{personId})
+                -- 只在来源出可见/公开
+                or(range_type = "true" and create_from = 2 and range_id in (
+                <foreach collection="reportIds" item="n" separator=",">
+                    #{n}
+                </foreach>)
+                and permission_type = 1 and
+                tenant_id = #{tenantId})
+                or(range_type = "true" and create_from = 1 and range_id in (
+                <foreach collection="projectIds" item="n" separator=",">
+                    #{n}
+                </foreach>)
+                and permission_type = 1 and
+                tenant_id = #{tenantId})
+                or(create_from = 0 and permission_type = 1 and tenant_id = #{tenantId})
+                -- 只在来源出可见/私有
+                or(range_type = "true" and create_from = 2 and range_id in (
+                <foreach collection="reportIds" item="n" separator=",">
+                    #{n}
+                </foreach>)
+                and permission_type = 0 and
+                create_id = #{personId})
+                or(range_type = "true" and create_from = 1 and range_id in (
+                <foreach collection="projectIds" item="n" separator=",">
+                    #{n}
+                </foreach>)
+                and permission_type = 0 and
+                create_id = #{personId})
+                or(create_from = 0 and permission_type = 0 and create_id = #{personId})
+                )
+            </if>
+            <if test="queryScratchsDTO.remark != null and queryScratchsDTO.remark != ''">
+                and remark like '%${queryScratchsDTO.remark}%'
+            </if>
+            <if test="queryScratchsDTO.patentNo != null and queryScratchsDTO.patentNo != ''">
+                and patent_no like '%${queryScratchsDTO.patentNo}%'
+            </if>
+            <if test="queryScratchsDTO.personIds != null and queryScratchsDTO.personIds.size > 0">
+                and create_id in (
+                <foreach collection="queryScratchsDTO.personIds" item="n" separator=",">
+                    #{n}
+                </foreach>
+                )
+            </if>
+            <if test="queryScratchsDTO.date != null and queryScratchsDTO.date != ''">
+                and create_time like '%${queryScratchsDTO.date}%'
+            </if>
+        </where>
+        order by create_time desc
+    </select>
+
+    <resultMap id="queryScratchWordsResultMap" type="cn.cslg.pas.common.model.vo.ScratchWordVO">
         <id column="id" property="id"/>
         <result column="create_id" property="createId"/>
-        <result column="tenant_id" property="tenantId"/>
+        <result column="remark" property="remark"/>
         <result column="patent_no" property="patentNo"/>
-        <result column="position" property="position"/>
-        <result column="text" property="text"/>
+        <result column="name" property="name"/>
+        <result column="create_time" property="date"/>
         <result column="scratch_field" property="scratchField"/>
-        <result column="scratch_type" property="scratchType"/>
+        <result column="text" property="text"/>
         <result column="color" property="color"/>
-        <result column="remark" property="remark"/>
+        <result column="scratch_type" property="scratchType"/>
         <result column="create_from" property="createFrom"/>
         <result column="range_id" property="rangeId"/>
         <result column="permission_type" property="permissionType"/>
         <result column="range_type" property="rangeType"/>
     </resultMap>
+
+    <select id="queryGroupScratchs" resultMap="queryGroupScratchsResultMap">
+        select create_id,
+        patent_no,
+        DATE_FORMAT(create_time, '%Y-%m-%d') as YmD
+        from scratch_words
+        <where>
+            <if test="true">
+                1 = 1
+                and(
+                -- 所有地方可见/公开
+                (range_type = "false" and permission_type = 1 and tenant_id = #{tenantId})
+                -- 所有地方可见/私有
+                or(range_type = "false" and permission_type = 0 and create_id = #{personId})
+                -- 只在来源出可见/公开
+                or(range_type = "true" and create_from = 2 and range_id in (
+                <foreach collection="reportIds" item="n" separator=",">
+                    #{n}
+                </foreach>)
+                and permission_type = 1 and
+                tenant_id = #{tenantId})
+                or(range_type = "true" and create_from = 1 and range_id in (
+                <foreach collection="projectIds" item="n" separator=",">
+                    #{n}
+                </foreach>)
+                and permission_type = 1 and
+                tenant_id = #{tenantId})
+                or(create_from = 0 and permission_type = 1 and tenant_id = #{tenantId})
+                -- 只在来源出可见/私有
+                or(range_type = "true" and create_from = 2 and range_id in (
+                <foreach collection="reportIds" item="n" separator=",">
+                    #{n}
+                </foreach>)
+                and permission_type = 0 and
+                create_id = #{personId})
+                or(range_type = "true" and create_from = 1 and range_id in (
+                <foreach collection="projectIds" item="n" separator=",">
+                    #{n}
+                </foreach>)
+                and permission_type = 0 and
+                create_id = #{personId})
+                or(create_from = 0 and permission_type = 0 and create_id = #{personId})
+                )
+            </if>
+            <if test="queryGroupScratchsDTO.remark != null and queryGroupScratchsDTO.remark != ''">
+                and remark like '%${queryGroupScratchsDTO.remark}%'
+            </if>
+            <if test="queryGroupScratchsDTO.patentNo != null and queryGroupScratchsDTO.patentNo != ''">
+                and patent_no like '%${queryGroupScratchsDTO.patentNo}%'
+            </if>
+            <if test="queryGroupScratchsDTO.personIds != null and queryGroupScratchsDTO.personIds.size > 0">
+                and create_id in (
+                <foreach collection="queryGroupScratchsDTO.personIds" item="n" separator=",">
+                    #{n}
+                </foreach>
+                )
+            </if>
+            <if test="queryGroupScratchsDTO.date != null and queryGroupScratchsDTO.date != ''">
+                and create_time like '%${queryGroupScratchsDTO.date}%'
+            </if>
+        </where>
+        group by
+        <if test="queryGroupScratchsDTO.grouping != null and queryGroupScratchsDTO.grouping == 'name'">
+            create_id
+        </if>
+        <if test="queryGroupScratchsDTO.grouping != null and queryGroupScratchsDTO.grouping == 'patentNo'">
+            patent_no
+        </if>
+        <if test="queryGroupScratchsDTO.grouping != null and queryGroupScratchsDTO.grouping == 'date'">
+            YmD
+        </if>
+        order by create_time desc
+    </select>
+
+    <resultMap id="queryGroupScratchsResultMap" type="cn.cslg.pas.domain.GroupName">
+        <result column="create_id" property="createId"/>
+        <result column="patent_no" property="patentNo"/>
+        <result column="YmD" property="date"/>
+    </resultMap>
+
 </mapper>