chendayu 2 лет назад
Родитель
Сommit
795ef10f7c
25 измененных файлов с 631 добавлено и 71 удалено
  1. 23 0
      PAS/src/main/java/cn/cslg/pas/common/model/dto/AssoStructurePatentQueryDTO.java
  2. 40 0
      PAS/src/main/java/cn/cslg/pas/common/model/dto/AssoStructurePatentUpdateDTO.java
  3. 36 0
      PAS/src/main/java/cn/cslg/pas/common/model/vo/AssoStructurePatentVO.java
  4. 26 0
      PAS/src/main/java/cn/cslg/pas/common/model/vo/ProductPatentVO.java
  5. 9 0
      PAS/src/main/java/cn/cslg/pas/common/model/vo/ProductVO.java
  6. 35 0
      PAS/src/main/java/cn/cslg/pas/common/model/vo/StructurePatentVO.java
  7. 55 0
      PAS/src/main/java/cn/cslg/pas/controller/ProductStructurePatentIndexController.java
  8. 2 1
      PAS/src/main/java/cn/cslg/pas/controller/ProjectController.java
  9. 23 1
      PAS/src/main/java/cn/cslg/pas/domain/Project.java
  10. 10 2
      PAS/src/main/java/cn/cslg/pas/domain/asso/AssoPatentStructure.java
  11. 36 0
      PAS/src/main/java/cn/cslg/pas/mapper/AssoStructurePatentMapper.java
  12. 2 2
      PAS/src/main/java/cn/cslg/pas/mapper/AssoStructurePictureMapper.java
  13. 12 2
      PAS/src/main/java/cn/cslg/pas/mapper/ProductMapper.java
  14. 31 0
      PAS/src/main/java/cn/cslg/pas/service/IStructurePatentService.java
  15. 42 10
      PAS/src/main/java/cn/cslg/pas/service/ProjectService.java
  16. 1 5
      PAS/src/main/java/cn/cslg/pas/service/impl/ProductCategoryServiceImpl.java
  17. 1 1
      PAS/src/main/java/cn/cslg/pas/service/impl/ProductMarketDataIServicempl.java
  18. 20 0
      PAS/src/main/java/cn/cslg/pas/service/impl/ProductServiceImpl.java
  19. 80 0
      PAS/src/main/java/cn/cslg/pas/service/impl/StructurePatentServiceImpl.java
  20. 30 29
      PAS/src/main/java/cn/cslg/pas/service/impl/StructureServiceImpl.java
  21. 56 0
      PAS/src/main/resources/mapper/AssoStructurePatentMapper.xml
  22. 4 2
      PAS/src/main/resources/mapper/AssoStructurePictureMapper.xml
  23. 43 3
      PAS/src/main/resources/mapper/ProductMapper.xml
  24. 13 12
      PAS/src/main/resources/mapper/ProjectMapper.xml
  25. 1 1
      PAS/src/main/resources/mapper/StructureMapper.xml

+ 23 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/AssoStructurePatentQueryDTO.java

@@ -0,0 +1,23 @@
+package cn.cslg.pas.common.model.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 专题库产品架构专利号标引的查询DTO类
+ */
+@Accessors(chain = true)
+@Data
+public class AssoStructurePatentQueryDTO implements Serializable {
+    /**
+     * 专利号
+     */
+    private String patentNo;
+    /**
+     * 专题库id
+     */
+    private Integer projectId;
+
+}

+ 40 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/AssoStructurePatentUpdateDTO.java

@@ -0,0 +1,40 @@
+package cn.cslg.pas.common.model.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.apache.xpath.operations.Bool;
+
+import java.io.Serializable;
+
+/**
+ * 专题库产品架构专利号标引的修改DTO类
+ */
+@Accessors(chain = true)
+@Data
+public class AssoStructurePatentUpdateDTO implements Serializable {
+    /**
+     * ID
+     */
+    private Integer id;
+    /**
+     * 架构id
+     */
+    private Integer structureId;
+    /**
+     * 专利号
+     */
+    private String patentNo;
+    /**
+     * 产品id
+     */
+    private Integer productId;
+    /**
+     * 专题库id
+     */
+    private Integer projectId;
+    /**
+     * 更新类型(1新增 0删除)
+     */
+    private Boolean updateType;
+
+}

+ 36 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/AssoStructurePatentVO.java

@@ -0,0 +1,36 @@
+package cn.cslg.pas.common.model.vo;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 专题库产品架构专利号标引的标准查询VO类
+ */
+@Accessors(chain = true)
+@Data
+public class AssoStructurePatentVO implements Serializable {
+    /**
+     * ID
+     */
+    private Integer id;
+    /**
+     * 架构id
+     */
+    private Integer structureId;
+    /**
+     * 专利号
+     */
+    private String patentNo;
+    /**
+     * 产品id
+     */
+    private Integer productId;
+    /**
+     * 专题库id
+     */
+    private Integer projectId;
+
+}

+ 26 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/ProductPatentVO.java

@@ -0,0 +1,26 @@
+package cn.cslg.pas.common.model.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 产品和专利标准查询VO类
+ */
+@Accessors(chain = true)
+@Data
+public class ProductPatentVO implements Serializable {
+    /**
+     * ID
+     */
+    private Integer id;
+    /**
+     * 专利号
+     */
+    private String patentNo;
+    /**
+     * 产品id
+     */
+    private Integer productId;
+}

+ 9 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/ProductVO.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.model.vo;
 
+import cn.cslg.pas.domain.asso.AssoStructurePatent;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
@@ -61,6 +62,14 @@ public class ProductVO implements Serializable {
      */
     private List<ProductPictureVO> pictures;
     /**
+     * 产品的专利
+     */
+    private List<ProductPatentVO> productPatents;
+    /**
+     * 架构的专利
+     */
+    private List<StructurePatentVO> structurePatents;
+    /**
      * 相关专利数量
      */
     private Integer patentNum;

+ 35 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/StructurePatentVO.java

@@ -0,0 +1,35 @@
+package cn.cslg.pas.common.model.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 架构和专利标准查询VO类
+ */
+@Accessors(chain = true)
+@Data
+public class StructurePatentVO implements Serializable {
+    /**
+     * ID
+     */
+    private Integer id;
+    /**
+     * 专利号
+     */
+    private String patentNo;
+    /**
+     * 架构id
+     */
+    private Integer structureId;
+    /**
+     * 产品id
+     */
+    private Integer productId;
+    /**
+     * 专题库id
+     */
+    private Integer projectId;
+
+}

+ 55 - 0
PAS/src/main/java/cn/cslg/pas/controller/ProductStructurePatentIndexController.java

@@ -0,0 +1,55 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.model.dto.AssoStructurePatentQueryDTO;
+import cn.cslg.pas.common.model.dto.AssoStructurePatentUpdateDTO;
+import cn.cslg.pas.common.model.vo.AssoStructurePatentVO;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.IStructurePatentService;
+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 java.util.List;
+
+/**
+ * 产品架构专利号标引的Controller层
+ *
+ * @Author chenyu
+ * @Date 2023/3/15
+ */
+@Tag(name = "专题库标引管理模块")
+@RequiredArgsConstructor
+@Slf4j
+@RequestMapping(Constants.API_VERSION_V2 + "/productStructurePatentIndex")
+@RestController
+public class ProductStructurePatentIndexController {
+    private final IStructurePatentService structurePatentService;
+
+    @Operation(summary = "更新标引")
+    @PostMapping("/update")
+    public String update(@RequestBody AssoStructurePatentUpdateDTO assoStructurePatentUpdateDTO) {
+        log.info("开始处理【更新标引】的请求,请求参数为:{}", assoStructurePatentUpdateDTO);
+        try {
+            structurePatentService.update(assoStructurePatentUpdateDTO);
+        } catch (XiaoShiException e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success("更新标引");
+    }
+
+    @Operation(summary = "查询标引")
+    @PostMapping("/query")
+    public String query(@RequestBody AssoStructurePatentQueryDTO assoStructurePatentQueryDTO) {
+        log.info("开始处理【查询标引】的业务,参数为:{}", assoStructurePatentQueryDTO);
+        List<AssoStructurePatentVO> query = structurePatentService.query(assoStructurePatentQueryDTO);
+        return Response.success(query);
+    }
+
+}

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

@@ -46,9 +46,10 @@ ProjectController {
     public String getPageList(@RequestBody ProjectVO params) throws IOException {
         return Response.success(projectService.getPageList(params));
     }
+
     @GetMapping("getProjectById")
     @Operation(summary = "根据Id获得专题库")
-    public String getProject(Integer id ) throws IOException {
+    public String getProject(Integer id) throws IOException {
         return Response.success(projectService.getProjectByIds(Arrays.asList(id)));
     }
 

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

@@ -1,6 +1,7 @@
 package cn.cslg.pas.domain;
 
 import cn.cslg.pas.common.model.BaseEntity;
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -18,7 +19,6 @@ import java.util.List;
 @Data
 @TableName("os_thematic")
 public class Project extends BaseEntity<Project> {
-
     /**
      * 标题
      */
@@ -143,4 +143,26 @@ public class Project extends BaseEntity<Project> {
 
     @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;
+
 }

+ 10 - 2
PAS/src/main/java/cn/cslg/pas/domain/asso/AssoPatentStructure.java

@@ -7,12 +7,12 @@ import lombok.experimental.Accessors;
 import java.io.Serializable;
 
 /**
- * 专利架构关联表实体类
+ * 专题库产品架构专利号标引表实体类
  */
 @Accessors(chain = true)
 @Data
 @TableName(value = "asso_structure_patent")
-public class AssoPatentStructure implements Serializable {
+public class AssoStructurePatent implements Serializable {
     /**
      * ID
      */
@@ -25,5 +25,13 @@ public class AssoPatentStructure implements Serializable {
      * 专利号
      */
     private String patentNo;
+    /**
+     * 产品id
+     */
+    private Integer productId;
+    /**
+     * 专题库id
+     */
+    private Integer projectId;
 
 }

+ 36 - 0
PAS/src/main/java/cn/cslg/pas/mapper/AssoStructurePatentMapper.java

@@ -1,5 +1,8 @@
 package cn.cslg.pas.mapper;
 
+import cn.cslg.pas.common.model.dto.AssoStructurePatentQueryDTO;
+import cn.cslg.pas.common.model.vo.AssoStructurePatentVO;
+import cn.cslg.pas.domain.asso.AssoStructurePatent;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -13,6 +16,30 @@ import java.util.List;
 @Repository
 public interface AssoStructurePatentMapper {
     /**
+     * 插入标引数据
+     *
+     * @param assoStructurePatent 数据对象
+     * @return 返回受影响的行数
+     */
+    int insert(AssoStructurePatent assoStructurePatent);
+
+    /**
+     * 删除标引数据
+     *
+     * @param assoStructurePatent 数据对象
+     * @return 返回受影响的行数
+     */
+    int delete(AssoStructurePatent assoStructurePatent);
+
+    /**
+     * 根据专题库id和专利号查询数据
+     *
+     * @param assoStructurePatentQueryDTO 专题库产品架构专利号标引的查询DTO类
+     * @return 返回查询到的数据
+     */
+    List<AssoStructurePatentVO> selectByProjectIdPatentNo(AssoStructurePatentQueryDTO assoStructurePatentQueryDTO);
+
+    /**
      * 根据架构id批量删除数据
      *
      * @param structureIds 架构ids
@@ -20,4 +47,13 @@ public interface AssoStructurePatentMapper {
      */
     int deleteByStructureIds(List<Integer> structureIds);
 
+    /**
+     * 根据专题库id删除数据
+     *
+     * @param projectId 专题库id
+     * @return 返回受影响的行数
+     */
+    int deleteByProjectId(Integer projectId);
+
+
 }

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

@@ -33,10 +33,10 @@ public interface AssoStructurePictureMapper {
     /**
      * 根据架构ids批量删除数据
      *
-     * @param structures 架构ids
+     * @param structureIds 架构ids
      * @return 返回受影响的行数
      */
-    int deleteByStructureIds(List<Integer> structures);
+    int deleteByStructureIds(List<Integer> structureIds);
 
     /**
      * 根据架构id查询数据

+ 12 - 2
PAS/src/main/java/cn/cslg/pas/mapper/ProductMapper.java

@@ -34,8 +34,10 @@ public interface ProductMapper extends BaseMapper<Product> {
     int deleteById(Integer id);
 
     /**
-     * @param productCategoryId
-     * @return
+     * 根据产品类别id删除数据
+     *
+     * @param productCategoryId 产品类别id
+     * @return 返回受影响的行数
      */
     int deleteByProductCategoryId(Integer productCategoryId);
 
@@ -73,6 +75,14 @@ public interface ProductMapper extends BaseMapper<Product> {
     int countByProductCategoryId(Integer productCategoryId);
 
     /**
+     * 根据id查询数据
+     *
+     * @param id 产品id
+     * @return 返回查询到的数据
+     */
+    ProductVO getStandardById(Integer id);
+
+    /**
      * 分页查询数据
      *
      * @param productQueryPageDTO 分页信息

+ 31 - 0
PAS/src/main/java/cn/cslg/pas/service/IStructurePatentService.java

@@ -0,0 +1,31 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.common.model.dto.AssoStructurePatentQueryDTO;
+import cn.cslg.pas.common.model.dto.AssoStructurePatentUpdateDTO;
+import cn.cslg.pas.common.model.vo.AssoStructurePatentVO;
+
+import java.util.List;
+
+/**
+ * 专题库产品架构专利号标引的Service层接口
+ *
+ * @Author chenyu
+ * @Date 2023/3/15
+ */
+public interface IStructurePatentService {
+    /**
+     * 更新标引(新增或删除)
+     *
+     * @param assoStructurePatentUpdateDTO 专题库产品架构专利号标引的修改DTO类对象
+     */
+    void update(AssoStructurePatentUpdateDTO assoStructurePatentUpdateDTO);
+
+    /**
+     * 查询标引
+     *
+     * @param assoStructurePatentQueryDTO 专题库产品架构专利号标引的查询DTO类
+     * @return 返回查询到的数据
+     */
+    List<AssoStructurePatentVO> query(AssoStructurePatentQueryDTO assoStructurePatentQueryDTO);
+
+}

+ 42 - 10
PAS/src/main/java/cn/cslg/pas/service/ProjectService.java

@@ -5,15 +5,14 @@ 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.mapper.AssoStructurePatentMapper;
+import cn.cslg.pas.mapper.ProductMapper;
 import cn.cslg.pas.mapper.ProjectMapper;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.IterUtil;
@@ -36,6 +35,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 +59,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 +102,14 @@ 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;
 
     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 +131,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 +143,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 +200,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 +282,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 +431,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 +450,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 +459,13 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
 
     @Transactional
     public String edit(Project project) throws IOException {
+        System.out.println(project);
         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 +476,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 +494,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();
     }
 

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

@@ -12,19 +12,15 @@ import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.pas.domain.Product;
 import cn.cslg.pas.domain.ProductCategory;
 import cn.cslg.pas.domain.ProductMarketData;
-import cn.cslg.pas.domain.Project;
 import cn.cslg.pas.domain.asso.AssoProductCategoryPicture;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.AssoProductCategoryPictureMapper;
 import cn.cslg.pas.mapper.ProductCategoryMapper;
 import cn.cslg.pas.mapper.ProductMapper;
-import cn.cslg.pas.mapper.ProjectMapper;
 import cn.cslg.pas.service.IProductCategoryService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
-import io.swagger.v3.oas.models.security.SecurityScheme;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
@@ -53,7 +49,7 @@ public class ProductCategoryServiceImpl implements IProductCategoryService {
     private final LoginUtils loginUtils;
     private final FileUtils fileUtils;
     private final ProductServiceImpl productService;
-    private final ProductMarketDataIServicempl productMarketDataIService;
+    private final ProductMarketDataServiceImpl productMarketDataIService;
 
     /**
      * 新增产品类别

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

@@ -35,7 +35,7 @@ import java.util.regex.Pattern;
 @RequiredArgsConstructor
 @Slf4j
 @Service
-public class ProductMarketDataIServicempl extends ServiceImpl<ProductMarketDataMapper, ProductMarketData> implements IProductMarketDataService {
+public class ProductMarketDataServiceImpl extends ServiceImpl<ProductMarketDataMapper, ProductMarketData> implements IProductMarketDataService {
     private final ProductMarketDataMapper productMarketDataMapper;
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;

+ 20 - 0
PAS/src/main/java/cn/cslg/pas/service/impl/ProductServiceImpl.java

@@ -3,8 +3,10 @@ package cn.cslg.pas.service.impl;
 import cn.cslg.pas.common.JsonPage;
 import cn.cslg.pas.common.model.PersonnelVO;
 import cn.cslg.pas.common.model.dto.*;
+import cn.cslg.pas.common.model.vo.ProductPatentVO;
 import cn.cslg.pas.common.model.vo.ProductPictureVO;
 import cn.cslg.pas.common.model.vo.ProductVO;
+import cn.cslg.pas.common.model.vo.StructurePatentVO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.FileUtils;
 import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
@@ -26,6 +28,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 
 /**
@@ -203,6 +206,23 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
             PageHelper.startPage(current, size);
         }
         List<ProductVO> productVOs = productMapper.query(productQueryPageDTO);
+        //遍历产品数据,计算出每一个产品的相关专利数量,赋值给patentNum
+        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);
+            }
+            for (StructurePatentVO structurePatent : structurePatents) {
+                String patentNo = structurePatent.getPatentNo();
+                patentNos.add(patentNo);
+            }
+            //相关专利数量赋值给patentNum
+            productVO.setPatentNum(patentNos.size());
+        }
         return JsonPage.restPage(new PageInfo<>(productVOs));
     }
 

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

@@ -0,0 +1,80 @@
+package cn.cslg.pas.service.impl;
+
+import cn.cslg.pas.common.model.dto.AssoStructurePatentQueryDTO;
+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.service.IStructurePatentService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 专题库产品架构专利号标引的Service层接口实现类
+ *
+ * @Author chenyu
+ * @Date 2023/3/15
+ */
+@RequiredArgsConstructor
+@Slf4j
+@Service
+public class StructurePatentServiceImpl implements IStructurePatentService {
+    private final AssoStructurePatentMapper assoStructurePatentMapper;
+
+    /**
+     * 更新标引(新增或删除)
+     *
+     * @param assoStructurePatentUpdateDTO 专题库产品架构专利号标引的修改DTO类对象
+     */
+    @Override
+    public void update(AssoStructurePatentUpdateDTO assoStructurePatentUpdateDTO) {
+        log.info("开始处理【更新标引】的业务,参数为:{}", assoStructurePatentUpdateDTO);
+
+        //获取DTO中的updateType类型,true则为新增标引,false则为删除标引
+        Boolean updateType = assoStructurePatentUpdateDTO.getUpdateType();
+        //DTO对象赋值给实体类
+        AssoStructurePatent assoStructurePatent = new AssoStructurePatent();
+        BeanUtils.copyProperties(assoStructurePatentUpdateDTO, assoStructurePatent);
+        //true则新增标引,false则删除标引
+        if (updateType) {
+            log.info("架构专利关联表新增数据");
+            int rows = assoStructurePatentMapper.insert(assoStructurePatent);
+            if (rows != 1) {
+                String message = "新增标引失败,服务器忙请稍后再次尝试";
+                log.info("{}", message);
+                throw new XiaoShiException(message);
+            }
+        } else {
+            log.info("架构专利关联表删除数据");
+            int rows = assoStructurePatentMapper.delete(assoStructurePatent);
+            if (rows != 1) {
+                String message = "删除标引失败,服务器忙请稍后再次尝试";
+                log.info("{}", message);
+                throw new XiaoShiException(message);
+            }
+        }
+
+        log.info("更新标引完成");
+
+    }
+
+    /**
+     * 查询标引
+     *
+     * @param assoStructurePatentQueryDTO 专题库产品架构专利号标引的查询DTO类
+     * @return 返回查询到的数据
+     */
+    @Override
+    public List<AssoStructurePatentVO> query(AssoStructurePatentQueryDTO assoStructurePatentQueryDTO) {
+        log.info("开始处理【查询标引】的业务,参数为:{}", assoStructurePatentQueryDTO);
+        List<AssoStructurePatentVO> queryResult = assoStructurePatentMapper.selectByProjectIdPatentNo(assoStructurePatentQueryDTO);
+        return queryResult;
+    }
+
+
+}

+ 30 - 29
PAS/src/main/java/cn/cslg/pas/service/impl/StructureServiceImpl.java

@@ -11,6 +11,7 @@ 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.StructureMapper;
 import cn.cslg.pas.service.IStructureService;
@@ -40,6 +41,7 @@ import java.util.stream.Collectors;
 public class StructureServiceImpl extends ServiceImpl<StructureMapper, Structure> implements IStructureService {
     private final StructureMapper structureMapper;
     private final AssoStructurePictureMapper assoStructurePictureMapper;
+    private final AssoStructurePatentMapper assoStructurePatentMapper;
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
     private final FileUtils fileUtils;
@@ -175,10 +177,14 @@ public class StructureServiceImpl extends ServiceImpl<StructureMapper, Structure
             //还要将当前架构下所有子级架构的路径也都更新
             //根据当前架构原来的路径查询所有子级架构
             log.info("根据当前架构原来的路径查询所有子级架构");
-            List<StructureVO> structures = structureMapper.selectByFindInSetPath(oldPath);
+            List<StructureVO> structures = structureMapper.selectByFindInSetPath(structureId + "");
             for (StructureVO n : structures) {
+                //如果是当前修改的架构则跳过当前遍历
+                if (n.getId().equals(structureId)) {
+                    continue;
+                }
                 String path = n.getPath();
-                //从当前架构(即它们的父级架构)的原来的路径的长度的位置处截取后面路径
+                //从它的父级架构路径(即当前修改的架构)的原来的路径的长度的位置处截取后面路径
                 String behindString = path.substring(oldPath.length());
                 path = newPath + behindString;
                 n.setPath(path);
@@ -279,15 +285,7 @@ public class StructureServiceImpl extends ServiceImpl<StructureMapper, Structure
         }
 
         //以下代码表示查询所有架构的路径和路径拼接成的架构名称并封装成map集合,从map集合中取值为后面给每一个架构的pathName中文路径赋值
-        List<StructureVO> allStructures = structureMapper.selectAllByProductId(productId);
-        //map存储所有架构id(key)和架构名称(value)
-        HashMap<String, String> map = new HashMap<>();
-        for (StructureVO structure : allStructures) {
-            Integer id = structure.getId();
-            String structureStrId = id + "";
-            String name = structure.getStructureName();
-            map.put(structureStrId, name);
-        }
+        HashMap<String, String> map = getStructureIdAndStructureNameMap(productId);
 
         //以下代码表示若架构名称structureName有值则要根据架构名称模糊查询树,若架构名称structureName为null则表示查询了所有架构(不受影响)
         LambdaQueryWrapper<Structure> wrapper = new LambdaQueryWrapper<>();
@@ -330,16 +328,8 @@ public class StructureServiceImpl extends ServiceImpl<StructureMapper, Structure
         ArrayList<PathStructureNameVO> pathStructureNames = new ArrayList<>();
 
         log.info("根据产品id查询所有架构数据");
+        HashMap<String, String> map = getStructureIdAndStructureNameMap(productId);
         List<StructureVO> structures = structureMapper.selectAllByProductId(productId);
-        //map存储所有架构id(key)和架构名称(value)
-        HashMap<String, String> map = new HashMap<>();
-        for (StructureVO structure : structures) {
-            Integer structureId = structure.getId();
-            String structureStrId = structureId + "";
-            String structureName = structure.getStructureName();
-            map.put(structureStrId, structureName);
-        }
-
         for (StructureVO structure : structures) {
             Integer id = structure.getId();
             String path = structure.getPath();
@@ -380,19 +370,17 @@ public class StructureServiceImpl extends ServiceImpl<StructureMapper, Structure
         }
 
         ArrayList<Integer> structureIds = new ArrayList<>();
-        structureIds.add(id);
-        //根据架构路径查询其所有子级架构
-        String path = queryResult.getPath();
-        log.info("根据架构路径查询其所有子级架构");
-        List<StructureVO> structures = structureMapper.selectByFindInSetPath(path);
+        //根据架构id查询其包括其所有子级架构
+        log.info("根据架构id查询其包括其所有子级架构");
+        List<StructureVO> structures = structureMapper.selectByFindInSetPath(id + "");
         for (StructureVO structure : structures) {
-            Integer childStructureId = structure.getId();
-            structureIds.add(childStructureId);
+            Integer structureId = structure.getId();
+            structureIds.add(structureId);
         }
 
         //架构和专利关联表删除数据
         log.info("架构和专利关联表删除数据");
-        assoStructurePictureMapper.deleteByIds(structureIds);
+        assoStructurePatentMapper.deleteByStructureIds(structureIds);
 
         //架构和图片关联表删除数据
         log.info("架构和图片关联表删除数据");
@@ -400,7 +388,7 @@ public class StructureServiceImpl extends ServiceImpl<StructureMapper, Structure
 
         //架构表删除数据
         log.info("架构表删除数据");
-        int rows = structureMapper.deleteByIds(structureIds);
+        structureMapper.deleteByIds(structureIds);
 
         log.info("删除架构完成");
 
@@ -429,4 +417,17 @@ public class StructureServiceImpl extends ServiceImpl<StructureMapper, Structure
         }
     }
 
+    private HashMap<String, String> getStructureIdAndStructureNameMap(Integer productId) {
+        List<StructureVO> structures = structureMapper.selectAllByProductId(productId);
+        //map存储所有架构id(key)和架构名称(value)
+        HashMap<String, String> map = new HashMap<>();
+        for (StructureVO structure : structures) {
+            Integer structureId = structure.getId();
+            String structureStrId = structureId + "";
+            String structureName = structure.getStructureName();
+            map.put(structureStrId, structureName);
+        }
+        return map;
+    }
+
 }

+ 56 - 0
PAS/src/main/resources/mapper/AssoStructurePatentMapper.xml

@@ -2,6 +2,55 @@
 <!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">
+    <!--插入数据-->
+    <!--int insert(AssoStructurePatent assoStructurePatent);-->
+    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
+        insert into asso_structure_patent (structure_id, patent_no, product_Id, project_id)
+        values (#{structureId}, #{patentNo}, #{productId}, #{projectId});
+    </insert>
+
+    <!--删除标引数据-->
+    <!--int delete(AssoStructurePatent assoStructurePatent);-->
+    <delete id="delete">
+        delete
+        from asso_structure_patent
+        <where>
+            <if test="projectId != null">
+                and project_id = #{projectId}
+            </if>
+            <if test="patentNo != null">
+                and patent_no = #{patentNo}
+            </if>
+            <if test="structureId != null">
+                and structure_id = #{structureId}
+            </if>
+            <if test="productId != null">
+                and product_Id = #{productId}
+            </if>
+        </where>
+    </delete>
+
+    <!--根据专题库id和专利号查询数据-->
+    <!--List<AssoStructurePatentVO> selectByOsThematicIdPatentNo(AssoStructurePatentQueryDTO assoStructurePatentQueryDTO);-->
+    <select id="selectByProjectIdPatentNo" resultMap="selectByOsThematicIdPatentNoMap">
+        select id,
+               structure_id,
+               patent_no,
+               product_Id,
+               project_id
+        from asso_structure_patent
+        where project_id = #{projectId}
+          and patent_no = #{patentNo}
+    </select>
+
+    <resultMap id="selectByOsThematicIdPatentNoMap" 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"/>
+    </resultMap>
+
     <!--根据架构id批量删除数据-->
     <!--int deleteByStructureIds(List<Integer> structureIds);-->
     <delete id="deleteByStructureIds">
@@ -14,5 +63,12 @@
         )
     </delete>
 
+    <!--根据专题库id删除数据-->
+    <!--int deleteByOsThematicId(Integer osThematicId);-->
+    <delete id="deleteByProjectId">
+        delete
+        from asso_structure_patent
+        where project_id = #{projectId}
+    </delete>
 
 </mapper>

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

@@ -15,7 +15,9 @@
     <!--根据id批量删除数据-->
     <!--int deleteByIds(List<Integer> ids);-->
     <delete id="deleteByIds">
-        delete from asso_structure_picture where id in (
+        delete
+        from asso_structure_picture
+        where id in (
         <foreach collection="list" item="n" separator=",">
             #{n}
         </foreach>
@@ -23,7 +25,7 @@
     </delete>
 
     <!--根据架构ids批量删除数据-->
-    <!--int deleteByStructureIds(List<Integer> structures);-->
+    <!--int deleteByStructureIds(List<Integer> structureIds);-->
     <delete id="deleteByStructureIds">
         delete
         from asso_structure_picture

+ 43 - 3
PAS/src/main/resources/mapper/ProductMapper.xml

@@ -74,6 +74,22 @@
         where product_category_id = #{productCategoryId}
     </select>
 
+    <!--根据id查询数据-->
+    <!--ProductVO getStandardById(Integer id);-->
+    <select id="getStandardById" resultMap="queryMap">
+        select id,
+               product_name,
+               market_time,
+               company_name,
+               tenant_id,
+               product_explain,
+               product_category_id,
+               license_rate,
+               create_person_name
+        from product
+        where id = #{id}
+    </select>
+
     <!--分页查询数据-->
     <!--List<ProductVO> query(ProductQueryPageDTO productQueryPageDTO);-->
     <select id="query" resultMap="queryMap">
@@ -117,9 +133,13 @@
         <collection property="pictures" ofType="cn.cslg.pas.common.model.vo.ProductPictureVO"
                     select="query2" column="p_id">
         </collection>
-        <collection property="patentNum" ofType="integer"
+        <collection property="productPatents" ofType="cn.cslg.pas.common.model.vo.ProductPatentVO"
                     select="query3" column="p_id">
         </collection>
+        <collection property="structurePatents" ofType="cn.cslg.pas.common.model.vo.StructurePatentVO"
+                    select="query4" column="p_id">
+
+        </collection>
     </resultMap>
 
     <select id="query2" resultMap="query2Map">
@@ -136,10 +156,30 @@
         <result column="url" property="url"/>
     </resultMap>
 
-    <select id="query3" resultType="integer">
-        select count(*)
+    <select id="query3" resultMap="query3Map">
+        select id, patent_no, product_id
         from asso_product_patent
         where product_id = #{p_id}
     </select>
 
+    <resultMap id="query3Map" type="cn.cslg.pas.common.model.vo.ProductPatentVO">
+        <id column="id" property="id"/>
+        <result column="patent_no" property="patentNo"/>
+        <result column="product_id" property="productId"/>
+    </resultMap>
+
+    <select id="query4" resultMap="query4Map">
+        select id, structure_id, patent_no, product_Id, project_id
+        from asso_structure_patent
+        where product_Id = #{p_id}
+    </select>
+
+    <resultMap id="query4Map" type="cn.cslg.pas.common.model.vo.StructurePatentVO">
+        <id column="id" property="id"/>
+        <result column="patent_no" property="patentNo"/>
+        <result column="structure_id" property="structureId"/>
+        <result column="product_Id" property="productId"/>
+        <result column="project_id" property="projectId"/>
+    </resultMap>
+
 </mapper>

+ 13 - 12
PAS/src/main/resources/mapper/ProjectMapper.xml

@@ -7,8 +7,9 @@
         select a.id, a.`name`, a.creat_id as create_by, a.technical_theme,
         a.innerfile as inner_file, a.`update`, a.`status`, a.contract_no,
         a.`case` as case_date, a.update_time, a.sort, a.clientid as client_id,
-        a.scenarioid as scenario, a.typeid as type, a.remark, a.create_time,a.department_id,a.personnel_id,
-       u.`name` as create_name,
+        a.scenarioid as scenario, a.typeid as type, a.remark,
+        a.create_time,a.department_id,a.personnel_id,a.product_id,a.structure_id,a.is_category,
+        u.`name` as create_name,
         (select count(*) from os_thematic_file where zid = a.id and type = 1) as report_num
         from os_thematic a
         left join os_distribution u on u.id = a.creat_id
@@ -26,8 +27,8 @@
                 and a.department_id = #{params.departmentId}
             </if>
             <if test="params.personnelIds != null and params.personnelIds.size() != 0">
-             and  a.creat_id in
-                <foreach  item="item" collection="params.personnelIds" index="index"  open="(" separator="," close=")">
+                and a.creat_id in
+                <foreach item="item" collection="params.personnelIds" index="index" open="(" separator="," close=")">
                     #{item}
                 </foreach>
             </if>
@@ -47,12 +48,12 @@
                     FIND_IN_SET(#{item}, a.scenarioid)
                 </foreach>
             </if>
-        <if test="params.PersonnelId!=null">
-          and  a.id in (select tid from os_distribution_doing where uid=#{params.PersonnelId} )
-        <if test="params.tenantId!=null">
-            and a.tenantId = #{params.tenantId}
-        </if>
-        </if>
+            <if test="params.PersonnelId!=null">
+                and a.id in (select tid from os_distribution_doing where uid=#{params.PersonnelId} )
+                <if test="params.tenantId!=null">
+                    and a.tenantId = #{params.tenantId}
+                </if>
+            </if>
         </where>
         order by a.`${params.sort.prop}` ${params.sort.order}
     </select>
@@ -60,7 +61,7 @@
     <select id="getListForCount"
             resultType="cn.cslg.pas.domain.Project"
             parameterType="cn.cslg.pas.common.model.vo.ProjectVO">
-        select  a.id, a.`name`, a.creat_id as create_by, a.technical_theme,
+        select a.id, a.`name`, a.creat_id as create_by, a.technical_theme,
         a.innerfile as inner_file, a.`update`, a.`status`, a.contract_no,
         a.`case` as case_date, a.update_time, a.sort, a.clientid as client_id,
         a.scenarioid as scenario, a.typeid as type, a.remark, a.create_time,a.department_id,a.personnel_id
@@ -68,7 +69,7 @@
         from os_thematic a
         <where>
             <if test="params.PersonnelId!=null">
-                and  a.id in (select tid from os_distribution_doing where uid=#{params.PersonnelId} )
+                and a.id in (select tid from os_distribution_doing where uid=#{params.PersonnelId} )
                 <if test="params.tenantId!=null">
                     and a.tenantId = #{params.tenantId}
                 </if>

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

@@ -96,7 +96,7 @@
     <!--根据id查询数据和图片-->
     <!--StructureVO getStandAndPictureById(Integer id);-->
     <select id="getStandardAndPictureById" resultMap="selectByParentIdMap">
-        select id,
+        select id s_id,
                parent_id,
                structure_name,
                path,