xiexiang hai 1 ano
pai
achega
ca58025297

+ 1 - 0
src/main/java/cn/cslg/pas/common/vo/GroupMarketDataVO.java

@@ -7,6 +7,7 @@ import lombok.experimental.Accessors;
 @Accessors(chain = true)
 public class GroupMarketDataVO {
     private Integer productId;
+    private String productName;
     private String marketDate;
     private Double customLicenseMoney;
     private Double saleMoneyTotal;

+ 19 - 2
src/main/java/cn/cslg/pas/factorys/reGroupFactory/GetMarketDataMonthGroup.java

@@ -4,6 +4,7 @@ import cn.cslg.pas.common.model.cronModel.ReGroupDataVO;
 import cn.cslg.pas.common.vo.GroupMarketDataVO;
 import cn.cslg.pas.mapper.ProductMarketDataMapper;
 import cn.cslg.pas.service.business.MatterService;
+import cn.cslg.pas.service.business.ProductService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -20,6 +21,9 @@ public class GetMarketDataMonthGroup implements QueryGroupImp {
     @Autowired
     private ProductMarketDataMapper productMarketDataMapper;
 
+    @Autowired
+    private ProductService productService;
+
     /**
      * 根据月份 返沪
      * @param sqls
@@ -32,7 +36,7 @@ public class GetMarketDataMonthGroup implements QueryGroupImp {
         ReGroupDataVO reGroupDataVO = new ReGroupDataVO();
         List<Map<String, Object>> maps = new ArrayList<>();
         //“select ${selectField} as marketDate,”
-        groupField = "DATE_FORMAT(" + groupField + ",'%Y%c')";
+        groupField = "DATE_FORMAT(" + groupField + ",'%Y-%m')";
         String selectField = groupField;
         //统计营销数据
         List<GroupMarketDataVO> groupMarketDataVOS = productMarketDataMapper.getGroups(sqls, tableName, groupField, selectField);
@@ -43,7 +47,20 @@ public class GetMarketDataMonthGroup implements QueryGroupImp {
             map.put("saleMoneyTotal",item.getSaleMoneyTotal());
             maps.add(map);
         });
-
+        if (sqls.get(0) != "") {
+            if (sqls.get(0).contains("category_id")) {
+                List<GroupMarketDataVO> groupPartMarketDataVOS = productMarketDataMapper.getPartGroups(sqls, tableName, groupField, selectField);
+                groupPartMarketDataVOS.forEach(item ->{
+                    Map<String,Object> map = new HashMap<>();
+                    map.put("productId",item.getProductId());
+                    map.put("productName",productService.getById(item.getProductId()).getName());
+                    map.put("marketDate",item.getMarketDate());
+                    map.put("customLicenseMoney",item.getCustomLicenseMoney());
+                    map.put("saleMoneyTotal",item.getSaleMoneyTotal());
+                    maps.add(map);
+                });
+            }
+        }
         reGroupDataVO.setValues(maps);
         return reGroupDataVO;
     }

+ 18 - 3
src/main/java/cn/cslg/pas/factorys/reGroupFactory/GetMarketDataSeasonGroup.java

@@ -4,6 +4,7 @@ import cn.cslg.pas.common.model.cronModel.ReGroupDataVO;
 import cn.cslg.pas.common.vo.GroupMarketDataVO;
 import cn.cslg.pas.mapper.ProductMarketDataMapper;
 import cn.cslg.pas.service.business.MatterService;
+import cn.cslg.pas.service.business.ProductService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -19,25 +20,39 @@ import java.util.Map;
 public class GetMarketDataSeasonGroup implements QueryGroupImp {
     @Autowired
     private ProductMarketDataMapper productMarketDataMapper;
+
     @Autowired
-    private MatterService matterService;
+    private ProductService productService;
 
     @Override
     public ReGroupDataVO getGroup(List<String> sqls, String tableName, String groupField) {
         ReGroupDataVO reGroupDataVO =new ReGroupDataVO();
         List<Map<String, Object>> maps = new ArrayList<>();
-         groupField = "concat(date_format("+ groupField+", '%Y'),FLOOR((date_format(create_time, '%m')+2)/3))";
+        groupField = "CONCAT(DATE_FORMAT("+ groupField+", '%Y'),'年第', CEIL(MONTH(" + groupField + ") / 3),'季度')";
         String selectField = groupField;
         //统计营销数据
         List<GroupMarketDataVO> groupMarketDataVOS = productMarketDataMapper.getGroups(sqls, tableName, groupField, selectField);
         groupMarketDataVOS.forEach(item->{
             Map<String,Object> map = new HashMap<>();
-            map.put("productId", item.getProductId());
             map.put("marketDate",item.getMarketDate());
             map.put("customLicenseMoney",item.getCustomLicenseMoney());
             map.put("saleMoneyTotal",item.getSaleMoneyTotal());
             maps.add(map);
         });
+        if (sqls.get(0) != "") {
+            if (sqls.get(0).contains("category_id")) {
+                List<GroupMarketDataVO> groupPartMarketDataVOS = productMarketDataMapper.getPartGroups(sqls, tableName, groupField, selectField);
+                groupPartMarketDataVOS.forEach(item ->{
+                    Map<String,Object> map = new HashMap<>();
+                    map.put("productId",item.getProductId());
+                    map.put("productName",productService.getById(item.getProductId()).getName());
+                    map.put("marketDate",item.getMarketDate());
+                    map.put("customLicenseMoney",item.getCustomLicenseMoney());
+                    map.put("saleMoneyTotal",item.getSaleMoneyTotal());
+                    maps.add(map);
+                });
+            }
+        }
         reGroupDataVO.setValues(maps);
         return reGroupDataVO;
     }

+ 20 - 2
src/main/java/cn/cslg/pas/factorys/reGroupFactory/GetMarketDataYearGroup.java

@@ -3,6 +3,7 @@ package cn.cslg.pas.factorys.reGroupFactory;
 import cn.cslg.pas.common.model.cronModel.ReGroupDataVO;
 import cn.cslg.pas.common.vo.GroupMarketDataVO;
 import cn.cslg.pas.mapper.ProductMarketDataMapper;
+import cn.cslg.pas.service.business.ProductService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -19,11 +20,14 @@ public class GetMarketDataYearGroup implements QueryGroupImp {
     @Autowired
     private ProductMarketDataMapper productMarketDataMapper;
 
+    @Autowired
+    private ProductService productService;
+
     @Override
     public ReGroupDataVO getGroup(List<String> sqls, String tableName, String groupField) {
-        ReGroupDataVO reGroupDataVO =new ReGroupDataVO();
+        ReGroupDataVO reGroupDataVO = new ReGroupDataVO();
         List<Map<String, Object>> maps = new ArrayList<>();
-        groupField = "DATE_FORMAT(" + groupField + ",'%Y')";
+        groupField = "CONCAT(DATE_FORMAT(" + groupField + ",'%Y'),'年')";
         String selectField = groupField;
         //统计营销数据
         List<GroupMarketDataVO> groupMarketDataVOS = productMarketDataMapper.getGroups(sqls, tableName, groupField, selectField);
@@ -34,6 +38,20 @@ public class GetMarketDataYearGroup implements QueryGroupImp {
             map.put("saleMoneyTotal",item.getSaleMoneyTotal());
             maps.add(map);
         });
+        if (sqls.get(0) != "") {
+            if (sqls.get(0).contains("category_id")) {
+                List<GroupMarketDataVO> groupPartMarketDataVOS = productMarketDataMapper.getPartGroups(sqls, tableName, groupField, selectField);
+                groupPartMarketDataVOS.forEach(item ->{
+                    Map<String,Object> map = new HashMap<>();
+                    map.put("productId",item.getProductId());
+                    map.put("productName",productService.getById(item.getProductId()).getName());
+                    map.put("marketDate",item.getMarketDate());
+                    map.put("customLicenseMoney",item.getCustomLicenseMoney());
+                    map.put("saleMoneyTotal",item.getSaleMoneyTotal());
+                    maps.add(map);
+                });
+            }
+        }
         reGroupDataVO.setValues(maps);
         return reGroupDataVO;
     }

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

@@ -18,4 +18,5 @@ public interface ProductMarketDataMapper extends BaseMapper<ProductMarketData> {
     public List<ProductMarketDataVO> getProductMarketData(String sql1, String sql2, String sql3);
     public Long getProductMarketDataCount(String sql);
     public List<GroupMarketDataVO> getGroups(List<String> sqls, String tableName, String groupField, String selectField);
+    public List<GroupMarketDataVO> getPartGroups(List<String> sqls, String tableName, String groupField, String selectField);
 }

+ 29 - 0
src/main/java/cn/cslg/pas/service/business/ProductMarketDataService.java

@@ -38,6 +38,7 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -233,6 +234,34 @@ public class ProductMarketDataService extends ServiceImpl<ProductMarketDataMappe
     }
 
     /**
+     * 在根据类别id查询总的营销数据的时候需要根据此方法查询每个产品营销数据
+     *
+     * @param groupRequest
+     * @return
+     * @throws Exception
+     */
+    @Transactional(rollbackFor = Exception.class)
+    ReGroupDataVO getPartGroup(GroupRequest groupRequest, String tableName) throws Exception {
+        StringRequest stringRequest = new StringRequest();
+        BeanUtils.copyProperties(groupRequest, stringRequest);
+        List<String> sqls = formatQueryService.reSqls(stringRequest, tableName);
+        //格式化 分组
+        GroupConfig groupConfig = null;
+        if (groupRequest.getGroupBy() != null) {
+            String json = CommonService.readJsonFile(tableName + ".json");
+            List<GroupConfig> groupConfigs = JSON.parseArray(json, GroupConfig.class);
+            groupConfig = groupConfigs.stream().filter(item -> groupRequest.getGroupBy().equals(item.getField())).findFirst().orElse(null);
+            if (groupConfig == null) {
+                throw new XiaoShiException("未找到配置");
+            }
+        }
+        //返回分组数据
+        tableName = "product_market_data as pmd left join product as p on pmd.product_id = p.id";
+        QueryGroupImp queryGroupImp = queryGroupFactory.getClass(groupConfig.getGroupClass());
+        ReGroupDataVO reGroupDataVO = queryGroupImp.getGroup(sqls, tableName, groupConfig.getSqlField());
+        return reGroupDataVO;
+    }
+    /**
      * 查询所有公司和地区
      * @param getAllCompanyAndAreaDTO
      * @return

+ 1 - 1
src/main/resources/jsons/productMarketData.json

@@ -169,7 +169,7 @@
   {
     "name": "公司名称",
     "type": "String",
-    "value": "ca",
+    "value": "companyName",
     "field": "companyName",
     "sqlField": "p.company_name",
     "sqlClass": "getComSql",

+ 9 - 0
src/main/resources/mapper/ProductMarketDataMapper.xml

@@ -30,6 +30,15 @@
         group by ${groupField} ${sqls.get(1)}  ${sqls.get(2)}
     </select>
 
+    <select id="getPartGroups" resultType="cn.cslg.pas.common.vo.GroupMarketDataVO">
+        select pmd.product_id as productId, ${selectField} as marketDate,sum(sale_money) as saleMoneyTotal ,CAST(sum(custom_license_rate * sale_money)
+        AS DECIMAL (19, 2)) AS customLicenseMoney from ${tableName}
+        <if test="sqls.get(0)!=''">
+            where ${sqls.get(0)}
+        </if>
+        group by ${groupField},pmd.product_id ${sqls.get(1)}  ${sqls.get(2)}
+    </select>
+
     <select id="getGroupsCount" resultType="java.lang.Long">
         select count(*) from (select ${selectField} from ${tableName}
         <if test="sqls.get(0)!=''">