xiexiang 1 سال پیش
والد
کامیت
5191516c81
19فایلهای تغییر یافته به همراه545 افزوده شده و 106 حذف شده
  1. 14 0
      src/main/java/cn/cslg/pas/common/dto/business/GetAllCompanyAndAreaDTO.java
  2. 8 1
      src/main/java/cn/cslg/pas/common/dto/business/ProductMarketDataDTO.java
  3. 1 1
      src/main/java/cn/cslg/pas/common/dto/business/UpdateProductMarketDataDTO.java
  4. 13 0
      src/main/java/cn/cslg/pas/common/vo/GroupMarketDataVO.java
  5. 17 0
      src/main/java/cn/cslg/pas/common/vo/business/AllCompanyAndAreaVO.java
  6. 20 0
      src/main/java/cn/cslg/pas/controller/ProductMarketDataController.java
  7. 1 1
      src/main/java/cn/cslg/pas/domain/business/ProductMarketData.java
  8. 53 0
      src/main/java/cn/cslg/pas/factorys/reGroupFactory/GetMarketDataMonthGroup.java
  9. 47 0
      src/main/java/cn/cslg/pas/factorys/reGroupFactory/GetMarketDataSeasonGroup.java
  10. 43 0
      src/main/java/cn/cslg/pas/factorys/reGroupFactory/GetMarketDataYearGroup.java
  11. 3 1
      src/main/java/cn/cslg/pas/mapper/ProductMarketDataMapper.java
  12. 119 8
      src/main/java/cn/cslg/pas/service/business/ProductMarketDataService.java
  13. 0 2
      src/main/java/cn/cslg/pas/service/query/FormatQueryService.java
  14. 13 0
      src/main/resources/jsons/product.json
  15. 143 69
      src/main/resources/jsons/productMarketData.json
  16. 8 10
      src/main/resources/mapper/ProductMarketDataMapper.xml
  17. 7 1
      src/test/java/cn/cslg/pas/service/EsServiceTests.java
  18. 13 0
      src/test/java/cn/cslg/pas/service/EventServiceTests.java
  19. 22 12
      src/test/java/cn/cslg/pas/service/ProductMarketDataServiceTests.java

+ 14 - 0
src/main/java/cn/cslg/pas/common/dto/business/GetAllCompanyAndAreaDTO.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.common.dto.business;
+
+import lombok.Data;
+
+/**
+ * 查询所有公司和地区
+ * @Author xiexiang
+ * @Date 2023/11/17
+ */
+@Data
+public class GetAllCompanyAndAreaDTO {
+    private Integer productId;
+    private Integer categoryId;
+}

+ 8 - 1
src/main/java/cn/cslg/pas/common/dto/business/ProductMarketDataDTO.java

@@ -1,7 +1,10 @@
 package cn.cslg.pas.common.dto.business;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * 新增产品营销数据
  * @Author xiexiang
@@ -17,7 +20,11 @@ public class ProductMarketDataDTO {
     /**
      * 营销时间
      */
-    private String saleTime;
+    @JsonFormat(
+            pattern = "yyyy-MM",
+            timezone = "GMT+8"
+    )
+    private Date saleTime;
 
     /**
      * 营销地区

+ 1 - 1
src/main/java/cn/cslg/pas/common/dto/business/UpdateProductMarketDataDTO.java

@@ -24,7 +24,7 @@ public class UpdateProductMarketDataDTO {
     /**
      * 营销时间
      */
-    private String saleTime;
+    private Date saleTime;
 
     /**
      * 营销地区

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

@@ -0,0 +1,13 @@
+package cn.cslg.pas.common.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+public class GroupMarketDataVO {
+    private Integer productId;
+    private String marketDate;
+    private Double customLicenseMoney;
+    private Double saleMoneyTotal;
+}

+ 17 - 0
src/main/java/cn/cslg/pas/common/vo/business/AllCompanyAndAreaVO.java

@@ -0,0 +1,17 @@
+package cn.cslg.pas.common.vo.business;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/11/17
+ */
+@Data
+public class AllCompanyAndAreaVO {
+    private Integer productId;
+    private Integer categoryId;
+    private List<String> companyNames;
+    private List<String> saleAreas;
+}

+ 20 - 0
src/main/java/cn/cslg/pas/controller/ProductMarketDataController.java

@@ -1,9 +1,11 @@
 package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.business.GetAllCompanyAndAreaDTO;
 import cn.cslg.pas.common.dto.business.ProductMarketDataDTO;
 import cn.cslg.pas.common.dto.business.UpdateProductMarketDataDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.model.request.StringGroupRequest;
 import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.exception.ConditionException;
@@ -11,6 +13,7 @@ import cn.cslg.pas.exception.UnLoginException;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.factorys.businessFactory.Business;
 import cn.cslg.pas.factorys.businessFactory.BusinessFactory;
+import cn.cslg.pas.service.business.ProductMarketDataService;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -33,6 +36,9 @@ public class ProductMarketDataController {
     @Autowired
     private BusinessFactory businessFactory;
 
+    @Autowired
+    private ProductMarketDataService productMarketDataService;
+
     @Operation(summary = "查询产品营销数据")
     @PostMapping("/queryProductMarketData")
     public Response queryProductMarketData(@RequestBody StringRequest stringRequest) throws Exception {
@@ -83,4 +89,18 @@ public class ProductMarketDataController {
             throw new XiaoShiException("需要删除的ids不能为空!");
         }
     }
+
+    @Operation(summary = "分组查询产品营销数据")
+    @PostMapping("/groupProductMarketData")
+    public Response groupEvent(@RequestBody StringGroupRequest stringGroupRequest) throws Exception {
+        Business business = businessFactory.getClass("productMarketDataService");
+        Records records = (Records) business.getGroup(stringGroupRequest,"productMarketData");
+        return Response.success(records);
+    }
+
+    @Operation(summary = "查询所有公司和地区")
+    @PostMapping("/getAllCompanyAndArea")
+    public Response getAllCompanyAndArea(@RequestBody GetAllCompanyAndAreaDTO getAllCompanyAndAreaDTO) throws Exception {
+        return Response.success(productMarketDataService.getAllCompanyAndArea(getAllCompanyAndAreaDTO));
+    }
 }

+ 1 - 1
src/main/java/cn/cslg/pas/domain/business/ProductMarketData.java

@@ -25,7 +25,7 @@ public class ProductMarketData extends BaseEntity<ProductMarketData> {
      * 营销时间
      */
     @TableField(value = "sale_time")
-    private String saleTime;
+    private Date saleTime;
 
     /**
      * 营销地区

+ 53 - 0
src/main/java/cn/cslg/pas/factorys/reGroupFactory/GetMarketDataMonthGroup.java

@@ -0,0 +1,53 @@
+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.MatterService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@Slf4j
+@Component
+public class GetMarketDataMonthGroup implements QueryGroupImp {
+    @Autowired
+    private ProductMarketDataMapper productMarketDataMapper;
+
+    /**
+     * 根据月份 返沪
+     * @param sqls
+     * @param tableName
+     * @param groupField sale_time 营销时间
+     * @return
+     */
+    @Override
+    public ReGroupDataVO getGroup(List<String> sqls, String tableName, String groupField) {
+        ReGroupDataVO reGroupDataVO = new ReGroupDataVO();
+        List<Map<String, Object>> maps = new ArrayList<>();
+        //“select ${selectField} as marketDate,”
+        groupField = "DATE_FORMAT(" + groupField + ",'%Y%c')";
+        String selectField = groupField;
+        //统计营销数据
+        List<GroupMarketDataVO> groupMarketDataVOS = productMarketDataMapper.getGroups(sqls, tableName, groupField, selectField);
+        groupMarketDataVOS.forEach(item->{
+            Map<String,Object> map = new HashMap<>();
+            map.put("marketDate",item.getMarketDate());
+            map.put("customLicenseMoney",item.getCustomLicenseMoney());
+            map.put("saleMoneyTotal",item.getSaleMoneyTotal());
+            maps.add(map);
+        });
+
+        reGroupDataVO.setValues(maps);
+        return reGroupDataVO;
+    }
+
+
+
+}

+ 47 - 0
src/main/java/cn/cslg/pas/factorys/reGroupFactory/GetMarketDataSeasonGroup.java

@@ -0,0 +1,47 @@
+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.MatterService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@Slf4j
+@Component
+public class GetMarketDataSeasonGroup implements QueryGroupImp {
+    @Autowired
+    private ProductMarketDataMapper productMarketDataMapper;
+    @Autowired
+    private MatterService matterService;
+
+    @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))";
+        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);
+        });
+        reGroupDataVO.setValues(maps);
+        return reGroupDataVO;
+    }
+
+
+
+}

+ 43 - 0
src/main/java/cn/cslg/pas/factorys/reGroupFactory/GetMarketDataYearGroup.java

@@ -0,0 +1,43 @@
+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 lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@Slf4j
+@Component
+public class GetMarketDataYearGroup implements QueryGroupImp {
+    @Autowired
+    private ProductMarketDataMapper productMarketDataMapper;
+
+    @Override
+    public ReGroupDataVO getGroup(List<String> sqls, String tableName, String groupField) {
+        ReGroupDataVO reGroupDataVO =new ReGroupDataVO();
+        List<Map<String, Object>> maps = new ArrayList<>();
+        groupField = "DATE_FORMAT(" + groupField + ",'%Y')";
+        String selectField = groupField;
+        //统计营销数据
+        List<GroupMarketDataVO> groupMarketDataVOS = productMarketDataMapper.getGroups(sqls, tableName, groupField, selectField);
+        groupMarketDataVOS.forEach(item ->{
+            Map<String,Object> map = new HashMap<>();
+            map.put("marketDate",item.getMarketDate());
+            map.put("customLicenseMoney",item.getCustomLicenseMoney());
+            map.put("saleMoneyTotal",item.getSaleMoneyTotal());
+            maps.add(map);
+        });
+        reGroupDataVO.setValues(maps);
+        return reGroupDataVO;
+    }
+
+
+
+}

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.mapper;
 
+import cn.cslg.pas.common.vo.GroupMarketDataVO;
 import cn.cslg.pas.common.vo.business.ProductMarketDataVO;
 import cn.cslg.pas.domain.business.ProductMarketData;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -15,5 +16,6 @@ import java.util.List;
 @Repository
 public interface ProductMarketDataMapper extends BaseMapper<ProductMarketData> {
     public List<ProductMarketDataVO> getProductMarketData(String sql1, String sql2, String sql3);
-    public Long getProductCategoryCount(String sql);
+    public Long getProductMarketDataCount(String sql);
+    public List<GroupMarketDataVO> getGroups(List<String> sqls, String tableName, String groupField, String selectField);
 }

+ 119 - 8
src/main/java/cn/cslg/pas/service/business/ProductMarketDataService.java

@@ -1,35 +1,47 @@
 package cn.cslg.pas.service.business;
 
+import cn.cslg.pas.common.dto.business.GetAllCompanyAndAreaDTO;
 import cn.cslg.pas.common.dto.business.ProductMarketDataDTO;
 import cn.cslg.pas.common.dto.business.UpdateProductMarketDataDTO;
-import cn.cslg.pas.common.model.cronModel.Personnel;
-import cn.cslg.pas.common.model.cronModel.PersonnelVO;
-import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.model.cronModel.*;
 import cn.cslg.pas.common.model.request.GroupRequest;
 import cn.cslg.pas.common.model.request.QueryRequest;
+import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.vo.business.AllCompanyAndAreaVO;
 import cn.cslg.pas.common.vo.business.ProductMarketDataVO;
+import cn.cslg.pas.domain.business.Product;
 import cn.cslg.pas.domain.business.ProductMarketData;
 import cn.cslg.pas.exception.UnLoginException;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.factorys.businessFactory.Business;
+import cn.cslg.pas.factorys.reGroupFactory.QueryGroupFactory;
+import cn.cslg.pas.factorys.reGroupFactory.QueryGroupImp;
 import cn.cslg.pas.mapper.ProductMarketDataMapper;
 import cn.cslg.pas.service.permissions.PermissionService;
 import cn.cslg.pas.service.query.FormatQueryService;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
+ * 产品营销数据的Service层
  * @Author xiexiang
  * @Date 2023/11/16
  */
@@ -49,14 +61,20 @@ public class ProductMarketDataService extends ServiceImpl<ProductMarketDataMappe
     private LoginUtils loginUtils;
 
     @Autowired
+    private QueryGroupFactory queryGroupFactory;
+
+    @Autowired
     private PermissionService permissionService;
 
+    @Autowired
+    private ProductService productService;
+
     @Override
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
         List<String> sqls = formatQueryService.reSqls(queryRequest,"productMarketData");
         List<ProductMarketDataVO> productMarketDataVOS = productMarketDataMapper.getProductMarketData(sqls.get(0),sqls.get(1),sqls.get(2));
         //查询总数
-        Long total = productMarketDataMapper.getProductCategoryCount(sqls.get(0));
+        Long total = productMarketDataMapper.getProductMarketDataCount(sqls.get(0));
         this.loadProductMarketData(productMarketDataVOS);
         Records records = new Records();
         records.setCurrent(queryRequest.getCurrent());
@@ -86,10 +104,6 @@ public class ProductMarketDataService extends ServiceImpl<ProductMarketDataMappe
         return null;
     }
 
-    @Override
-    public Object getGroup(GroupRequest groupRequest, String tableName) throws Exception {
-        return null;
-    }
 
     @Override
     public Object addMessage(Object object) {
@@ -162,6 +176,16 @@ public class ProductMarketDataService extends ServiceImpl<ProductMarketDataMappe
             personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
         }
         for (ProductMarketDataVO productMarketDataVO : productMarketDataVOS) {
+            String saleTime = productMarketDataVO.getSaleTime();
+            SimpleDateFormat sdfOutput = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            SimpleDateFormat sdfString = new SimpleDateFormat("yyyy-MM");
+            try {
+                Date finalDate = sdfOutput.parse(saleTime);
+                String saleTimeString = sdfString.format(finalDate);
+                productMarketDataVO.setSaleTime(saleTimeString);
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
             //装载人员信息
             Personnel personnel = personnels.stream().filter(item -> item.getId().equals(productMarketDataVO.getCreateId())).findFirst().orElse(null);
             if (personnel != null) {
@@ -171,4 +195,91 @@ public class ProductMarketDataService extends ServiceImpl<ProductMarketDataMappe
             }
         }
     }
+
+
+    /**
+     * 查询营销数据分组信息
+     *
+     * @param groupRequest
+     * @return
+     * @throws Exception
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Object getGroup(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());
+        //装载数据
+        GroupVO groupVO = new GroupVO();
+        groupVO.setField(groupRequest.getGroupBy());
+        groupVO.setValues(reGroupDataVO.getValues());
+        Records records = new Records();
+        records.setData(groupVO);
+        return records;
+    }
+
+    /**
+     * 查询所有公司和地区
+     * @param getAllCompanyAndAreaDTO
+     * @return
+     */
+    public AllCompanyAndAreaVO getAllCompanyAndArea(GetAllCompanyAndAreaDTO getAllCompanyAndAreaDTO){
+        AllCompanyAndAreaVO allCompanyAndAreaVO = new AllCompanyAndAreaVO();
+        Integer productId = getAllCompanyAndAreaDTO.getProductId();
+        Integer categoryId = getAllCompanyAndAreaDTO.getCategoryId();
+        //如果产品id为空 则必须有类别id
+        if (productId == null) {
+            if (categoryId != null) {
+                allCompanyAndAreaVO.setCategoryId(categoryId);
+                //根据类别id查询公司名
+                LambdaQueryWrapper<Product> categoryWrapper = new LambdaQueryWrapper<>();
+                categoryWrapper.eq(Product::getCategoryId, categoryId);
+                List<Product> products = productService.list(categoryWrapper);
+                List<String> companyNames = products.stream().map(Product::getCompanyName).distinct().collect(Collectors.toList());
+                allCompanyAndAreaVO.setCompanyNames(companyNames);
+                //根据查出来的产品ids查询地区名
+                List<Integer> productIds = products.stream().map(Product::getId).collect(Collectors.toList());
+                LambdaQueryWrapper<ProductMarketData> areaWrapper = new LambdaQueryWrapper<>();
+                areaWrapper.in(ProductMarketData::getProductId, productIds);
+                List<ProductMarketData> productMarketDatas = this.list(areaWrapper);
+                List<String> areas = productMarketDatas.stream().map(ProductMarketData::getSaleArea).distinct().collect(Collectors.toList());
+                allCompanyAndAreaVO.setSaleAreas(areas);
+                return allCompanyAndAreaVO;
+            } else {
+                throw new XiaoShiException("必须传一个参数");
+            }
+        } else {
+            if (categoryId != null) {
+                throw new XiaoShiException("只能传一个参数");
+            } else {
+                //根据产品id查询
+                allCompanyAndAreaVO.setProductId(productId);
+                List<String> companyNames = new ArrayList<>();
+                Product product = productService.getById(productId);
+                companyNames.add(product.getCompanyName());
+                companyNames.stream().distinct();
+                allCompanyAndAreaVO.setCompanyNames(companyNames);
+                LambdaQueryWrapper<ProductMarketData> areaWrapper = new LambdaQueryWrapper<>();
+                areaWrapper.eq(ProductMarketData::getProductId, productId);
+                List<ProductMarketData> productMarketDatas = this.list(areaWrapper);
+                List<String> saleAreas = productMarketDatas.stream().map(ProductMarketData::getSaleArea).distinct().collect(Collectors.toList());
+                allCompanyAndAreaVO.setSaleAreas(saleAreas);
+                return allCompanyAndAreaVO;
+            }
+        }
+    }
 }

+ 0 - 2
src/main/java/cn/cslg/pas/service/query/FormatQueryService.java

@@ -120,12 +120,10 @@ public class FormatQueryService {
             OrderConfig orderConfig = configs.stream().filter(tem -> tem.getField().equals(item.getOrderBy())).findFirst().orElse(null);
             GetOrderObject getOrderObject = getOrderFactory.getClass(orderConfig.getOrderClass());
             String order = getOrderObject.getOrderString(orderConfig.getSqlField(), item.getOrderType());
-
             if (order != "") {
                 orders.add(order);
             }
         });
-
         if(orders.size()==0){
             return  "";
         }

+ 13 - 0
src/main/resources/jsons/product.json

@@ -162,5 +162,18 @@
     "ifSearch":"true",
     "ifGroup": "false",
     "ifShow":"false"
+  },
+  {
+    "name":"年",
+    "type":"DateTime",
+    "value":"year",
+    "field":"year",
+    "sqlField": "market_date",
+    "orderClass": "getComOrder",
+    "sqlClass": "getDateTimeSql",
+    "groupClass":"",
+    "ifSearch":"true",
+    "ifGroup": "false",
+    "ifShow":"false"
   }
 ]

+ 143 - 69
src/main/resources/jsons/productMarketData.json

@@ -1,108 +1,182 @@
 [
-  {"name":"Id",
-    "type":"Integer",
-    "value":"id",
-    "field":"id",
+  {
+    "name": "Id",
+    "type": "Integer",
+    "value": "id",
+    "field": "id",
     "sqlField": "id",
     "sqlClass": "getComSql",
     "orderClass": "getComOrder",
-    "groupClass":"",
-    "ifSearch":"false",
+    "groupClass": "",
+    "ifSearch": "false",
     "ifGroup": "false",
-    "ifShow":"false"
+    "ifShow": "false"
   },
-  {"name":"产品Id",
-    "type":"Integer",
-    "value":"product_id",
-    "field":"product_id",
-    "sqlField": "productId",
+  {
+    "name": "产品Id",
+    "type": "Integer",
+    "value": "productId",
+    "field": "productId",
+    "sqlField": "pmd.product_id",
     "sqlClass": "getComSql",
     "orderClass": "getComOrder",
-    "groupClass":"",
-    "ifSearch":"false",
+    "groupClass": "",
+    "ifSearch": "false",
     "ifGroup": "false",
-    "ifShow":"true"
+    "ifShow": "true"
   },
-  {"name":"营销时间",
-    "type":"DateTime",
-    "value":"saleTime",
+  {
+    "name": "营销时间",
+    "type": "DateTime",
+    "value": "saleTime",
     "field": "saleTime",
-    "sqlField": "sale_time",
+    "sqlField": "pmd.sale_time",
     "sqlClass": "",
-    "orderClass": "",
-    "groupClass":"",
-    "ifSearch":"false",
+    "orderClass": "getComOrder",
+    "groupClass": "",
+    "ifSearch": "false",
     "ifGroup": "false",
-    "ifShow":"true"
+    "ifShow": "true"
   },
-  {"name":"营销地区",
-    "type":"String",
-    "value":"saleArea",
+  {
+    "name": "营销地区",
+    "type": "String",
+    "value": "saleArea",
     "field": "saleArea",
-    "sqlField": "sale_area",
-    "sqlClass": "",
+    "sqlField": "pmd.sale_area",
+    "sqlClass": "getComSql",
     "orderClass": "getComOrder",
-    "groupClass":"",
-    "ifSearch":"false",
+    "groupClass": "",
+    "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow":"true"
+    "ifShow": "true"
   },
-  {"name":"销售量",
-    "type":"Double",
-    "value":"saleCount",
+  {
+    "name": "销售量",
+    "type": "Double",
+    "value": "saleCount",
     "field": "saleCount",
-    "sqlField": "sale_count",
+    "sqlField": "pmd.sale_count",
     "sqlClass": "",
     "orderClass": "getComOrder",
-    "groupClass":"",
-    "ifSearch":"false",
+    "groupClass": "",
+    "ifSearch": "false",
     "ifGroup": "false",
-    "ifShow":"true"
+    "ifShow": "true"
   },
-  {"name":"销售额(万元)",
-    "type":"Double",
-    "value":"saleMoney",
+  {
+    "name": "销售额(万元)",
+    "type": "Double",
+    "value": "saleMoney",
     "field": "saleMoney",
-    "sqlField": "sale_money",
+    "sqlField": "pmd.sale_money",
     "sqlClass": "",
     "orderClass": "getComOrder",
-    "ifSearch":"false",
+    "ifSearch": "false",
     "ifGroup": "false",
-    "ifShow":"true"
+    "ifShow": "true"
   },
-  {"name":"自定义许可费率",
-    "type":"Double",
-    "value":"customLicenseRate",
+  {
+    "name": "自定义许可费率",
+    "type": "Double",
+    "value": "customLicenseRate",
     "field": "customLicenseRate",
-    "sqlField": "custom_license_rate",
+    "sqlField": "pmd.custom_license_rate",
     "sqlClass": "",
     "orderClass": "getComOrder",
-    "ifSearch":"false",
+    "ifSearch": "false",
     "ifGroup": "false",
-    "ifShow":"true"
+    "ifShow": "true"
   },
-  {"name":"创建人",
-  "type":"String",
-  "value":"createName",
-  "field": "createName",
-  "sqlField": "create_id",
-  "sqlClass": "getCreateNameSql",
-  "orderClass": "getCreateNameOrder",
-  "groupClass":"getComGroup",
-  "ifSearch":"true",
-  "ifGroup": "false",
-  "ifShow":"true"
-},
-  {"name":"创建时间",
-    "type":"DateTime",
-    "value":"createTime",
+  {
+    "name": "创建人",
+    "type": "String",
+    "value": "createName",
+    "field": "createName",
+    "sqlField": "pmd.create_id",
+    "sqlClass": "getCreateNameSql",
+    "orderClass": "getCreateNameOrder",
+    "groupClass": "getComGroup",
+    "ifSearch": "true",
+    "ifGroup": "false",
+    "ifShow": "true"
+  },
+  {
+    "name": "创建时间",
+    "type": "DateTime",
+    "value": "createTime",
     "field": "createTime",
-    "sqlField": "create_time",
+    "sqlField": "pmd.create_time",
+    "sqlClass": "getDateTimeSql",
+    "orderClass": "getComOrder",
+    "groupClass": "getTimeGroup",
+    "ifSearch": "true",
+    "ifGroup": "false",
+    "ifShow": "true"
+  },
+  {
+    "name": "年",
+    "type": "DateTime",
+    "value": "groupYearTime",
+    "field": "groupYearTime",
+    "sqlField": "pmd.sale_time",
+    "sqlClass": "getDateTimeSql",
+    "orderClass": "getComOrder",
+    "groupClass": "getMarketDataYearGroup",
+    "ifSearch": "false",
+    "ifGroup": "true",
+    "ifShow": "false"
+  },
+  {
+    "name": "月",
+    "type": "DateTime",
+    "value": "groupMonthTime",
+    "field": "groupMonthTime",
+    "sqlField": "pmd.sale_time",
+    "sqlClass": "getDateTimeSql",
+    "orderClass": "getComOrder",
+    "groupClass": "getMarketDataMonthGroup",
+    "ifSearch": "false",
+    "ifGroup": "true",
+    "ifShow": "false"
+  },
+  {
+    "name": "季度",
+    "type": "DateTime",
+    "value": "groupSeasonTime",
+    "field": "groupSeasonTime",
+    "sqlField": "pmd.sale_time",
     "sqlClass": "getDateTimeSql",
     "orderClass": "getComOrder",
-    "groupClass":"getTimeGroup",
-    "ifSearch":"true",
+    "groupClass": "getMarketDataSeasonGroup",
+    "ifSearch": "false",
+    "ifGroup": "true",
+    "ifShow": "false"
+  },
+  {
+    "name": "架构id",
+    "type": "Integer",
+    "value": "categoryId",
+    "field": "categoryId",
+    "sqlField": "p.category_id",
+    "sqlClass": "getComSql",
+    "orderClass": "getComOrder",
+    "groupClass": "",
+    "ifSearch": "true",
+    "ifGroup": "false",
+    "ifShow": "true"
+  },
+  {
+    "name": "公司名称",
+    "type": "String",
+    "value": "ca",
+    "field": "companyName",
+    "sqlField": "p.company_name",
+    "sqlClass": "getComSql",
+    "orderClass": "getComOrder",
+    "groupClass": "",
+    "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow":"true"
+    "ifShow": "true"
   }
 ]

+ 8 - 10
src/main/resources/mapper/ProductMarketDataMapper.xml

@@ -4,31 +4,30 @@
     <!--namespace根据自己需要创建的的mapper的路径和名称填写-->
     <select id="getProductMarketData" resultType="cn.cslg.pas.common.vo.business.ProductMarketDataVO">
         select id, product_id as productId, sale_time as saleTime, sale_area as saleArea, sale_count as saleCount,
-               sale_money as saleMoney, custom_license_rate as customLicenseRate, create_id as createId,create_time as createTime from product_market_data
+        sale_money as saleMoney, custom_license_rate as customLicenseRate, create_id as createId,create_time as
+        createTime from product_market_data as pmd
         <if test="sql1!=''">
 
             where ${sql1}
         </if>
-
-
         ${sql2} ${sql3}
     </select>
 
-    <select id="getProductCategoryCount" resultType="java.lang.Long">
-       select count(*) from product_market_data
+    <select id="getProductMarketDataCount" resultType="java.lang.Long">
+        select count(*) from product_market_data as pmd
         <if test="sql!=''">
 
             where ${sql}
         </if>
-        ) as c
     </select>
 
-    <select id="getGroups" resultType="java.lang.String">
-        select ${selectField} from ${tableName}
+    <select id="getGroups" resultType="cn.cslg.pas.common.vo.GroupMarketDataVO">
+        select ${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} ${sqls.get(1)} ${sqls.get(2)}
+        group by ${groupField} ${sqls.get(1)}  ${sqls.get(2)}
     </select>
 
     <select id="getGroupsCount" resultType="java.lang.Long">
@@ -37,6 +36,5 @@
             where ${sqls.get(0)}
         </if>
         group by ${groupField}
-        ) as c
     </select>
 </mapper>

+ 7 - 1
src/test/java/cn/cslg/pas/service/EsServiceTests.java

@@ -1,8 +1,10 @@
 package cn.cslg.pas.service;
 
+import cn.cslg.pas.common.dto.business.ProductMarketDataDTO;
 import cn.cslg.pas.common.utils.FormatUtil;
 import cn.cslg.pas.common.utils.RedisUtil;
 import cn.cslg.pas.common.vo.PatentWithIdVO;
+import cn.cslg.pas.controller.ProductMarketDataController;
 import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.service.business.es.EsService;
 
@@ -12,6 +14,9 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
 /**
  * @author chenyu
  * @date 2023/9/6
@@ -47,7 +52,8 @@ public class EsServiceTests {
     }
 
     @Test
-    void updatePatent() throws Exception{}
+    void updatePatent() throws Exception{
+    }
 
     @Test
     void addImportTask() throws  Exception {

+ 13 - 0
src/test/java/cn/cslg/pas/service/EventServiceTests.java

@@ -1,8 +1,10 @@
 package cn.cslg.pas.service;
 
+import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.*;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.controller.EventController;
+import cn.cslg.pas.service.business.ProductMarketDataService;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.http.entity.ContentType;
 import org.junit.Before;
@@ -27,6 +29,8 @@ public class EventServiceTests {
     @Autowired
     private EventController eventController;
 
+    @Autowired
+    private ProductMarketDataService productMarketDataService;
     @Test
     void test() throws Exception {
         StringRequest queryRequest = new StringRequest();
@@ -90,4 +94,13 @@ public class EventServiceTests {
         queryRequest.setGroupBy("name");
         eventController.groupEvent(queryRequest);
     }
+
+    @Test
+    void test1() throws Exception {
+        StringGroupRequest groupRequest = new StringGroupRequest();
+
+        groupRequest.setGroupBy("groupMonthTime");
+        Records records=(Records) productMarketDataService.getGroup(groupRequest,"productMarketData");
+        System.out.println(records);
+    }
 }

+ 22 - 12
src/test/java/cn/cslg/pas/service/ProductMarketDataServiceTests.java

@@ -1,15 +1,20 @@
 package cn.cslg.pas.service;
 
 import cn.cslg.pas.common.dto.business.ProductMarketDataDTO;
-import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.model.cronModel.ReGroupDataVO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.model.request.OrderDTO;
+import cn.cslg.pas.common.model.request.StringGroupRequest;
 import cn.cslg.pas.controller.ProductMarketDataController;
-import org.junit.Assert;
+import cn.cslg.pas.service.business.ProductMarketDataService;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Author xiexiang
@@ -20,16 +25,21 @@ public class ProductMarketDataServiceTests {
     @Autowired
     private ProductMarketDataController productMarketDataController;
 
+    @Autowired
+    private ProductMarketDataService productMarketDataService;
     @Test
-        void test() throws Exception {
-            ProductMarketDataDTO productMarketDataDTO = new ProductMarketDataDTO();
-            productMarketDataDTO.setProductId(10);
-            productMarketDataDTO.setSaleArea("昆山");
-            productMarketDataDTO.setSaleTime("2023年12月");
-            productMarketDataDTO.setSaleCount(10.0);
-            productMarketDataDTO.setSaleMoney(13.4);
-            productMarketDataDTO.setCustomLicenseRate(0.1);
-            productMarketDataController.addProductMarketData(productMarketDataDTO);
+    public void test() throws Exception {
+        ProductMarketDataDTO productMarketDataDTO = new ProductMarketDataDTO();
+        productMarketDataDTO.setProductId(10);
+        productMarketDataDTO.setSaleArea("昆山");
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
+        Date date =  simpleDateFormat.parse("2023-12");
+        productMarketDataDTO.setSaleTime(date);
+        productMarketDataDTO.setSaleCount(10.0);
+        productMarketDataDTO.setSaleMoney(13.4);
+        productMarketDataDTO.setCustomLicenseRate(0.1);
+        productMarketDataController.addProductMarketData(productMarketDataDTO);
+    }
+
 
-        }
 }