diff --git a/src/main/java/com/nis/util/ConfigConvertUtil.java b/src/main/java/com/nis/util/ConfigConvertUtil.java index ba227a52e..50a257a38 100644 --- a/src/main/java/com/nis/util/ConfigConvertUtil.java +++ b/src/main/java/com/nis/util/ConfigConvertUtil.java @@ -1,5 +1,6 @@ package com.nis.util; +import java.lang.reflect.Field; import java.lang.reflect.Type; import java.text.SimpleDateFormat; import java.util.*; @@ -588,12 +589,13 @@ public class ConfigConvertUtil { */ public static Map objGroupCfgConvert(Map dictMap,List dstList, List srcList, Integer cfgType, BaseCfg baseCfg, List groupRelationList, Map maatTableMap, Set groupIdSet) { + long start=System.currentTimeMillis(),end=0l; Map map = new HashMap(); if (cfgType == 1) { List numRegionList = new ArrayList(); - + int pos=0; Set numGroupVals = new HashSet<>(); - List regionIdList = new ArrayList<>();//ConfigServiceUtil.getId(3, srcList.size()); + List regionIdList = calRangeIps(srcList);//ConfigServiceUtil.getId(3, srcList.size()); for (int i = 0; i < srcList.size(); i++) { T srcCfg = srcList.get(i); BaseIpCfg baseIpCfg = new BaseIpCfg(); @@ -622,17 +624,17 @@ public class ConfigConvertUtil { } List cfgs = ipConvert(cfg, baseIpCfg); if (cfgs.size() > 1) { - List ids = ConfigServiceUtil.getId(3, cfgs.size() - 1); - regionIdList.addAll(ids); + List ids =regionIdList.subList(pos,pos+cfgs.size()); //支持range???? for (int j = 1; j < cfgs.size(); j++) { cfgs.get(j).setRegionId(ids.get(j-1)); } + pos+=cfgs.size(); } dstList.addAll(cfgs); // 如果protocolId非空非零,需要构造数值型域配置,多条相同协议的IP只需要一条数值域配置(目前没有不同协议IP&情况) - //分组复用每个IP组还需要不同的数值域组么????? + //分组复用每个IP组还需要不同的数值域组么????? answer:一个就行了 if (baseCfg!=null&&baseCfg.getServiceId()!=null&&baseCfg.getServiceId()>0&&dictMap.containsKey(baseCfg.getServiceId())) { FunctionServiceDict dict=dictMap.get(baseCfg.getServiceId()); Integer protocolId=dict.getProtocolId(); @@ -741,43 +743,8 @@ public class ConfigConvertUtil { } map.put("groupList", groupRelationList); map.put("dstList", dstList); - return map; - } - public static Map emptyGroupConvert(Integer cfgType, BaseCfg baseCfg, - List groupRelationList, Map maatTableMap, Set groupIdSet) { - Map map = new HashMap(); - if (cfgType == 1) { - if(maatTableMap.containsKey("ipMaatTable")){ - Map groupMap=(Map)maatTableMap.get("ipMaatTable"); - for(Map.Entry e:groupMap.entrySet()){ - if(!groupIdSet.contains(Integer.parseInt(e.getKey()))){ - GroupCfg group = new GroupCfg(); - group.setGroupId(Integer.parseInt(e.getKey())); - group.setCompileId(baseCfg.getCompileId()); - group.setAuditTime(baseCfg.getAuditTime()); - group.setIsValid(baseCfg.getIsValid()); - groupRelationList.add(group); - groupIdSet.add(Integer.parseInt(e.getKey())); - } - } - } - } else if (cfgType == 2 || cfgType == 3) { - if(maatTableMap.containsKey("stringMaatTable")){ - Map groupMap=(Map)maatTableMap.get("stringMaatTable"); - for(Map.Entry e:groupMap.entrySet()){ - if(!groupIdSet.contains(Integer.parseInt(e.getKey()))){ - GroupCfg group = new GroupCfg(); - group.setGroupId(Integer.parseInt(e.getKey())); - group.setCompileId(baseCfg.getCompileId()); - group.setAuditTime(baseCfg.getAuditTime()); - group.setIsValid(baseCfg.getIsValid()); - groupRelationList.add(group); - groupIdSet.add(Integer.parseInt(e.getKey())); - } - } - } - } - map.put("groupList", groupRelationList); + end=System.currentTimeMillis(); + logger.info("objGroupCfgConvert cost:"+(end-start)); return map; } /** @@ -960,4 +927,59 @@ public class ConfigConvertUtil { } return dictMap; } + public static List calRangeIps(List srcList ){ + List regionIdsList=new ArrayList<>(); + int total=0; + //通过反射获取IP的src ip地址,目的IP地址 + Class clazz=null; + Field srcIpAddressField=null,destIpAddressField=null,ipTypeFild=null; + for(T instance:srcList){ + if(clazz==null&&srcIpAddressField==null&&destIpAddressField==null){ + try { + clazz=instance.getClass(); + srcIpAddressField=clazz.getDeclaredField("srcIpAddress"); + srcIpAddressField.setAccessible(true); + destIpAddressField=clazz.getDeclaredField("destIpAddress"); + destIpAddressField.setAccessible(true); + ipTypeFild=clazz.getDeclaredField("ipType"); + ipTypeFild.setAccessible(true); + } catch (NoSuchFieldException e) { + return regionIdsList; + } + } + try { + String srcIpAddressValue=(String)srcIpAddressField.get(instance); + String destIpAddressValue=(String)destIpAddressField.get(instance); + Integer ipType=(Integer)ipTypeFild.get(instance); + if(ipType.equals(4)){ + long left=1,right=1; + if(srcIpAddressValue.indexOf("-")>-1){ + String[] srcIpAddressValueArray=srcIpAddressValue.split("-"); + int startPos=0,endPos=0; + startPos=Integer.parseInt(srcIpAddressValueArray[0].split("\\.")[3]); + endPos=Integer.parseInt(srcIpAddressValueArray[1].split("\\.")[3]); + left=endPos-startPos+1; + } + if(destIpAddressValue.indexOf("-")>-1){ + String[] destIpAddressValueArray=srcIpAddressValue.split("-"); + int startPos=0,endPos=0; + startPos=Integer.parseInt(destIpAddressValueArray[0].split("\\.")[3]); + endPos=Integer.parseInt(destIpAddressValueArray[1].split("\\.")[3]); + right=endPos-startPos+1; + } + total+=left*right; + }else{ + continue; + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + return regionIdsList; + } + } + if(total>0){ + regionIdsList=ConfigServiceUtil.getId(3,total); + } + + return regionIdsList; + } }