Преглед на файлове

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

# Conflicts:
#	PAS/src/main/java/cn/cslg/pas/service/impl/ProductCategoryServiceImpl.java
lwhhszx преди 2 години
родител
ревизия
b71904fb52
променени са 33 файла, в които са добавени 593 реда и са изтрити 35 реда
  1. 1 1
      PAS/src/main/java/cn/cslg/pas/common/config/WebSocketConfig.java
  2. 3 0
      PAS/src/main/java/cn/cslg/pas/common/core/annotation/AnnotationParse.java
  3. 29 0
      PAS/src/main/java/cn/cslg/pas/common/model/dto/GetAreaListDTO.java
  4. 31 0
      PAS/src/main/java/cn/cslg/pas/common/model/dto/PatentMarketDataDTO.java
  5. 28 0
      PAS/src/main/java/cn/cslg/pas/common/model/dto/ProductMarketDataDTO.java
  6. 27 0
      PAS/src/main/java/cn/cslg/pas/common/model/vo/PMDTrendVO.java
  7. 24 0
      PAS/src/main/java/cn/cslg/pas/common/model/vo/PatentTrendVO.java
  8. 1 0
      PAS/src/main/java/cn/cslg/pas/common/model/vo/ProductCategoryTrendVO.java
  9. 32 0
      PAS/src/main/java/cn/cslg/pas/common/model/vo/ProductMarketDataTrendVO.java
  10. 1 0
      PAS/src/main/java/cn/cslg/pas/controller/CommonController.java
  11. 15 1
      PAS/src/main/java/cn/cslg/pas/controller/PatentController.java
  12. 1 1
      PAS/src/main/java/cn/cslg/pas/controller/PermissionRecordController.java
  13. 4 7
      PAS/src/main/java/cn/cslg/pas/controller/ProductCategoryController.java
  14. 20 3
      PAS/src/main/java/cn/cslg/pas/controller/ProductController.java
  15. 30 0
      PAS/src/main/java/cn/cslg/pas/mapper/PatentMarketDataMapper.java
  16. 3 2
      PAS/src/main/java/cn/cslg/pas/mapper/PermissionRecordMapper.java
  17. 12 0
      PAS/src/main/java/cn/cslg/pas/mapper/ProductCategoryMapper.java
  18. 8 0
      PAS/src/main/java/cn/cslg/pas/mapper/ProductMapper.java
  19. 16 0
      PAS/src/main/java/cn/cslg/pas/mapper/ProductMarketDataMapper.java
  20. 3 0
      PAS/src/main/java/cn/cslg/pas/mapper/ProjectUserMapper.java
  21. 24 0
      PAS/src/main/java/cn/cslg/pas/service/IPatentMarketDataService.java
  22. 2 5
      PAS/src/main/java/cn/cslg/pas/service/IProductCategoryService.java
  23. 17 3
      PAS/src/main/java/cn/cslg/pas/service/IProductMarketDataService.java
  24. 3 2
      PAS/src/main/java/cn/cslg/pas/service/asso/AssoProductPatentService.java
  25. 52 0
      PAS/src/main/java/cn/cslg/pas/service/impl/PatentMarketDataServiceImpl.java
  26. 2 6
      PAS/src/main/java/cn/cslg/pas/service/impl/PermissionRecordServiceImpl.java
  27. 36 0
      PAS/src/main/java/cn/cslg/pas/service/impl/ProductMarketDataServiceImpl.java
  28. 3 1
      PAS/src/main/resources/mapper/AssoProductPatentMapper.xml
  29. 74 0
      PAS/src/main/resources/mapper/PatentMarkerDataMapper.xml
  30. 4 3
      PAS/src/main/resources/mapper/PermissionRecordMapper.xml
  31. 39 0
      PAS/src/main/resources/mapper/ProductCategoryMapper.xml
  32. 9 0
      PAS/src/main/resources/mapper/ProductMapper.xml
  33. 39 0
      PAS/src/main/resources/mapper/ProductMarketDataMapper.xml

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

+ 3 - 0
PAS/src/main/java/cn/cslg/pas/common/core/annotation/AnnotationParse.java

@@ -1,7 +1,10 @@
 package cn.cslg.pas.common.core.annotation;
 
+import org.springframework.context.annotation.Configuration;
+
 import java.lang.reflect.Method;
 
+@Configuration
 public class AnnotationParse {
 
     public static int[] permissionParse(Method method) throws Exception {

+ 29 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/GetAreaListDTO.java

@@ -0,0 +1,29 @@
+package cn.cslg.pas.common.model.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 查询架构的地区集合
+ *
+ * @Author xiexiang
+ * @Date 2023/3/16
+ */
+@Data
+public class GetAreaListDTO {
+    /**
+     * 产品id
+     */
+    private Integer productId;
+
+    /**
+     * 架构id
+     */
+    private Integer categoryId;
+
+    /**
+     * 专利号集合
+     */
+    private List<String> patentNoList;
+}

+ 31 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/PatentMarketDataDTO.java

@@ -0,0 +1,31 @@
+package cn.cslg.pas.common.model.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * 单篇专利价值曲线传入数据对象DTO
+ *
+ * @Author xiexiang
+ * @Date 2023/3/15
+ */
+@Accessors(chain = true)
+@Data
+public class PatentMarketDataDTO {
+    /**
+     * 专利号
+     */
+    private List<String> patentNoList;
+
+    /**
+     * 产品地区
+     */
+    private String saleArea;
+
+    /**
+     * 时间单位(0月份,1季度,2年份,不传为月份)
+     */
+    private Integer timeUnit;
+}

+ 28 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/ProductMarketDataDTO.java

@@ -0,0 +1,28 @@
+package cn.cslg.pas.common.model.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * 产品营销数据趋势图传入数据对象DTO
+ *
+ * @Author xiexiang
+ * @Date 2023/3/13
+ */
+@Accessors(chain = true)
+@Data
+public class ProductMarketDataDTO {
+    /**
+     * 产品Id
+     */
+    private Integer productId;
+    /**
+     * 产品地区
+     */
+    private String saleArea;
+    /**
+     * 时间单位(0月份,1季度,2年份,不传为月份)
+     */
+    private Integer timeUnit;
+
+}

+ 27 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/PMDTrendVO.java

@@ -0,0 +1,27 @@
+package cn.cslg.pas.common.model.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 联合产品id以及名称总体返回类
+ *
+ * @Author xiexiang
+ * @Date 2023/3/14
+ */
+@Data
+public class PMDTrendVO {
+    /**
+     * 产品id
+     */
+    private Integer productId;
+    /**
+     * 产品名称
+     */
+    private String productName;
+    /**
+     * 返回类
+     */
+    private List<ProductMarketDataTrendVO> saleVOS;
+}

+ 24 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/PatentTrendVO.java

@@ -0,0 +1,24 @@
+package cn.cslg.pas.common.model.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 联合专利号总体返回单篇专利价值曲线的VO类
+ *
+ * @Author xiexiang
+ * @Date 2023/3/15
+ */
+@Data
+public class PatentTrendVO {
+    /**
+     * 专利号
+     */
+    private List<String> patentNoList;
+
+    /**
+     * 返回类
+     */
+    private List<ProductMarketDataTrendVO> saleVOS;
+}

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

@@ -21,6 +21,7 @@ public class ProductCategoryTrendVO implements Serializable {
      */
     private String productName;
     private List<saleVO> saleVOS;
+
     @Data
     @Accessors(chain = true)
     public static class saleVO {

+ 32 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/ProductMarketDataTrendVO.java

@@ -0,0 +1,32 @@
+package cn.cslg.pas.common.model.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+
+
+/**
+ * 产品营销数据返回的数据VO
+ *
+ * @Author xiexiang
+ * @Date 2023/3/13
+ */
+@Accessors(chain = true)
+@Data
+public class ProductMarketDataTrendVO {
+
+        /**
+         * 时间(季度/月份/年份)
+         */
+        private String marketDate;
+
+        /**
+         * 销售额
+         */
+        private Double saleTotalMoney;
+}
+
+
+
+
+

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

@@ -72,6 +72,7 @@ public class CommonController {
         return Response.success(map);
     }
 
+
     @GetMapping("/getDictMessage")
     @Operation(summary = "获取字典项信息")
     public String getDictMessage() {

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

@@ -3,6 +3,7 @@ package cn.cslg.pas.controller;
 import cn.cslg.pas.common.core.annotation.Permission;
 import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.model.dto.PatentDTO;
+import cn.cslg.pas.common.model.dto.PatentMarketDataDTO;
 import cn.cslg.pas.common.model.dto.UploadFileDTO;
 import cn.cslg.pas.common.utils.*;
 import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
@@ -51,8 +52,10 @@ public class PatentController {
     private final CacheUtils cacheUtils;
     private final ProjectFieldPatentLinkService projectFieldPatentLinkService;
     private final LoginUtils loginUtils;
-    private  final PatentRightService patentRightService;
+    private final PatentRightService patentRightService;
     private final FileUtils fileUtils;
+    private final IPatentMarketDataService patentMarketDataService;
+
     @GetMapping("/read/total")
     @Operation(summary = "专利阅读状态统计")
     public String getPatentReadTotal(PatentReadVO params) {
@@ -203,5 +206,16 @@ public class PatentController {
         return fileDTO;
     }
 
+    @Operation(summary = "查询专利价值曲线")
+    @PostMapping("/showTrend")
+    public String showTrend(@RequestBody PatentMarketDataDTO dto) {
+        List<PatentTrendVO> queryResult = patentMarketDataService.showTrend(dto);
+        if (queryResult != null){
+            return Response.success(queryResult);
+        } else {
+            return Response.error("查询失败");
+        }
+    }
+
 
 }

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

@@ -76,7 +76,7 @@ public class PermissionRecordController {
         pageHelperT.setList(queryResult);
         pageHelperT.setCurrent(queryPREntity.getCurrent());
         pageHelperT.setSize(queryPREntity.getSize());
-        pageHelperT.setTotal(permissionRecordMapper.countById());
+        pageHelperT.setTotal(permissionRecordMapper.countByPatentNo(queryPREntity.getPatentNo()));
         return Response.success(pageHelperT);
     }
 }

+ 4 - 7
PAS/src/main/java/cn/cslg/pas/controller/ProductCategoryController.java

@@ -2,10 +2,7 @@ package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.JsonPage;
 import cn.cslg.pas.common.core.base.Constants;
-import cn.cslg.pas.common.model.dto.ProductCategoryAddNewDTO;
-import cn.cslg.pas.common.model.dto.ProductCategoryDTO;
-import cn.cslg.pas.common.model.dto.ProductCategoryQueryPageDTO;
-import cn.cslg.pas.common.model.dto.ProductCategoryUpdateDTO;
+import cn.cslg.pas.common.model.dto.*;
 import cn.cslg.pas.common.model.vo.ProductCategoryTrendVO;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.exception.XiaoShiException;
@@ -93,9 +90,9 @@ public class ProductCategoryController {
     }
 
     @Operation(summary = "获得架构的地区集合")
-    @GetMapping("/getAreaList")
-    public String getAreaList(Integer id, Integer productId) {
-        return Response.success(productCategoryService.getAreaList(id, productId));
+    @PostMapping("/getAreaList")
+    public String getAreaList(@RequestBody GetAreaListDTO dto) {
+        return Response.success(productCategoryService.getAreaList(dto));
     }
 
     @Operation(summary = "获得架构的公司集合")

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

@@ -2,11 +2,12 @@ package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.JsonPage;
 import cn.cslg.pas.common.core.base.Constants;
-import cn.cslg.pas.common.model.dto.ProductAddNewDTO;
-import cn.cslg.pas.common.model.dto.ProductQueryPageDTO;
-import cn.cslg.pas.common.model.dto.ProductUpdateDTO;
+import cn.cslg.pas.common.model.dto.*;
+import cn.cslg.pas.common.model.vo.PMDTrendVO;
+import cn.cslg.pas.common.model.vo.ProductMarketDataTrendVO;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.IProductMarketDataService;
 import cn.cslg.pas.service.IProductService;
 import com.alibaba.fastjson.JSONObject;
 import io.swagger.v3.oas.annotations.Operation;
@@ -31,6 +32,7 @@ import java.util.List;
 @RestController
 public class ProductController {
     private final IProductService productService;
+    private final IProductMarketDataService productMarketDataService;
 
     @Operation(summary = "新增产品")
     @PostMapping("/addNew")
@@ -72,6 +74,21 @@ public class ProductController {
         return Response.success(jsonPage);
     }
 
+    @Operation(summary = "查询产品趋势图")
+    @PostMapping("/showTrend")
+    public String showTrend(@RequestBody ProductMarketDataDTO dto) {
+        List<ProductMarketDataTrendVO> queryResult = productMarketDataService.showTrend(dto);
+        PMDTrendVO pmdTrendVO = new PMDTrendVO();
+        pmdTrendVO.setProductId(dto.getProductId());
+        pmdTrendVO.setProductName(productMarketDataService.queryNameByProductId(dto.getProductId()));
+        pmdTrendVO.setSaleVOS(queryResult);
+        if (pmdTrendVO != null){
+            return Response.success(pmdTrendVO);
+        } else {
+            return Response.error("查询失败");
+        }
+    }
+
     @Operation(summary = "删除产品")
     @GetMapping("/delete")
     public String delete(Integer id) {

+ 30 - 0
PAS/src/main/java/cn/cslg/pas/mapper/PatentMarketDataMapper.java

@@ -0,0 +1,30 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.common.model.vo.ProductMarketDataTrendVO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 专利价值曲线的Mapper层
+ *
+ * @Author xiexiang
+ * @Date 2023/3/15
+ */
+@Repository
+public interface PatentMarketDataMapper {
+
+    /**
+     * 传入的营销地区saleArea,且timeUnit为2,按照年份返回数据
+     *
+     * @param saleArea 营销地区
+     * @param patentNoList 专利号(必需)
+     * @return 返回查询到的数据
+     */
+    List<ProductMarketDataTrendVO> patentQueryByYear(List patentNoList, String saleArea);
+
+    List<ProductMarketDataTrendVO> patentQueryBySeason(List patentNoList, String saleArea);
+
+    List<ProductMarketDataTrendVO> patentQueryByMonth(List patentNoList, String saleArea);
+
+}

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

@@ -31,11 +31,12 @@ public interface PermissionRecordMapper {
     int update(PermissionRecord permissionRecord);
 
     /**
-     * 统计数量
+     * 统计该专利号下许可记录的数量
      *
+     * @param patentNo 专利号
      * @return 返回统计到的总数量total
      */
-    int countById();
+    int countByPatentNo(String patentNo);
 
 
     /**

+ 12 - 0
PAS/src/main/java/cn/cslg/pas/mapper/ProductCategoryMapper.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.mapper;
 
+import cn.cslg.pas.common.model.dto.GetAreaListDTO;
 import cn.cslg.pas.common.model.dto.ProductCategoryQueryPageDTO;
 import cn.cslg.pas.common.model.vo.ProductCategoryVO;
 import cn.cslg.pas.domain.ProductCategory;
@@ -63,4 +64,15 @@ public interface ProductCategoryMapper {
      */
     List<ProductCategoryVO> query(ProductCategoryQueryPageDTO productCategoryQueryPageDTO);
 
+    /**
+     * 查询地区列表
+     *
+     * @return 返回查询到的地区集合
+     */
+    List<String> getAreaList(GetAreaListDTO dto);
+
+
+
+
+
 }

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

@@ -60,6 +60,14 @@ public interface ProductMapper extends BaseMapper<Product> {
     int countById(Integer id);
 
     /**
+     * 根据id查询产品名称
+     *
+     * @param id 产品id
+     * @return 返回查询到的名字
+     */
+    String queryNameById(Integer id);
+
+    /**
      * 根据所属产品类别id统计数量
      *
      * @param productCategoryId 所属产品类别id

+ 16 - 0
PAS/src/main/java/cn/cslg/pas/mapper/ProductMarketDataMapper.java

@@ -1,10 +1,12 @@
 package cn.cslg.pas.mapper;
 
 import cn.cslg.pas.common.model.dto.ProductMarketDataQueryPageDTO;
+import cn.cslg.pas.common.model.vo.ProductMarketDataTrendVO;
 import cn.cslg.pas.common.model.vo.ProductMarketDataVO;
 import cn.cslg.pas.domain.ProductMarketData;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.List;
@@ -67,4 +69,18 @@ public interface ProductMarketDataMapper extends BaseMapper<ProductMarketData> {
      */
     List<ProductMarketDataVO> query(ProductMarketDataQueryPageDTO productMarketDataQueryPageDTO);
 
+    /**
+     * 传入的营销地区saleArea不为空(按地区划分),且timeUnit为2,按照年份返回数据
+     *
+     * @param saleArea 营销地区
+     * @param productId 产品id(必需)
+     * @return 返回查询到的数据
+     */
+    List<ProductMarketDataTrendVO> queryByYear(Integer productId, String saleArea);
+
+    List<ProductMarketDataTrendVO> queryBySeason(Integer productId, String saleArea);
+
+    List<ProductMarketDataTrendVO> queryByMonth(Integer productId, String saleArea);
+
+
 }

+ 3 - 0
PAS/src/main/java/cn/cslg/pas/mapper/ProjectUserMapper.java

@@ -5,6 +5,8 @@ import cn.cslg.pas.common.model.vo.ProjectUserVO;
 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.Mapper;
+import org.springframework.stereotype.Repository;
 
 /**
  * <p>
@@ -14,6 +16,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  * @author 王岩
  * @since 2022-02-18
  */
+@Repository
 public interface ProjectUserMapper extends BaseMapper<ProjectUser> {
 
     IPage<ProjectUser> getPageList(Page<ProjectUser> page, ProjectUserVO params);

+ 24 - 0
PAS/src/main/java/cn/cslg/pas/service/IPatentMarketDataService.java

@@ -0,0 +1,24 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.common.model.dto.PatentMarketDataDTO;
+import cn.cslg.pas.common.model.vo.PatentTrendVO;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 专利价值曲线的Service层
+ *
+ * @Author xiexiang
+ * @Date 2023/3/15
+ */
+public interface IPatentMarketDataService {
+    /**
+     * 查询专利价值曲线
+     * @param dto
+     * @return
+     */
+    @Transactional
+    List<PatentTrendVO> showTrend(PatentMarketDataDTO dto);
+
+}

+ 2 - 5
PAS/src/main/java/cn/cslg/pas/service/IProductCategoryService.java

@@ -1,10 +1,7 @@
 package cn.cslg.pas.service;
 
 import cn.cslg.pas.common.JsonPage;
-import cn.cslg.pas.common.model.dto.ProductCategoryAddNewDTO;
-import cn.cslg.pas.common.model.dto.ProductCategoryDTO;
-import cn.cslg.pas.common.model.dto.ProductCategoryQueryPageDTO;
-import cn.cslg.pas.common.model.dto.ProductCategoryUpdateDTO;
+import cn.cslg.pas.common.model.dto.*;
 import cn.cslg.pas.common.model.vo.ProductCategoryTrendVO;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
@@ -59,7 +56,7 @@ public interface IProductCategoryService {
     @Transactional
     List<ProductCategoryTrendVO> showTrend(ProductCategoryDTO dto);
 
-    List<String> getAreaList(Integer id,Integer productId);
+    List<String> getAreaList(GetAreaListDTO dto);
 
     List<String> getCompanyList(Integer id);
 }

+ 17 - 3
PAS/src/main/java/cn/cslg/pas/service/IProductMarketDataService.java

@@ -1,11 +1,12 @@
 package cn.cslg.pas.service;
 
 import cn.cslg.pas.common.JsonPage;
-import cn.cslg.pas.common.model.dto.ProductMarketDataAddNewDTO;
-import cn.cslg.pas.common.model.dto.ProductMarketDataQueryPageDTO;
-import cn.cslg.pas.common.model.dto.ProductMarketDataUpdateDTO;
+import cn.cslg.pas.common.model.dto.*;
+import cn.cslg.pas.common.model.vo.ProductMarketDataTrendVO;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
+
 /**
  * 产品营销数据的Service层接口
  *
@@ -44,4 +45,17 @@ public interface IProductMarketDataService {
      */
     void delete(Integer id);
 
+    /**
+     * 查询产品营销数据趋势图
+     * @param dto
+     */
+    @Transactional
+    List<ProductMarketDataTrendVO> showTrend(ProductMarketDataDTO dto);
+
+    /**
+     * 根据productId查询productName
+     * @param productId
+     */
+    String queryNameByProductId(Integer productId);
+
 }

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

@@ -60,7 +60,7 @@ public class AssoProductPatentService extends ServiceImpl<AssoProductPatentMappe
             patentDTO.setPatentNo(patentDTO.getPatentNo().replace(" ", ""));
             if (!patentDTO.getPatentNo().equals("")) {
                 String[] strs = patentDTO.getPatentNo().split("\\|");
-                patentDTO.setPatentNo("(^|,)("+patentDTO.getPatentNo()+")(,|$)");
+                patentDTO.setPatentNo("(^|,)(" + patentDTO.getPatentNo() + ")(,|$)");
                 orgPatentNos = new ArrayList<>(Arrays.asList(strs));
                 patentDTO.setIsIn(0);
                 List<String> patentNos = this.baseMapper.getPatentNos(patentDTO);
@@ -130,7 +130,8 @@ public class AssoProductPatentService extends ServiceImpl<AssoProductPatentMappe
         if (params.getProductId() == null) {
             //当架构id不为null时
             if (params.getStructureId() != null) {
-                structureService.getById(params.getStructureId());
+           Structure structure =  structureService.getById(params.getStructureId());
+           params.setProductId(structure.getProductId());
             } else {
                 return pageList;
             }

+ 52 - 0
PAS/src/main/java/cn/cslg/pas/service/impl/PatentMarketDataServiceImpl.java

@@ -0,0 +1,52 @@
+package cn.cslg.pas.service.impl;
+
+import cn.cslg.pas.common.model.dto.PatentMarketDataDTO;
+import cn.cslg.pas.common.model.vo.PatentTrendVO;
+import cn.cslg.pas.common.model.vo.ProductMarketDataTrendVO;
+import cn.cslg.pas.mapper.PatentMarketDataMapper;
+import cn.cslg.pas.service.IPatentMarketDataService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 专利价值曲线
+ *
+ * @Author xiexiang
+ * @Date 2023/3/15
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class PatentMarketDataServiceImpl implements IPatentMarketDataService {
+    private final PatentMarketDataMapper patentMarketDataMapper;
+
+
+    @Override
+    public List<PatentTrendVO> showTrend(PatentMarketDataDTO dto) {
+        //存储专利号以及各专利号对应的营销数据
+        List<PatentTrendVO> trendVOS = new ArrayList<>();
+        //存储产品id查询到的营销数据
+        List<ProductMarketDataTrendVO> saleVOS = new ArrayList<>();
+        //判断专利号集合内是否有内容,没有的话直接返回null
+        if(dto.getPatentNoList() == null && dto.getPatentNoList().size() == 0) {
+            return null;
+        }
+        if (dto.getTimeUnit() == 2) {//按照年份返回营销数据
+            saleVOS = patentMarketDataMapper.patentQueryByYear(dto.getPatentNoList(), dto.getSaleArea());
+        } else if (dto.getTimeUnit() == 1) {//按照季度返回营销数据
+            saleVOS = patentMarketDataMapper.patentQueryBySeason(dto.getPatentNoList(), dto.getSaleArea());
+        } else if (dto.getTimeUnit() == null || dto.getTimeUnit() == 0) {//按照月份返回营销数据
+            saleVOS = patentMarketDataMapper.patentQueryByMonth(dto.getPatentNoList(), dto.getSaleArea());
+        }
+        PatentTrendVO trendVO = new PatentTrendVO();
+        trendVO.setPatentNoList(dto.getPatentNoList());
+        trendVO.setSaleVOS(saleVOS);
+        trendVOS.add(trendVO);
+        return trendVOS;
+    }
+
+}

+ 2 - 6
PAS/src/main/java/cn/cslg/pas/service/impl/PermissionRecordServiceImpl.java

@@ -6,23 +6,19 @@ import cn.cslg.pas.common.model.dto.PermissionRecordDTO;
 import cn.cslg.pas.common.model.dto.PermissionRecordUpdateDTO;
 import cn.cslg.pas.common.model.vo.PermissionRecordVO;
 import cn.cslg.pas.common.utils.CacheUtils;
-import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.pas.domain.PermissionRecord;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.PermissionRecordMapper;
 import cn.cslg.pas.service.IPermissionRecordService;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
+
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
-import java.util.Date;
+
 import java.util.List;
 
 /**

+ 36 - 0
PAS/src/main/java/cn/cslg/pas/service/impl/ProductMarketDataServiceImpl.java

@@ -3,9 +3,12 @@ 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.ProductMarketDataAddNewDTO;
+import cn.cslg.pas.common.model.dto.ProductMarketDataDTO;
 import cn.cslg.pas.common.model.dto.ProductMarketDataQueryPageDTO;
 import cn.cslg.pas.common.model.dto.ProductMarketDataUpdateDTO;
+import cn.cslg.pas.common.model.vo.ProductMarketDataTrendVO;
 import cn.cslg.pas.common.model.vo.ProductMarketDataVO;
+import cn.cslg.pas.common.model.vo.ProductVO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.pas.domain.Product;
@@ -37,6 +40,7 @@ import java.util.regex.Pattern;
 @Service
 public class ProductMarketDataServiceImpl extends ServiceImpl<ProductMarketDataMapper, ProductMarketData> implements IProductMarketDataService {
     private final ProductMarketDataMapper productMarketDataMapper;
+    private final ProductMapper productMapper;
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
 
@@ -184,4 +188,36 @@ public class ProductMarketDataServiceImpl extends ServiceImpl<ProductMarketDataM
 
     }
 
+    /**
+     * 根据productId查询productName
+     * @param productId
+     */
+    @Override
+    public String queryNameByProductId(Integer productId){
+        int id = productId;
+        String ProductName = productMapper.queryNameById(id);
+        return ProductName;
+    }
+
+    /**
+     * 查询产品趋势图
+     *
+     * @param dto
+     * @return
+     */
+    @Override
+    public List<ProductMarketDataTrendVO> showTrend(ProductMarketDataDTO dto) {
+        if(dto.getTimeUnit() == 2){//按照年份返回营销数据
+            List<ProductMarketDataTrendVO> list= productMarketDataMapper.queryByYear(dto.getProductId(), dto.getSaleArea());
+            return list;
+        }else if(dto.getTimeUnit() == 1 ){//按照季度返回营销数据
+            List<ProductMarketDataTrendVO> list= productMarketDataMapper.queryBySeason(dto.getProductId(), dto.getSaleArea());
+            return list;
+        }else if(dto.getTimeUnit() == null||dto.getTimeUnit() == 0 ){//按照月份返回营销数据
+            List<ProductMarketDataTrendVO> list= productMarketDataMapper.queryByMonth(dto.getProductId(), dto.getSaleArea());
+            return list;
+        }else{
+            return null;
+        }
+    }
 }

+ 3 - 1
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>
 

+ 74 - 0
PAS/src/main/resources/mapper/PatentMarkerDataMapper.xml

@@ -0,0 +1,74 @@
+<?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.PatentMarketDataMapper">
+
+    <resultMap id="queryByDateMap" type="cn.cslg.pas.common.model.vo.ProductMarketDataTrendVO">
+        <result column="market_date" property="marketDate"/>
+        <result column="sale_total_money" property="saleTotalMoney"/>
+    </resultMap>
+
+    <!--传入了地区-->
+    <!--按照年为单位返回查询到的营销数据-->
+    <select id="patentQueryByYear" resultMap="queryByDateMap">
+        SELECT CONCAT(CAST(YEAR(STR_TO_DATE(sale_time,'%Y-%m')) as CHAR),'年') AS market_date,sum(sale_money) AS sale_total_money
+        FROM product_market_data
+        WHERE product_id IN
+                (SELECT product_id FROM asso_structure_patent WHERE patent_no IN
+                <foreach collection="patentNoList" item="patentNo" index="index" open="(" close=")" separator=",">
+                    #{patentNo}
+                </foreach>
+                UNION
+                SELECT product_id FROM asso_product_patent WHERE patent_no IN
+                <foreach collection="patentNoList" item="patentNo" index="index" open="(" close=")" separator=",">
+                    #{patentNo}
+                </foreach>
+                )
+                <if test="saleArea !=null and saleArea != ''">
+                    AND sale_area = #{saleArea}
+                </if>
+        GROUP BY market_date
+    </select>
+    <!--传入了地区-->
+    <!--按照季度为单位返回查询到的营销数据-->
+    <select id="patentQueryBySeason" resultMap="queryByDateMap">
+        SELECT CONCAT(CAST(YEAR(STR_TO_DATE(sale_time,'%Y-%m')) as CHAR),'年','第',CAST(QUARTER(STR_TO_DATE(sale_time,'%Y-%m')) as CHAR),'季度') AS market_date,sum(sale_money) AS sale_total_money
+        FROM product_market_data
+        WHERE product_id IN
+                (SELECT product_id FROM asso_structure_patent WHERE patent_no IN
+                <foreach collection="patentNoList" item="patentNo" index="index" open="(" close=")" separator=",">
+                    #{patentNo}
+                </foreach>
+                UNION
+                SELECT product_id FROM asso_product_patent WHERE patent_no IN
+                <foreach collection="patentNoList" item="patentNo" index="index" open="(" close=")" separator=",">
+                    #{patentNo}
+                </foreach>
+                )
+                <if test="saleArea !=null and saleArea != ''">
+                    AND sale_area = #{saleArea}
+                </if>
+        GROUP BY market_date
+    </select>
+    <!--传入了地区-->
+    <!--按照月份为单位返回查询到的营销数据-->
+    <select id="patentQueryByMonth" resultMap="queryByDateMap">
+        SELECT CONCAT(CAST(YEAR(STR_TO_DATE(sale_time,'%Y-%m')) AS CHAR),'-',CAST(MONTH(STR_TO_DATE(sale_time,'%Y-%m')) AS CHAR)) AS market_date,sum(sale_money) AS sale_total_money
+        FROM product_market_data
+        WHERE product_id IN
+                (SELECT product_id FROM asso_structure_patent WHERE patent_no IN
+                <foreach collection="patentNoList" item="patentNo" index="index" open="(" close=")" separator=",">
+                    #{patentNo}
+                </foreach>
+                UNION
+                SELECT product_id FROM asso_product_patent WHERE patent_no IN
+                <foreach collection="patentNoList" item="patentNo" index="index" open="(" close=")" separator=",">
+                    #{patentNo}
+                </foreach>
+                )
+                <if test="saleArea !=null and saleArea != ''">
+                    AND sale_area = #{saleArea}
+                </if>
+        GROUP BY market_date
+    </select>
+
+</mapper>

+ 4 - 3
PAS/src/main/resources/mapper/PermissionRecordMapper.xml

@@ -91,11 +91,12 @@
         where patent_no = #{patentNo}
     </select>
 
-    <!--根据许可id统计数量-->
-    <!--int countById();-->
-    <select id="countById" resultType="int">
+    <!--根据专利号统计许可记录数量-->
+    <!--int countByPatentNo();-->
+    <select id="countByPatentNo" resultType="int">
         select count(*)
         from permission_record
+        where patent_No = #{patentNo}
     </select>
 
 

+ 39 - 0
PAS/src/main/resources/mapper/ProductCategoryMapper.xml

@@ -98,4 +98,43 @@
         <result column="picture" property="picture"/>
     </resultMap>
 
+    <!--根据产品id、架构id和专利号集合三者其一查询地区集合-->
+    <resultMap id="getAreaListMap" type="String">
+        <result column="sale_area" property="saleArea"/>
+    </resultMap>
+
+
+    <select id="getAreaList" resultMap="getAreaListMap">
+        SELECT DISTINCT sale_area
+        FROM product_market_data
+        WHERE
+          <if test="productId != null and productId != ''">
+              product_id = #{productId}
+          </if>
+          <if test="categoryId !=null and categoryId != ''">
+              product_id
+              IN(
+              SELECT id
+              FROM product
+              WHERE
+              product_category_id = #{categoryId})
+          </if>
+          <if test="patentNoList != null and patentNoList.size() > 0 ">
+            product_id IN(
+            SELECT product_id
+            FROM asso_structure_patent
+            WHERE patent_no IN
+            <foreach collection="patentNoList" item="patentNo" index="index" open="(" close=")" separator=",">
+                #{patentNo}
+            </foreach>
+            UNION
+            SELECT product_id
+            FROM asso_product_patent
+            WHERE patent_no IN
+            <foreach collection="patentNoList" item="patentNo" index="index" open="(" close=")" separator=",">
+                #{patentNo}
+            </foreach>
+            )
+          </if>
+    </select>
 </mapper>

+ 9 - 0
PAS/src/main/resources/mapper/ProductMapper.xml

@@ -66,6 +66,15 @@
         where id = #{id}
     </select>
 
+    <!--根据id查询名称-->
+    <!-- String queryNameById(Integer id);;-->
+    <select id="queryNameById" resultType="String">
+        select product_Name
+        from product
+        where id = #{id}
+    </select>
+
+
     <!--根据所属产品类别id统计数量-->
     <!--int countByProductCategoryId(Integer productCategoryId);-->
     <select id="countByProductCategoryId" resultType="int">

+ 39 - 0
PAS/src/main/resources/mapper/ProductMarketDataMapper.xml

@@ -109,4 +109,43 @@
         <result column="custom_license_rate" property="customLicenseRate"/>
     </resultMap>
 
+    <resultMap id="queryByDateMap" type="cn.cslg.pas.common.model.vo.ProductMarketDataTrendVO">
+        <result column="market_date" property="marketDate"/>
+        <result column="sale_total_money" property="saleTotalMoney"/>
+    </resultMap>
+
+    <select id="queryByYear" resultMap="queryByDateMap">
+        SELECT CONCAT(CAST(YEAR(STR_TO_DATE(sale_time,'%Y-%m')) as CHAR),'年') AS market_date,
+               sum(sale_money) AS sale_total_money
+        FROM  product_market_data
+        WHERE product_id = #{productId}
+        <if test="saleArea != null and saleArea != ''">
+            AND sale_Area = #{saleArea}
+        </if>
+        GROUP BY market_date
+    </select>
+
+    <select id="queryBySeason" resultMap="queryByDateMap">
+        SELECT CONCAT(CAST(YEAR(STR_TO_DATE(sale_time,'%Y-%m')) as CHAR),'年',
+                      '第',CAST(QUARTER(STR_TO_DATE(sale_time,'%Y-%m')) as CHAR),'季度') AS market_date,
+               sum(sale_money) AS sale_total_money
+        FROM  product_market_data
+        WHERE product_id = #{productId}
+        <if test="saleArea != null and saleArea != ''">
+            AND sale_Area = #{saleArea}
+        </if>
+        GROUP BY market_date
+    </select>
+
+    <select id="queryByMonth" resultMap="queryByDateMap">
+        SELECT CONCAT(CAST(YEAR(STR_TO_DATE(sale_time,'%Y-%m')) AS CHAR),'-',
+                      CAST(MONTH(STR_TO_DATE(sale_time,'%Y-%m')) AS CHAR)) AS market_date,
+               sum(sale_money) AS sale_total_money
+        FROM  product_market_data
+        WHERE product_id = #{productId}
+        <if test="saleArea != null and saleArea != ''">
+            AND sale_Area = #{saleArea}
+        </if>
+        GROUP BY market_date
+    </select>
 </mapper>