Ver Fonte

Merge branch 'lcy' of http://47.107.53.207:3000/traineeCoder001/Bailian-Al

JensionDzero há 1 ano atrás
pai
commit
4e1bee53e8

+ 3 - 0
benyun-core/src/main/java/com/benyun/core/constant/RedisContant.java

@@ -54,4 +54,7 @@ public class RedisContant {
     public static String BRAND_GEOLABEL = "brand_geolabel";
     public static int BRAND_GEOLABEL_TIME = 60*8;
 
+    public static String BRAND_GEOLABEL = "brand_geolabel";
+    public static int BRAND_GEOLABEL_TIME = 60*8;
+
 }

+ 29 - 11
benyun-core/src/main/java/com/benyun/core/controller/BrandController.java

@@ -2,7 +2,10 @@ package com.benyun.core.controller;
 
 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;
 import com.benyun.core.utils.HashUtil;
@@ -14,6 +17,7 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
@@ -122,20 +126,34 @@ 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);
     }
 
-//    连锁品牌近期开关店情况
-    @GetMapping("/opclose")
-    public R opclose(ListQueryBody body){
-        List<String> industryCode = body.getIndustryCode(); // 预留
-        String startTime = body.getStartTime();
-        String endTime = body.getEndTime();
-        return null;
+//    连锁品牌近期开关店情况(开点量)
+    @PostMapping("/open")
+    public R open(@RequestBody BrandOpcloseBo bo){
+        List<String> typeCodes = bo.getTypeCodes(); // 网点类型(犇云)
+        LocalDateTime startTime = bo.getStartTime();
+        LocalDateTime endTime = bo.getEndTime();
+        List<BrandOpcloseVo> vos = brandService.searchOpenByMulti(typeCodes, startTime, endTime);
+        return R.ok(vos);
+    }
+
+//    连锁品牌近期开关店情况(关店量)
+    @PostMapping("/close")
+    public R close(@RequestBody BrandOpcloseBo bo){
+        List<String> typeCodes = bo.getTypeCodes(); // 网点类型(犇云)
+        LocalDateTime startTime = bo.getStartTime();
+        LocalDateTime endTime = bo.getEndTime();
+        List<BrandOpcloseVo> vos = brandService.searchCloseByMulti(typeCodes, startTime, endTime);
+        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);
+}

+ 16 - 0
benyun-core/src/main/java/com/benyun/core/dao/BrandStoreOpcloseDao.java

@@ -0,0 +1,16 @@
+package com.benyun.core.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.benyun.core.entity.BrandStoreOpclose;
+import com.benyun.core.entity.vo.BrandOpcloseVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Mapper
+public interface BrandStoreOpcloseDao extends BaseMapper<BrandStoreOpclose> {
+    List<BrandOpcloseVo> selectOpenByMulti(@Param("typeCodes") List<String> typeCodes, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
+    List<BrandOpcloseVo> selectCloseByMulti(@Param("typeCodes") List<String> typeCodes, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
+}

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

+ 43 - 0
benyun-core/src/main/java/com/benyun/core/entity/BrandStoreOpclose.java

@@ -0,0 +1,43 @@
+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_store_opclose_statistics")
+public class BrandStoreOpclose {
+    @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("open_count")
+    private Integer openCount;
+
+    @TableField("close_count")
+    private Integer closeCount;
+
+    @TableField("stat_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime statTime;
+}

+ 26 - 0
benyun-core/src/main/java/com/benyun/core/entity/bo/BrandOpcloseBo.java

@@ -0,0 +1,26 @@
+package com.benyun.core.entity.bo;
+
+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;
+import java.util.List;
+
+@Data
+public class BrandOpcloseBo {
+    private List<String> typeCodes; // 网点分类(犇云)
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime startTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime endTime;
+}

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

+ 14 - 0
benyun-core/src/main/java/com/benyun/core/entity/vo/BrandOpcloseVo.java

@@ -0,0 +1,14 @@
+package com.benyun.core.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class BrandOpcloseVo {
+    private String brandId;
+
+    private String brandName;
+
+    private Integer count;
+
+    private String ratio;
+}

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

@@ -1,9 +1,12 @@
 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;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 public interface BrandService {
@@ -20,4 +23,7 @@ public interface BrandService {
 //    BStoreData searchAvgScoreByBrandId(String brandId);
 //    List<BrandAddrDistribution> searchAddrDistribution(List<String> addrCodes);
     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);
 }

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

@@ -4,13 +4,17 @@ 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;
+import com.benyun.core.utils.CategoryUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.*;
 
 @Service
@@ -39,6 +43,12 @@ public class BrandServiceImpl implements BrandService {
     TypeByDao typeByDao;
     @Autowired
     WdInfoServiceImpl wdInfoService;
+    @Autowired
+    BrandStoreOpcloseDao storeOpcloseDao;
+    @Autowired
+    CategoryUtil categoryUtil;
+    @Autowired
+    BrandEvolveDao brandEvolveDao;
 
     @Override
     public List<BrandSearch> searchByLikeName(String text) {
@@ -449,4 +459,71 @@ public class BrandServiceImpl implements BrandService {
         });
         return bos;
     }
+
+    @Override
+    public List<BrandOpcloseVo> searchOpenByMulti(List<String> typeCodes, LocalDateTime startTime, LocalDateTime endTime) {
+        List<String> codes = new ArrayList<>();
+        if (typeCodes != null){
+            for (String code : typeCodes){
+                codes.add(code);
+                List<String> otherTypeBy = categoryUtil.getAllOtherTypeBy(code);
+                codes.addAll(otherTypeBy);
+            }
+        }else{
+            codes = null;
+        }
+        List<BrandOpcloseVo> vos = storeOpcloseDao.selectOpenByMulti(codes, startTime, endTime);
+        return vos.subList(0, 9);
+    }
+
+    @Override
+    public List<BrandOpcloseVo> searchCloseByMulti(List<String> typeCodes, LocalDateTime startTime, LocalDateTime endTime) {
+        List<String> codes = new ArrayList<>();
+        if (typeCodes != null){
+            for (String code : typeCodes){
+                codes.add(code);
+                List<String> otherTypeBy = categoryUtil.getAllOtherTypeBy(code);
+                codes.addAll(otherTypeBy);
+            }
+        }else{
+            codes = null;
+        }
+        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>

+ 63 - 0
benyun-core/src/main/resources/mapper/BrandStoreOpcloseMapper.xml

@@ -0,0 +1,63 @@
+<?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.BrandStoreOpcloseDao">
+    <resultMap type="com.benyun.core.entity.vo.BrandOpcloseVo" id="BrandOpcloseResult">
+        <result property="brandId" column="brand_id"/>
+        <result property="brandName" column="brand_name"/>
+        <result property="count" column="count"/>
+    </resultMap>
+    <select id="selectOpenByMulti" resultMap="BrandOpcloseResult">
+        SELECT
+            brand_id,
+            brand_name,
+            SUM(open_count) count
+        FROM
+            `bl_brand_store_opclose_statistics`
+        <trim prefix="where" prefixOverrides="and">
+            <if test="typeCodes != null">
+                <foreach collection="typeCodes" item="typeCode" open="and type_code_by in (" separator="," close=")">
+                    #{typeCode,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="startTime != null">
+                and DATE_FORMAT(#{startTime},'%Y-%m-%d') <![CDATA[<=]]> DATE_FORMAT(stat_time, '%Y-%m-%d')
+            </if>
+            <if test="endTime != null">
+                and DATE_FORMAT(stat_time, '%Y-%m-%d') <![CDATA[<=]]> DATE_FORMAT(#{endTime},'%Y-%m-%d')
+            </if>
+        </trim>
+        GROUP BY
+            brand_id,
+            brand_name
+        ORDER BY
+            count DESC;
+    </select>
+    <select id="selectCloseByMulti" resultMap="BrandOpcloseResult">
+        SELECT
+            brand_id,
+            brand_name,
+            SUM(close_count) count
+        FROM
+            `bl_brand_store_opclose_statistics`
+        <trim prefix="where" prefixOverrides="and">
+            <if test="typeCodes != null">
+                <foreach collection="typeCodes" item="typeCode" open="and type_code_by in (" separator="," close=")">
+                    #{typeCode,jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="startTime != null">
+                and DATE_FORMAT(#{startTime},'%Y-%m-%d') <![CDATA[<=]]> DATE_FORMAT(stat_time, '%Y-%m-%d')
+            </if>
+            <if test="endTime != null">
+                and DATE_FORMAT(stat_time, '%Y-%m-%d') <![CDATA[<=]]> DATE_FORMAT(#{endTime},'%Y-%m-%d')
+            </if>
+        </trim>
+        GROUP BY
+            brand_id,
+            brand_name
+        ORDER BY
+            count DESC;
+    </select>
+</mapper>