Browse Source

6/16 xx 划词高亮

xiexiang 2 years ago
parent
commit
6872faae5b

+ 27 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/SWQueryDTO.java

@@ -0,0 +1,27 @@
+package cn.cslg.pas.common.model.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/6/16
+ */
+@Data
+@Accessors(chain = true)
+public class SWQueryDTO {
+    /**
+     * 专利号
+     */
+    private String patentNo;
+
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 创建来源
+     */
+    private Integer createFrom;
+}

+ 32 - 17
PAS/src/main/java/cn/cslg/pas/common/model/dto/ScratchWordsDTO.java

@@ -16,29 +16,44 @@ import lombok.experimental.Accessors;
 public class ScratchWordsDTO extends BaseEntity<ScratchWordsDTO> {
 
     /**
+     * 创建人
+     */
+    private Integer createId;
+
+    /**
+     * 租户id
+     */
+    private Integer tenantId;
+
+    /**
      * 专利号
      */
-    private Integer patentNo;
+    private String patentNo;
+
+    /**
+     * 位置
+     */
+    private Integer position;
 
     /**
-     *
+     * 内容
      */
-    private String position;
+    private String text;
 
     /**
-     *
+     * 划词栏位
      */
-    private String content;
+    private String scratchField;
 
     /**
-     *
+     * 划词类型(0下划线,1高亮,2波浪线)
      */
-    private String scratchType;
+    private Integer scratchType;
 
     /**
-     *
+     * 划词颜色
      */
-    private String scratchColor;
+    private String color;
 
     /**
      * 标引备注
@@ -46,23 +61,23 @@ public class ScratchWordsDTO extends BaseEntity<ScratchWordsDTO> {
     private String remark;
 
     /**
-     * 创建
+     * 创建来源
      */
-    private Integer createId;
+    private Integer createFrom;
 
     /**
-     * 报告id
+     * 存放id(专题库id/报告id
      */
-    private Integer reportId;
+    private Integer rangeId;
 
     /**
-     * 租户id
+     * 公开类型(0私有1公有)
      */
-    private Integer tenantId;
+    private Integer permissionType;
 
     /**
-     * 专题库id
+     * 公开范围(true只在来源处可见/false所有地方可见)
      */
-    private Integer projectId;
+    private String rangeType;
 
 }

+ 32 - 18
PAS/src/main/java/cn/cslg/pas/common/model/dto/ScratchWordsUpdateDTO.java

@@ -15,29 +15,44 @@ import lombok.experimental.Accessors;
 public class ScratchWordsUpdateDTO extends BaseEntity<ScratchWordsUpdateDTO> {
 
     /**
+     * 创建人
+     */
+    private Integer createId;
+
+    /**
+     * 租户id
+     */
+    private Integer tenantId;
+
+    /**
      * 专利号
      */
-    private Integer patentNo;
+    private String patentNo;
 
     /**
-     *
+     * 位置
      */
-    private String position;
+    private Integer position;
 
     /**
-     *
+     * 内容
      */
-    private String content;
+    private String text;
 
     /**
-     *
+     * 划词栏位
      */
-    private String scratchType;
+    private String scratchField;
 
     /**
-     *
+     * 划词类型(0下划线,1高亮,2波浪线)
      */
-    private String scratchColor;
+    private Integer scratchType;
+
+    /**
+     * 划词颜色
+     */
+    private String color;
 
     /**
      * 标引备注
@@ -45,23 +60,22 @@ public class ScratchWordsUpdateDTO extends BaseEntity<ScratchWordsUpdateDTO> {
     private String remark;
 
     /**
-     * 创建
+     * 创建来源
      */
-    private Integer createId;
+    private Integer createFrom;
 
     /**
-     * 报告id
+     * 存放id(专题库id/报告id
      */
-    private Integer reportId;
+    private Integer rangeId;
 
     /**
-     * 租户id
+     * 公开类型(0私有1公有)
      */
-    private Integer tenantId;
+    private Integer permissionType;
 
     /**
-     * 专题库id
+     * 公开范围(true只在来源处可见/false所有地方可见)
      */
-    private Integer projectId;
-
+    private String rangeType;
 }

+ 86 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/ScratchWordsVO.java

@@ -0,0 +1,86 @@
+package cn.cslg.pas.common.model.vo;
+
+import cn.cslg.pas.common.model.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 管理员表
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-03-25
+ */
+@Data
+@Accessors(chain = true)
+public class ScratchWordsVO extends BaseEntity<ScratchWordsVO> {
+
+    /**
+     * 创建人
+     */
+    private Integer createId;
+
+    /**
+     * 租户id
+     */
+    private Integer tenantId;
+
+    /**
+     * 专利号
+     */
+    private String patentNo;
+
+    /**
+     * 位置
+     */
+    private Integer position;
+
+    /**
+     * 内容
+     */
+    private String text;
+
+    /**
+     * 划词栏位
+     */
+    private String scratchField;
+
+    /**
+     * 划词类型(0下划线,1高亮)
+     */
+    private Integer scratchType;
+
+    /**
+     * 划词颜色
+     */
+    private String color;
+
+    /**
+     * 标引备注
+     */
+    private String remark;
+
+    /**
+     * 创建来源
+     */
+    private Integer createFrom;
+
+    /**
+     * 存放id(专题库id/报告id)
+     */
+    private Integer rangeId;
+
+    /**
+     * 公开类型(0私有1公有)
+     */
+    private Integer permissionType;
+
+    /**
+     * 公开范围(T只在来源处可见/F所有地方可见)
+     */
+    private String rangeType;
+
+}

+ 36 - 33
PAS/src/main/java/cn/cslg/pas/controller/ScratchWordsController.java

@@ -1,47 +1,19 @@
 package cn.cslg.pas.controller;
 
-import cn.cslg.pas.common.core.annotation.Permission;
 import cn.cslg.pas.common.core.base.Constants;
-import cn.cslg.pas.common.model.vo.PoiVO;
+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.vo.ScratchWordsVO;
 import cn.cslg.pas.common.utils.*;
-import cn.cslg.pas.common.utils.auth.checkAuth;
-import cn.cslg.pas.domain.SystemDict;
-import cn.cslg.pas.domain.SystemDictAssociate;
-import cn.cslg.pas.service.AreaService;
-import cn.cslg.pas.service.PoiService;
-import cn.cslg.pas.service.SystemDictAssociateService;
-import cn.cslg.pas.service.SystemDictService;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.io.IoUtil;
-import cn.hutool.core.io.resource.ClassPathResource;
-import cn.hutool.core.io.resource.ResourceUtil;
-import cn.hutool.core.util.IdUtil;
-import cn.hutool.core.util.NumberUtil;
-import cn.hutool.poi.excel.ExcelUtil;
-import cn.hutool.poi.excel.ExcelWriter;
+import cn.cslg.pas.service.*;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
-import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.io.FileSystemResource;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.File;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.net.URLEncoder;
 import java.util.*;
-import java.util.stream.Collectors;
 
 @Tag(name = "划词高亮")
 @CrossOrigin
@@ -49,6 +21,37 @@ import java.util.stream.Collectors;
 @RequestMapping(Constants.API_VERSION_V2 + "/scratchWords")
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ScratchWordsController {
+    private final ScratchWordsService scratchWordsService;
 
+    @Operation(summary = "新增划词高亮")
+    @PostMapping("/add")
+    public String add(@RequestBody ScratchWordsDTO scratchWordsDTO) {
+        if (scratchWordsDTO == null) {
+            return Response.error("请求参数为null");
+        } else {
+            scratchWordsService.add(scratchWordsDTO);
+            return Response.success("新增划词高亮完成");
+        }
+    }
 
+    @Operation(summary = "查询划词高亮")
+    @PostMapping("/query")
+    public String query(@RequestBody SWQueryDTO swQueryDTO) {
+        List<ScratchWordsVO> scratchWordsVOS = scratchWordsService.queryAll(swQueryDTO);
+        return Response.success(scratchWordsVOS);
+    }
+
+    @Operation(summary = "更新划词高亮")
+    @PostMapping("/update")
+    public String update(@RequestBody ScratchWordsUpdateDTO scratchWordsUpdateDTO){
+        scratchWordsService.update(scratchWordsUpdateDTO);
+        return Response.success("更新成功");
+    }
+
+    @Operation(summary = "删除划词高亮")
+    @PostMapping("/delete")
+    public String delete(@RequestBody List<Integer> ids){
+        scratchWordsService.delete(ids);
+        return Response.success("删除成功");
+    }
 }

+ 36 - 35
PAS/src/main/java/cn/cslg/pas/domain/ScratchWords.java

@@ -22,38 +22,52 @@ import java.util.Date;
 public class ScratchWords extends BaseEntity<ScratchWords> {
 
     /**
+     * 创建人
+     */
+    @TableField("create_id")
+    private Integer createId;
+
+    /**
+     * 租户id
+     */
+    @TableField("tenant_id")
+    private Integer tenantId;
+
+    /**
      * 专利号
      */
     @TableField("patent_no")
-    private Integer patentNo;
+    private String patentNo;
 
     /**
-     *
+     * 位置
      */
     @TableField("position")
-    private String position;
+    private Integer position;
 
     /**
-     *
+     * 内容
      */
-    @TableField("content")
-    private String content;
+    @TableField("text")
+    private String text;
 
     /**
-     *
+     * 划词栏位
      */
-    @TableField("scratch_type")
-    private String scratchType;
-
     @TableField("scratch_field")
     private String scratchField;
 
+    /**
+     * 划词类型(0下划线,1高亮,2波浪线)
+     */
+    @TableField("scratch_type")
+    private Integer scratchType;
 
     /**
-     *
+     * 划词颜色
      */
-    @TableField("scratch_color")
-    private String scratchColor;
+    @TableField("color")
+    private String color;
 
     /**
      * 标引备注
@@ -62,39 +76,26 @@ public class ScratchWords extends BaseEntity<ScratchWords> {
     private String remark;
 
     /**
-     * 创建
+     * 创建来源
      */
-    @TableField("create_id")
-    private Integer createId;
+    @TableField("create_from")
+    private Integer createFrom;
 
     /**
-     * 报告id
+     * 存放id(专题库id/报告id
      */
-    @TableField("report_id")
-    private Integer reportId;
+    @TableField("range_id")
+    private Integer rangeId;
 
     /**
-     * 租户id
-     */
-    @TableField("tenant_id")
-    private Integer tenantId;
-
-    /**
-     * 专题库id
-     */
-    @TableField("project_id")
-    private Integer projectId;
-
-    /**
-     * 公开类型 0私有1公有
+     * 公开类型(0私有1公有)
      */
     @TableField("permission_type")
     private Integer permissionType;
 
     /**
-     * 公开范围类型(0全部1本专题库2本报告
+     * 公开范围(true只在来源处可见/false所有地方可见)
      */
     @TableField("range_type")
-    private Integer rangeType;
-
+    private String rangeType;
 }

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

@@ -1,9 +1,12 @@
 package cn.cslg.pas.mapper;
 
+import cn.cslg.pas.common.model.vo.ScratchWordsVO;
 import cn.cslg.pas.domain.AdminUser;
 import cn.cslg.pas.domain.ScratchWords;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
+
 /**
  * <p>
  * 专利划词表Mapper 接口
@@ -13,5 +16,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2023-06-13
  */
 public interface ScratchWordsMapper extends BaseMapper<ScratchWords> {
-
+    /**
+     *
+     * @param patentNo
+     * @param tenantId
+     * @param createId
+     * @param projectId
+     * @param reportId
+     * @return
+     */
+    List<ScratchWordsVO> querySW(String patentNo, Integer tenantId, Integer createId, Integer projectId, Integer reportId);
 }

+ 67 - 28
PAS/src/main/java/cn/cslg/pas/service/ScratchWordsService.java

@@ -2,8 +2,10 @@ 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.vo.ScratchWordsVO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.pas.domain.ScratchWords;
@@ -18,6 +20,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
 
@@ -32,58 +35,80 @@ import java.util.List;
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, ScratchWords> {
+    private final ScratchWordsMapper scratchWordsMapper;
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
 
     /**
      * 新增划词高亮
      *
-     * @param scratchWordsDTOS
+     * @param scratchWordsDTO
      */
-    public void add(List<ScratchWordsDTO> scratchWordsDTOS){
+    public void add(ScratchWordsDTO scratchWordsDTO){
         ScratchWords scratchWords = new ScratchWords();
         //判断传入列表不为空
-        if(scratchWordsDTOS != null && scratchWordsDTOS.size() != 0){
-            //遍历传入列表
-            for(int i = 0; i < scratchWordsDTOS.size(); i++){
-                ScratchWordsDTO scratchWordsDTO = scratchWordsDTOS.get(i);
-                BeanUtils.copyProperties(scratchWordsDTO, scratchWords);
-                //获取当前登陆人信息
-                PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
-                //设置创建人id
-                scratchWords.setCreateId(personnelVO.getId());
-                //数据入表
-                scratchWords.insert();
-            }
+        if(scratchWordsDTO != null){
+            BeanUtils.copyProperties(scratchWordsDTO, scratchWords);
+            //获取当前登陆人信息
+            PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+            //设置创建人id
+            scratchWords.setCreateId(personnelVO.getId());
+            //设置租户id
+            scratchWords.setTenantId(personnelVO.getTenantId());
+            //数据入表
+            scratchWords.insert();
         } else {
-            throw new XiaoShiException("传入列表不能为空");
+            throw new XiaoShiException("传入对象不能为空");
         }
     }
 
     /**
      * 更新划词高亮
-     * @param scratchWordsUpdateDTOS
+     * @param scratchWordsUpdateDTO
      */
-    public void update(List<ScratchWordsUpdateDTO> scratchWordsUpdateDTOS){
+    public void update(ScratchWordsUpdateDTO scratchWordsUpdateDTO){
         ScratchWords scratchWords = new ScratchWords();
         //判断传入列表不为空
-        if(scratchWordsUpdateDTOS != null && scratchWordsUpdateDTOS.size() != 0){
-            //遍历传入列表
-            for(int i = 0; i < scratchWordsUpdateDTOS.size(); i++) {
-                ScratchWordsUpdateDTO scratchWordsUpdateDTO = scratchWordsUpdateDTOS.get(i);
-                BeanUtils.copyProperties(scratchWordsUpdateDTO, scratchWords);
-                scratchWordsUpdateDTO.updateById();
-            }
+        if(scratchWordsUpdateDTO != null){
+            BeanUtils.copyProperties(scratchWordsUpdateDTO, scratchWords);
+            scratchWordsUpdateDTO.updateById();
         } else {
-            throw new XiaoShiException("传入列表不能为空");
+            throw new XiaoShiException("传入对象不能为空");
         }
     }
 
-    public List<ScratchWords> queryAll(){
-        List<ScratchWords> scratchWords = this.list();
-        return scratchWords;
+
+    public List<ScratchWordsVO> queryAll(SWQueryDTO swQueryDTO){
+        if(swQueryDTO.getPatentNo() != null && swQueryDTO.getId() != null && swQueryDTO.getCreateFrom() != null) {
+            //获取当前登陆人信息
+            PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+            Integer tenantId = personnelVO.getTenantId();
+            Integer createId = personnelVO.getId();
+//            Integer tenantId = 10;
+//            Integer createId = 10;
+            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;
+            }
+            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;
+            } else {
+                throw new XiaoShiException("暂无该情况");
+            }
+        } else {
+            throw new XiaoShiException("传入参数不可为空");
+        }
     }
 
+    /**
+     * 删除划词高亮
+     * @param ids
+     */
     public void delete(List<Integer> ids){
         for(int i = 0; i < ids.size(); i++){
             LambdaQueryWrapper<ScratchWords> LW = new LambdaQueryWrapper<>();
@@ -92,4 +117,18 @@ public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, Scratch
             scratchWords.deleteById();
         }
     }
+//
+//    public List<ScratchWordsVO> querySW(String patentNo, Integer id, Integer type){
+//        //多重情况考虑
+//        //根据tenantId(公司)、patentNo(专利号),
+//        //   permissionType为1,全公司人都可见的批注;
+//        //        查询rangeType为F的(全部地方可见);
+//        //        查询rangeType为T的(只在来源处可见),但是要判断传入type=createFrom创建来源,传入id=rangeId;
+//        //   permissionType为0,只有自己可见的批注,需要满足登陆人信息=createId;
+//        //        查询rangeType为F的(全部地方可见);
+//        //        查询rangeType为T的(只在来源处可见),但是要判断传入type=createFrom创建来源,传入id=rangeId;
+//        List<ScratchWordsVO> swVOS = new ArrayList<>();
+//        List<ScratchWordsVO> swvos = new ArrayList<>();
+//        swVOS.add(swvos);
+//    }
 }

+ 61 - 0
PAS/src/main/resources/mapper/ScratchWordsMapper.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="cn.cslg.pas.mapper.ScratchWordsMapper">
+    <!--namespace根据自己需要创建的的mapper的路径和名称填写-->
+    <select id="querySW" resultMap="querySWResultMap">
+        select * from scratch_words
+        <where>
+            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 = 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 = 1 and tenant_id = #{tenantId})
+                    or(range_type = "true" and create_from = 1 and range_id = #{projectId} and permission_type = 0 and create_id = #{createId})
+            </if>
+                )
+        </where>
+    </select>
+
+
+    <select id="selectByConditions" resultMap="querySWResultMap">
+        SELECT id, create_id, tenant_id, patent_no, create_from, range_id, permission_type, range_type
+        FROM scratch_words
+        WHERE patent_no = #{patentNo}
+        <!-- 如果公开范围为 F,公开类型为 1,公司名为 tenantId,则拼接该条件 -->
+        <if test="rangeType == 'F' and permissionType == 1 and tenantId != null">
+            AND range_type = 'F' AND permission_type = 1 AND tenant_id = #{tenantId}
+        </if>
+        <!-- 如果公开范围为 F,公开类型为 0,创建人为 createId,则拼接该条件 -->
+        <if test="rangeType == 'F' and permissionType == 0 and createId != null">
+            AND range_type = 'F' AND permission_type = 0 AND create_id = #{createId}
+        </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}
+        </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}
+        </if>
+    </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>
+</mapper>