Authored by wangnan

forbidenSortBrand 插表逻辑

  1 +package com.yoho.search.dal;
  2 +
  3 +import com.yoho.search.dal.model.ForbiddenSortBrand;
  4 +
  5 +import java.util.List;
  6 +
  7 +public interface ForbiddenSortBrandMapper {
  8 + int deleteByPrimaryKey(Short id);
  9 +
  10 + int insert(ForbiddenSortBrand record);
  11 +
  12 + int insertSelective(ForbiddenSortBrand record);
  13 +
  14 + ForbiddenSortBrand selectByPrimaryKey(Short id);
  15 +
  16 + int updateByPrimaryKeySelective(ForbiddenSortBrand record);
  17 +
  18 + int updateByPrimaryKey(ForbiddenSortBrand record);
  19 +
  20 + void insertBatch(List<ForbiddenSortBrand> list);
  21 +
  22 + void deleteAll();
  23 +}
  1 +<?xml version="1.0" encoding="UTF-8" ?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3 +<mapper namespace="com.yoho.search.dal.ForbiddenSortBrandMapper">
  4 + <resultMap id="BaseResultMap" type="com.yoho.search.dal.model.ForbiddenSortBrand">
  5 + <id column="id" property="id" jdbcType="INTEGER"/>
  6 + <result column="max_sort_id" property="maxSortId" jdbcType="INTEGER"/>
  7 + <result column="middle_sort_id" property="middleSortId" jdbcType="INTEGER"/>
  8 + <result column="brand_id" property="brandId" jdbcType="INTEGER"/>
  9 + <result column="create_time" property="createTime" jdbcType="INTEGER"/>
  10 + </resultMap>
  11 + <sql id="Base_Column_List">
  12 + id, max_sort_id, middle_sort_id, brand_id, create_time
  13 + </sql>
  14 + <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Short">
  15 + select
  16 + <include refid="Base_Column_List"/>
  17 + from forbidden_sort_brand
  18 + where id = #{id,jdbcType=INTEGER}
  19 + </select>
  20 + <delete id="deleteByPrimaryKey" parameterType="java.lang.Short">
  21 + delete from forbidden_sort_brand
  22 + where id = #{id,jdbcType=INTEGER}
  23 + </delete>
  24 + <delete id="deleteAll">
  25 + delete from forbidden_sort_brand
  26 + where 1=1
  27 + </delete>
  28 + <insert id="insert" parameterType="com.yoho.search.dal.model.ForbiddenSortBrand">
  29 + insert into forbidden_sort_brand (id, max_sort_id, middle_sort_id,
  30 + brand_id, create_time)
  31 + values (#{id,jdbcType=INTEGER}, #{maxSortId,jdbcType=INTEGER}, #{middleSortId,jdbcType=INTEGER},
  32 + #{brandId,jdbcType=INTEGER}, #{createTime,jdbcType=INTEGER})
  33 + </insert>
  34 + <insert id="insertBatch" parameterType="java.util.List" timeout="20000">
  35 + insert ignore into forbidden_sort_brand (max_sort_id, middle_sort_id, brand_id, create_time)
  36 + values
  37 + <foreach collection="list" item="item" index="index"
  38 + separator=",">
  39 + (#{item.maxSortId, jdbcType=INTEGER},
  40 + #{item.middleSortId, jdbcType=INTEGER},
  41 + #{item.brandId, jdbcType=INTEGER},
  42 + #{item.createTime, jdbcType=INTEGER})
  43 + </foreach>
  44 + </insert>
  45 + <insert id="insertSelective" parameterType="com.yoho.search.dal.model.ForbiddenSortBrand">
  46 + insert into forbidden_sort_brand
  47 + <trim prefix="(" suffix=")" suffixOverrides=",">
  48 + <if test="id != null">
  49 + id,
  50 + </if>
  51 + <if test="maxSortId != null">
  52 + max_sort_id,
  53 + </if>
  54 + <if test="middleSortId != null">
  55 + middle_sort_id,
  56 + </if>
  57 + <if test="brandId != null">
  58 + brand_id,
  59 + </if>
  60 + <if test="createTime != null">
  61 + create_time,
  62 + </if>
  63 + </trim>
  64 + <trim prefix="values (" suffix=")" suffixOverrides=",">
  65 + <if test="id != null">
  66 + #{id,jdbcType=INTEGER},
  67 + </if>
  68 + <if test="maxSortId != null">
  69 + #{maxSortId,jdbcType=INTEGER},
  70 + </if>
  71 + <if test="middleSortId != null">
  72 + #{middleSortId,jdbcType=INTEGER},
  73 + </if>
  74 + <if test="brandId != null">
  75 + #{brandId,jdbcType=INTEGER},
  76 + </if>
  77 + <if test="createTime != null">
  78 + #{createTime,jdbcType=INTEGER},
  79 + </if>
  80 + </trim>
  81 + </insert>
  82 + <update id="updateByPrimaryKeySelective" parameterType="com.yoho.search.dal.model.ForbiddenSortBrand">
  83 + update forbidden_sort_brand
  84 + <set>
  85 + <if test="maxSortId != null">
  86 + max_sort_id = #{maxSortId,jdbcType=INTEGER},
  87 + </if>
  88 + <if test="middleSortId != null">
  89 + middle_sort_id = #{middleSortId,jdbcType=INTEGER},
  90 + </if>
  91 + <if test="brandId != null">
  92 + brand_id = #{brandId,jdbcType=INTEGER},
  93 + </if>
  94 + <if test="createTime != null">
  95 + create_time = #{createTime,jdbcType=INTEGER},
  96 + </if>
  97 + </set>
  98 + where id = #{id,jdbcType=INTEGER}
  99 + </update>
  100 + <update id="updateByPrimaryKey" parameterType="com.yoho.search.dal.model.ForbiddenSortBrand">
  101 + update forbidden_sort_brand
  102 + set max_sort_id = #{maxSortId,jdbcType=INTEGER},
  103 + middle_sort_id = #{middleSortId,jdbcType=INTEGER},
  104 + brand_id = #{brandId,jdbcType=INTEGER},
  105 + create_time = #{createTime,jdbcType=INTEGER}
  106 + where id = #{id,jdbcType=INTEGER}
  107 + </update>
  108 +</mapper>
1 package com.yoho.search.consumer.service.logic; 1 package com.yoho.search.consumer.service.logic;
2 2
3 -import java.util.ArrayList;  
4 -import java.util.HashMap;  
5 -import java.util.LinkedHashMap;  
6 -import java.util.List;  
7 -import java.util.Map;  
8 -import java.util.stream.Collectors;  
9 - 3 +import com.yoho.search.base.utils.FileUtils;
  4 +import com.yoho.search.consumer.service.base.BrandService;
  5 +import com.yoho.search.consumer.service.base.ProductSortService;
  6 +import com.yoho.search.dal.ForbiddenSortBrandMapper;
  7 +import com.yoho.search.dal.model.Brand;
  8 +import com.yoho.search.dal.model.ForbiddenSortBrand;
  9 +import com.yoho.search.dal.model.ProductSort;
10 import org.apache.commons.collections.CollectionUtils; 10 import org.apache.commons.collections.CollectionUtils;
11 import org.apache.commons.lang3.StringUtils; 11 import org.apache.commons.lang3.StringUtils;
12 import org.slf4j.Logger; 12 import org.slf4j.Logger;
@@ -14,11 +14,8 @@ import org.slf4j.LoggerFactory; @@ -14,11 +14,8 @@ import org.slf4j.LoggerFactory;
14 import org.springframework.beans.factory.annotation.Autowired; 14 import org.springframework.beans.factory.annotation.Autowired;
15 import org.springframework.stereotype.Service; 15 import org.springframework.stereotype.Service;
16 16
17 -import com.yoho.search.base.utils.FileUtils;  
18 -import com.yoho.search.consumer.service.base.BrandService;  
19 -import com.yoho.search.consumer.service.base.ProductSortService;  
20 -import com.yoho.search.dal.model.Brand;  
21 -import com.yoho.search.dal.model.ProductSort; 17 +import java.util.*;
  18 +import java.util.stream.Collectors;
22 19
23 @Service 20 @Service
24 public class ForbidenSortBrandLogicService { 21 public class ForbidenSortBrandLogicService {
@@ -32,6 +29,8 @@ public class ForbidenSortBrandLogicService { @@ -32,6 +29,8 @@ public class ForbidenSortBrandLogicService {
32 private ProductSortService productSortService; 29 private ProductSortService productSortService;
33 @Autowired 30 @Autowired
34 private BrandService brandService; 31 private BrandService brandService;
  32 + @Autowired
  33 + private ForbiddenSortBrandMapper forbiddenSortBrandMapper;
35 34
36 private final String forbiddenSortBrandFileName = "inner/forbidden_brands.txt"; 35 private final String forbiddenSortBrandFileName = "inner/forbidden_brands.txt";
37 36
@@ -46,6 +45,31 @@ public class ForbidenSortBrandLogicService { @@ -46,6 +45,31 @@ public class ForbidenSortBrandLogicService {
46 return; 45 return;
47 } 46 }
48 forbiddenSortBrandMap = genForbiddenSortBrandMap(); 47 forbiddenSortBrandMap = genForbiddenSortBrandMap();
  48 + //insert to DB
  49 + List<ForbiddenSortBrand> forbiddenSortBrands = new ArrayList<>();
  50 + forbiddenSortBrandMap.forEach((maxSortId, map) -> {
  51 + map.forEach((middleSortId, list) -> {
  52 + for (Integer brandId : list) {
  53 + ForbiddenSortBrand forbiddenSortBrand = new ForbiddenSortBrand();
  54 + forbiddenSortBrand.setMaxSortId(maxSortId);
  55 + forbiddenSortBrand.setMiddleSortId(middleSortId);
  56 + forbiddenSortBrand.setBrandId(brandId);
  57 + long time = System.currentTimeMillis() / 1000L;
  58 + forbiddenSortBrand.setCreateTime((int) time);
  59 + forbiddenSortBrands.add(forbiddenSortBrand);
  60 + }
  61 + });
  62 + });
  63 + forbiddenSortBrandMapper.deleteAll();
  64 + long begin = System.currentTimeMillis();
  65 + logger.info("deleteAll forbiddenSortBrand success [cost={}]", (System.currentTimeMillis() - begin));
  66 + List<List<ForbiddenSortBrand>> result = createList(forbiddenSortBrands, 1000);
  67 + logger.info("batch insert forbiddenSortBrand begin");
  68 + for (int i = 0; i < result.size(); i++) {
  69 + forbiddenSortBrandMapper.insertBatch(result.get(i));
  70 + logger.info("batch insert forbiddenSortBrand [page={}]of[{}],[cost={}]", i, result.size(),(System.currentTimeMillis() - begin));
  71 + }
  72 + logger.info("batch insert forbiddenSortBrand success,[cost={}]",(System.currentTimeMillis() - begin));
49 } 73 }
50 } 74 }
51 75
@@ -78,16 +102,16 @@ public class ForbidenSortBrandLogicService { @@ -78,16 +102,16 @@ public class ForbidenSortBrandLogicService {
78 List<ProductSort> productSortList = productSortService.getPageLists(0, Integer.MAX_VALUE); 102 List<ProductSort> productSortList = productSortService.getPageLists(0, Integer.MAX_VALUE);
79 103
80 //3、获取大分类Map 104 //3、获取大分类Map
81 - Map<String,Integer> maxSortMap = new HashMap<String, Integer>(); 105 + Map<String, Integer> maxSortMap = new HashMap<String, Integer>();
82 productSortList.stream().filter(sort -> PARENTID_OF_MAXSORT.equals(sort.getParentId())).collect(Collectors.toList()) 106 productSortList.stream().filter(sort -> PARENTID_OF_MAXSORT.equals(sort.getParentId())).collect(Collectors.toList())
83 .forEach(sort -> maxSortMap.put(sort.getSortName(), sort.getId())); 107 .forEach(sort -> maxSortMap.put(sort.getSortName(), sort.getId()));
84 108
85 //4、构造大分类和中分类的对应关系 109 //4、构造大分类和中分类的对应关系
86 - Map<Integer,Map<String,Integer>> maxSortToMiddleSort = new HashMap<Integer, Map<String,Integer>>(); 110 + Map<Integer, Map<String, Integer>> maxSortToMiddleSort = new HashMap<Integer, Map<String, Integer>>();
87 for (Integer maxSortId : maxSortMap.values()) { 111 for (Integer maxSortId : maxSortMap.values()) {
88 - Map<String,Integer> middleSortMap = new HashMap<String, Integer>(); 112 + Map<String, Integer> middleSortMap = new HashMap<String, Integer>();
89 for (ProductSort productSort : productSortList) { 113 for (ProductSort productSort : productSortList) {
90 - if(productSort.getParentId().equals(maxSortId)){ 114 + if (productSort.getParentId().equals(maxSortId)) {
91 middleSortMap.put(productSort.getSortName(), productSort.getId()); 115 middleSortMap.put(productSort.getSortName(), productSort.getId());
92 } 116 }
93 } 117 }
@@ -175,4 +199,20 @@ public class ForbidenSortBrandLogicService { @@ -175,4 +199,20 @@ public class ForbidenSortBrandLogicService {
175 return brandNameToIdMap; 199 return brandNameToIdMap;
176 } 200 }
177 201
  202 + public static List<List<ForbiddenSortBrand>> createList(List<ForbiddenSortBrand> target, int size) {
  203 + List<List<ForbiddenSortBrand>> listArr = new ArrayList<List<ForbiddenSortBrand>>();
  204 + //获取被拆分的数组个数
  205 + int arrSize = target.size() % size == 0 ? target.size() / size : target.size() / size + 1;
  206 + for (int i = 0; i < arrSize; i++) {
  207 + List<ForbiddenSortBrand> sub = new ArrayList<ForbiddenSortBrand>();
  208 + //把指定索引数据放入到list中
  209 + for (int j = i * size; j <= size * (i + 1) - 1; j++) {
  210 + if (j <= target.size() - 1) {
  211 + sub.add(target.get(j));
  212 + }
  213 + }
  214 + listArr.add(sub);
  215 + }
  216 + return listArr;
  217 + }
178 } 218 }