package com.nis.util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * *

Title: ServiceAndRDBIndexReal

*

Description: 业务类型与各个表名的对应关系,业务类型与redisDBIndex的对应关系

*

Company: IIE

* @author rkg * @date 2018年5月30日 * */ public class ServiceAndRDBIndexReal { private static Logger logger = LoggerFactory.getLogger(ServiceAndRDBIndexReal.class); /** * 第一个key是业务类型,第二个key是type(编译配置,分组配置,域配置)value是表名 */ private static Map>> sercieNameMap = new HashMap>>(); /** * 非maat结构业务类型与表名对应关系,key是业务类型,value是表名 */ private static Map unMaatSercieNameMap = new HashMap(); /** * key是业务类型,value是业务类型对应的redisdbIndex */ private static Map> serviceDBIndexmap = new HashMap>(); /** * key是业务类型,value是业务类型对应的动作(action) */ private static Map serviceActionMap = new HashMap(); /** * 保存maat分发到阀门需要添加到域的属性:maat2Valve * Map> */ private static Map> maatToValveMap = new HashMap>(); /** * 阀门保存的redis数据库Index,在seriveTable.properties中定义 */ private static Integer valveDBIndex = 7; static { String unMaatService = Configurations.getStringProperty("unMaatService", ""); if (unMaatService != null && !unMaatService.trim().equals("")) { String[] split = unMaatService.split(";"); for (String str : split) { String[] serviceAction = str.split(":"); serviceActionMap.put(Integer.valueOf(serviceAction[0]), Integer.valueOf(serviceAction[1])); String serviceType = Configurations.getStringProperty(serviceAction[0], ""); if (serviceType != null && !serviceType.trim().equals("")) { String[] typeArrs = serviceType.split(";"); for (String typeStr : typeArrs) { String[] typeArr = typeStr.split(":"); String tableNameArr[] = typeArr[1].split(","); for (String tableName : tableNameArr) { unMaatSercieNameMap.put(Integer.parseInt(serviceAction[0]), tableName.toUpperCase()); } } } } } String service = Configurations.getStringProperty("service", ""); if (service != null && !service.trim().equals("")) { String[] split = service.split(";"); for (String str : split) { String[] serviceAction = str.split(":"); serviceActionMap.put(Integer.valueOf(serviceAction[0]), Integer.valueOf(serviceAction[1])); String type = Configurations.getStringProperty(serviceAction[0], ""); if (type != null && !type.trim().equals("")) { Map> typeMap = new HashMap>(); String[] typeArrs = type.split(";"); for (String typeStr : typeArrs) { String[] typeArr = typeStr.split(":"); int tableType = Integer.parseInt(typeArr[0]); String tableNameArr[] = typeArr[1].split(","); for (String tableName : tableNameArr) { if (typeMap.containsKey(tableType)) { typeMap.get(tableType).add(tableName.toUpperCase()); } else { List list = new ArrayList(); list.add(tableName.toUpperCase()); typeMap.put(tableType, list); } } } sercieNameMap.put(Integer.parseInt(serviceAction[0]), typeMap); } } } String serviceDBIndexs = Configurations.getStringProperty("serviceDBIndex", ""); if (serviceDBIndexs != null && !serviceDBIndexs.trim().equals("")) { String[] serviceDBIndexArr = serviceDBIndexs.split(";"); for (String serviceDBIndexStr : serviceDBIndexArr) { String[] serviceDBIndex = serviceDBIndexStr.split(":"); List redisDbList = new ArrayList(); String[] redisDbArr = serviceDBIndex[1].split(","); for (String redisDbStr : redisDbArr) { redisDbList.add(Integer.valueOf(redisDbStr)); } serviceDBIndexmap.put(Integer.parseInt(serviceDBIndex[0]), redisDbList); } } String maat2Valve = Configurations.getStringProperty("maat2Valve", ""); if (maat2Valve!=null && !maat2Valve.trim().equals("")) { String [] maat2ValveAry= maat2Valve.split(";"); for (String maat2ValveStr : maat2ValveAry) { String [] serviceAndRegion = maat2ValveStr.split(":"); if (serviceAndRegion!=null&&serviceAndRegion.length==2) { String [] regionAndFields = serviceAndRegion[1].split("@"); Map fieldMap = new HashMap(); String [] fields = regionAndFields[1].split("&"); //同一service有不同的域类型,多个之间用“|”分隔 if (regionAndFields[0].contains("|")) { String [] regionTypeAry = regionAndFields[0].split("\\|"); for (String regionType : regionTypeAry) { fieldMap.put(regionType, fields); } }else{ fieldMap.put(regionAndFields[0], fields); } maatToValveMap.put(Integer.parseInt(serviceAndRegion[0]), fieldMap); } } } } /** * 根据业务类型获取这个 * @param service * @return */ public static List getRedisDBByService(Integer service) { List redisIndexList = serviceDBIndexmap.get(service); if (redisIndexList == null) { return null; } return redisIndexList; } /** * 根据业务类型和具体的type获取maat类型对应的表名 * @param service 业务类型 * @param type 10代表是编译配置,11代表是分组配置,12代表是ip类域配置,13代表是数值类配置,14代表是字符串类域配置,15代表是增强字符串类域配置 * @return */ public static String getMaatTableName(int service, int type, String tableName) { Map> typeMap = sercieNameMap.get(service); if (typeMap != null && typeMap.size() > 0) { List tableList = typeMap.get(type); if (tableName == null || tableName.trim().equals("")) { if (tableList.size() > 1) { logger.error("未从业务类型和表对应关系中,找到业务类型:{},配置类型:{}表名:{}对应的真实表名", service, type, tableName); throw new RuntimeException("业务类型:"+service+",配置类型:"+type+"对应多个表,请输入具体的表名"); } else { return tableList.get(0); } } else { //保存tableName在表名列表中的序号 int index = -1; for (int i = 0; i < tableList.size(); i++) { String str = tableList.get(i); if (str.toLowerCase().contains(tableName.toLowerCase())) { index = i; } } if (index!=-1&&tableList!=null) { return tableList.get(index); } else { logger.error("未从业务类型和表对应关系中,找到业务类型:{},配置类型:{}表名:{}对应的真实表名", service, type, tableName); throw new RuntimeException("后台错误:未从业务类型和表对应关系中,找到业务类型:"+service+",配置类型:"+type+"表名:"+tableName+"对应的真实表名"); } } } return null; } /** * 根据业务类型获取unmaat配置表名 * @param service * @return */ public static String getUnMaatTableName(int service) { if (unMaatSercieNameMap != null && unMaatSercieNameMap.size() > 0) { return unMaatSercieNameMap.get(service); } return null; } public static Integer getActionByService(Integer service) { return serviceActionMap.get(service); } public static Map>> getSercieNameMap() { return sercieNameMap; } public static void setSercieNameMap(Map>> sercieNameMap) { ServiceAndRDBIndexReal.sercieNameMap = sercieNameMap; } public static Map> getServiceDBIndexmap() { return serviceDBIndexmap; } public static void setServiceDBIndexmap(Map> serviceDBIndexmap) { ServiceAndRDBIndexReal.serviceDBIndexmap = serviceDBIndexmap; } public static Map> getMaatToValveMap() { return maatToValveMap; } public static void setMaatToValveMap( Map> maatToValveMap) { ServiceAndRDBIndexReal.maatToValveMap = maatToValveMap; } /** * @param valveDBIndex the valveDBIndex to set */ public static void setValveDBIndex(Integer valveDBIndex) { ServiceAndRDBIndexReal.valveDBIndex = valveDBIndex; } /** * @return the valveDBIndex */ public static Integer getValveDBIndex() { return valveDBIndex; } }