Ver Fonte

1.优化品牌城市等级统计分析结构
2.优化获取品牌地理位置标签分布接口数据

云殇忆 há 1 ano atrás
pai
commit
df4816bcef

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

@@ -49,4 +49,9 @@ public class StatTest {
             addrCategoryDao.update(null,queryWrapper1);
         }
     }
+
+    @Test
+    public void newStart(){
+        brandCityTierStat.newStart();
+    }
 }

+ 2 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/AddrCategory.java

@@ -26,4 +26,6 @@ public class AddrCategory {
 
     @TableField("city_tier")
     private String cityTier;
+    @TableField("type")
+    private String type;
 }

+ 1 - 1
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/BrandGeoLabelBo.java

@@ -22,7 +22,7 @@ public class BrandGeoLabelBo implements Serializable {
         } else {
             this.total = total;
             float ratio = (float) total / count;
-            this.ratio = (ratio * 100) + "%";
+            this.ratio = String.format("%.2f", ratio * 100) + "%";
         }
     }
 }

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

@@ -3,10 +3,13 @@ package com.ruoyi.demo.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.demo.entity.AddrCategory;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
 @Mapper
 public interface AddrCategoryDao extends BaseMapper<AddrCategory> {
     List<String> selectCityTierList();
+
+    List<String> selectCodeListByCityTier(@Param("cityTier") String cityTier);
 }

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

@@ -3,10 +3,15 @@ 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 org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
 @Mapper
 public interface BrandCityTierMapper extends BaseMapper<BrandCityTier> {
     List<String> selectAllId();
+
+    List<String> selectNoUse(@Param("num") Integer num);
+
+    Integer deleteAllById(@Param("ids") List<String> ids);
 }

+ 2 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/BrandZoneDao.java

@@ -16,4 +16,6 @@ public interface BrandZoneDao extends BaseMapper<BrandZone> {
     List<String> selectIns();
 
     Integer selectTierCountByBrandIdAndCode(@Param("brandId") String brandId, @Param("code") String code);
+
+    Integer selectTierCountByBrandIdAndCodes(@Param("brandId") String brandId, @Param("codes") List<String> codes);
 }

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

@@ -347,6 +347,7 @@ public class BrandServiceImpl implements BrandService {
         Map<String, Integer> typeMap = new HashMap<>();
         for (WdInfo wdInfo : wdInfos) {
             List<String> wdTag = wdRedisStoreage.getWdTag(wdInfo);
+            if (wdTag == null) return bos;
             for (String tag : wdTag) {
                 if (typeMap.get(tag) != null) {
                     typeMap.replace(tag, typeMap.get(tag) + 1);

+ 39 - 1
ruoyi-demo/src/main/java/com/ruoyi/demo/utils/statistics/BrandCityTierStat.java

@@ -36,7 +36,9 @@ public class BrandCityTierStat {
         for (String tier : tierList) {
             // 根据类别查询地区信息
             QueryWrapper<AddrCategory> addrCategoryQueryWrapper = new QueryWrapper<>();
-            map.put(tier, addrCategoryDao.selectList(addrCategoryQueryWrapper.eq("city_tier", tier)));
+            addrCategoryQueryWrapper.eq("city_tier", tier)
+                .eq("type","zone");
+            map.put(tier, addrCategoryDao.selectList(addrCategoryQueryWrapper));
         }
         int i = 1;
         for (String brandId : brandIds) {
@@ -83,4 +85,40 @@ public class BrandCityTierStat {
             i++;
         }
     }
+
+    public void newStart(){
+        // 查询城市等级类别
+        List<String> tierList = addrCategoryDao.selectCityTierList(); // 目前实际上就5个
+        Map<String, List<String>> map = new LinkedHashMap<>();
+        for (String tier : tierList) {
+            // 根据类别查询地区信息
+            map.put(tier, addrCategoryDao.selectCodeListByCityTier(tier));
+        }
+        // 查询未完成统计或者因出错而统计到一半的品牌
+        List<String> noUse = tierMapper.selectNoUse(tierList.size());
+        // 删除这些无效统计信息
+        if (!noUse.isEmpty())
+            tierMapper.deleteAllById(noUse);
+        System.out.println("删除无效数据:" + noUse.size() + "条");
+        // 查询已完成统计的品牌
+        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();
+
+        int i = 1;
+        for (String brandId : brandIds) {
+            // 遍历城市等级类别
+            for (String tier : tierList) {
+                // 根据每个类别的地区,统计其数量
+                int total = 0;
+                total += brandZoneDao.selectTierCountByBrandIdAndCodes(brandId, map.get(tier));
+                tierMapper.insert(new BrandCityTier(brandId, tier, total));
+            }
+            System.out.println(totalBrand + "/" + i);
+            i++;
+        }
+    }
 }

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

@@ -48,7 +48,7 @@ public class Together {
 
         System.out.println("品牌城市等级统计开始······");
         brandCityTierMapper.delete(null);
-        brandCityTierStat.start();
+        brandCityTierStat.newStart();
         System.out.println("品牌城市等级统计结束······");
 
         System.out.println("品牌市统计开始······");

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

@@ -11,4 +11,12 @@
         WHERE
             city_tier IS NOT NULL;
     </select>
+    <select id="selectCodeListByCityTier" resultType="java.lang.String">
+        SELECT
+            addr_code
+        FROM
+            `ddt_addr_category`
+        WHERE city_tier = #{cityTier}
+          AND type = 'zone';
+    </select>
 </mapper>

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

@@ -3,10 +3,27 @@
     PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.demo.mapper.BrandCityTierMapper">
+    <delete id="deleteAllById">
+        DELETE
+        FROM
+            `bl_brand_city_tier`
+        <foreach collection="ids" item="id" open="WHERE brand_id IN (" separator="," close=")">
+            #{id,jdbcType=VARCHAR}
+        </foreach>
+    </delete>
     <select id="selectAllId" resultType="java.lang.String">
         SELECT DISTINCT
             brand_id
         FROM
             `bl_brand_city_tier`;
     </select>
+    <select id="selectNoUse" resultType="java.lang.String">
+        SELECT
+        brand_id
+        FROM
+        `bl_brand_city_tier`
+        GROUP BY
+        brand_id
+        HAVING COUNT(*) <![CDATA[<]]> #{num};
+    </select>
 </mapper>

+ 11 - 0
ruoyi-demo/src/main/resources/mapper/demo/BrandZone2Mapper.xml

@@ -84,4 +84,15 @@
             brand_id = #{brandId}
           AND addr_code LIKE CONCAT(#{code},"%");
     </select>
+    <select id="selectTierCountByBrandIdAndCodes" resultType="java.lang.Integer">
+        SELECT
+            COUNT(*)
+        FROM
+            `bl_brand_zone_distribution`
+        WHERE
+            brand_id = #{brandId}
+          <foreach collection="codes" item="code" open="AND addr_code IN (" separator="," close=")">
+              #{code,jdbcType=VARCHAR}
+          </foreach>
+    </select>
 </mapper>