package com.gkhy.hazmat.common.config;
|
|
import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
|
import com.gkhy.hazmat.common.utils.StringUtils;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* 自定义动态表名处理器,基于id的方式进行分表
|
*/
|
public class IdTableNameHandler implements TableNameHandler {
|
private static final Map<String,Integer> CONFIG_TABLE_INFO_MAP=new HashMap<>();
|
|
static {
|
CONFIG_TABLE_INFO_MAP.put("hz_hazmat",20);
|
CONFIG_TABLE_INFO_MAP.put("hz_hazmat_flow",20);
|
CONFIG_TABLE_INFO_MAP.put("hz_product",20);
|
CONFIG_TABLE_INFO_MAP.put("hz_product_flow",20);
|
}
|
|
private static final ThreadLocal<Long> ID_DATA=new ThreadLocal<>();
|
@Override
|
public String dynamicTableName(String sql, String tableName) {
|
if(StringUtils.isBlank(tableName)||!CONFIG_TABLE_INFO_MAP.containsKey(tableName)){
|
return tableName;
|
}
|
//分表个数
|
int tableSize=CONFIG_TABLE_INFO_MAP.get(tableName);
|
//当前分表的id
|
Long currentId=getCurrentId();
|
if(currentId==null){
|
throw new RuntimeException("请设置分表id值");
|
}
|
int tableIndex= (int) (currentId%tableSize);
|
|
//清理当前id
|
// removeCurrentId();
|
|
return tableName+"_"+tableIndex;
|
}
|
|
/**
|
* 获取当前分表id
|
* @param id
|
*/
|
public static void setCurrentId(Long id){
|
ID_DATA.set(id);
|
}
|
|
public static Long getCurrentId(){
|
return ID_DATA.get();
|
}
|
|
public static void removeCurrentId(){
|
ID_DATA.remove();
|
}
|
|
}
|