diff --git a/src/main/java/com/nis/util/excel/ImportExcel.java b/src/main/java/com/nis/util/excel/ImportExcel.java index a1318e1bb..26a7c63cf 100644 --- a/src/main/java/com/nis/util/excel/ImportExcel.java +++ b/src/main/java/com/nis/util/excel/ImportExcel.java @@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory; import org.springframework.web.multipart.MultipartFile; import com.google.common.collect.Lists; +import com.nis.domain.FunctionRegionDict; import com.nis.domain.configuration.template.ComplexStringAllTemplate; import com.nis.domain.configuration.template.IpAllTemplate; import com.nis.domain.configuration.template.StringAllTemplate; @@ -285,7 +286,7 @@ public class ImportExcel { * @param cls 导入对象类型 * @param groups 导入分组 */ - public List getDataList(Class cls,Properties props, int... groups) throws InstantiationException, IllegalAccessException{ + /*public List getDataList(Class cls,Properties props, int... groups) throws InstantiationException, IllegalAccessException{ List annotationList = Lists.newArrayList(); // Get annotation field // Field[] fs = cls.getDeclaredFields(); @@ -346,6 +347,373 @@ public class ImportExcel { //log.debug("Import column count:"+annotationList.size()); // Get excel data List dataList = Lists.newArrayList(); + Row header = this.getRow(headerNum); + List annotationListCopy=Lists.newArrayList(); + for(int i=header.getFirstCellNum();i<=header.getLastCellNum();i++) { + Object value=this.getCellValue(header, i); + for(Object[] os:annotationList) { + ExcelField ef = (ExcelField)os[0]; + String title=ef.title(); + if(props.getProperty(title).equals(value.toString())) { + annotationListCopy.add(os); + break; + } + } + } + if(annotationListCopy.size()==0) { + throw new ServiceException(props.getProperty("template_error")); + } + if(IpAllTemplate.class.isAssignableFrom(cls)||cls.getSimpleName().equals("IpAllTemplate")) { + boolean has=false; + for(Object[] os:annotationListCopy) { + ExcelField ef = (ExcelField)os[0]; + if(ef.title().equals("client_ip")||ef.title().equals("server_ip")) { + has=true; + break; + } + } + if(!has) { + throw new ServiceException(props.getProperty("template_error")); + } + }else if(StringAllTemplate.class.isAssignableFrom(cls)||cls.getSimpleName().equals("StringAllTemplate")){ + boolean has=false; + for(Object[] os:annotationListCopy) { + ExcelField ef = (ExcelField)os[0]; + if(ef.title().equals("key_word")) { + has=true; + break; + } + } + if(!has) { + throw new ServiceException(props.getProperty("template_error")); + } + }else if(ComplexStringAllTemplate.class.isAssignableFrom(cls)||cls.getSimpleName().equals("ComplexStringAllTemplate")){ + boolean has=false; + for(Object[] os:annotationListCopy) { + ExcelField ef = (ExcelField)os[0]; + if(ef.title().equals("key_word")) { + has=true; + break; + } + } + if(!has) { + throw new ServiceException(props.getProperty("template_error")); + } + } + // Field sorting + Collections.sort(annotationList, new Comparator() { + public int compare(Object[] o1, Object[] o2) { + return new Integer(((ExcelField)o1[0]).sort()).compareTo( + new Integer(((ExcelField)o2[0]).sort())); + }; + }); + //annotationList.clear(); + for (int i = this.getDataRowNum(); i < this.getLastDataRowNum(); i++) { + E e = (E)cls.newInstance(); + int column = 0; + Row row = this.getRow(i); + StringBuilder sb = new StringBuilder(); + for (Object[] os : annotationList){ + Object val = this.getCellValue(row, column++); + if (val != null){ + ExcelField ef = (ExcelField)os[0]; + // If is dict type, get dict value + if (StringUtils.isNotBlank(ef.dictType())){ + Object val1 = DictUtils.getDictCode(ef.dictType(), val.toString(), ""); + //没有获取到字典值的话会影响验证判断 + if(val1!=null&&StringUtils.isNotBlank(val1.toString())) { + val=val1; + } + //log.debug("Dictionary type value: ["+i+","+colunm+"] " + val); + } + // Get param type and type cast + Class valType = Class.class; + if (os[1] instanceof Field){ + valType = ((Field)os[1]).getType(); + }else if (os[1] instanceof Method){ + Method method = ((Method)os[1]); + if ("get".equals(method.getName().substring(0, 3))){ + valType = method.getReturnType(); + }else if("set".equals(method.getName().substring(0, 3))){ + valType = ((Method)os[1]).getParameterTypes()[0]; + } + } + //log.debug("Import value type: ["+i+","+column+"] " + valType); + try { + if (valType == String.class){ + String s = String.valueOf(val.toString()); + //0.0.0.0表示任意IP的含义 + if(StringUtils.endsWith(s, ".0") && !s.endsWith("0.0.0.0")){ + val = StringUtils.substringBefore(s, ".0"); + }else{ + val = String.valueOf(val.toString()); + } + }else if (valType == Integer.class){ + val = Double.valueOf(val.toString()).intValue(); + }else if (valType == Long.class){ + val = Double.valueOf(val.toString()).longValue(); + }else if (valType == Double.class){ + val = Double.valueOf(val.toString()); + }else if (valType == Float.class){ + val = Float.valueOf(val.toString()); + }else if (valType == Date.class){ + val = DateUtil.getJavaDate((Double)val); + }else{ + if (ef.fieldType() != Class.class){ + val = ef.fieldType().getMethod("getValue", String.class).invoke(null, val.toString()); + }else{ + val = Class.forName(this.getClass().getName().replaceAll(this.getClass().getSimpleName(), + "fieldtype."+valType.getSimpleName()+"Type")).getMethod("getValue", String.class).invoke(null, val.toString()); + } + } + } catch (Exception ex) { + log.info("Get cell value ["+i+","+column+"] error: " + ex.toString()); + val = null; + } + // set entity value + if (os[1] instanceof Field){ + Reflections.invokeSetter(e, ((Field)os[1]).getName(), val); + }else if (os[1] instanceof Method){ + String mthodName = ((Method)os[1]).getName(); + if ("get".equals(mthodName.substring(0, 3))){ + mthodName = "set"+StringUtils.substringAfter(mthodName, "get"); + } + Reflections.invokeMethod(e, mthodName, new Class[] {valType}, new Object[] {val}); + } + } + sb.append(val+", "); + } + dataList.add(e); + log.debug("Read success: ["+i+"] "+sb.toString()); + } + return dataList; + }*/ + /** + * 获取导入数据列表 + * @param cls 导入对象类型 + * @param groups 导入分组 + */ + public List getDataList(Class cls,Properties props,FunctionRegionDict regionDict, int... groups) throws InstantiationException, IllegalAccessException{ + if(regionDict==null) { + throw new RuntimeException("regionDict is null!"); + } + List annotationList = Lists.newArrayList(); + // Get annotation field +// Field[] fs = cls.getDeclaredFields(); + List fs=new ArrayList(); + //从region中获取配置信息 + Integer regionType=regionDict.getRegionType(); + //ip相关 + boolean srcIpShow=false; + boolean destIpShow=false; + boolean srcPortShow=false; + boolean destPortShow=false; + boolean directionShow=false; + boolean protocolShow=false; + //字符串公共属性 + boolean matchMethodShow=false; + boolean hexShow=false; + boolean isCaseSensitiveShow=false; + //增强字符串相关 + boolean districtShow=false; + if(regionType==1) { + String ipPortShow=regionDict.getConfigIpPortShow(); + if(StringUtils.isNotBlank(ipPortShow)) { + if(ipPortShow.indexOf("1")>-1) { + srcIpShow=true; + } + if(ipPortShow.indexOf("2")>-1) { + srcPortShow=true; + } + if(ipPortShow.indexOf("3")>-1) { + destIpShow=true; + } + if(ipPortShow.indexOf("4")>-1) { + destPortShow=true; + } + }; + //协议方向等,如果只有一个值,就 不需要输入了 + String direction=regionDict.getConfigDirection(); + if(StringUtils.isNotBlank(direction)&&direction.indexOf(",")>-1) { + districtShow=true; + } + String protocol=regionDict.getConfigProtocol(); + if(StringUtils.isNotBlank(protocol)&&protocol.indexOf(",")>-1) { + protocolShow=true; + } + }else if(regionType==2||regionType==3){ + String matchMethod= regionDict.getConfigMatchMethod(); + if(StringUtils.isNotBlank(matchMethod)&&matchMethod.indexOf(",")>-1) { + matchMethodShow=true; + } + String hex= regionDict.getConfigHex(); + if(StringUtils.isNotBlank(hex)&&hex.indexOf(",")>-1) { + hexShow=true; + isCaseSensitiveShow=true; + } + String district=regionDict.getConfigDistrict(); + if(StringUtils.isNotBlank(district)&&district.indexOf(",")>-1) { + districtShow=true; + } + } + // Get annotation field + //递归获取cls实体对象及父级对象的属性 + getFields(fs, cls); + for (Field f : fs){ + //排除不需要导出的字段 + if(!srcIpShow) { + if(f.getName().equalsIgnoreCase("srcIpAddress")) { + continue; + } + } + if(!destIpShow) { + if(f.getName().equalsIgnoreCase("destIpAddress")) { + continue; + } + } + if(!srcPortShow) { + if(f.getName().equalsIgnoreCase("srcPort")) { + continue; + } + } + if(!destPortShow) { + if(f.getName().equalsIgnoreCase("destPort")) { + continue; + } + } + if(!directionShow) { + if(f.getName().equalsIgnoreCase("direction")) { + continue; + } + } + if(!protocolShow) { + if(f.getName().equalsIgnoreCase("protocol")) { + continue; + } + } + if(!matchMethodShow) { + if(f.getName().equalsIgnoreCase("matchMethod")) { + continue; + } + } + if(!hexShow) { + if(f.getName().equalsIgnoreCase("isHex")) { + continue; + } + } + if(!isCaseSensitiveShow) { + if(f.getName().equalsIgnoreCase("isCaseInsenstive")) { + continue; + } + } + if(!districtShow) { + if(f.getName().equalsIgnoreCase("district")) { + continue; + } + } + ExcelField ef = f.getAnnotation(ExcelField.class); + if (ef != null && (ef.type()==0 || ef.type()==2)){ + if (groups!=null && groups.length>0){ + boolean inGroup = false; + for (int g : groups){ + if (inGroup){ + break; + } + for (int efg : ef.groups()){ + if (g == efg){ + inGroup = true; + annotationList.add(new Object[]{ef, f}); + break; + } + } + } + }else{ + annotationList.add(new Object[]{ef, f}); + } + } + } + // Get annotation method +// Method[] ms = cls.getDeclaredMethods(); + List ms=new ArrayList(); + // Get annotation method + //递归获取cls实体对象及父级对象的属性 + getMethods(ms, cls); + for (Method m : ms){ + //排除不需要导出的字段 + if(!srcIpShow) { + if(m.getName().equalsIgnoreCase("get"+"srcIpAddress")||m.getName().equalsIgnoreCase("set"+"srcIpAddress")) { + continue; + } + } + if(!destIpShow) { + if(m.getName().equalsIgnoreCase("get"+"destIpAddress")||m.getName().equalsIgnoreCase("set"+"destIpAddress")) { + continue; + } + } + if(!srcPortShow) { + if(m.getName().equalsIgnoreCase("get"+"srcPort")||m.getName().equalsIgnoreCase("set"+"srcPort")) { + continue; + } + } + if(!destPortShow) { + if(m.getName().equalsIgnoreCase("get"+"destPort")||m.getName().equalsIgnoreCase("set"+"destPort")) { + continue; + } + } + if(!directionShow) { + if(m.getName().equalsIgnoreCase("get"+"direction")||m.getName().equalsIgnoreCase("set"+"direction")) { + continue; + } + } + if(!protocolShow) { + if(m.getName().equalsIgnoreCase("get"+"protocol")||m.getName().equalsIgnoreCase("set"+"protocol")) { + continue; + } + } + if(!matchMethodShow) { + if(m.getName().equalsIgnoreCase("get"+"matchMethod")||m.getName().equalsIgnoreCase("set"+"matchMethod")) { + continue; + } + } + if(!hexShow) { + if(m.getName().equalsIgnoreCase("get"+"isHex")||m.getName().equalsIgnoreCase("set"+"isHex")) { + continue; + } + } + if(!isCaseSensitiveShow) { + if(m.getName().equalsIgnoreCase("get"+"isCaseInsenstive")||m.getName().equalsIgnoreCase("set"+"isCaseInsenstive")) { + continue; + } + } + if(!districtShow) { + if(m.getName().equalsIgnoreCase("get"+"district")||m.getName().equalsIgnoreCase("set"+"district")) { + continue; + } + } + ExcelField ef = m.getAnnotation(ExcelField.class); + if (ef != null && (ef.type()==0 || ef.type()==2)){ + if (groups!=null && groups.length>0){ + boolean inGroup = false; + for (int g : groups){ + if (inGroup){ + break; + } + for (int efg : ef.groups()){ + if (g == efg){ + inGroup = true; + annotationList.add(new Object[]{ef, m}); + break; + } + } + } + }else{ + annotationList.add(new Object[]{ef, m}); + } + } + } + //log.debug("Import column count:"+annotationList.size()); + // Get excel data + List dataList = Lists.newArrayList(); /*Row header = this.getRow(headerNum); List annotationListCopy=Lists.newArrayList(); for(int i=header.getFirstCellNum();i<=header.getLastCellNum();i++) { diff --git a/src/main/java/com/nis/web/controller/BaseController.java b/src/main/java/com/nis/web/controller/BaseController.java index a1c2e447d..9aac20726 100644 --- a/src/main/java/com/nis/web/controller/BaseController.java +++ b/src/main/java/com/nis/web/controller/BaseController.java @@ -3143,45 +3143,45 @@ public class BaseController { if (regionDict.getFunctionId().equals(5)) { if (serviceDict!=null&&serviceDict.getAction().equals(64)) { List list = ei.getDataList(IpRateLimitTemplate.class, - this.getMsgProp()); + this.getMsgProp(),regionDict); ipPortCfgs = this.checkIpCfg(serviceDict, regionDict, list); } else { - List list = ei.getDataList(IpAllTemplate.class, this.getMsgProp()); + List list = ei.getDataList(IpAllTemplate.class, this.getMsgProp(),regionDict); ipPortCfgs = this.checkIpCfg(serviceDict, regionDict, list); } } else if (regionDict.getFunctionId().equals(212)) { - List list = ei.getDataList(IpPayloadTemplate.class, this.getMsgProp()); + List list = ei.getDataList(IpPayloadTemplate.class, this.getMsgProp(),regionDict); ipPortCfgs = this.checkIpCfg(serviceDict, regionDict, list); } else if (regionDict.getFunctionId().equals(510) && "p2p_ip".equals(regionDict.getConfigServiceType())) { // P2p IP - List list = ei.getDataList(P2pIpTemplate.class, this.getMsgProp()); + List list = ei.getDataList(P2pIpTemplate.class, this.getMsgProp(),regionDict); ipPortCfgs = this.checkIpCfg(serviceDict, regionDict, list); } else if (regionDict.getFunctionId().equals(600)) {// ANS IP - List list = ei.getDataList(AsnIpTemplate.class, this.getMsgProp()); + List list = ei.getDataList(AsnIpTemplate.class, this.getMsgProp(),regionDict); ipPortCfgs = this.checkIpCfg(serviceDict, regionDict, list); } else { - List list = ei.getDataList(IpAllTemplate.class, this.getMsgProp()); + List list = ei.getDataList(IpAllTemplate.class, this.getMsgProp(),regionDict); ipPortCfgs = this.checkIpCfg(serviceDict, regionDict, list); } } else if (regionDict.getRegionType().equals(2)) {// 字符串类 if (regionDict.getFunctionId().equals(510) && "p2p_hash".equals(regionDict.getConfigServiceType())) { // P2p hash List list = ei.getDataList(P2pHashStringTemplate.class, - this.getMsgProp()); + this.getMsgProp(),regionDict); stringCfgs = this.checkStringCfg(serviceDict, regionDict, list); } else { - List list = ei.getDataList(StringAllTemplate.class, this.getMsgProp()); + List list = ei.getDataList(StringAllTemplate.class, this.getMsgProp(),regionDict); stringCfgs = this.checkStringCfg(serviceDict, regionDict, list); } } else if (regionDict.getRegionType().equals(3)) {// 增强字符串类 if (regionDict.getFunctionId().equals(7)&&serviceDict!=null&&serviceDict.getAction().intValue()==16) { List list = ei.getDataList(DnsComplexStringTemplate.class, - this.getMsgProp()); + this.getMsgProp(),regionDict); complexkeywordCfgs = this.checkComplexStringCfg(serviceDict, regionDict, list); } else { List list = ei.getDataList(ComplexStringAllTemplate.class, - this.getMsgProp()); + this.getMsgProp(),regionDict); complexkeywordCfgs = this.checkComplexStringCfg(serviceDict, regionDict, list); } @@ -3424,9 +3424,10 @@ public class BaseController { if (regionDict.getDictId().intValue() == 28) { websiteCfgService.saveDnsCfg(complexkeywordCfgs); } - if (regionDict.getDictId().intValue() == 30 || regionDict.getDictId().intValue() == 31) { + if (regionDict.getDictId().intValue() == 30 || regionDict.getDictId().intValue() == 31||regionDict.getDictId().intValue() == 599) { mailCfgService.saveMailCfg(complexkeywordCfgs); } + } if (cfgIndexInfos != null && cfgIndexInfos.size() > 0) { ipCfgService.saveCfgIndexOf(cfgIndexInfos); diff --git a/src/main/resources/sql/20181030/update_region.sql b/src/main/resources/sql/20181030/update_region.sql index 03e1bbdd3..e30703760 100644 --- a/src/main/resources/sql/20181030/update_region.sql +++ b/src/main/resources/sql/20181030/update_region.sql @@ -9,4 +9,7 @@ UPDATE function_service_dict SET is_import=1 WHERE function_id=61 ; UPDATE function_region_dict SET is_import=1 WHERE function_id=34 and dict_id in(20,21,22,23); UPDATE function_service_dict SET is_import=1 WHERE function_id=34; #网页关键字导入 -update function_region_dict set is_import=1 where function_id=635; \ No newline at end of file +update function_region_dict set is_import=1 where function_id=635; +#邮件地址 +UPDATE function_region_dict SET is_import=1 WHERE function_id=37 AND dict_id=599; +UPDATE function_region_dict SET is_import=0 WHERE function_id=37 AND dict_id=600; \ No newline at end of file