Răsfoiți Sursa

行业连锁品牌发展情况

云殇忆 1 an în urmă
părinte
comite
9d2d4bb847

+ 8 - 4
benyun-core/src/main/java/com/benyun/core/controller/BrandController.java

@@ -4,6 +4,7 @@ import com.benyun.core.constant.RedisContant;
 import com.benyun.core.entity.bo.BrandGeoLabelBo;
 import com.benyun.core.entity.bo.BrandOpcloseBo;
 import com.benyun.core.entity.bo.BrandSearch;
+import com.benyun.core.entity.vo.BrandEvolveVo;
 import com.benyun.core.entity.vo.BrandOpcloseVo;
 import com.benyun.core.entity.vo.ListQueryBody;
 import com.benyun.core.service.BrandService;
@@ -125,12 +126,15 @@ public class BrandController extends BaseController {
     }
 
 //    行业连锁品牌发展情况
-    @PostMapping("/develop")
-    public R develop(ListQueryBody body){
+    @PostMapping("/evolve")
+    public R develop(@RequestBody ListQueryBody body){
         List<String> addrCode = body.getAddrCode();
-        List<String> typeCode = body.getTypeCode(); // 网点分类(犇云)预留
+        List<String> typeCode = body.getTypeCode(); // 网点分类(犇云)
         List<String> brandId = body.getBrandId();
-        return null;
+        if (brandId == null || brandId.size() == 0)
+            return R.fail("brandId不允许为空");
+        List<BrandEvolveVo> vos = brandService.searchEvolveByMulti(addrCode, typeCode, brandId);
+        return R.ok(vos);
     }
 
 //    连锁品牌近期开关店情况(开点量)

+ 14 - 0
benyun-core/src/main/java/com/benyun/core/dao/BrandEvolveDao.java

@@ -0,0 +1,14 @@
+package com.benyun.core.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.benyun.core.entity.BrandEvolve;
+import com.benyun.core.entity.vo.BrandEvolveVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface BrandEvolveDao extends BaseMapper<BrandEvolve> {
+    List<BrandEvolveVo> selectByMulti(@Param("addrCodes") List<String> addrCodes, @Param("typeCodes") List<String> typeCodes, @Param("brandId") String brandId);
+}

+ 40 - 0
benyun-core/src/main/java/com/benyun/core/entity/BrandEvolve.java

@@ -0,0 +1,40 @@
+package com.benyun.core.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("bl_brand_evolve_statistics")
+public class BrandEvolve {
+    @TableField("stat_id")
+    private String statId;
+
+    @TableField("brand_id")
+    private String brandId;
+
+    @TableField("brand_name")
+    private String brandName;
+
+    @TableField("addr_code")
+    private String addrCode;
+
+    @TableField("type_code_by")
+    private String typeCodeBy;
+
+    @TableField("count")
+    private Integer count;
+
+    @TableField("stat_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime statTime;
+}

+ 11 - 0
benyun-core/src/main/java/com/benyun/core/entity/vo/BrandEvolveVo.java

@@ -0,0 +1,11 @@
+package com.benyun.core.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class BrandEvolveVo {
+    private String brandId;
+    private String brandName;
+    private Integer total;
+    private String time;
+}

+ 2 - 0
benyun-core/src/main/java/com/benyun/core/service/BrandService.java

@@ -1,6 +1,7 @@
 package com.benyun.core.service;
 
 import com.benyun.core.entity.bo.*;
+import com.benyun.core.entity.vo.BrandEvolveVo;
 import com.benyun.core.entity.vo.BrandOpcloseVo;
 import com.benyun.core.entity.vo.ListQueryBody;
 import com.github.pagehelper.PageInfo;
@@ -24,4 +25,5 @@ public interface BrandService {
     List<BrandGeoLabelBo> searchGeoLabel(String brandId);
     List<BrandOpcloseVo> searchOpenByMulti(List<String> typeCodes, LocalDateTime startTime, LocalDateTime endTime);
     List<BrandOpcloseVo> searchCloseByMulti(List<String> typeCodes, LocalDateTime startTime, LocalDateTime endTime);
+    List<BrandEvolveVo> searchEvolveByMulti(List<String> addrCodes,List<String> typeCodes,List<String> brandIds);
 }

+ 38 - 0
benyun-core/src/main/java/com/benyun/core/service/impl/BrandServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.benyun.core.dao.*;
 import com.benyun.core.entity.*;
 import com.benyun.core.entity.bo.*;
+import com.benyun.core.entity.vo.BrandEvolveVo;
 import com.benyun.core.entity.vo.BrandOpcloseVo;
 import com.benyun.core.entity.vo.ListQueryBody;
 import com.benyun.core.service.BrandService;
@@ -46,6 +47,8 @@ public class BrandServiceImpl implements BrandService {
     BrandStoreOpcloseDao storeOpcloseDao;
     @Autowired
     CategoryUtil categoryUtil;
+    @Autowired
+    BrandEvolveDao brandEvolveDao;
 
     @Override
     public List<BrandSearch> searchByLikeName(String text) {
@@ -488,4 +491,39 @@ public class BrandServiceImpl implements BrandService {
         List<BrandOpcloseVo> vos = storeOpcloseDao.selectCloseByMulti(codes, startTime, endTime);
         return vos.subList(0,9);
     }
+
+    @Override
+    public List<BrandEvolveVo> searchEvolveByMulti(List<String> addrCodes, List<String> typeCodes, List<String> brandIds) {
+        List<String> addrs = new ArrayList<>();
+        if (addrCodes != null){
+            for (String code : addrCodes){
+                addrs.add(code);
+                List<String> otherAddrCode = categoryUtil.getAllOtherAddrCode(code);
+                addrs.addAll(otherAddrCode);
+            }
+        }else{
+            addrs = null;
+        }
+        List<String> types = new ArrayList<>();
+        if (typeCodes != null){
+            for (String code : typeCodes){
+                types.add(code);
+                List<String> otherTypeBy = categoryUtil.getAllOtherTypeBy(code);
+                types.addAll(otherTypeBy);
+            }
+        }else{
+            types = null;
+        }
+        List<BrandEvolveVo> vos = new ArrayList<>();
+        for (String brandId : brandIds){
+            List<BrandEvolveVo> evolveVos = brandEvolveDao.selectByMulti(addrs, types, brandId);
+            for (int i=0; i<evolveVos.size(); i++){
+                if (i == 0)
+                    continue;
+                evolveVos.get(i).setTotal(evolveVos.get(i-1).getTotal()+evolveVos.get(i).getTotal());
+            }
+            vos.addAll(evolveVos);
+        }
+        return vos;
+    }
 }

+ 34 - 0
benyun-core/src/main/resources/mapper/BrandEvolveMapper.xml

@@ -0,0 +1,34 @@
+<?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="com.benyun.core.dao.BrandEvolveDao">
+    <select id="selectByMulti" resultType="com.benyun.core.entity.vo.BrandEvolveVo">
+        SELECT
+            brand_id,
+            brand_name,
+            SUM(count) total,
+            DATE_FORMAT(stat_time, '%Y-%m') time
+        FROM
+            `bl_brand_evolve_statistics`
+        <where>
+            brand_id = #{brandId}
+            <if test="addrCodes != null">
+                <foreach collection="addrCodes" item="code" open="AND addr_code IN (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="typeCodes != null">
+                <foreach collection="typeCodes" item="code" open="AND type_code_by IN (" separator="," close=")">
+                    #{code,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+        </where>
+        GROUP BY
+            brand_id,
+            brand_name,
+            time
+        ORDER BY
+            time;
+    </select>
+</mapper>