chendayu 2 年 前
コミット
e59c1abf74

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/common/config/WebSocketConfig.java

@@ -6,7 +6,7 @@ import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 
 @Configuration
 public class WebSocketConfig {
-    //@Bean
+    @Bean
     public ServerEndpointExporter serverEndpointExporter() {
         return new ServerEndpointExporter();
     }

+ 4 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/EventAddNewDTO.java

@@ -20,6 +20,10 @@ import java.util.List;
 @Data
 public class EventAddNewDTO implements Serializable {
     /**
+     * 主键
+     */
+    private Integer id;
+    /**
      * 事件名称
      */
     private String questionName;

+ 5 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/EventQueryPageDTO.java

@@ -14,4 +14,9 @@ public class EventQueryPageDTO extends PageDTO2 {
      * 专题库id
      */
     private Integer projectId;
+    /**
+     * 事件名称
+     */
+    private String questionName;
+
 }

+ 48 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/EventUpdateDTO.java

@@ -0,0 +1,48 @@
+package cn.cslg.pas.common.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 修改事件的DTO类
+ *
+ * @Author chenyu
+ * @Date 2023/4/2
+ */
+@Accessors(chain = true)
+@Data
+public class EventUpdateDTO implements Serializable {
+    /**
+     * 主键
+     */
+    private Integer id;
+    /**
+     * 事件名称
+     */
+    private String questionName;
+    /**
+     * 描述
+     */
+    private String description;
+    /**
+     * 应用场景
+     */
+    private List<Integer> applicationScenarios;
+    /**
+     * 时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date eventDate;
+    /**
+     * 专题库id
+     */
+    private Integer projectId;
+
+}

+ 15 - 3
PAS/src/main/java/cn/cslg/pas/common/model/vo/EventListItemVO.java

@@ -32,7 +32,11 @@ public class EventListItemVO implements Serializable {
      */
     private String description;
     /**
-     * 应用场景(id集合)
+     * 应用场景(逗号拼接字符串)
+     */
+    private String applicationScenario;
+    /**
+     * 应用场景ids
      */
     private List<Integer> applicationScenarios;
     /**
@@ -40,6 +44,10 @@ public class EventListItemVO implements Serializable {
      */
     private List<String> scenarioNames;
     /**
+     * 专题库ids
+     */
+    private List<Integer> projectIds;
+    /**
      * 时间
      */
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -47,9 +55,13 @@ public class EventListItemVO implements Serializable {
     @TableField(value = "event_date")
     private Date eventDate;
     /**
-     * 专题库id
+     * 租户id
+     */
+    private Integer tenantId;
+    /**
+     * 创建人id
      */
-    private Integer projectId;
+    private Integer createPersonId;
     /**
      * 创建人名称
      */

+ 29 - 6
PAS/src/main/java/cn/cslg/pas/controller/EventController.java

@@ -3,6 +3,7 @@ package cn.cslg.pas.controller;
 import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.model.dto.EventAddNewDTO;
 import cn.cslg.pas.common.model.dto.EventQueryPageDTO;
+import cn.cslg.pas.common.model.dto.EventUpdateDTO;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.IEventService;
@@ -10,10 +11,7 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * 事件的Controller层
@@ -44,9 +42,34 @@ public class EventController {
     @Operation(summary = "查询事件")
     @PostMapping("/query")
     public String query(@RequestBody EventQueryPageDTO eventQueryPageDTO) {
-        log.info("开始处理【分页查询事件】的业务,参数为:{}", eventQueryPageDTO);
-        return eventService.query(eventQueryPageDTO);
+        log.info("开始处理【分页查询事件】的请求,请求参数为:{}", eventQueryPageDTO);
+        return Response.success(eventService.query(eventQueryPageDTO));
 
     }
 
+    @Operation(summary = "修改事件")
+    @PostMapping("/update")
+    public String update(@RequestBody EventUpdateDTO eventUpdateDTO) {
+        log.info("开始处理【修改事件】的请求,请求参数为:{}", eventUpdateDTO);
+        try {
+            eventService.update(eventUpdateDTO);
+        } catch (XiaoShiException e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success("修改完成");
+
+    }
+
+    @Operation(summary = "删除事件")
+    @GetMapping("/delete")
+    public String delete(Integer eventId, Integer projectId) {
+        log.info("开始处理【删除事件】的请求,请求参数为:{}, {}", eventId, projectId);
+        try {
+            eventService.delete(eventId, projectId);
+        } catch (XiaoShiException e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success("删除完成");
+    }
+
 }

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/controller/ProductController.java

@@ -82,7 +82,7 @@ public class ProductController {
         pmdTrendVO.setProductId(dto.getProductId());
         pmdTrendVO.setProductName(productMarketDataService.queryNameByProductId(dto.getProductId()));
         pmdTrendVO.setSaleVOS(queryResult);
-        if (pmdTrendVO != null){
+        if (pmdTrendVO != null) {
             return Response.success(pmdTrendVO);
         } else {
             return Response.error("查询失败");

+ 7 - 1
PAS/src/main/java/cn/cslg/pas/controller/ProjectController.java

@@ -58,7 +58,13 @@ ProjectController {
     @PostMapping("add")
     @Operation(summary = "新增专题库")
     public String add(@RequestBody Project project) throws IOException {
-        return projectService.add(project);
+        String projectId;
+        try {
+            projectId = projectService.add(project);
+        } catch (XiaoShiException e) {
+            return Response.error("新增专题库失败," + e.getMessage());
+        }
+        return Response.success(projectId);
     }
 
     @Permission(roles = {2})

+ 3 - 8
PAS/src/main/java/cn/cslg/pas/domain/Event.java

@@ -46,11 +46,6 @@ public class Event implements Serializable {
     @TableField(value = "application_scenario")
     private String applicationScenario;
     /**
-     * 应用场景(Integer集合形式)
-     */
-    @TableField(exist = false)
-    private List<Integer> applicationScenarios;
-    /**
      * 时间
      */
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -58,10 +53,10 @@ public class Event implements Serializable {
     @TableField(value = "event_date")
     private Date eventDate;
     /**
-     * 专题库id
+     * 租户id
      */
-    @TableField(value = "project_id")
-    private Integer projectId;
+    @TableField(value = "tenant_id")
+    private Integer tenantId;
     /**
      * 创建人id
      */

+ 9 - 1
PAS/src/main/java/cn/cslg/pas/domain/Project.java

@@ -1,11 +1,15 @@
 package cn.cslg.pas.domain;
 
 import cn.cslg.pas.common.model.BaseEntity;
+import cn.cslg.pas.common.model.dto.EventAddNewDTO;
 import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -13,7 +17,7 @@ import java.util.List;
  * 专题库表
  * </p>
  *
- * @author  王岩
+ * @author 王岩
  * @since 2022-01-24
  */
 @Data
@@ -165,4 +169,8 @@ public class Project extends BaseEntity<Project> {
     @TableField(exist = false)
     private String productName;
 
+    //以下为新增专题库时新增的事件(可新增多个事件)↓ 陈宇
+    @TableField(exist = false)
+    private List<EventAddNewDTO> eventAddNewDTOs;
+
 }

+ 39 - 0
PAS/src/main/java/cn/cslg/pas/domain/asso/AssoEventProject.java

@@ -0,0 +1,39 @@
+package cn.cslg.pas.domain.asso;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.lang.reflect.Type;
+
+/**
+ * 事件和专题库关联表
+ *
+ * @Author chenyu
+ * @Date 2023/4/3
+ */
+@TableName(value = "asso_event_project")
+@Accessors(chain = true)
+@Data
+public class AssoEventProject implements Serializable {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 事件id
+     */
+    @TableField(value = "event_id")
+    private Integer eventId;
+    /**
+     * 专题库id
+     */
+    @TableField(value = "project_id")
+    private Integer projectId;
+
+}

+ 24 - 0
PAS/src/main/java/cn/cslg/pas/mapper/AssoEventProjectMapper.java

@@ -0,0 +1,24 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.asso.AssoEventProject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 事件和专题库关联表的Mapper层接口
+ *
+ * @Author chenyu
+ * @Date 2023/4/2
+ */
+@Repository
+public interface AssoEventProjectMapper extends BaseMapper<AssoEventProject> {
+    /**
+     * 根据事件id和专题库id删除数据
+     *
+     * @param eventId   事件id
+     * @param projectId 专题库id
+     * @return 返回受影响的行数
+     */
+    int deleteByEventIdAndProjectId(Integer eventId, Integer projectId);
+
+}

+ 4 - 4
PAS/src/main/java/cn/cslg/pas/mapper/EventMapper.java

@@ -17,13 +17,13 @@ import java.util.List;
 @Repository
 public interface EventMapper extends BaseMapper<Event> {
     /**
-     * 根据名称和专题库ids统计数量
+     * 根据名称和租户id统计数量
      *
      * @param questionName 事件名称
-     * @param projectIds   专题库ids
+     * @param tenantId     租户id
      * @return 返回统计到的数量
      */
-    int countByNameAndProjectIds(String questionName, List<Integer> projectIds);
+    int countByNameAndTenantId(String questionName, Integer tenantId);
 
     /**
      * 分页查询事件列表
@@ -31,7 +31,7 @@ public interface EventMapper extends BaseMapper<Event> {
      * @param eventQueryPageDTO 事件的分页查询DTO类
      * @return 返回查询到的数据
      */
-//    List<EventListItemVO> queryList(EventQueryPageDTO eventQueryPageDTO);
+    List<EventListItemVO> queryList(EventQueryPageDTO eventQueryPageDTO);
 
 
 }

+ 19 - 1
PAS/src/main/java/cn/cslg/pas/service/IEventService.java

@@ -1,7 +1,9 @@
 package cn.cslg.pas.service;
 
+import cn.cslg.pas.common.JsonPage;
 import cn.cslg.pas.common.model.dto.EventAddNewDTO;
 import cn.cslg.pas.common.model.dto.EventQueryPageDTO;
+import cn.cslg.pas.common.model.dto.EventUpdateDTO;
 import cn.cslg.pas.domain.Event;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springframework.transaction.annotation.Transactional;
@@ -26,6 +28,22 @@ public interface IEventService extends IService<Event> {
      *
      * @param eventQueryPageDTO 事件的分页查询DTO类对象
      */
-    String query(EventQueryPageDTO eventQueryPageDTO);
+    JsonPage query(EventQueryPageDTO eventQueryPageDTO);
+
+    /**
+     * 修改事件
+     *
+     * @param eventUpdateDTO 修改事件的DTO类对象
+     */
+    void update(EventUpdateDTO eventUpdateDTO);
+
+    /**
+     * 根据id删除事件
+     *
+     * @param eventId   事件id
+     * @param projectId 专题库id
+     */
+    @Transactional
+    void delete(Integer eventId, Integer projectId);
 
 }

+ 152 - 164
PAS/src/main/java/cn/cslg/pas/service/PatentRightService.java

@@ -430,193 +430,181 @@ public class PatentRightService extends ServiceImpl<PatentRightMapper, PatentRig
 
     }
 
-
     public void updatePatentRight(PatentRightParams params) {
-        ArrayList<PatentRight> patentRights = new ArrayList<>();
-        //获取国家(公开号的前两位)
-        String country = PatentUtils.getPatentCountry(params.getPatentNo());
+//        List<PatentRight> patentRightList = new ArrayList<>();
+//        获取国家 公开号前两位
+//        String country = PatentUtils.getPatentCountry(params.getPatentNo());
+//        String code;
 
         //权利要求原文
         String content = params.getContent();
         //权利要求译文
         String contentOut = params.getContentOut();
-        //先去掉所有换行符,使原文和原文译文都连起来
-        content = content.replaceAll("\n", "");
-        contentOut = contentOut.replaceAll("\n", "").replaceAll(" +", "");
+        //独立权利要求
+        String selfContent = params.getSelfContent();
         if (StringUtils.isNotEmpty(content)) {
-            //先删除原来的专利权要
-            this.deleteByPatentId(params.getPatentId());
-            if (country.equals("CN") || country.equals("JP")) {
-                String regex;
-                if (content.contains("1.")) {
-                    regex = "。[0-9]+[.]";
-                } else if (content.contains("1、")) {
-                    regex = "。[0-9]+[、]";
-                } else if (content.contains("[001]")) {
-                    regex = "\\[[0-9]+]";
-                } else {
-                    regex = "";
-                }
+//            this.deleteByPatentId(params.getPatentId());
+//            String[] contentArray = null;
+//            String[] contentOutArray = null;
+//            String[] selfContentArray = null;
+//            switch (country) {
+//                case "JP":
+//                case "CN":
+//                    code = "。";
+//                    if (StringUtils.isNotEmpty(contentOut)) {
+//                        contentOut = contentOut.replaceAll("\n", "");
+//                        contentOutArray = StringUtils.split(contentOut, code);
+//                    }
+//                    if (StringUtils.isNotEmpty(selfContent)) {
+//                        selfContent = selfContent.replaceAll("\n", "");
+//                        selfContentArray = StringUtils.split(selfContent, code);
+//                    }
+//                    content = content.replaceAll("\n", "");
+//                    contentArray = StringUtils.split(content, code);
+//                    break;
+//                default:
+//                    code = "\n";
+//                    if (StringUtils.isNotEmpty(contentOut)) {
+//                        contentOutArray = StringUtils.split(contentOut, code);
+//                    }
+//                    if (StringUtils.isNotEmpty(selfContent)) {
+//                        selfContentArray = StringUtils.split(selfContent, code);
+//                    }
+//                    contentArray = StringUtils.split(content, code);
+//            }
+//            for (int i = 0; i < contentArray.length; i++) {
+//                if (StringUtils.isEmpty(contentArray[i])) {
+//                    continue;
+//                }
+//                PatentRight patentRight = new PatentRight();
+//                patentRight.setPatentId(params.getPatentId());
+//                patentRight.setContent(contentArray[i]);
+//                patentRight.setType(0);
+//                patentRight.setSort(i);
+//                if (contentOutArray != null && i < contentOutArray.length) {
+//                    patentRight.setContentOut(contentOutArray[i]);
+//                }
+//                if (selfContentArray != null) {
+//                    String temp = Arrays.stream(selfContentArray).filter(item -> item.equals(patentRight.getContent())).findFirst().orElse(null);
+//                    if (temp != null) {
+//                        patentRight.setType(1);
+//                    }
+//                }
+//                patentRightList.add(patentRight);
+            ArrayList<PatentRight> patentRights = new ArrayList<>();
+            //先去掉所有换行符,使原文连起来
+            if (content.contains("\r\n")) {
+                content = content.replaceAll("\r\n", "");
+            } else {
+                content = content.replaceAll("\n", "");
+            }
+            if (contentOut == null) {
+                contentOut = "";
+            }
+            if (contentOut.contains("\r\n")) {
+                contentOut = contentOut.replaceAll("\r\n", "");
+            } else {
+                contentOut = contentOut.replaceAll("\n", "");
+            }
+
+            //根据专利所属国家,定义序号规则
+            String regex;
+            if (content.contains("1.")) {
+                regex = "[0-9]+[.]";
+            } else if (content.contains("1、")) {
+                regex = "[0-9]+[、]";
+            } else if (content.contains("[001]")) {
+                regex = "\\[[0-9]+]";
+            } else {
+                regex = "";
+            }
 
-                Pattern compile = Pattern.compile(regex);
-                Matcher matcher = compile.matcher(content);
-                Matcher matcherOut = compile.matcher(contentOut);
-                while (matcher.find()) {
-                    String matcherGroup = matcher.group();
-                    matcherGroup = matcherGroup.substring(1).replace(".", "\\.");
-                    content = content.replaceFirst(matcherGroup, "\n" + matcherGroup);
+            Pattern compile = Pattern.compile(regex);
+            Matcher matcher = compile.matcher(content);
+            Matcher matcherOut = compile.matcher(contentOut);
+            while (matcher.find()) {
+                if (!matcher.group().equals("1.") && !matcher.group().equals("1、") && !matcher.group().equals("[001]")) {
+                    content = content.replaceFirst(matcher.group(), "\n" + matcher.group());
                 }
-                while (matcherOut.find()) {
-                    String matcherGroup = matcherOut.group();
-                    matcherGroup = matcherGroup.substring(1).replace(".", "\\.");
-                    contentOut = contentOut.replaceFirst(matcherGroup, "\n" + matcherGroup);
+            }
+            String[] strs = content.split("\n");
+            while (matcherOut.find()) {
+                if (!matcherOut.group().equals("1.") && !matcherOut.group().equals("1、") && !matcherOut.group().equals("[001]")) {
+                    contentOut = contentOut.replaceFirst(matcherOut.group(), "\n" + matcherOut.group());
                 }
-                String[] strs = content.split("\n");
-                String[] strsOut = contentOut.split("\n");
-
-                //定义父权要排序号
-                String regex1 = "权利要求[0-9]+";
-                String regex2 = "权利要求[0-9]+[至或~-]+[0-9]+";
-                for (int i = 0; i < strs.length; i++) {
-                    PatentRight patentRight = new PatentRight()
-                            .setPatentId(params.getPatentId())
-                            .setContent(strs[i])
-                            .setContentOut(strsOut[i])
-                            .setSort(i);
-                    if (strs[i].contains("权利要求")) {
-                        patentRight.setType(1);
-                        Pattern compile1 = Pattern.compile(regex1);
-                        Matcher matcher1 = compile1.matcher(strs[i]);
-                        Pattern compile2 = Pattern.compile(regex2);
-                        Matcher matcher2 = compile2.matcher(strs[i]);
-                        if (matcher2.find()) {
-                            String parentNum = matcher2.group().substring(matcher2.group().indexOf("求") + 1);
-                            String[] parentNums;
-                            String chr;
-                            if (parentNum.contains("~")) {
-                                chr = "~";
-                            } else if (parentNum.contains("-")) {
-                                chr = "-";
-                            } else if (parentNum.contains("至")) {
-                                chr = "至";
-                            } else if (parentNum.contains("或")) {
-                                chr = "或";
-                            } else {
-                                chr = "";
-                            }
-                            parentNums = parentNum.split(chr);
-                            StringBuilder builder = new StringBuilder();
-                            if (!chr.equals("或")) {
-                                for (int j = Integer.parseInt(parentNums[0]) - 1; j < Integer.parseInt(parentNums[parentNums.length - 1]); j++) {
-                                    if ((builder + "").equals("")) {
-                                        builder.append(j);
-                                    } else {
-                                        builder.append(",").append(j);
-                                    }
-                                }
+            }
+            String[] strsOut = contentOut.split("\n");
+
+            //定义父权要排序号
+            String regex1 = "权利要求[0-9]+";
+            String regex2 = "权利要求[0-9]+[至或~-]+[0-9]+";
+            for (int i = 0; i < strs.length; i++) {
+                if (strs[i].contains("权利要求")) {
+                    Pattern compile1 = Pattern.compile(regex1);
+                    Matcher matcher1 = compile1.matcher(strs[i]);
+                    Pattern compile2 = Pattern.compile(regex2);
+                    Matcher matcher2 = compile2.matcher(strs[i]);
+                    if (matcher2.find()) {
+                        String parentNum = matcher2.group().substring(matcher2.group().indexOf("求") + 1);
+                        String[] parentNums;
+                        if (parentNum.contains("~")) {
+                            parentNums = parentNum.split("~");
+                        } else if (parentNum.contains("-")) {
+                            parentNums = parentNum.split("-");
+                        } else if (parentNum.contains("至")) {
+                            parentNums = parentNum.split("至");
+                        } else if (parentNum.contains("或")) {
+                            parentNums = parentNum.split("或");
+                        } else {
+                            parentNums = new String[0];
+                        }
+                        StringBuilder builder = new StringBuilder();
+                        for (int j = Integer.parseInt(parentNums[0]) - 1; j < Integer.parseInt(parentNums[parentNums.length - 1]); j++) {
+                            if ((builder + "").equals("")) {
+                                builder.append(j);
                             } else {
-                                for (String num : parentNums) {
-                                    if ((builder + "").equals("")) {
-                                        builder.append(Integer.parseInt(num) - 1);
-                                    } else {
-                                        builder.append(",").append(Integer.parseInt(num) - 1);
-                                    }
-                                }
+                                builder.append(",").append(j);
                             }
-                            patentRight.setParentSort(builder + "");
-                            patentRights.add(patentRight);
-                        } else if (matcher1.find()) {
-                            String parentNum = matcher1.group().substring(matcher1.group().indexOf("求") + 1);
-                            patentRight.setParentSort((Integer.parseInt(parentNum) - 1) + "");
-                            patentRights.add(patentRight);
                         }
-
-                    } else {
-                        patentRight.setType(0);
-                        patentRight.setParentSort("-1");
+                        PatentRight patentRight = new PatentRight()
+                                .setPatentId(params.getPatentId())
+                                .setType(1)
+                                .setContent(strs[i])
+                                .setSort(i)
+                                .setParentSort(builder + "");
+                        if (strsOut.length - 1 >= i) {
+                            patentRight.setContentOut(strsOut[i]);
+                        }
+                        patentRights.add(patentRight);
+                    } else if (matcher1.find()) {
+                        String parentNum = matcher1.group().substring(matcher1.group().indexOf("求") + 1);
+                        PatentRight patentRight = new PatentRight()
+                                .setPatentId(params.getPatentId())
+                                .setType(1)
+                                .setContent(strs[i])
+                                .setSort(i)
+                                .setParentSort((Integer.parseInt(parentNum) - 1) + "");
+                        if (strsOut.length - 1 >= i) {
+                            patentRight.setContentOut(strsOut[i]);
+                        }
                         patentRights.add(patentRight);
                     }
-                }
-            } else {
-                String regex = "[0-9]+\\. ";
-                String regexOut;
-                if (contentOut.contains("1.")) {
-                    regexOut = "。[0-9]+[.]";
-                } else if (contentOut.contains("1、")) {
-                    regexOut = "。[0-9]+[、]";
-                } else if (contentOut.contains("[001]")) {
-                    regexOut = "\\[[0-9]+]";
+
                 } else {
-                    regexOut = "";
-                }
-                Pattern compile = Pattern.compile(regex);
-                Matcher matcher = compile.matcher(content);
-                Pattern compileOut = Pattern.compile(regexOut);
-                Matcher matcherOut = compileOut.matcher(contentOut);
-                while (matcher.find()) {
-                    String matcherGroup = matcher.group();
-                    matcherGroup = matcherGroup.replace(".", "\\.");
-                    content = content.replaceFirst(matcherGroup, "\n" + matcherGroup);
-                }
-                while (matcherOut.find()) {
-                    String matcherOutGroup = matcherOut.group();
-                    matcherOutGroup = matcherOutGroup.substring(1).replace(".", "\\.");
-                    contentOut = contentOut.replaceFirst(matcherOutGroup, "\n" + matcherOutGroup);
-                }
-                content = content.substring(content.indexOf("1. "));
-                contentOut = contentOut.substring(contentOut.indexOf("1."));
-                String[] strs = content.split("\n");
-                String[] strsOut = contentOut.split("\n");
-
-                String regex1 = "claim [0-9]+";
-                String regex2 = "claims [0-9]+ or [0-9]+";
-                for (int i = 0; i < strs.length; i++) {
                     PatentRight patentRight = new PatentRight()
                             .setPatentId(params.getPatentId())
+                            .setType(0)
                             .setContent(strs[i])
-                            .setContentOut(strsOut[i])
-                            .setSort(i);
-                    if (strs[i].contains("claim")) {
-                        patentRight.setType(1);
-                        Pattern compile1 = Pattern.compile(regex1);
-                        Matcher matcher1 = compile1.matcher(strs[i]);
-                        Pattern compile2 = Pattern.compile(regex2);
-                        Matcher matcher2 = compile2.matcher(strs[i]);
-                        if (matcher2.find()) {
-                            String parentNum = matcher2.group().substring(matcher2.group().indexOf("s") + 2);
-                            String[] parentNums;
-                            if (parentNum.contains(" or ")) {
-                                parentNums = parentNum.split(" or ");
-                            } else {
-                                parentNums = new String[0];
-                            }
-                            StringBuilder builder = new StringBuilder();
-                            for (String num : parentNums) {
-                                if ((builder + "").equals("")) {
-                                    builder.append(Integer.parseInt(num) - 1);
-                                } else {
-                                    builder.append(",").append(Integer.parseInt(num) - 1);
-                                }
-                            }
-                            patentRight.setParentSort(builder + "");
-                            patentRights.add(patentRight);
-                        } else if (matcher1.find()) {
-                            String parentNum = matcher1.group().substring(matcher1.group().indexOf("m") + 2);
-                            patentRight.setParentSort((Integer.parseInt(parentNum) - 1) + "");
-                            patentRights.add(patentRight);
-                        }
-
-                    } else {
-                        patentRight.setType(0);
-                        patentRight.setParentSort("-1");
-                        patentRights.add(patentRight);
+                            .setSort(i)
+                            .setParentSort("-1");
+                    if (strsOut.length - 1 >= i) {
+                        patentRight.setContentOut(strsOut[i]);
                     }
+                    patentRights.add(patentRight);
                 }
             }
-
+            this.saveOrUpdateBatch(patentRights);
         }
-        this.saveOrUpdateBatch(patentRights);
-
     }
 
 

+ 28 - 1
PAS/src/main/java/cn/cslg/pas/service/ProjectService.java

@@ -4,6 +4,7 @@ import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.core.exception.CustomException;
 import cn.cslg.pas.common.model.PersonnelVO;
 import cn.cslg.pas.common.model.dto.ClientDTO;
+import cn.cslg.pas.common.model.dto.EventAddNewDTO;
 import cn.cslg.pas.common.model.dto.UploadFileDTO;
 import cn.cslg.pas.common.model.vo.*;
 import cn.cslg.pas.common.utils.*;
@@ -11,7 +12,9 @@ import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.pas.common.utils.SecurityUtils.SecurityUtils;
 import cn.cslg.pas.common.utils.auth.checkAuth;
 import cn.cslg.pas.domain.*;
+import cn.cslg.pas.domain.asso.AssoEventProject;
 import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.AssoEventProjectMapper;
 import cn.cslg.pas.mapper.ProductMapper;
 import cn.cslg.pas.mapper.ProjectMapper;
 import cn.cslg.pas.mapper.asso.AssoStructurePatentMapper;
@@ -106,6 +109,8 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
     private final AssoStructurePatentMapper assoStructurePatentMapper;
     private final ProductMapper productMapper;
     private final ProjectMapper projectMapper;
+    private final IEventService eventService;
+    private final AssoEventProjectMapper assoEventProjectMapper;
 
     public Project getProjectByName(String name) {
         LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<>();
@@ -436,7 +441,7 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
         //检查专题库名称是否被占用
         Project temp = this.getProjectByName(project.getName());
         if (temp != null) {
-            return Response.error("专题库名称已存在");
+            ThrowException.throwXiaoShiException("专题库名称已存在");
         }
         if (project.getClientId() == null || project.getClientId() == -1) {
             ClientDTO clientDTO = new ClientDTO();
@@ -456,6 +461,28 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
         log.info("专题库表新增数据");
         project.insert();
         this.addProjectUser(project.getId());
+
+        //新增事件(若有添加事件)
+        List<EventAddNewDTO> eventAddNewDTOs = project.getEventAddNewDTOs();
+        Integer projectId = project.getId();
+        if (eventAddNewDTOs != null && eventAddNewDTOs.size() > 0) {
+            for (EventAddNewDTO eventAddNewDTO : eventAddNewDTOs) {
+                //若没有事件id则为新创建的事件,需要调用新增事件接口,若有事件id则为添加已有的事件,此时只需将事件id和专题库id存入关联表即可
+                Integer eventId = eventAddNewDTO.getId();
+                if (eventId == null) {
+                    eventAddNewDTO.setProjectId(projectId);
+                    eventService.addNew(eventAddNewDTO);
+                } else {
+                    AssoEventProject assoEventProject = new AssoEventProject()
+                            .setEventId(eventId)
+                            .setProjectId(projectId);
+                    assoEventProjectMapper.insert(assoEventProject);
+                }
+
+            }
+        }
+
+        log.info("新增专题库完成");
         return Response.success(project.getId());
     }
 

+ 5 - 3
PAS/src/main/java/cn/cslg/pas/service/asso/AssoProductPatentService.java

@@ -80,7 +80,9 @@ public class AssoProductPatentService extends ServiceImpl<AssoProductPatentMappe
         wrapper.eq(AssoProductPatent::getProductId, productId);
         wrapper.in(AssoProductPatent::getPatentNo, patentNos);
         List<String> patentNo = this.listObjs(wrapper, Object::toString);
-        patentNos.removeAll(patentNo);
+        ArrayList<String> list = new ArrayList<>();
+        list.addAll(patentNos);
+        list.removeAll(patentNo);
         if (patentNos.size() == 0) {
             return -1;
         }
@@ -130,8 +132,8 @@ public class AssoProductPatentService extends ServiceImpl<AssoProductPatentMappe
         if (params.getProductId() == null) {
             //当架构id不为null时
             if (params.getStructureId() != null) {
-           Structure structure =  structureService.getById(params.getStructureId());
-           params.setProductId(structure.getProductId());
+                Structure structure = structureService.getById(params.getStructureId());
+                params.setProductId(structure.getProductId());
             } else {
                 return pageList;
             }

+ 122 - 24
PAS/src/main/java/cn/cslg/pas/service/impl/EventServiceImpl.java

@@ -4,12 +4,16 @@ import cn.cslg.pas.common.JsonPage;
 import cn.cslg.pas.common.model.PersonnelVO;
 import cn.cslg.pas.common.model.dto.EventAddNewDTO;
 import cn.cslg.pas.common.model.dto.EventQueryPageDTO;
+import cn.cslg.pas.common.model.dto.EventUpdateDTO;
+import cn.cslg.pas.common.model.vo.EventListItemVO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.pas.common.utils.ThrowException;
 import cn.cslg.pas.domain.Event;
 import cn.cslg.pas.domain.Project;
+import cn.cslg.pas.domain.asso.AssoEventProject;
+import cn.cslg.pas.mapper.AssoEventProjectMapper;
 import cn.cslg.pas.mapper.EventMapper;
 import cn.cslg.pas.service.IEventService;
 import cn.cslg.pas.service.ProjectService;
@@ -27,6 +31,8 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.StringJoiner;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -41,6 +47,7 @@ import java.util.stream.Collectors;
 public class EventServiceImpl extends ServiceImpl<EventMapper, Event> implements IEventService {
     private final ProjectService projectService;
     private final EventMapper eventMapper;
+    private final AssoEventProjectMapper assoEventProjectMapper;
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
 
@@ -53,19 +60,14 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event> implements
     public void addNew(EventAddNewDTO eventAddNewDTO) {
         log.info("开始处理【新增事件】的业务,参数为:{}", eventAddNewDTO);
 
-        //检查名称是否被占用(同一租户下专题库不能有同名事件名称)
+        //检查名称是否被占用(同一租户下不能有同名事件名称)
         String questionName = eventAddNewDTO.getQuestionName();
-        Project project = projectService.getById(eventAddNewDTO.getProjectId());
+        Integer projectId = eventAddNewDTO.getProjectId();
+        Project project = projectService.getById(projectId);
         Integer tenantId = project.getTenantId();
-        LambdaQueryWrapper<Project> projectQueryWrapper = new LambdaQueryWrapper<>();
-        projectQueryWrapper.eq(Project::getTenantId, tenantId);
-        List<Project> projectList = projectService.list(projectQueryWrapper);
-        ArrayList<Integer> projectIds = new ArrayList<>();
-        for (Project n : projectList) {
-            projectIds.add(n.getId());
-        }
-        log.info("检查事件名称是否被占用(同一租户下专题库不能有同名事件)");
-        int count = eventMapper.countByNameAndProjectIds(questionName, projectIds);
+
+        log.info("检查事件名称是否被占用(同一租户下不能有同名事件)");
+        int count = eventMapper.countByNameAndTenantId(questionName, tenantId);
         if (count > 0) {
             ThrowException.throwXiaoShiException("新增事件失败,当前租户下事件名称【" + questionName + "】已存在,请尝试更换名称");
         }
@@ -73,9 +75,10 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event> implements
         //新增事件DTO数据赋值给事件表实体类
         Event event = new Event();
         BeanUtils.copyProperties(eventAddNewDTO, event);
+        event.setTenantId(tenantId);
         List<Integer> applicationScenarios = eventAddNewDTO.getApplicationScenarios();
         //若有应用场景,则将应用场景集合转换成以逗号拼接的字符串,并赋值给实体类对应参数
-        if (applicationScenarios != null && applicationScenarios.size() != 0) {
+        if (applicationScenarios != null && applicationScenarios.size() > 0) {
             String applicationScenario = applicationScenarios.stream().map(String::valueOf).collect(Collectors.joining(","));
             event.setApplicationScenario(applicationScenario);
         }
@@ -87,40 +90,135 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event> implements
                 .setCreatePersonName(personnelVO.getName());
 
         log.info("数据入事件表");
-        //this.save(event);
         int rows = eventMapper.insert(event);
         if (rows != 1) {
             ThrowException.throwXiaoShiException("新增事件失败,服务器忙请稍后再次尝试");
         }
 
+        //数据入事件和专题库关联表
+        Integer eventId = event.getId();
+        AssoEventProject assoEventProject = new AssoEventProject()
+                .setEventId(eventId)
+                .setProjectId(projectId);
+        log.info("数据入事件和专题库关联表");
+        rows = assoEventProjectMapper.insert(assoEventProject);
+        if (rows != 1) {
+            ThrowException.throwXiaoShiException("新增事件失败,数据入事件和专题库关联表失败,服务器忙请稍后再次尝试");
+        }
+
         log.info("新增事件完成");
 
     }
 
+    /**
+     * 分页查询事件
+     *
+     * @param eventQueryPageDTO 事件的分页查询DTO类对象
+     */
     @Override
-    public String query(EventQueryPageDTO eventQueryPageDTO) {
+    public JsonPage query(EventQueryPageDTO eventQueryPageDTO) {
         log.info("开始处理【分页查询事件】的业务,参数为:{}", eventQueryPageDTO);
 
-        Integer projectId = eventQueryPageDTO.getProjectId();
         Integer current = eventQueryPageDTO.getCurrent();
         Integer size = eventQueryPageDTO.getSize();
-        LambdaQueryWrapper<Event> queryWrapper = new LambdaQueryWrapper<>();
-        if (projectId != null) {
-            queryWrapper.eq(Event::getProjectId, projectId);
+        String orderBy = eventQueryPageDTO.getOrderBy();
+        if (orderBy != null && !orderBy.equals("")) {
+            String regex = "[A-Z]+";
+            Pattern compile = Pattern.compile(regex);
+            Matcher matcher = compile.matcher(orderBy);
+            while (matcher.find()) {
+                orderBy = orderBy.replaceFirst(matcher.group(), "_" + matcher.group().toLowerCase());
+            }
+            eventQueryPageDTO.setOrderBy(orderBy);
         }
 
         if (current != null && size != null) {
             PageHelper.startPage(current, size);
         }
-        List<Event> events = eventMapper.selectList(queryWrapper.orderByDesc(Event::getCreateTime));
-        for (Event event : events) {
-            String applicationScenario = event.getApplicationScenario();
+        List<EventListItemVO> queryResults = eventMapper.queryList(eventQueryPageDTO);
+        for (EventListItemVO queryResult : queryResults) {
+            String applicationScenario = queryResult.getApplicationScenario();
             if (applicationScenario != null && !applicationScenario.equals("")) {
-                List<Integer> applicationScenarios = Arrays.stream(applicationScenario.split(",")).map(Integer::parseInt).collect(Collectors.toList());
-                event.setApplicationScenarios(applicationScenarios);
+                List<Integer> applicationScenarioIds = Arrays.stream(applicationScenario.split(",")).map(Integer::parseInt).collect(Collectors.toList());
+                queryResult.setApplicationScenarios(applicationScenarioIds);
+            }
+        }
+        return JsonPage.restPage(new PageInfo<>(queryResults));
+    }
+
+    /**
+     * 修改事件
+     *
+     * @param eventUpdateDTO 修改事件的DTO类对象
+     */
+    @Override
+    public void update(EventUpdateDTO eventUpdateDTO) {
+        log.info("开始处理【修改事件】的业务,参数为:{}", eventUpdateDTO);
+
+        //检查尝试修改的数据是否存在
+        Event queryResult = eventMapper.selectById(eventUpdateDTO.getId());
+        if (queryResult == null) {
+            ThrowException.throwXiaoShiException("修改失败,访问的数据不存在,请尝试刷新页面");
+        }
+
+        //若修改了名称,则检查名称是否被占用(同一租户下专题库不能有同名事件名称)
+        String newQuestionName = eventUpdateDTO.getQuestionName();
+        String oldQuestionName = queryResult.getQuestionName();
+        Project project = projectService.getById(eventUpdateDTO.getProjectId());
+        Integer tenantId = project.getTenantId();
+        if (!newQuestionName.equals(oldQuestionName)) {
+            log.info("检查事件名称是否被占用(同一租户下专题库不能有同名事件)");
+            int count = eventMapper.countByNameAndTenantId(newQuestionName, tenantId);
+            if (count > 0) {
+                ThrowException.throwXiaoShiException("修改失败,当前租户下事件名称【" + newQuestionName + "】已存在,请尝试更换名称");
             }
         }
-        return Response.success(JsonPage.restPage(new PageInfo(events)));
+
+        //修改事件
+        Event event = new Event();
+        BeanUtils.copyProperties(eventUpdateDTO, event);
+        event.setTenantId(tenantId);
+        List<Integer> applicationScenarios = eventUpdateDTO.getApplicationScenarios();
+        if (applicationScenarios != null && applicationScenarios.size() > 0) {
+            String applicationScenario = applicationScenarios.stream().map(String::valueOf).collect(Collectors.joining(","));
+            event.setApplicationScenario(applicationScenario);
+        }
+        int rows = eventMapper.updateById(event);
+        if (rows != 1) {
+            ThrowException.throwXiaoShiException("修改失败,服务器忙请稍后再次尝试");
+        }
+
+        log.info("修改完成");
+
+    }
+
+    /**
+     * 根据id删除事件
+     *
+     * @param eventId   事件id
+     * @param projectId 专题库id
+     */
+    @Override
+    public void delete(Integer eventId, Integer projectId) {
+        log.info("开始处理【删除事件】的业务,参数为:{}, {}", eventId, projectId);
+
+        //检查尝试删除的数据是否存在
+        Event queryResult = eventMapper.selectById(eventId);
+        if (queryResult == null) {
+            ThrowException.throwXiaoShiException("删除失败,访问的数据不存在,请尝试刷新页面");
+        }
+
+        //删除事件和专题库关联表数据
+        assoEventProjectMapper.deleteByEventIdAndProjectId(eventId, projectId);
+
+        //删除事件表数据
+//        int rows = eventMapper.deleteById(eventId);
+//        if (rows != 1) {
+//            ThrowException.throwXiaoShiException("删除失败,服务器忙请稍后再次尝试");
+//        }
+
+        log.info("删除完成");
+
     }
 
 

+ 14 - 0
PAS/src/main/resources/mapper/AssoEventProjectMapper.xml

@@ -0,0 +1,14 @@
+<?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.AssoEventProjectMapper">
+    <!--根据事件id和专题库id删除数据-->
+    <!--int deleteByEventIdAndProjectId(Integer eventId, Integer projectId);-->
+    <delete id="deleteByEventIdAndProjectId">
+        delete
+        from pas.asso_event_project
+        where event_id = #{eventId}
+          and project_id = #{projectId}
+    </delete>
+
+</mapper>

+ 74 - 11
PAS/src/main/resources/mapper/EventMapper.xml

@@ -2,23 +2,86 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
 <mapper namespace="cn.cslg.pas.mapper.EventMapper">
-    <!--根据名称和专题库ids统计数量-->
-    <!--int countByNameAndProjectIds(String questionName, List<Integer> projectIds);-->
-    <select id="countByNameAndProjectIds" resultType="int">
+    <!--根据名称和租户id统计数量-->
+    <!--int countByNameAndTenantId(String questionName, Integer tenantId);-->
+    <select id="countByNameAndTenantId" resultType="int">
         select count(*)
         from pas.event
         where question_name = #{questionName}
-        and project_id in (
-        <foreach collection="projectIds" item="n" separator=",">
-            #{n}
-        </foreach>
-        )
+          and tenant_id = #{tenantId}
     </select>
 
     <!--分页查询事件列表-->
     <!--List<EventListItemVO> queryList(EventQueryPageDTO eventQueryPageDTO);-->
-<!--    <select id="queryList" resultMap="queryListMap">-->
-<!--        select from pas.event-->
-<!--    </select>-->
+    <select id="queryList" resultMap="queryListMap">
+        select eve.id eventId,
+        question_name,
+        description,
+        application_scenario as applicationScenario,
+        event_date,
+        tenant_id,
+        create_person_id,
+        create_person_name,
+        create_time,
+        modified_time
+        <if test="projectId != null and projectId != ''">
+            , project_id
+        </if>
+        from pas.event eve
+        <if test="projectId != null and projectId != ''">
+            join pas.asso_event_project asso on eve.id = asso.event_id
+        </if>
+        <where>
+            <if test="projectId != null and projectId != ''">
+                and project_id = #{projectId}
+            </if>
+            <if test="questionName != null and questionName != ''">
+                and question_name like '%${questionName}%'
+            </if>
+        </where>
+        order by
+        <choose>
+            <when test="orderBy != null and orderBy != ''">
+                ${orderBy} ${orderType}
+            </when>
+            <otherwise>
+                create_time desc
+            </otherwise>
+        </choose>
+    </select>
+
+    <resultMap id="queryListMap" type="cn.cslg.pas.common.model.vo.EventListItemVO">
+        <id column="eventId" property="id"/>
+        <result column="question_name" property="questionName"/>
+        <result column="description" property="description"/>
+        <result column="applicationScenario" property="applicationScenario"/>
+        <result column="event_date" property="eventDate"/>
+        <result column="tenant_id" property="tenantId"/>
+        <result column="create_person_id" property="createPersonId"/>
+        <result column="create_person_name" property="createPersonName"/>
+        <result column="create_time" property="createTime"/>
+        <result column="modified_time" property="modifiedTime"/>
+        <collection property="scenarioNames" ofType="string"
+                    select="select1" column="{applicationScenario=applicationScenario}">
+        </collection>
+        <collection property="projectIds" ofType="integer"
+                    select="select2" column="{eventId=eventId}">
+        </collection>
+    </resultMap>
+
+    <select id="select1" resultType="string">
+        select label
+        from pas.os_system_dict
+        where FIND_IN_SET(value, #{applicationScenario})
+          and type = "ENTERPRISE_APPLICATION_SCENARIO"
+        order by id
+    </select>
+
+    <select id="select2" resultType="integer">
+        select project_id
+        from pas.asso_event_project
+        where event_id = #{eventId}
+        order by id
+    </select>
 
 </mapper>