Jelajahi Sumber

完成品牌城市等级分布接口,完善代码结构

云殇忆 1 tahun lalu
induk
melakukan
6c59fbc490

+ 22 - 0
ruoyi-admin/src/test/java/com/ruoyi/test/StatTest.java

@@ -0,0 +1,22 @@
+package com.ruoyi.test;
+
+import com.ruoyi.demo.utils.statistics.BrandCityTierStat;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+public class StatTest {
+    @Autowired
+    BrandCityTierStat brandCityTierStat;
+
+    @Test
+    public void test(){
+        brandCityTierStat.start();
+    }
+
+    @Test
+    public void continueTest(){
+        brandCityTierStat.continueInsert();
+    }
+}

+ 25 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/BrandController.java

@@ -16,6 +16,7 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.constraints.NotBlank;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -225,4 +226,28 @@ public class BrandController extends BaseController {
         List<OpcloseTimeVo> vos = brandService.searchCloseTims(brandIds, addrCodes, typeCodeBys);
         return R.ok(vos);
     }
+
+    /**
+     * 城市等级分布
+     *
+     * @param brandId 品牌id
+     * @return
+     */
+    @GetMapping("/level")
+    public R level(@NotBlank(message = "品牌id不能为空") String brandId) {
+        return R.ok(brandService.getCityTier(brandId));
+    }
+
+    /**
+     * 行业新品牌
+     *
+     * @param bo 地址码和网点类型(犇云)查询体
+     * @return
+     */
+    @GetMapping("/new")
+    public R newBrand(ListQueryBody bo) {
+        List<String> addrCodes = bo.getAddrCode();
+        List<String> industryCodes = bo.getIndustryCode();
+        return R.ok(brandService.searchNew(addrCodes, industryCodes));
+    }
 }

+ 25 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/BrandCityTier.java

@@ -0,0 +1,25 @@
+package com.ruoyi.demo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("bl_brand_city_tier")
+public class BrandCityTier {
+    @TableField("brand_id")
+    private String brandId;
+    @TableField("city_tier")
+    private String cityTier;
+    @TableField("count")
+    private Integer count;
+
+    public BrandCityTier() {
+    }
+
+    public BrandCityTier(String brandId, String cityTier, Integer count) {
+        this.brandId = brandId;
+        this.cityTier = cityTier;
+        this.count = count;
+    }
+}

+ 9 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/TimeVo.java

@@ -0,0 +1,9 @@
+package com.ruoyi.demo.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class TimeVo {
+    private String time;
+    private Integer count;
+}

+ 3 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/AddrCategoryDao.java

@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.demo.entity.AddrCategory;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 @Mapper
 public interface AddrCategoryDao extends BaseMapper<AddrCategory> {
+    List<String> selectCityTierList();
 }

+ 12 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandCityTierMapper.java

@@ -0,0 +1,12 @@
+package com.ruoyi.demo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.demo.entity.BrandCityTier;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface BrandCityTierMapper extends BaseMapper<BrandCityTier> {
+    List<String> selectAllId();
+}

+ 2 - 9
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandDao.java

@@ -9,14 +9,7 @@ import java.util.List;
 
 @Mapper
 public interface BrandDao extends BaseMapper<Brand> {
-    List<Brand> searchAll();
-    List<Brand> searchList(String text);
-    Brand searchById(String brandId);
-    List<Brand> searchByIndustryCodeList(String brandId, String industryCode);
-    void updatePerCapitaConsumptionByBrandId(String brandId);
-    void updateScoreByBrandId(String brandId);
-    void updateCommentCountByBrandId(String brandId);
-    void updateIndexScoreByBrandId(String brandId);
-    List<Brand> searchNotIns(@Param("notIns") List<String> notIns);
     List<String> selectAllId();
+
+    List<String> selectAllByNotIn(@Param("notIns") List<String> notIns);
 }

+ 1 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandEvolveDao.java

@@ -11,5 +11,6 @@ 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);
+
     List<BrandEvolve> selectAllByStatistics();
 }

+ 4 - 6
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandZoneDao.java

@@ -9,13 +9,11 @@ import java.util.List;
 
 @Mapper
 public interface BrandZoneDao extends BaseMapper<BrandZone> {
-    List<BrandZone> searchByBrandId(String brandId);
-    List<BrandZone> searchByMulti(List<String> addrCodes,List<String> industryCodes,List<String> brandIds);
-    void insertAll(@Param("brandZones") List<BrandZone> brandZones);
-    Integer searchProvinceCountByBrandId(String brandId);
-    Integer searchCityCountByBrandId(String brandId);
     Integer searchZoneCountByBrandId(String brandId);
-    List<String> searchStatedBrandIds(@Param("month") String month);
+
     List<BrandZone> searchQuicklyStatistics(@Param("ins") List<String> ins);
+
     List<String> selectIns();
+
+    Integer selectTierCountByBrandIdAndCode(@Param("brandId") String brandId, @Param("code") String code);
 }

+ 5 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/service/BrandService.java

@@ -3,10 +3,12 @@ package com.ruoyi.demo.service;
 
 import com.github.pagehelper.PageInfo;
 
+import com.ruoyi.demo.entity.BrandCityTier;
 import com.ruoyi.demo.entity.bo.*;
 import com.ruoyi.demo.entity.vo.BrandEvolveVo;
 import com.ruoyi.demo.entity.vo.ListQueryBody;
 import com.ruoyi.demo.entity.vo.OpcloseTimeVo;
+import com.ruoyi.demo.entity.vo.TimeVo;
 
 import java.util.List;
 import java.util.Map;
@@ -42,4 +44,7 @@ public interface BrandService {
 
     List<OpcloseTimeVo> searchCloseTims(List<String> brandIds, List<String> addrCodes, List<String> typeCodeBys);
 
+    List<BrandCityTier> getCityTier(String brandId);
+
+    List<TimeVo> searchNew(List<String> addrCodes, List<String> industryCodes);
 }

+ 13 - 1
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/BrandServiceImpl.java

@@ -55,7 +55,8 @@ public class BrandServiceImpl implements BrandService {
     WdRedisStoreage wdRedisStoreage;
     @Autowired
     WdInfoDao wdInfoDao;
-
+    @Autowired
+    BrandCityTierMapper tierMapper;
 
     @Override
     public List<BrandSearch> searchByLikeName(String text) {
@@ -526,4 +527,15 @@ public class BrandServiceImpl implements BrandService {
         });
         return rvos;
     }
+
+    @Override
+    public List<BrandCityTier> getCityTier(String brandId) {
+        QueryWrapper<BrandCityTier> cityTierQueryWrapper = new QueryWrapper<>();
+        return tierMapper.selectList(cityTierQueryWrapper.eq("brand_id", brandId));
+    }
+
+    @Override
+    public List<TimeVo> searchNew(List<String> addrCodes, List<String> industryCodes) {
+        return null;
+    }
 }

+ 86 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/utils/statistics/BrandCityTierStat.java

@@ -0,0 +1,86 @@
+package com.ruoyi.demo.utils.statistics;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.demo.entity.AddrCategory;
+import com.ruoyi.demo.entity.BrandCityTier;
+import com.ruoyi.demo.mapper.AddrCategoryDao;
+import com.ruoyi.demo.mapper.BrandCityTierMapper;
+import com.ruoyi.demo.mapper.BrandDao;
+import com.ruoyi.demo.mapper.BrandZoneDao;
+import com.ruoyi.demo.utils.CategoryUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+@Component
+public class BrandCityTierStat {
+    @Autowired
+    CategoryUtil categoryUtil;
+    @Autowired
+    AddrCategoryDao addrCategoryDao;
+    @Autowired
+    BrandDao brandDao;
+    @Autowired
+    BrandZoneDao brandZoneDao;
+    @Autowired
+    BrandCityTierMapper tierMapper;
+
+    public void start() {
+        // 查询所有有效品牌
+        List<String> brandIds = brandDao.selectAllId();
+        int totalBrand = brandIds.size();
+        // 查询城市等级类别
+        List<String> tierList = addrCategoryDao.selectCityTierList(); // 目前实际上就5个
+        Map<String, List<AddrCategory>> map = new LinkedHashMap<>();
+        for (String tier : tierList) {
+            // 根据类别查询地区信息
+            QueryWrapper<AddrCategory> addrCategoryQueryWrapper = new QueryWrapper<>();
+            map.put(tier, addrCategoryDao.selectList(addrCategoryQueryWrapper.eq("city_tier", tier)));
+        }
+        int i = 1;
+        for (String brandId : brandIds) {
+            // 遍历城市等级类别
+            for (String tier : tierList) {
+                // 根据每个类别的地区,统计其数量
+                int total = 0;
+                for (AddrCategory addr : map.get(tier))
+                    total += brandZoneDao.selectTierCountByBrandIdAndCode(brandId, categoryUtil.whatis(addr.getAddrCode()));
+                tierMapper.insert(new BrandCityTier(brandId, tier, total));
+            }
+            System.out.println(totalBrand + "/" + i);
+            i++;
+        }
+    }
+
+    public void continueInsert(){
+        // 查询已完成统计的品牌
+        List<String> notIns = tierMapper.selectAllId();
+        System.out.println("已完成:" + notIns.size());
+        // 查询未完成的有效品牌
+        List<String> brandIds = brandDao.selectAllByNotIn(notIns);
+        System.out.println("未完成:" + brandIds.size());
+        int totalBrand = brandIds.size();
+        // 查询城市等级类别
+        List<String> tierList = addrCategoryDao.selectCityTierList(); // 目前实际上就5个
+        Map<String, List<AddrCategory>> map = new LinkedHashMap<>();
+        for (String tier : tierList) {
+            // 根据类别查询地区信息
+            QueryWrapper<AddrCategory> addrCategoryQueryWrapper = new QueryWrapper<>();
+            map.put(tier, addrCategoryDao.selectList(addrCategoryQueryWrapper.eq("city_tier", tier)));
+        }
+        int i = 1;
+        for (String brandId : brandIds) {
+            // 遍历城市等级类别
+            for (String tier : tierList) {
+                // 根据每个类别的地区,统计其数量
+                int total = 0;
+                for (AddrCategory addr : map.get(tier))
+                    total += brandZoneDao.selectTierCountByBrandIdAndCode(brandId, categoryUtil.whatis(addr.getAddrCode()));
+                tierMapper.insert(new BrandCityTier(brandId, tier, total));
+            }
+            System.out.println(totalBrand + "/" + i);
+            i++;
+        }
+    }
+}

+ 14 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/utils/statistics/Together.java

@@ -30,28 +30,42 @@ public class Together {
     BrandStat stat;
     @Autowired
     BrandStatisticsDao statisticsDao;
+    @Autowired
+    BrandCityTierMapper brandCityTierMapper;
+    @Autowired
+    BrandCityTierStat brandCityTierStat;
 
     public void start(){
         System.out.println("开关时间统计开始······");
         opcloseDao.delete(null);
         opcloseStat.continueInsertAll();
         System.out.println("开关时间统计结束······");
+
         System.out.println("品牌区统计开始······");
         zoneDao.delete(null);
         zoneStat.continueQuicklyInsert();
         System.out.println("品牌区统计结束······");
+
+        System.out.println("品牌城市等级统计开始······");
+        brandCityTierMapper.delete(null);
+        brandCityTierStat.start();
+        System.out.println("品牌城市等级统计结束······");
+
         System.out.println("品牌市统计开始······");
         cityDao.delete(null);
         cityStat.continueInsert();
         System.out.println("品牌市统计结束······");
+
         System.out.println("品牌省统计开始······");
         provinceDao.delete(null);
         provinceStat.continueInsert();
         System.out.println("品牌省统计结束······");
+
         System.out.println("品牌营业状态统计开始······");
         businessDao.delete(null);
         businessStat.continueInsert();
         System.out.println("品牌营业状态统计结束······");
+
         System.out.println("品牌总体统计开始······");
         statisticsDao.delete(null);
         stat.continueInsertPlus2();

+ 14 - 0
ruoyi-demo/src/main/resources/mapper/demo/AddrCategoryMapper.xml

@@ -0,0 +1,14 @@
+<?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.ruoyi.demo.mapper.AddrCategoryDao">
+    <select id="selectCityTierList" resultType="java.lang.String">
+        SELECT DISTINCT
+            city_tier
+        FROM
+            `ddt_addr_category`
+        WHERE
+            city_tier IS NOT NULL;
+    </select>
+</mapper>

+ 12 - 0
ruoyi-demo/src/main/resources/mapper/demo/BrandCityTierMapper.xml

@@ -0,0 +1,12 @@
+<?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.ruoyi.demo.mapper.BrandCityTierMapper">
+    <select id="selectAllId" resultType="java.lang.String">
+        SELECT DISTINCT
+            brand_id
+        FROM
+            `bl_brand_city_tier`;
+    </select>
+</mapper>

+ 11 - 103
ruoyi-demo/src/main/resources/mapper/demo/BrandDao.xml

@@ -3,115 +3,23 @@
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.demo.mapper.BrandDao">
-    <resultMap type="com.ruoyi.demo.entity.Brand" id="BrandResult">
-        <result property="brandId" column="brand_id"/>
-        <result property="brandImg" column="brand_img"/>
-        <result property="brandName" column="brand_name"/>
-        <result property="industryCode" column="industry_code"/>
-        <result property="enterpriseUsci" column="enterprise_usci"/>
-        <result property="perCapitaConsumption" column="per_capita_consumption"/>
-        <result property="commentCount" column="comment_count"/>
-        <result property="score" column="score"/>
-        <result property="menuInfo" column="menu_info"/>
-        <result property="indexScore" column="index_score"/>
-        <result property="createDate" column="create_date"/>
-        <result property="audit" column="audit"/>
-        <result property="collectPerson" column="collect_person"/>
-        <result property="collectTime" column="collect_time"/>
-        <result property="enterTime" column="enter_time"/>
-        <result property="updateTime" column="update_time"/>
-        <result property="hash" column="hash"/>
-    </resultMap>
-    <select id="searchAll" resultMap="BrandResult">
-        select * from ddt_brand
-    </select>
-    <update id="updatePerCapitaConsumptionByBrandId">
-        UPDATE `ddt_brand`
-        SET per_capita_consumption = (
-            SELECT
-                ROUND(
-                            SUM(per_capita_consumption) / COUNT(*),
-                            2
-                    )
-            FROM
-                `ddt_store_wd`
-            WHERE
-                brand_id = #{brandId}
-        )
-        WHERE
-            brand_id = #{brandId};
-    </update>
-    <update id="updateScoreByBrandId">
-        UPDATE `ddt_brand`
-        SET score = (
-            SELECT
-                ROUND(SUM(score) / COUNT(*), 2)
-            FROM
-                `ddt_store_wd`
-            WHERE
-                brand_id = #{brandId}
-        )
-        WHERE
-            brand_id = #{brandId};
-    </update>
-    <update id="updateCommentCountByBrandId">
-        UPDATE `ddt_brand`
-        SET comment_count = (
-            SELECT
-                FLOOR(
-                        SUM(comment_count) / COUNT(*)
-                    )
-            FROM
-                `ddt_store_wd`
-            WHERE
-                brand_id = #{brandId}
-        )
-        WHERE
-            brand_id = #{brandId};
-    </update>
-    <update id="updateIndexScoreByBrandId">
-        UPDATE `ddt_brand`
-        SET index_score = (
-            SELECT
-                ROUND(
-                            SUM(index_score) / COUNT(*),
-                            2
-                    )
-            FROM
-                `ddt_store_wd`
-            WHERE
-                brand_id = #{brandId}
-        )
-        WHERE
-            brand_id = #{brandId};
-    </update>
-    <select id="searchList" resultMap="BrandResult">
-        select * from ddt_brand where brand_name like concat("%",#{text},"%")
-    </select>
-    <select id="searchById" resultMap="BrandResult">
-        select * from ddt_brand where brand_id = #{brandId}
-    </select>
-    <select id="searchByIndustryCodeList" resultMap="BrandResult">
-        select * from ddt_brand where industry_code = #{industryCode} and brand_id <![CDATA[<>]]> #{brandId}
-    </select>
-    <select id="searchNotIns" resultMap="BrandResult">
-        SELECT
-            *
+    <select id="selectAllId" resultType="java.lang.String">
+        SELECT DISTINCT
+            brand_id
         FROM
             `ddt_brand`
-        <where>
-            <if test="notIns != null">
-                <foreach collection="notIns" item="ontIn" open="brand_id NOT IN (" separator="," close=")">
-                    #{ontIn,jdbcType=VARCHAR}
-                </foreach>
-            </if>
-        </where>
+        WHERE show_delete = 0;
     </select>
-    <select id="selectAllId" resultType="java.lang.String">
+    <select id="selectAllByNotIn" resultType="java.lang.String">
         SELECT DISTINCT
             brand_id
         FROM
             `ddt_brand`
-        WHERE show_delete = 0;
+        WHERE show_delete = 0
+        <if test="notIns != null">
+            <foreach collection="notIns" item="notIn" open="AND brand_id NOT IN (" separator="," close=")">
+                #{notIn,jdbcType=VARCHAR}
+            </foreach>
+        </if>
     </select>
 </mapper>

+ 9 - 73
ruoyi-demo/src/main/resources/mapper/demo/BrandZone2Mapper.xml

@@ -37,68 +37,6 @@
         <result property="disCount" column="dis_count"/>
         <result property="updateTime" column="update_time"/>
     </resultMap>
-    <insert id="insertAll">
-        insert into `bl_brand_zone_distribution`(dis_id,brand_id,brand_name,addr_code,dis_count,avg_score,update_time) values
-        <foreach collection="brandZones" item="brandZone" separator="," >
-            (#{brandZone.disId},#{brandZone.brandId},#{brandZone.brandName},#{brandZone.addrCode},#{brandZone.disCount},#{brandZone.avgScore},#{brandZone.updateTime})
-        </foreach>
-    </insert>
-    <select id="searchByBrandId" resultMap="BrandZoneResult">
-        select * from bl_brand_zone_distribution where brand_id = #{brandId}
-    </select>
-    <select id="searchByMulti" resultMap="BrandZoneResult">
-        SELECT
-            *
-        FROM
-            `bl_brand_zone_distribution`
-        <trim prefix="where" prefixOverrides="and">
-            <if test="brandIds != null">
-                <foreach collection="brandIds" item="brandId" open="and brand_id IN (" separator="," close=")">
-                    #{brandId,jdbcType=VARCHAR}
-                </foreach>
-            </if>
-            <if test="addrCodes != null">
-                <foreach collection="addrCodes" item="addrCode" open="and addr_code IN (" separator="," close=")">
-                    #{addrCode,jdbcType=VARCHAR}
-                </foreach>
-            </if>
-            <if test="industryCodes != null">
-                <foreach collection="industryCodes" item="industryCode" open="and industry_code IN (" separator="," close=")">
-                    #{industryCode,jdbcType=VARCHAR}
-                </foreach>
-            </if>
-        </trim>
-    </select>
-    <select id="searchProvinceCountByBrandId" resultType="java.lang.Integer">
-        SELECT
-            COUNT(*)
-        FROM
-            (
-                SELECT
-                    province
-                FROM
-                    `bl_brand_zone_distribution`
-                WHERE
-                    brand_id = #{brandId}
-                GROUP BY
-                    province
-            ) province
-    </select>
-    <select id="searchCityCountByBrandId" resultType="java.lang.Integer">
-        SELECT
-            COUNT(*)
-        FROM
-            (
-                SELECT
-                    city
-                FROM
-                    `bl_brand_zone_distribution`
-                WHERE
-                    brand_id = #{brandId}
-                GROUP BY
-                    city
-            ) city
-    </select>
     <select id="searchZoneCountByBrandId" resultType="java.lang.Integer">
         SELECT
             COUNT(*)
@@ -107,17 +45,6 @@
         WHERE
             brand_id = #{brandId}
     </select>
-    <select id="searchStatedBrandIds" resultType="java.lang.String">
-        SELECT DISTINCT
-            brand_id
-        FROM
-            `bl_brand_zone_distribution`
-        <where>
-            <if test="month != null">
-                DATE_FORMAT(update_time, '%Y-%m') = #{month}
-            </if>
-        </where>
-    </select>
     <select id="searchQuicklyStatistics" resultMap="BrandZoneResult">
         SELECT
             brand_id,
@@ -148,4 +75,13 @@
         FROM
             `bl_brand_zone_distribution`;
     </select>
+    <select id="selectTierCountByBrandIdAndCode" resultType="java.lang.Integer">
+        SELECT
+            COUNT(*)
+        FROM
+            `bl_brand_zone_distribution`
+        WHERE
+            brand_id = #{brandId}
+          AND addr_code LIKE CONCAT(#{code},"%");
+    </select>
 </mapper>