Ver Fonte

连锁品牌近期开关店情况(开店量)
连锁品牌近期开关店情况(关店量)

云殇忆 há 1 ano atrás
pai
commit
24add15b1a

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

@@ -53,4 +53,7 @@ public class RedisContant {
     public static String WD_POINT = "wd_point";  //保存网点的经纬度坐标
     public static int WD_POINT_TIME = 60*8;
 
+    public static String BRAND_GEOLABEL = "brand_geolabel";
+    public static int BRAND_GEOLABEL_TIME = 60*8;
+
 }

+ 21 - 7
benyun-core/src/main/java/com/benyun/core/controller/BrandController.java

@@ -2,7 +2,9 @@ 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.BrandOpcloseVo;
 import com.benyun.core.entity.vo.ListQueryBody;
 import com.benyun.core.service.BrandService;
 import com.benyun.core.utils.HashUtil;
@@ -14,6 +16,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;
 
@@ -130,12 +133,23 @@ public class BrandController extends BaseController {
         return null;
     }
 
-//    连锁品牌近期开关店情况
-    @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);
     }
 }

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

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

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

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

@@ -1,9 +1,11 @@
 package com.benyun.core.service;
 
 import com.benyun.core.entity.bo.*;
+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 +22,6 @@ 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);
 }

+ 16 - 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.BrandOpcloseVo;
 import com.benyun.core.entity.vo.ListQueryBody;
 import com.benyun.core.service.BrandService;
 import com.github.pagehelper.PageHelper;
@@ -11,6 +12,7 @@ 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 +41,8 @@ public class BrandServiceImpl implements BrandService {
     TypeByDao typeByDao;
     @Autowired
     WdInfoServiceImpl wdInfoService;
+    @Autowired
+    BrandStoreOpcloseDao storeOpcloseDao;
 
     @Override
     public List<BrandSearch> searchByLikeName(String text) {
@@ -449,4 +453,16 @@ public class BrandServiceImpl implements BrandService {
         });
         return bos;
     }
+
+    @Override
+    public List<BrandOpcloseVo> searchOpenByMulti(List<String> typeCodes, LocalDateTime startTime, LocalDateTime endTime) {
+        List<BrandOpcloseVo> vos = storeOpcloseDao.selectOpenByMulti(typeCodes, startTime, endTime);
+        return vos.subList(0, 9);
+    }
+
+    @Override
+    public List<BrandOpcloseVo> searchCloseByMulti(List<String> typeCodes, LocalDateTime startTime, LocalDateTime endTime) {
+        List<BrandOpcloseVo> vos = storeOpcloseDao.selectCloseByMulti(typeCodes, startTime, endTime);
+        return vos.subList(0,9);
+    }
 }

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