Browse Source

Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	PAS/src/main/java/cn/cslg/pas/service/impl/ProductCategoryServiceImpl.java
xiexiang 2 years ago
parent
commit
66156d5b62
37 changed files with 719 additions and 109 deletions
  1. 1 1
      PAS/src/main/java/cn/cslg/pas/common/config/WebSocketConfig.java
  2. 102 0
      PAS/src/main/java/cn/cslg/pas/common/model/PatentCell.java
  3. 3 0
      PAS/src/main/java/cn/cslg/pas/common/model/QueryPatentVO.java
  4. 1 1
      PAS/src/main/java/cn/cslg/pas/common/model/vo/ProductCategoryTrendVO.java
  5. 163 0
      PAS/src/main/java/cn/cslg/pas/common/model/vo/ProjectStandardVO.java
  6. 2 1
      PAS/src/main/java/cn/cslg/pas/common/model/vo/ProjectVO.java
  7. 1 0
      PAS/src/main/java/cn/cslg/pas/common/model/vo/TaskVO.java
  8. 3 3
      PAS/src/main/java/cn/cslg/pas/common/utils/FileUtils.java
  9. 1 1
      PAS/src/main/java/cn/cslg/pas/common/utils/Response.java
  10. 1 0
      PAS/src/main/java/cn/cslg/pas/common/utils/ResponseEnum.java
  11. 2 2
      PAS/src/main/java/cn/cslg/pas/common/utils/UploadPatentBatchUtil.java
  12. 6 2
      PAS/src/main/java/cn/cslg/pas/controller/ProductPatentController.java
  13. 7 1
      PAS/src/main/java/cn/cslg/pas/controller/ProjectController.java
  14. 8 5
      PAS/src/main/java/cn/cslg/pas/controller/SystemController.java
  15. 1 1
      PAS/src/main/java/cn/cslg/pas/domain/Project.java
  16. 1 8
      PAS/src/main/java/cn/cslg/pas/mapper/ProductMapper.java
  17. 21 0
      PAS/src/main/java/cn/cslg/pas/mapper/ProjectMapper.java
  18. 1 1
      PAS/src/main/java/cn/cslg/pas/mapper/AssoProductCategoryPictureMapper.java
  19. 8 0
      PAS/src/main/java/cn/cslg/pas/mapper/asso/AssoProductPatentMapper.java
  20. 1 1
      PAS/src/main/java/cn/cslg/pas/mapper/AssoProductPictureMapper.java
  21. 26 2
      PAS/src/main/java/cn/cslg/pas/mapper/AssoStructurePatentMapper.java
  22. 1 1
      PAS/src/main/java/cn/cslg/pas/mapper/AssoStructurePictureMapper.java
  23. 62 13
      PAS/src/main/java/cn/cslg/pas/service/ProjectService.java
  24. 87 26
      PAS/src/main/java/cn/cslg/pas/service/UploadPatentBatchService.java
  25. 38 11
      PAS/src/main/java/cn/cslg/pas/service/asso/AssoProductPatentService.java
  26. 42 7
      PAS/src/main/java/cn/cslg/pas/service/impl/ProductServiceImpl.java
  27. 1 1
      PAS/src/main/java/cn/cslg/pas/service/impl/StructurePatentServiceImpl.java
  28. 14 5
      PAS/src/main/java/cn/cslg/pas/service/impl/StructureServiceImpl.java
  29. 1 1
      PAS/src/main/resources/mapper/AssoProductCategoryPictureMapper.xml
  30. 12 2
      PAS/src/main/resources/mapper/AssoProductPatentMapper.xml
  31. 1 1
      PAS/src/main/resources/mapper/AssoProductPictureMapper.xml
  32. 32 6
      PAS/src/main/resources/mapper/AssoStructurePatentMapper.xml
  33. 1 1
      PAS/src/main/resources/mapper/AssoStructurePictureMapper.xml
  34. 2 4
      PAS/src/main/resources/mapper/ProductMapper.xml
  35. 27 0
      PAS/src/main/resources/mapper/ProjectMapper.xml
  36. 3 0
      PAS/src/main/resources/mapper/TaskMapper.xml
  37. 35 0
      PAS/src/test/java/cn/cslg/pas/mapper/AssoProductPatentMapperTests.java

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

+ 102 - 0
PAS/src/main/java/cn/cslg/pas/common/model/PatentCell.java

@@ -0,0 +1,102 @@
+package cn.cslg.pas.common.model;
+
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 管理员表
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-03-25
+ */
+@Data
+
+/*数据库中的表对应的类
+ */
+public class PatentCell {
+
+    /**
+     * 管理员用户名
+     */
+    private String patentNo;
+    private String title;
+    private String applications;
+    private String legal;
+    private String url;
+    private String abstrc;
+    private String picUrl;
+    /*
+    申请号
+     */
+    private String applicationNo;
+
+    private String country;
+    private String applicationDate;
+    private String pubilcDate;
+    /*
+    公开授权号
+     */
+    private String publicAccreditNo;
+    /*
+公开授权日
+     */
+    private String publicAccreditDate;
+    /*
+    主分类号
+     */
+    private String mainTypeNo;
+    /*
+      分类号
+       */
+    private String typeNo;
+    /*
+    申请人
+     */
+    private String applicationPerson;
+    /*
+申请人地址
+ */
+    private String applicationAddress;
+    /*
+  发明人
+   */
+    private String inventor;
+
+    /*
+    当前权利人
+     */
+    private String patentApplication;
+    /*
+    范畴分类
+     */
+    private String classical;
+    /*
+    状态
+     */
+    private String statue;
+    /*
+    摘要
+     */
+    private  String abstrText;
+    /*
+    主权要
+     */
+    private String mainRignt;
+    /*
+    权要
+     */
+    private List<String> rights;
+    /*
+    PDF文档
+     */
+    private String PDF;
+    /*
+说明书
+ */
+    private String patentInstructionText;
+
+}

+ 3 - 0
PAS/src/main/java/cn/cslg/pas/common/model/QueryPatentVO.java

@@ -14,6 +14,9 @@ import java.util.List;
  */
 @Data
 public class QueryPatentVO extends BaseVO {
+    //架构id
+    private Integer structureId;
+    //产品id
     private Integer productId;
     //专题库ID
     private Integer projectId;

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/common/model/vo/ProductCategoryTrendVO.java

@@ -28,7 +28,7 @@ public class ProductCategoryTrendVO implements Serializable {
         /**
          * 时间(季度或者月份)
          */
-        private String marketData;
+        private String marketDate;
 
         /**
          * 销售额

+ 163 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/ProjectStandardVO.java

@@ -0,0 +1,163 @@
+package cn.cslg.pas.common.model.vo;
+
+import cn.cslg.pas.common.model.BaseEntity;
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * 专题库表的标准查询VO类
+ */
+@Accessors(chain = true)
+@Data
+public class ProjectStandardVO extends BaseEntity<ProjectStandardVO> {
+    /**
+     * 标题
+     */
+    private String name;
+
+    /**
+     * 创建者(登录账户)ID
+     */
+    @TableField("creat_id")
+    private Integer createBy;
+
+    /**
+     * 技术主题
+     */
+    private String technicalTheme;
+
+    /**
+     * 内部案卷
+     */
+    @TableField("innerfile")
+    private String innerFile;
+
+    /**
+     * 是否更新 0 否  1 是
+     */
+    @TableField("`update`")
+    private Integer update;
+
+    /**
+     * 处理状态
+     */
+    private String status;
+
+    /**
+     * 合同号
+     */
+    private String contractNo;
+
+    /**
+     * 委案日
+     */
+    @TableField("`case`")
+    private String caseDate;
+
+    /**
+     * 更新周期
+     */
+    private String updateTime;
+
+    /**
+     * 排序
+     */
+    private Integer sort;
+
+    /**
+     * 委托方ID
+     */
+    @TableField("clientid")
+    private Integer clientId;
+
+    /**
+     * 委托场景ID
+     */
+    @TableField("scenarioid")
+    private String scenario;
+
+    /**
+     * 调查类型ID
+     */
+    @TableField("typeid")
+    private String type;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 部门ID
+     */
+    @TableField("department_id")
+    private Integer departmentId;
+
+    /**
+     * 部门ID
+     */
+    @TableField("personnel_id")
+    private Integer personnelId;
+    /**
+     * 租户ID
+     */
+    @TableField("tenantId")
+    private Integer tenantId;
+    /**
+     * 创建时间
+     */
+    private Integer createTime;
+
+    @TableField(exist = false)
+    private String clientName;
+
+    @TableField(exist = false)
+    private List<String> typeName;
+
+    @TableField(exist = false)
+    private List<String> scenarioName;
+
+    @TableField(exist = false)
+    private String createName;
+
+    @TableField(exist = false)
+    private List<Integer> scenarioList;
+
+    @TableField(exist = false)
+    private List<Integer> typeList;
+
+    @TableField(exist = false)
+    private Integer reportNum;
+
+    @TableField(exist = false)
+    private String departmentName;
+
+    @TableField(exist = false)
+    private String personnelName;
+
+    /**
+     * 产品id
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Integer productId;
+    /**
+     * 架构id
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Integer structureId;
+    /**
+     * 是否分类(1是 0否)
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Integer isCategory;
+    /**
+     * 产品名称
+     */
+    @TableField(exist = false)
+    private String productName;
+
+}

+ 2 - 1
PAS/src/main/java/cn/cslg/pas/common/model/vo/ProjectVO.java

@@ -26,13 +26,14 @@ public class ProjectVO extends BaseVO {
      */
     private Integer RoleType;
     /*
-  登录人Id
+    登录人Id
     */
     private Integer PersonnelId;
     /*
    登录人租户Id
     */
     private Integer tenantId;
+
     @Data
     public static class Sort {
         private String order;

+ 1 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/TaskVO.java

@@ -9,4 +9,5 @@ public class TaskVO extends BaseVO {
     private Integer type;
     private String createName;
     private String projectName;
+    private Integer productId;
 }

+ 3 - 3
PAS/src/main/java/cn/cslg/pas/common/utils/FileUtils.java

@@ -160,7 +160,7 @@ public class FileUtils {
             FileInputStream fis = new FileInputStream(file);
             OutputStream os = item.getOutputStream();
             int len = 8192;
-            while ((bytesRead = fis.read(buffer, 0, len)) != -1){
+            while ((bytesRead = fis.read(buffer, 0, len)) != -1) {
                 os.write(buffer, 0, bytesRead);
             }
             os.close();
@@ -168,12 +168,12 @@ public class FileUtils {
         } catch (IOException e) {
             e.printStackTrace();
         }
-        return (MultipartFile)new CommonsMultipartFile(item);
+        return (MultipartFile) new CommonsMultipartFile(item);
     }
 
     public static File getFile(String url) throws Exception {
         //读取图片类型
-        String fileName = url.substring(url.lastIndexOf("."),url.length());
+        String fileName = url.substring(url.lastIndexOf("."), url.length());
         File file = null;
 
         URL urlfile;

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/common/utils/Response.java

@@ -21,7 +21,7 @@ public class Response {
 
     public static String successBut(Object data) {
         Response response = new Response();
-        response.setCode(201);
+        response.setResultEnum(ResponseEnum.SUCCESSBUT);
         response.setData(data);
         return JsonUtils.objectToJson(response);
     }

+ 1 - 0
PAS/src/main/java/cn/cslg/pas/common/utils/ResponseEnum.java

@@ -21,6 +21,7 @@ public enum ResponseEnum {
     PATENT_IMPORT_TASK_ERROR(803, "专利导入专利失败"),
     PATENT_EXPORT_TASK_ERROR(804, "专利导出专利失败"),
     SYSTEM_ERROR(500, "系统异常"),
+    SUCCESSBUT(200, "请求成功"),
     ERROR(0, "请求失败");
 
     private Integer code;

+ 2 - 2
PAS/src/main/java/cn/cslg/pas/common/utils/UploadPatentBatchUtil.java

@@ -51,13 +51,13 @@ public class UploadPatentBatchUtil {
     }
 
     /**
-     * @param getSettingJson        配置文件解析出的Json串
+     * @param getSettingJson 配置文件解析出的Json串
      * @return uploadParamsVO 返回一个由processData方法填充完数据的Pojo类
      * @date 2022/7/7
      * @name 解析配置文件
      * @description 通过与前段传入参数中的数据源ID进行比对从而得到对应数据源的配置(parsingConfigurationFiles的兄弟方法)
      */
-    public static List<UploadSettingVO.Column> parsingConfigurationFilesBro( String getSettingJson) {
+    public static List<UploadSettingVO.Column> parsingConfigurationFilesBro(String getSettingJson) {
         //将 Json 转换为 对象数组
         List<UploadSettingVO> test = JsonUtils.jsonToList(getSettingJson, UploadSettingVO.class);
         //创建一个存放单一数据源的对象 这个对象存放的是 我们需要使用哪一个数据源的配置数据 所以只存一个 正常在Json文件里面会有多个数据源 也就是多条数据

+ 6 - 2
PAS/src/main/java/cn/cslg/pas/controller/ProductPatentController.java

@@ -42,7 +42,11 @@ public class ProductPatentController {
     @PostMapping("/add")
     @Operation(summary = "添加产品相关专利")
     public String addPatents(@RequestBody ProductPatentDTO patentDTO) {
-        assoProductPatentService.addPatents(patentDTO);
+
+        List<String> notQuery = assoProductPatentService.addPatents(patentDTO);
+        if (notQuery.size() > 0) {
+            return Response.successBut(notQuery);
+        }
         return Response.success(true);
     }
 
@@ -53,7 +57,7 @@ public class ProductPatentController {
         if (patentNos.size() == 0) {
             return Response.success("删除成功");
         }
-        return Response.successBut(patentNos);
+        return Response.success(patentNos);
     }
 
     @PostMapping("/importPatents")

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

@@ -8,6 +8,7 @@ import cn.cslg.pas.common.utils.StringUtils;
 import cn.cslg.pas.common.utils.auth.checkAuth;
 import cn.cslg.pas.domain.Project;
 import cn.cslg.pas.domain.ProjectUser;
+import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.ProjectPatentLinkService;
 import cn.cslg.pas.service.ProjectService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -65,7 +66,12 @@ ProjectController {
     @PostMapping("edit")
     @Operation(summary = "编辑专题库")
     public String edit(@RequestBody Project project) throws IOException {
-        return projectService.edit(project);
+        try {
+            projectService.edit(project);
+        } catch (XiaoShiException e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success();
     }
 
     @Permission(roles = {2})

+ 8 - 5
PAS/src/main/java/cn/cslg/pas/controller/SystemController.java

@@ -1,6 +1,7 @@
 package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.model.PatentCell;
 import cn.cslg.pas.common.model.QueryPatentVO;
 import cn.cslg.pas.common.model.vo.PatentVO;
 import cn.cslg.pas.common.model.vo.TaskVO;
@@ -41,6 +42,7 @@ public class SystemController {
     private final SystemDictService systemDictService;
     private final PatentService patentService;
     private final PatentFieldService patentFieldService;
+    private final UploadPatentBatchService uploadPatentBatchService;
 
     @PostMapping("dict")
     @Operation(summary = "根据类型获得字典")
@@ -81,11 +83,12 @@ public class SystemController {
         return Response.success(patentFieldService.getPageList(projectId));
     }
 
-    @PostMapping("gcease1")
-    @Operation(summary = "测试11111")
-    public List<Integer> getAllClient1() {
-        return new ArrayList<>();
-    }
+    @PostMapping("/patentCellTODb")
+    @Operation(summary = "专利上传到数据库")
+    public String   getPatentDTOListForRMS(@RequestBody PatentCell patentCell) {
+        uploadPatentBatchService.dataToDBCell(patentCell);
+        return Response.success();
 
+    }
 }
 

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

@@ -13,7 +13,7 @@ import java.util.List;
  * 专题库表
  * </p>
  *
- * @author 王岩
+ * @author  王岩
  * @since 2022-01-24
  */
 @Data

+ 1 - 8
PAS/src/main/java/cn/cslg/pas/mapper/ProductMapper.java

@@ -8,6 +8,7 @@ import org.apache.poi.sl.usermodel.Background;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * 产品表的Mapper层接口
@@ -34,14 +35,6 @@ public interface ProductMapper extends BaseMapper<Product> {
     int deleteById(Integer id);
 
     /**
-     * 根据产品类别id删除数据
-     *
-     * @param productCategoryId 产品类别id
-     * @return 返回受影响的行数
-     */
-    int deleteByProductCategoryId(Integer productCategoryId);
-
-    /**
      * 根据产品id修改数据
      *
      * @param product 产品数据对象

+ 21 - 0
PAS/src/main/java/cn/cslg/pas/mapper/ProjectMapper.java

@@ -1,11 +1,13 @@
 package cn.cslg.pas.mapper;
 
+import cn.cslg.pas.common.model.vo.ProjectStandardVO;
 import cn.cslg.pas.domain.Project;
 import cn.cslg.pas.common.model.vo.ProjectVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
@@ -17,8 +19,27 @@ import java.util.List;
  * @author 王岩
  * @since 2022-01-24
  */
+@Repository
 public interface ProjectMapper extends BaseMapper<Project> {
 
     IPage<Project> getPageList(Page<Project> page, ProjectVO params);
+
     List<Project> getListForCount(@Param("params") ProjectVO params);
+
+    /**
+     * 根据产品id统计数量
+     *
+     * @param productId 产品id
+     * @return 返回统计到的数量
+     */
+    int countByProductId(Integer productId);
+
+    /**
+     * 根据id查询数据
+     *
+     * @param id 专题库id
+     * @return 返回查询到的数据
+     */
+    ProjectStandardVO getStandardById(Integer id);
+
 }

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

@@ -1,4 +1,4 @@
-package cn.cslg.pas.mapper;
+package cn.cslg.pas.mapper.asso;
 
 import cn.cslg.pas.common.model.vo.ProductCategoryPictureVO;
 import cn.cslg.pas.domain.asso.AssoProductCategoryPicture;

+ 8 - 0
PAS/src/main/java/cn/cslg/pas/mapper/asso/AssoProductPatentMapper.java

@@ -38,4 +38,12 @@ public interface AssoProductPatentMapper extends BaseMapper<AssoProductPatent> {
      */
     int insert(AssoProductPatent assoProductPatent);
 
+    /**
+     * 根据产品id删除数据
+     *
+     * @param productId 产品id
+     * @return 返回受影响的行数
+     */
+    int deleteByProductId(Integer productId);
+
 }

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

@@ -1,4 +1,4 @@
-package cn.cslg.pas.mapper;
+package cn.cslg.pas.mapper.asso;
 
 import cn.cslg.pas.common.model.vo.ProductPictureVO;
 import cn.cslg.pas.domain.asso.AssoProductPicture;

+ 26 - 2
PAS/src/main/java/cn/cslg/pas/mapper/AssoStructurePatentMapper.java

@@ -1,4 +1,4 @@
-package cn.cslg.pas.mapper;
+package cn.cslg.pas.mapper.asso;
 
 import cn.cslg.pas.common.model.dto.AssoStructurePatentQueryDTO;
 import cn.cslg.pas.common.model.vo.AssoStructurePatentVO;
@@ -33,10 +33,34 @@ public interface AssoStructurePatentMapper extends BaseMapper<AssoStructurePaten
     int delete(AssoStructurePatent assoStructurePatent);
 
     /**
+     * 根据产品id统计数量
+     *
+     * @param productId 产品id
+     * @return 返回统计到的数量
+     */
+    int countByProductId(Integer productId);
+
+    /**
+     * 根据架构ids统计数量
+     *
+     * @param structureIds 架构ids
+     * @return 返回统计到的数量
+     */
+    int countByStructureIds(List<Integer> structureIds);
+
+    /**
+     * 根据专题库id统计数量
+     *
+     * @param projectId 专题库id
+     * @return 返回统计到的数量
+     */
+    int countByProjectId(Integer projectId);
+
+    /**
      * 根据专题库id和专利号查询数据
      *
      * @param assoStructurePatentQueryDTO 专题库产品架构专利号标引的查询DTO类
-     * @return  返回查询到的数据
+     * @return 返回查询到的数据
      */
     List<AssoStructurePatentVO> selectByProjectIdPatentNo(AssoStructurePatentQueryDTO assoStructurePatentQueryDTO);
 

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

@@ -1,4 +1,4 @@
-package cn.cslg.pas.mapper;
+package cn.cslg.pas.mapper.asso;
 
 import cn.cslg.pas.common.model.vo.StructurePictureVO;
 import cn.cslg.pas.domain.asso.AssoStructurePicture;

+ 62 - 13
PAS/src/main/java/cn/cslg/pas/service/ProjectService.java

@@ -5,16 +5,16 @@ 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.UploadFileDTO;
-import cn.cslg.pas.common.model.vo.ProjectExportVO;
-import cn.cslg.pas.common.model.vo.ProjectImportVO;
-import cn.cslg.pas.common.model.vo.ProjectVO;
-import cn.cslg.pas.common.model.vo.TaskParams;
+import cn.cslg.pas.common.model.vo.*;
 import cn.cslg.pas.common.utils.*;
 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.exception.XiaoShiException;
+import cn.cslg.pas.mapper.ProductMapper;
 import cn.cslg.pas.mapper.ProjectMapper;
+import cn.cslg.pas.mapper.asso.AssoStructurePatentMapper;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.IterUtil;
 import cn.hutool.core.date.DateField;
@@ -36,6 +36,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.scheduling.annotation.Async;
@@ -59,6 +60,7 @@ import java.util.stream.Collectors;
  * @author 王岩
  * @since 2022-01-24
  */
+@Slf4j
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
@@ -101,12 +103,15 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
     private final UserService userService;
     private final LoginUtils loginUtils;
     private final RequestService requestService;
+    private final AssoStructurePatentMapper assoStructurePatentMapper;
+    private final ProductMapper productMapper;
+    private final ProjectMapper projectMapper;
 
     public Project getProjectByName(String name) {
         LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<>();
-        PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
         queryWrapper.eq(Project::getName, name);
-        queryWrapper.eq(Project::getTenantId,personnelVO.getTenantId());
+        queryWrapper.eq(Project::getTenantId, personnelVO.getTenantId());
         queryWrapper.last("limit 1");
         return this.getOne(queryWrapper);
     }
@@ -128,6 +133,7 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
                 params.setTenantId(personnelVO.getTenantId());
             }
         }
+        //分页查询专题库列表
         IPage<Project> pageList = baseMapper.getPageList(new Page<>(params.getCurrent(), params.getSize()), params);
 
         List<Project> dataList = pageList.getRecords();
@@ -139,6 +145,12 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
             JSONArray jsonArray1 = JSON.parseArray(jsonObject);
             List<ProjectVO.Department> departmentList = jsonArray1.toJavaList(ProjectVO.Department.class);
             for (Project project : dataList) {
+                Integer productId = project.getProductId();
+                if (productId != null) {
+                    ProductVO queryResult = productMapper.getStandardById(productId);
+                    String productName = queryResult.getProductName();
+                    project.setProductName(productName);
+                }
                 for (ProjectVO.Department department : departmentList) {
                     if (project.getDepartmentId() != null) {
                         if (project.getDepartmentId().equals(department.getId())) {
@@ -190,7 +202,19 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
         }
         LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.in(Project::getId, ids);
+        //根据ids查询专题库列表
         List<Project> dataList = this.list(queryWrapper);
+        //↓根据专题库id查询专题库时,查询到的就是一条,就将当前专题库的产品名字赋值(他妈的两个控制层方法调当前业务层,坑爹)
+        if (dataList.size() == 1) {
+            for (Project project : dataList) {
+                Integer productId = project.getProductId();
+                if (productId != null) {
+                    ProductVO queryResult = productMapper.getStandardById(productId);
+                    String productName = queryResult.getProductName();
+                    project.setProductName(productName);
+                }
+            }
+        }
         try {
             //获取所属部门对应信息
             String jsonObject = requestService.getDepartmentFromPCS(dataList);
@@ -260,8 +284,7 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
                 item.setTypeList(StringUtils.changeStringToInteger(item.getType(), ","));
                 item.setTypeName(systemDictList.stream().filter(systemDict -> systemDict.getType().equals(Constants.INVESTIGATION_TYPE) && item.getTypeList().contains(Integer.parseInt(systemDict.getValue()))).map(SystemDict::getLabel).collect(Collectors.toList()));
                 item.setType(null);
-            }
-            else{
+            } else {
                 item.setTypeList(new ArrayList<Integer>());
             }
         });
@@ -410,11 +433,12 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
     @Transactional
     public String add(Project project) throws IOException {
         PersonnelVO user = cacheUtils.getLoginUserPersonnel(loginUtils.getId());
+        //检查专题库名称是否被占用
         Project temp = this.getProjectByName(project.getName());
         if (temp != null) {
             return Response.error("专题库名称已存在");
         }
-        if (project.getClientId()==null||project.getClientId() == -1) {
+        if (project.getClientId() == null || project.getClientId() == -1) {
             ClientDTO clientDTO = new ClientDTO();
             clientDTO.setName(project.getClientName());
             clientDTO.setTenantId(user.getTenantId());
@@ -428,6 +452,8 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
         project.setCreateBy(loginUtils.getId());
         project.setCreateTime(DateUtils.getDateTime());
         project.setTenantId(user.getTenantId());
+        //专题库表新增数据
+        log.info("专题库表新增数据");
         project.insert();
         this.addProjectUser(project.getId());
         return Response.success(project.getId());
@@ -435,11 +461,28 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
 
     @Transactional
     public String edit(Project project) throws IOException {
+        //检查当前专题库的修改是否要修改产品
+        Integer projectId = project.getId();
+        Integer newProductId = project.getProductId();
+        ProjectStandardVO queryResult = projectMapper.getStandardById(projectId);
+        Integer oldProductId = queryResult.getProductId();
+        //若当前产品id和原产品id不一致,则表示当前的修改要修改产品
+        if (!newProductId.equals(oldProductId)) {
+            //检查当前专题库产品架构是否已标引,若已标引则不允许修改产品
+            int count = assoStructurePatentMapper.countByProjectId(projectId);
+            if (count > 0) {
+                String message = "修改专题库失败,该专题库已被标引,无法更换产品或架构";
+                log.info("{}", message);
+                throw new XiaoShiException(message);
+            }
+        }
+
         Project temp = this.getProjectByName(project.getName());
+        //检查尝试修改的新专题库名称是否被占用
         if (temp != null && !temp.getId().equals(project.getId())) {
             return Response.error("专题库名称已存在");
         }
-        if (project.getClientId()==null||project.getClientId() == -1) {
+        if (project.getClientId() == null || project.getClientId() == -1) {
             ClientDTO clientDTO = new ClientDTO();
             clientDTO.setName(project.getClientName());
             clientDTO.setTenantId(project.getTenantId());
@@ -450,12 +493,16 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
         }
         project.setScenario(StringUtils.join(project.getScenarioList(), ","));
         project.setType(StringUtils.join(project.getTypeList(), ","));
+        //专题库表修改数据
+        log.info("专题库表修改数据");
         project.updateById();
         return Response.success();
     }
 
     @Transactional
     public String delete(Integer id) {
+        //专题库表删除数据
+        log.info("专题库表删除数据");
         this.removeById(id);
         this.deleteProjectUser(id, loginUtils.getId());
         projectPatentLinkService.deleteByProjectId(id);
@@ -464,6 +511,8 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
         projectUserService.deleteByProjectId(id);
         projectFileService.deleteByProjectId(id);
         patentApplicantMergeLinkService.deleteByProjectId(id);
+        //陈宇 ↓ 删除专题库id关联产品id关联架构id(asso_structure_patent表)数据
+        assoStructurePatentMapper.deleteByProjectId(id);
         return Response.success();
     }
 
@@ -575,7 +624,7 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
         for (int i = 1; i < rowList.size(); i++) {
             mapList.add(IterUtil.toMap(rowList.get(0), rowList.get(i)));
         }
-        Integer taskId = taskService.add(fileDTO, projectId, null,rowList.size() - 1, 1, 0, file.getOriginalFilename());
+        Integer taskId = taskService.add(fileDTO, projectId, null, rowList.size() - 1, 1, 0, file.getOriginalFilename());
         TaskParams taskParams = new TaskParams();
         taskParams.setTaskId(taskId);
         taskParams.setPath(path);
@@ -587,7 +636,7 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
     }
 
     //获得
-    public TaskParams getImportPatentTaskParamsBro(MultipartFile file,Integer productId) {
+    public TaskParams getImportPatentTaskParamsBro(MultipartFile file, Integer productId) {
         //上传文档
         UploadFileDTO fileDTO = fileUtils.uploadFile(file);
         //获得文档保存的路径
@@ -599,7 +648,7 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
         for (int i = 1; i < rowList.size(); i++) {
             mapList.add(IterUtil.toMap(rowList.get(0), rowList.get(i)));
         }
-        Integer taskId = taskService.add(fileDTO, null,productId, rowList.size() - 1, 1, 0, file.getOriginalFilename());
+        Integer taskId = taskService.add(fileDTO, null, productId, rowList.size() - 1, 1, 0, file.getOriginalFilename());
         TaskParams taskParams = new TaskParams();
         taskParams.setPath(path);
         taskParams.setTaskId(taskId);

+ 87 - 26
PAS/src/main/java/cn/cslg/pas/service/UploadPatentBatchService.java

@@ -1,6 +1,7 @@
 package cn.cslg.pas.service;
 
 import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.model.PatentCell;
 import cn.cslg.pas.common.model.dto.TaskWebSocketDTO;
 import cn.cslg.pas.common.model.params.*;
 import cn.cslg.pas.common.model.vo.ProjectImportPatentVO;
@@ -235,7 +236,7 @@ public class UploadPatentBatchService {
             //发明人 OS_PATENT_INVENTOR
             patentInventorBusiness(uploadParamsVO);
             //申请人(原始)/权利人(当前) OS_PATENT_APPLICATION || OS_APPLICATION_ATTR
-                patentApplicationBusiness(uploadParamsVO);
+            patentApplicationBusiness(uploadParamsVO);
             //申请人地址 OS_PATENT_APPLICATION
             patentApplicationAddressBusiness(uploadParamsVO);
             //专题库关联专利信息 OS_THEMATIC_PID
@@ -322,7 +323,7 @@ public class UploadPatentBatchService {
             //发明人 OS_PATENT_INVENTOR
             patentInventorBusiness(uploadParamsVO);
             //申请人(原始)/权利人(当前) OS_PATENT_APPLICATION || OS_APPLICATION_ATTR
-                patentApplicationBusiness(uploadParamsVO);
+            patentApplicationBusiness(uploadParamsVO);
             //申请人地址 OS_PATENT_APPLICATION
             patentApplicationAddressBusiness(uploadParamsVO);
             //分类号关联 OS_PATENT_TYPENO
@@ -345,6 +346,7 @@ public class UploadPatentBatchService {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
         }
     }
+
     /**
      * @param uploadParamsVO 全局类
      * @date 2022-7-11
@@ -376,7 +378,6 @@ public class UploadPatentBatchService {
             patentRightParams.setSelfContent(uploadParamsVO.getSelfContent());
         }
         patentRightService.updatePatentRight(patentRightParams);
-
         patentRightService.importAuthority(patentRightParams);
     }
 
@@ -467,29 +468,29 @@ public class UploadPatentBatchService {
     //申请人(原始)/权利人(当前) OS_PATENT_APPLICATION || OS_APPLICATION_ATTR
     private void patentApplicationBusiness(UploadParamsVO uploadParamsVO) {
         // 根据本条数据的名字查询所有的申请人信息
-      List<String> name =new ArrayList<>();
-       if(uploadParamsVO.getPatentApplicantCurrentName()!=null){
-           name.addAll(uploadParamsVO.getPatentApplicantCurrentName());
-       }
-       if(uploadParamsVO.getPatentApplicantOriginalName()!=null){
-           name.addAll(uploadParamsVO.getPatentApplicantOriginalName());
-       }
-        if(uploadParamsVO.getPatentApplicantStandardCurrentName()!=null){
+        List<String> name = new ArrayList<>();
+        if (uploadParamsVO.getPatentApplicantCurrentName() != null) {
+            name.addAll(uploadParamsVO.getPatentApplicantCurrentName());
+        }
+        if (uploadParamsVO.getPatentApplicantOriginalName() != null) {
+            name.addAll(uploadParamsVO.getPatentApplicantOriginalName());
+        }
+        if (uploadParamsVO.getPatentApplicantStandardCurrentName() != null) {
             name.addAll(uploadParamsVO.getPatentApplicantStandardCurrentName());
         }
-        if(uploadParamsVO.getPatentApplicantStandardOriginalName()!=null){
+        if (uploadParamsVO.getPatentApplicantStandardOriginalName() != null) {
             name.addAll(uploadParamsVO.getPatentApplicantStandardOriginalName());
         }
-        if(name.size()!=0) {
+        if (name.size() != 0) {
             List<PatentApplicant> patentApplicantList = patentApplicantService.list(Wrappers.<PatentApplicant>lambdaQuery().in(PatentApplicant::getName, name));
             //权利人
-            if(uploadParamsVO.getPatentApplicantCurrentName()!=null||uploadParamsVO.getPatentApplicantStandardCurrentName()!=null)
-            patentApplicantLinkService.updatePatentApplicantLink(uploadParamsVO.getPatentApplicantCurrentName(), uploadParamsVO.getPatentApplicantStandardCurrentName(), 1, uploadParamsVO.getPatent().getId(), patentApplicantList);
+            if (uploadParamsVO.getPatentApplicantCurrentName() != null || uploadParamsVO.getPatentApplicantStandardCurrentName() != null)
+                patentApplicantLinkService.updatePatentApplicantLink(uploadParamsVO.getPatentApplicantCurrentName(), uploadParamsVO.getPatentApplicantStandardCurrentName(), 1, uploadParamsVO.getPatent().getId(), patentApplicantList);
             //申请人
-            if(uploadParamsVO.getPatentApplicantOriginalName()!=null||uploadParamsVO.getPatentApplicantStandardOriginalName()!=null)
-            patentApplicantLinkService.updatePatentApplicantLink(uploadParamsVO.getPatentApplicantOriginalName(), uploadParamsVO.getPatentApplicantStandardOriginalName(), 2, uploadParamsVO.getPatent().getId(), patentApplicantList);
-        }
+            if (uploadParamsVO.getPatentApplicantOriginalName() != null || uploadParamsVO.getPatentApplicantStandardOriginalName() != null)
+                patentApplicantLinkService.updatePatentApplicantLink(uploadParamsVO.getPatentApplicantOriginalName(), uploadParamsVO.getPatentApplicantStandardOriginalName(), 2, uploadParamsVO.getPatent().getId(), patentApplicantList);
         }
+    }
 
     private void patentApplicationAddressBusiness(UploadParamsVO uploadParamsVO) {
         PatentApplicantAddressParams patentApplicantAddressParams = new PatentApplicantAddressParams();
@@ -582,28 +583,23 @@ public class UploadPatentBatchService {
     }
 
 
-
     @Async("singleThreadAsyncTaskExecutor")
-    public void uploadPatentForProduct(TaskParams params,Integer productId) {
+    public void uploadPatentForProduct(TaskParams params, Integer productId) {
         Integer total = params.getRowList().size();
         try {
             //先解析Json文件 获得配置文件的Json串
             String getSettingJson = fileUtils.analysisJsonFile();
             //查找需求数据源的对应配置
             List<UploadSettingVO.Column> jsonData = UploadPatentBatchUtil.parsingConfigurationFilesBro(getSettingJson);
-
             Map<String, PictureData> pictureDataMap = ExcelUtils.getDataFromExcel(params.getPath());
-
             //将数据进行装配并进行数据库操作
             for (int i = 0; i < params.getRowList().size(); i++) {
                 //获取每一行的数据
                 Map<Object, Object> row = params.getRowList().get(i);
                 //基础数据装配
                 UploadParamsVO uploadParamsVO = UploadPatentBatchUtil.processData(row, jsonData);
-
                 //查询数据是否存在 如果存在 返回该条数据 如果不存在 新增一条数据
                 getOneOrInsertOne(uploadParamsVO);
-
                 //专利信息需要特殊处理部分
                 //专利信息(摘要附图)数据装配
                 PictureData pictureData = pictureDataMap.get(String.valueOf(i + 1));
@@ -617,12 +613,11 @@ public class UploadPatentBatchService {
                     if (uploadParamsVO.getPatent().getAgencyId() != null) {
                         uploadParamsVO.getPatent().setAgencyId(patentAgencyService.getAgencyStringIdByName(uploadParamsVO.getPatent().getAgencyId()));
                     }
-
                 }
                 //将装配对象中的数据保存到数据库
                 dataToDBBro(params, uploadParamsVO);
                 //添加关联关系
-                assoProductPatentService.addPatents(Arrays.asList(uploadParamsVO.getPatent().getPatentNo()),productId);
+                assoProductPatentService.addPatents(Arrays.asList(uploadParamsVO.getPatent().getPatentNo()), productId);
                 //通过WebSocket 在每一次循环结束后 向前端发送完成进度
                 WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
                         .setTaskId(params.getTaskId())
@@ -657,4 +652,70 @@ public class UploadPatentBatchService {
             FLAG = 0;
         }
     }
+
+    /**
+     * @date 2022-7-11
+     * @name 数据库交互
+     * @description 将装配完毕的VO类向数据库中不同的表进行添加或修改操作(dataToDB兄弟类)
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public String dataToDBCell(PatentCell patentCell) {
+        UploadParamsVO uploadParamsVO = new UploadParamsVO();
+        uploadParamsVO.setPatent(new Patent());
+        uploadParamsVO.getPatent().setPatentNo(patentCell.getPatentNo());
+        getOneOrInsertOne(uploadParamsVO);
+        uploadParamsVO.setSimpleStatus(patentCell.getStatue());
+        try {
+            //专利信息 OS_PATENT
+            if (uploadParamsVO.getPatent() != null) {
+                List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Collections.singletonList(Constants.PATENT_SIMPLE_STATUS));
+                Integer simpleStatus = Integer.parseInt(systemDictList.stream()
+                        .filter(systemDict -> systemDict.getType().equals(Constants.PATENT_SIMPLE_STATUS) && systemDict.getLabel().equals(uploadParamsVO.getPatentSimpleStatus()))
+                        .findFirst()
+                        .orElse(new SystemDict()).getValue());
+                uploadParamsVO.getPatent().setSimpleStatus(simpleStatus);
+                uploadParamsVO.getPatent().updateById();
+            }
+            uploadParamsVO.setPatentRight(new PatentRight());
+            uploadParamsVO.getPatentRight().setContent(StringUtils.join(patentCell.getRights(), ""));
+            uploadParamsVO.setSelfContent(patentCell.getMainRignt());
+            //权利要求 OS_PATENT_RIGHT
+            patentRightBusiness(uploadParamsVO);
+            //说明书(文本) OS_PATENT_INSTRUCTION_TEXT
+            uploadParamsVO.setPatentInstructionText(new PatentInstructionText());
+            uploadParamsVO.getPatentInstructionText().setManual(patentCell.getPatentInstructionText());
+            if (uploadParamsVO.getPatentInstructionText() != null) {
+                patentInstructionTextBusiness(uploadParamsVO);
+            }
+            //简单同族 OS_PATENT_SIMPLEFAMILY
+            patentSimplyFamilyBusiness(uploadParamsVO);
+            //发明人 OS_PATENT_INVENTOR
+            patentInventorBusiness(uploadParamsVO);
+            //申请人(原始)/权利人(当前) OS_PATENT_APPLICATION || OS_APPLICATION_ATTR
+            patentApplicationBusiness(uploadParamsVO);
+            //申请人地址 OS_PATENT_APPLICATION
+            patentApplicationAddressBusiness(uploadParamsVO);
+            //分类号关联 OS_PATENT_TYPENO
+            patentTypeNoBusiness(uploadParamsVO);
+            //事务信息 OS_PATENT_AFFAIR
+            patentAffairBusiness(uploadParamsVO);
+            return Response.success();
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (uploadParamsVO.getPatent() != null) {
+                ImportErrorLog importErrorLog = new ImportErrorLog();
+                importErrorLog.setPatentId(uploadParamsVO.getPatent().getId())
+                        .setPatentNo(uploadParamsVO.getPatent().getPatentNo())
+                        .setCreateTime(new SimpleDateFormat("yyyy-MM-dd 24HI:mm:ss").format(new Date()));
+//                        .setCreateUserId(Integer.parseInt(params.getUserId()))
+//                        .setMistakeMessage(e.getMessage())
+//                        .setProjectId(params.getProjectId());
+                importErrorLogMapper.insert(importErrorLog);
+                FLAG += 1;
+            }
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return Response.error();
+        }
+    }
+
 }

+ 38 - 11
PAS/src/main/java/cn/cslg/pas/service/asso/AssoProductPatentService.java

@@ -12,6 +12,7 @@ import cn.cslg.pas.domain.asso.AssoProductPatent;
 import cn.cslg.pas.mapper.asso.AssoProductPatentMapper;
 import cn.cslg.pas.service.*;
 import cn.cslg.pas.service.impl.StructurePatentServiceImpl;
+import cn.cslg.pas.service.impl.StructureServiceImpl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -47,17 +48,29 @@ public class AssoProductPatentService extends ServiceImpl<AssoProductPatentMappe
     private final SystemDictService systemDictService;
     private final PatentSimpleFamilyLinkService patentSimpleFamilyLinkService;
     private final StructurePatentServiceImpl assoStructurePatentService;
+    private final StructureServiceImpl structureService;
 
     /**
      * 给产品添加相关专利
      */
-    public int addPatents(ProductPatentDTO patentDTO) {
-        patentDTO.setIsIn(0);
-        List<String> patentNos = this.baseMapper.getPatentNos(patentDTO);
-        if (patentNos.size() == 0) {
-            return -1;
+    @Transactional
+    public List<String> addPatents(ProductPatentDTO patentDTO) {
+        List<String> orgPatentNos = new ArrayList<>();
+        if (patentDTO.getPatentNo() != null) {
+            patentDTO.setPatentNo(patentDTO.getPatentNo().replace(" ", ""));
+            if (!patentDTO.getPatentNo().equals("")) {
+                String[] strs = patentDTO.getPatentNo().split("\\|");
+                patentDTO.setPatentNo("(^|,)(" + patentDTO.getPatentNo() + ")(,|$)");
+                orgPatentNos = new ArrayList<>(Arrays.asList(strs));
+                patentDTO.setIsIn(0);
+                List<String> patentNos = this.baseMapper.getPatentNos(patentDTO);
+                orgPatentNos.removeAll(patentNos);
+                if (patentNos.size() > 0) {
+                    this.baseMapper.insertBatch(patentNos, patentDTO.getProductId());
+                }
+            }
         }
-        return this.baseMapper.insertBatch(patentNos, patentDTO.getProductId());
+        return orgPatentNos;
     }
 
 
@@ -78,8 +91,9 @@ public class AssoProductPatentService extends ServiceImpl<AssoProductPatentMappe
     public List<String> deletePatents(ProductPatentDTO patentDTO) {
         patentDTO.setIsIn(1);
         List<String> patentNos = new ArrayList<>();
-        if (patentDTO.getStartNumber() != null && patentDTO.getEndNumber() != null && patentDTO.getEndNumber() > patentDTO.getStartNumber()) {
-            patentDTO.setEndNumber(patentDTO.getEndNumber() - patentDTO.getStartNumber() + 1);
+        if (patentDTO.getStartNumber() != null && patentDTO.getEndNumber() != null && patentDTO.getEndNumber() >= patentDTO.getStartNumber()) {
+            patentDTO.setStartNumber(patentDTO.getStartNumber() - 1);
+            patentDTO.setEndNumber(patentDTO.getEndNumber() - patentDTO.getStartNumber());
             patentNos = this.baseMapper.getPatentNos(patentDTO);
         }
         if (patentDTO.getPatentNos() != null && patentDTO.getPatentNos().size() > 0) {
@@ -105,14 +119,27 @@ public class AssoProductPatentService extends ServiceImpl<AssoProductPatentMappe
             wrapper.eq(AssoProductPatent::getProductId, patentDTO.getProductId());
             wrapper.in(AssoProductPatent::getPatentNo, patentNos);
             this.remove(wrapper);
-            return assoPatents;
+            patentNos.removeAll(assoPatents);
+            return patentNos;
         }
-        return assoPatents;
+        return patentNos;
     }
 
     public IPage<PatentDTO> getPageList(QueryPatentVO params) {
-        IPage<Patent> dataPage = baseMapper.getPageList(new Page<>(params.getCurrent(), params.getSize()), params);
         IPage<PatentDTO> pageList = new Page<>();
+        //当产品Id为null
+        if (params.getProductId() == null) {
+            //当架构id不为null时
+            if (params.getStructureId() != null) {
+           Structure structure =  structureService.getById(params.getStructureId());
+           params.setProductId(structure.getProductId());
+            } else {
+                return pageList;
+            }
+
+        }
+        IPage<Patent> dataPage = baseMapper.getPageList(new Page<>(params.getCurrent(), params.getSize()), params);
+
         List<PatentDTO> records = new ArrayList<>();
         List<Integer> patentIds = dataPage.getRecords().stream().map(Patent::getId).collect(Collectors.toList());
         List<PatentApplicant> patentApplicantList = patentApplicantService.getPatentApplicantByPatentIds(patentIds);

+ 42 - 7
PAS/src/main/java/cn/cslg/pas/service/impl/ProductServiceImpl.java

@@ -11,12 +11,15 @@ import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.FileUtils;
 import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.pas.domain.Product;
-import cn.cslg.pas.domain.Project;
+import cn.cslg.pas.domain.asso.AssoProductPatent;
 import cn.cslg.pas.domain.asso.AssoProductPicture;
+import cn.cslg.pas.domain.asso.AssoStructurePatent;
 import cn.cslg.pas.exception.XiaoShiException;
-import cn.cslg.pas.mapper.AssoProductPictureMapper;
-import cn.cslg.pas.mapper.ProductMapper;
 import cn.cslg.pas.mapper.ProjectMapper;
+import cn.cslg.pas.mapper.asso.AssoProductPictureMapper;
+import cn.cslg.pas.mapper.ProductMapper;
+import cn.cslg.pas.mapper.asso.AssoProductPatentMapper;
+import cn.cslg.pas.mapper.asso.AssoStructurePatentMapper;
 import cn.cslg.pas.service.IProductService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
@@ -43,6 +46,9 @@ import java.util.List;
 public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements IProductService {
     private final ProductMapper productMapper;
     private final AssoProductPictureMapper assoProductPictureMapper;
+    private final AssoProductPatentMapper assoProductPatentMapper;
+    private final AssoStructurePatentMapper assoStructurePatentMapper;
+    private final ProjectMapper projectMapper;
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
     private final FileUtils fileUtils;
@@ -92,7 +98,15 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
             throw new XiaoShiException(message);
         }
 
+        //数据入产品专利关联表(若有专利)
         String patentNo = productAddNewDTO.getPatentNo();
+        if (patentNo != null) {
+            AssoProductPatent assoProductPatent = new AssoProductPatent()
+                    .setPatentNo(patentNo)
+                    .setProductId(product.getId());
+            log.info("数据入产品专利关联表");
+            assoProductPatentMapper.insert(assoProductPatent);
+        }
 
 
         //如果有图片,图片文件上传至服务器,后获取图片文件的名称、后缀名、url地址,赋值给产品类别图片关联表实体类
@@ -213,15 +227,18 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
         for (ProductVO productVO : productVOs) {
             List<ProductPatentVO> productPatents = productVO.getProductPatents();
             List<StructurePatentVO> structurePatents = productVO.getStructurePatents();
-            //ArrayList<String> patentNos = new ArrayList<>();
             HashSet<String> patentNos = new HashSet<>();
             for (ProductPatentVO productPatent : productPatents) {
                 String patentNo = productPatent.getPatentNo();
-                patentNos.add(patentNo);
+                if (patentNo != null) {
+                    patentNos.add(patentNo);
+                }
             }
             for (StructurePatentVO structurePatent : structurePatents) {
                 String patentNo = structurePatent.getPatentNo();
-                patentNos.add(patentNo);
+                if (patentNo != null) {
+                    patentNos.add(patentNo);
+                }
             }
             //相关专利数量赋值给patentNum
             productVO.setPatentNum(patentNos.size());
@@ -241,10 +258,28 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
             throw new XiaoShiException(message);
         }
 
-        //删除产品图片数据
+        //检查专题库表中是否有该产品数据,若有则不允许删除
+        count = projectMapper.countByProductId(id);
+        if (count > 0) {
+            String message = "删除产品失败,该产品已被专题库使用,请尝试先修改专题库";
+            log.info("{}", message);
+            throw new XiaoShiException(message);
+        }
+
+        //删除产品架构专利号专题库关联表数据
+        log.info("产品架构专利号专题库关联表删除数据");
+        AssoStructurePatent assoStructurePatent = new AssoStructurePatent()
+                .setProductId(id);
+        assoStructurePatentMapper.delete(assoStructurePatent);
+
+        //删除产品图片关联表数据
         log.info("产品图片关联表删除数据");
         assoProductPictureMapper.deleteByProductId(id);
 
+        //删除产品专利关联表数据
+        log.info("产品专利关联表删除数据");
+        assoProductPatentMapper.deleteByProductId(id);
+
         //删除产品数据
         log.info("产品表删除数据");
         int rows = productMapper.deleteById(id);

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/service/impl/StructurePatentServiceImpl.java

@@ -5,7 +5,7 @@ import cn.cslg.pas.common.model.dto.AssoStructurePatentUpdateDTO;
 import cn.cslg.pas.common.model.vo.AssoStructurePatentVO;
 import cn.cslg.pas.domain.asso.AssoStructurePatent;
 import cn.cslg.pas.exception.XiaoShiException;
-import cn.cslg.pas.mapper.AssoStructurePatentMapper;
+import cn.cslg.pas.mapper.asso.AssoStructurePatentMapper;
 import cn.cslg.pas.service.IStructurePatentService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;

+ 14 - 5
PAS/src/main/java/cn/cslg/pas/service/impl/StructureServiceImpl.java

@@ -11,8 +11,8 @@ import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.pas.domain.Structure;
 import cn.cslg.pas.domain.asso.AssoStructurePicture;
 import cn.cslg.pas.exception.XiaoShiException;
-import cn.cslg.pas.mapper.AssoStructurePatentMapper;
-import cn.cslg.pas.mapper.AssoStructurePictureMapper;
+import cn.cslg.pas.mapper.asso.AssoStructurePatentMapper;
+import cn.cslg.pas.mapper.asso.AssoStructurePictureMapper;
 import cn.cslg.pas.mapper.StructureMapper;
 import cn.cslg.pas.service.IStructureService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -319,7 +319,7 @@ public class StructureServiceImpl extends ServiceImpl<StructureMapper, Structure
     /**
      * 查询所有架构的路径和路径拼接成的架构名称
      *
-     * @param queryPathStructureNameDTO   数据DTO对象
+     * @param queryPathStructureNameDTO 数据DTO对象
      * @return 返回查询到的数据
      */
     @Override
@@ -387,9 +387,18 @@ public class StructureServiceImpl extends ServiceImpl<StructureMapper, Structure
             structureIds.add(structureId);
         }
 
+        //检查产品架构专利号专题库表是否有该架构和其所有子级架构数据,若有则不允许删除
+        log.info("检查产品架构专利号专题库表是否有该架构和其所有子级架构数据,若有则不允许删除");
+        int count = assoStructurePatentMapper.countByStructureIds(structureIds);
+        if (count > 0) {
+            String message = "删除架构失败,该架构或其子级架构正在被专题库标引使用,请尝试先删除其关联数据";
+            log.info("{}", message);
+            throw new XiaoShiException(message);
+        }
+
         //架构和专利关联表删除数据
-        log.info("架构和专利关联表删除数据");
-        assoStructurePatentMapper.deleteByStructureIds(structureIds);
+        //log.info("架构和专利关联表删除数据");
+        //assoStructurePatentMapper.deleteByStructureIds(structureIds);
 
         //架构和图片关联表删除数据
         log.info("架构和图片关联表删除数据");

+ 1 - 1
PAS/src/main/resources/mapper/AssoProductCategoryPictureMapper.xml

@@ -1,7 +1,7 @@
 <?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.AssoProductCategoryPictureMapper">
+<mapper namespace="cn.cslg.pas.mapper.asso.AssoProductCategoryPictureMapper">
     <!--插入数据-->
     <!--int insert(AssoProductCategoryPicture assoProductCategoryPicture);-->
     <insert id="insert" useGeneratedKeys="true" keyProperty="id">

+ 12 - 2
PAS/src/main/resources/mapper/AssoProductPatentMapper.xml

@@ -74,6 +74,9 @@
             <if test="params.patentName !=null and params.patentName !=''">
                 and a.`name` like concat("%", #{params.patentName}, "%")
             </if>
+            <if test="params.structureId !=null and params.structureId !=''">
+                and t.structure_id = #{params.structureId}
+            </if>
             <if test="params.orderItem!=null and params.orderItem!='SysOrder'">
                 order by #{params.orderItem}
                 <if test="params.orderType!=null">
@@ -90,7 +93,6 @@
                     #{item}
                 </foreach>
             </if>
-
         </where>
     </select>
 
@@ -134,7 +136,7 @@
                 and h.code like concat("%", #{params.numberUpc}, "%")
             </if>
             <if test="params.patentNo !=null and params.patentNo !=''">
-                and a.patentNo = #{params.patentNo}
+                and a.patentNo REGEXP  #{params.patentNo}
             </if>
             <if test="params.applicationNo !=null and params.applicationNo !=''">
                 and a.applicationNo like concat("%", #{params.applicationNo}, "%")
@@ -182,5 +184,13 @@
         values (#{patentNo}, #{productId});
     </insert>
 
+    <!--根据产品id删除数据-->
+    <!--int deleteByProductId(Integer productId);-->
+    <delete id="deleteByProductId">
+        delete
+        from asso_product_patent
+        where product_id = #{productId};
+    </delete>
+
 
 </mapper>

+ 1 - 1
PAS/src/main/resources/mapper/AssoProductPictureMapper.xml

@@ -1,7 +1,7 @@
 <?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.AssoProductPictureMapper">
+<mapper namespace="cn.cslg.pas.mapper.asso.AssoProductPictureMapper">
     <!--批量插入数据-->
     <!--int insertBatch(List<AssoProductPicture> assoProductPictures);-->
     <insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">

+ 32 - 6
PAS/src/main/resources/mapper/AssoStructurePatentMapper.xml

@@ -1,7 +1,7 @@
 <?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.AssoStructurePatentMapper">
+<mapper namespace="cn.cslg.pas.mapper.asso.AssoStructurePatentMapper">
     <!--插入数据-->
     <!--int insert(AssoStructurePatent assoStructurePatent);-->
     <insert id="insert" useGeneratedKeys="true" keyProperty="id">
@@ -30,9 +30,35 @@
         </where>
     </delete>
 
+    <!--根据产品id统计数量-->
+    <!--int countByProductId(Integer productId);-->
+    <select id="countByProductId" resultType="int">
+        select count(*)
+        from asso_structure_patent
+        where product_Id = #{productId}
+    </select>
+
+    <!--根据架构ids统计数量-->
+    <!--int countByStructureIds(List<Integer> structureIds);-->
+    <select id="countByStructureIds" resultType="int">
+        select count(*) from asso_structure_patent where structure_id in (
+        <foreach collection="list" item="n" separator=",">
+            #{n}
+        </foreach>
+        )
+    </select>
+
+    <!--根据专题库id统计数量-->
+    <!--int countByProjectId(Integer projectId);-->
+    <select id="countByProjectId" resultType="int">
+        select count(*)
+        from asso_structure_patent
+        where project_id = #{projectId}
+    </select>
+
     <!-- 根据专题库id和专利号查询数据-->
-    <!--List<AssoStructurePatentVO> selectByOsThematicIdPatentNo(AssoStructurePatentQueryDTO assoStructurePatentQueryDTO);-->
-    <select id="selectByProjectIdPatentNo" resultMap="selectByOsThematicIdPatentNoMap">
+    <!--List<AssoStructurePatentVO> selectByProjectIdPatentNo(AssoStructurePatentQueryDTO assoStructurePatentQueryDTO);-->
+    <select id="selectByProjectIdPatentNo" resultMap="selectByProjectIdPatentNoMap">
         select id,
                structure_id,
                patent_no,
@@ -43,12 +69,12 @@
           and patent_no = #{patentNo}
     </select>
 
-    <resultMap id="selectByOsThematicIdPatentNoMap" type="cn.cslg.pas.common.model.vo.AssoStructurePatentVO">
+    <resultMap id="selectByProjectIdPatentNoMap" type="cn.cslg.pas.common.model.vo.AssoStructurePatentVO">
         <id column="id" property="id"/>
         <result column="structure_id" property="structureId"/>
         <result column="patent_no" property="patentNo"/>
         <result column="product_Id" property="productId"/>
-        <result column="os_thematic_id" property="osThematicId"/>
+        <result column="project_id" property="projectId"/>
     </resultMap>
 
     <!--根据架构id批量删除数据-->
@@ -64,7 +90,7 @@
     </delete>
 
     <!--根据专题库id删除数据-->
-    <!--int deleteByOsThematicId(Integer osThematicId);-->
+    <!--int deleteByProjectId(Integer projectId);-->
     <delete id="deleteByProjectId">
         delete
         from asso_structure_patent

+ 1 - 1
PAS/src/main/resources/mapper/AssoStructurePictureMapper.xml

@@ -1,7 +1,7 @@
 <?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.AssoStructurePictureMapper">
+<mapper namespace="cn.cslg.pas.mapper.asso.AssoStructurePictureMapper">
     <!--批量插入数据-->
     <!--int insertBatch(List<AssoStructurePicture> assoStructurePictures);-->
     <insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">

+ 2 - 4
PAS/src/main/resources/mapper/ProductMapper.xml

@@ -121,10 +121,8 @@
             </if>
             <if test="patentNo != null">
                 and id in
-                (select app.product_id, asp.product_Id
-                from asso_product_patent app,
-                asso_structure_patent asp
-                where app.patent_no = #{patentNo} and asp.patent_no = #{patentNo})
+                (select product_id from asso_product_patent where patent_no = #{patentNo}
+                union select product_id from asso_structure_patent where patent_no = #{patentNo})
             </if>
             <if test="productCategoryId != null">
                 and product_category_id = #{productCategoryId}

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

@@ -77,4 +77,31 @@
         </where>
 
     </select>
+
+    <!--根据产品id统计数量-->
+    <!--int countByProductId(Integer productId);-->
+    <select id="countByProductId" resultType="int">
+        select count(*)
+        from os_thematic
+        where product_id = #{productId}
+    </select>
+
+    <!--根据id查询数据-->
+    <!--ProjectVO getStandardById(Integer id);-->
+    <select id="getStandardById" resultMap="getStandardByIdMap">
+        select id,
+               product_id,
+               structure_id,
+               is_category
+        from os_thematic
+        where id = #{id}
+    </select>
+
+    <resultMap id="getStandardByIdMap" type="cn.cslg.pas.common.model.vo.ProjectStandardVO">
+        <id column="id" property="id"/>
+        <result column="product_id" property="productId"/>
+        <result column="structure_id" property="structureId"/>
+        <result column="is_category" property="isCategory"/>
+    </resultMap>
+
 </mapper>

+ 3 - 0
PAS/src/main/resources/mapper/TaskMapper.xml

@@ -21,6 +21,9 @@
             <if test="params.projectId != null">
                 and a.tid = #{params.projectId}
             </if>
+            <if test="params.productId != null">
+                and a.product_id = #{params.productId}
+            </if>
             <if test="params.projectName != '' and params.projectName != null">
                 and c.name like concat('%', #{params.projectName}, '%')
             </if>

+ 35 - 0
PAS/src/test/java/cn/cslg/pas/mapper/AssoProductPatentMapperTests.java

@@ -0,0 +1,35 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.asso.AssoProductPatent;
+import cn.cslg.pas.mapper.asso.AssoProductPatentMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+/**
+ * @Author chenyu
+ * @Date 2023/3/16
+ */
+@Slf4j
+@SpringBootTest
+public class AssoProductPatentMapperTests {
+    @Autowired
+    private AssoProductPatentMapper assoProductPatentMapper;
+
+    @Test
+    void insert() {
+        AssoProductPatent assoProductPatent = new AssoProductPatent()
+                .setPatentNo("dsadsa3213SD")
+                .setProductId(2);
+        int rows = assoProductPatentMapper.insert(assoProductPatent);
+        log.info("插入数据完成,返回受影响的行数:{}", rows);
+    }
+
+    @Test
+    void deleteByProductId() {
+        int rows = assoProductPatentMapper.deleteByProductId(2);
+        log.info("根据产品id删除数据完成,返回受影响的行数:{}", rows);
+    }
+
+}