Bladeren bron

3/16 xiexiang

xiexiang 2 jaren geleden
bovenliggende
commit
ded32dc541

+ 5 - 1
PAS/src/main/java/cn/cslg/pas/common/model/dto/PatentMarketDataDTO.java

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

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

@@ -206,15 +206,12 @@ public class PatentController {
         return fileDTO;
     }
 
-    @Operation(summary = "查询单篇专利价值曲线")
+    @Operation(summary = "查询专利价值曲线")
     @PostMapping("/showTrend")
     public String showTrend(@RequestBody PatentMarketDataDTO dto) {
-        List<ProductMarketDataTrendVO> queryResult = patentMarketDataService.showTrend(dto);
-        PatentTrendVO patentTrendVO = new PatentTrendVO();
-        patentTrendVO.setPatentNo(dto.getPatentNo());
-        patentTrendVO.setSaleVOS(queryResult);
-        if (patentTrendVO != null){
-            return Response.success(patentTrendVO);
+        List<PatentTrendVO> queryResult = patentMarketDataService.showTrend(dto);
+        if (queryResult != null){
+            return Response.success(queryResult);
         } else {
             return Response.error("查询失败");
         }

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

@@ -17,17 +17,26 @@ public interface PatentMarketDataMapper {
     /**
      * 未传入的营销地区saleArea,且timeUnit为2,按照年份返回数据
      *
-     * @param patentNo 专利号(必需)
+     * @param patentNoList 专利号(必需)
      * @return 返回查询到的数据
      */
-    List<ProductMarketDataTrendVO> patentQueryByYear(String patentNo, String saleArea);
+    List<ProductMarketDataTrendVO> patentQueryByYear2(List patentNoList, String saleArea);
+
+    List<ProductMarketDataTrendVO> patentQueryBySeason2(List patentNoList, String saleArea);
+
+    List<ProductMarketDataTrendVO> patentQueryByMonth2(List patentNoList, String saleArea);
 
     /**
      * 传入的营销地区saleArea,且timeUnit为2,按照年份返回数据
      *
      * @param saleArea 营销地区
-     * @param patentNo 专利号(必需)
+     * @param patentNoList 专利号(必需)
      * @return 返回查询到的数据
      */
-    List<ProductMarketDataTrendVO> patentQueryByYear2(String patentNo, String saleArea);
+    List<ProductMarketDataTrendVO> patentQueryByYear(List patentNoList, String saleArea);
+
+    List<ProductMarketDataTrendVO> patentQueryBySeason(List patentNoList, String saleArea);
+
+    List<ProductMarketDataTrendVO> patentQueryByMonth(List patentNoList, String saleArea);
+
 }

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

@@ -1,7 +1,7 @@
 package cn.cslg.pas.service;
 
 import cn.cslg.pas.common.model.dto.PatentMarketDataDTO;
-import cn.cslg.pas.common.model.vo.ProductMarketDataTrendVO;
+import cn.cslg.pas.common.model.vo.PatentTrendVO;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
@@ -19,7 +19,7 @@ public interface IPatentMarketDataService {
      * @return
      */
     @Transactional
-    List<ProductMarketDataTrendVO> showTrend(PatentMarketDataDTO dto);
+    List<PatentTrendVO> showTrend(PatentMarketDataDTO dto);
 
 
 }

+ 55 - 12
PAS/src/main/java/cn/cslg/pas/service/impl/PatentMarketDataServiceImpl.java

@@ -1,6 +1,7 @@
 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;
@@ -8,6 +9,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -22,20 +24,61 @@ import java.util.List;
 public class PatentMarketDataServiceImpl implements IPatentMarketDataService {
     private final PatentMarketDataMapper patentMarketDataMapper;
 
+
     @Override
-    public List<ProductMarketDataTrendVO> showTrend(PatentMarketDataDTO dto) {
-        //传入的营销地区不为空(查询出来的数据要根据地区分类,)
-        if (dto.getSaleArea() != null && dto.getSaleArea() != "") {
-            if (dto.getTimeUnit() == 2) {//按照年份返回营销数据
-                List<ProductMarketDataTrendVO> list1 = patentMarketDataMapper.patentQueryByYear2(dto.getPatentNo(), dto.getSaleArea());
-                return list1;
-            }
-        } else {//未传入的营销地区,所查询出来的数据需要合并
-            if (dto.getTimeUnit() == 2) {//按照年份返回营销数据
-                List<ProductMarketDataTrendVO> list4 = patentMarketDataMapper.patentQueryByYear(dto.getPatentNo(), dto.getSaleArea());
-                return list4;
+    public List<PatentTrendVO> showTrend(PatentMarketDataDTO dto) {
+        //存储专利号以及各专利号对应的营销数据
+        List<PatentTrendVO> trendVOS = new ArrayList<>();
+
+        if(dto.getPatentNoList() == null && dto.getPatentNoList().size() == 0) {
+            return null;
+        }
+        List<String> patentNoLists = dto.getPatentNoList();
+        for(String patentNo : patentNoLists) {
+            //传入的营销地区不为空(查询出来的数据要根据地区分类,)
+            if (dto.getSaleArea() != null && dto.getSaleArea() != "") {
+                if (dto.getTimeUnit() == 2) {//按照年份返回营销数据
+                    List<ProductMarketDataTrendVO> saleVOS = patentMarketDataMapper.patentQueryByYear(dto.getPatentNoList(), dto.getSaleArea());
+                    PatentTrendVO trendVO = new PatentTrendVO();
+                    trendVO.setPatentNo(patentNo);
+                    trendVO.setSaleVOS(saleVOS);
+                    trendVOS.add(trendVO);
+                } else if (dto.getTimeUnit() == 1) {//按照季度返回营销数据
+                    List<ProductMarketDataTrendVO> saleVOS = patentMarketDataMapper.patentQueryBySeason(dto.getPatentNoList(), dto.getSaleArea());
+                    PatentTrendVO trendVO = new PatentTrendVO();
+                    trendVO.setPatentNo(patentNo);
+                    trendVO.setSaleVOS(saleVOS);
+                    trendVOS.add(trendVO);
+                } else if (dto.getTimeUnit() == null||dto.getTimeUnit() == 0){//按照月份返回营销数据
+                    List<ProductMarketDataTrendVO> saleVOS = patentMarketDataMapper.patentQueryByMonth(dto.getPatentNoList(), dto.getSaleArea());
+                    PatentTrendVO trendVO = new PatentTrendVO();
+                    trendVO.setPatentNo(patentNo);
+                    trendVO.setSaleVOS(saleVOS);
+                    trendVOS.add(trendVO);
+                }
+            } else {//未传入的营销地区,所查询出来的数据需要合并
+                if (dto.getTimeUnit() == 2){//按照年份返回营销数据
+                    List<ProductMarketDataTrendVO> saleVOS = patentMarketDataMapper.patentQueryByYear2(dto.getPatentNoList(), dto.getSaleArea());
+                    PatentTrendVO trendVO = new PatentTrendVO();
+                    trendVO.setPatentNo(patentNo);
+                    trendVO.setSaleVOS(saleVOS);
+                    trendVOS.add(trendVO);
+                } else if (dto.getTimeUnit() == 1) {//按照季度返回营销数据
+                    List<ProductMarketDataTrendVO> saleVOS = patentMarketDataMapper.patentQueryBySeason2(dto.getPatentNoList(), dto.getSaleArea());
+                    PatentTrendVO trendVO = new PatentTrendVO();
+                    trendVO.setPatentNo(patentNo);
+                    trendVO.setSaleVOS(saleVOS);
+                    trendVOS.add(trendVO);
+                } else if (dto.getTimeUnit() == null||dto.getTimeUnit() == 0){//按照月份返回营销数据
+                    List<ProductMarketDataTrendVO> saleVOS = patentMarketDataMapper.patentQueryByMonth2(dto.getPatentNoList(), dto.getSaleArea());
+                    PatentTrendVO trendVO = new PatentTrendVO();
+                    trendVO.setPatentNo(patentNo);
+                    trendVO.setSaleVOS(saleVOS);
+                    trendVOS.add(trendVO);
+                }
             }
         }
-        return null;
+        return trendVOS;
     }
+
 }

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

@@ -211,27 +211,27 @@ public class ProductMarketDataServiceImpl extends ServiceImpl<ProductMarketDataM
         //传入的营销地区不为空(查询出来的数据要根据地区分类,)
         if(dto.getSaleArea() != null && dto.getSaleArea() != "") {
             if(dto.getTimeUnit() == 2){//按照年份返回营销数据
-                List<ProductMarketDataTrendVO> list1= productMarketDataMapper.queryByYear(dto.getProductId(), dto.getSaleArea());
-                return list1;
+                List<ProductMarketDataTrendVO> list= productMarketDataMapper.queryByYear(dto.getProductId(), dto.getSaleArea());
+                return list;
             }else if(dto.getTimeUnit() == 1 ){//按照季度返回营销数据
-                List<ProductMarketDataTrendVO> list2= productMarketDataMapper.queryBySeason(dto.getProductId(), dto.getSaleArea());
-                return list2;
-            }else if(dto.getTimeUnit() == 0 && dto.getTimeUnit() == null){//按照月份返回营销数据
-                List<ProductMarketDataTrendVO> list3= productMarketDataMapper.queryByMonth(dto.getProductId(), dto.getSaleArea());
-                return list3;
+                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;
             }
         }else{//未传入的营销地区,所查询出来的数据需要合并
             if(dto.getTimeUnit() == 2){//按照年份返回营销数据
-                List<ProductMarketDataTrendVO> list4= productMarketDataMapper.queryByYear2(dto.getProductId(), dto.getSaleArea());
-                return list4;
+                List<ProductMarketDataTrendVO> list= productMarketDataMapper.queryByYear2(dto.getProductId(), dto.getSaleArea());
+                return list;
             }else if(dto.getTimeUnit() == 1 ){//按照季度返回营销数据
-                List<ProductMarketDataTrendVO> list5= productMarketDataMapper.queryBySeason2(dto.getProductId(), dto.getSaleArea());
-                return list5;
-            }else if( dto.getTimeUnit() == null||dto.getTimeUnit() == 0){//按照月份返回营销数据
-                List<ProductMarketDataTrendVO> list6= productMarketDataMapper.queryByMonth2(dto.getProductId(), dto.getSaleArea());
-                return list6;
+                List<ProductMarketDataTrendVO> list= productMarketDataMapper.queryBySeason2(dto.getProductId(), dto.getSaleArea());
+                return list;
+            }else if(dto.getTimeUnit() == null||dto.getTimeUnit() == 0){//按照月份返回营销数据
+                List<ProductMarketDataTrendVO> list= productMarketDataMapper.queryByMonth2(dto.getProductId(), dto.getSaleArea());
+                return list;
             }else{
                 return null;
             }

+ 97 - 8
PAS/src/main/resources/mapper/PatentMarkerDataMapper.xml

@@ -12,21 +12,110 @@
                sum(sale_money) AS sale_total_money
         FROM product_market_data
         WHERE product_id IN
-              (SELECT product_id FROM asso_product_patent UNION
-               SELECT product_id FROM asso_structure_patent
-               WHERE patent_no = #{patentNo})
+                (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>
+                )
+        AND saleArea = #{saleArea}
+        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
+        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>
+                )
+                AND saleArea = #{saleArea}
+        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
+        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>
+                )
+                AND saleArea = #{saleArea}
         GROUP BY market_date
     </select>
 
     <select id="patentQueryByYear2" 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
+        sum(sale_money) AS sale_total_money
         FROM product_market_data
         WHERE product_id IN
-              (SELECT product_id FROM asso_product_patent UNION
-               SELECT product_id FROM asso_structure_patent
-               WHERE patent_no = #{patentNo})
-        AND saleArea = #{saleArea}
+                (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>
+                )
+        GROUP BY market_date
+    </select>
+
+    <select id="patentQueryBySeason2" 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
+        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>
+                )
+        GROUP BY market_date
+    </select>
+
+    <select id="patentQueryByMonth2" 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>
+                )
         GROUP BY market_date
     </select>
 </mapper>