From 8e5324932513b92e062260038ad0b4bd2574dfd3 Mon Sep 17 00:00:00 2001 From: leijun Date: Fri, 4 Jan 2019 18:53:18 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E5=AE=9E=E6=97=B6=E6=8A=A5=E8=A1=A8CSV?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E8=B0=83=E6=95=B4=E4=B8=BA=E5=90=8E=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/nis/util/excel/ExcelCsv.java | 77 ++++++++++++++++--- .../nis/web/controller/BaseController.java | 17 +++- .../controller/report/ExportController.java | 21 +++++ src/main/webapp/WEB-INF/views/report/list.jsp | 4 +- 4 files changed, 105 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/nis/util/excel/ExcelCsv.java b/src/main/java/com/nis/util/excel/ExcelCsv.java index 6ddc09f38..0024e5036 100644 --- a/src/main/java/com/nis/util/excel/ExcelCsv.java +++ b/src/main/java/com/nis/util/excel/ExcelCsv.java @@ -416,6 +416,9 @@ public class ExcelCsv { // 写入文件头部 for (String title : titles) { StringBuffer sb = new StringBuffer(); + if(isDate(title)){ + title=title + "\t"; + } String rowStr = sb.append("\"").append(title).append("\",").toString(); csvWriter.write(rowStr); } @@ -437,9 +440,9 @@ public class ExcelCsv { tag = tag.replace("\"", ""); } // \t解决数字0开头字符串,0显示不出来的问题,比如邮编 - if(tag.startsWith("0") && !tag.contains(".")){ + /*if(tag.startsWith("0") && !tag.contains(".")){ tag = tag + "\t"; - } + }*/ if(isDate(tag)){ tag=tag + "\t"; } @@ -509,18 +512,70 @@ public class ExcelCsv { public static boolean isDate(String strDate) { Pattern pattern = Pattern .compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$"); - if(strDate.trim().length()>= 10){ - String date=strDate.trim().substring(0, 10); - Matcher m = pattern.matcher(date); - if (m.matches()) { - return true; - } else { - return false; - } + boolean flag=false; + if(strDate.trim().length()>=10){ + strDate=strDate.trim().substring(0, 10); + Matcher m = pattern.matcher(strDate); + if (m.matches()) { + return true; + } else { + return false; + } }else{ - return false; + if(strDate.trim().length()==7){ + pattern = Pattern.compile("^\\d{4}-\\d{2}$"); + Matcher m = pattern.matcher(strDate); + if (m.matches()) { + return true; + } else { + return false; + } + }else{ + return false; + } } } + + public static void ajaxCSVFile(HttpServletResponse response,ListtitleList,List>dataMap,String fileName, + String titleTime,Properties msgProp) { + try { + // 写入临时文件 + File tempFile = File.createTempFile("vehicle", ".csv"); + cs = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tempFile), "utf-8"), 1024); + cs.write(new String(bom, charset)); + //写入时间范围 + if(!StringUtils.isEmpty(titleTime)){ + cs.write(titleTime); + cs.newLine(); + } + // 写入文件头部 + writeHead(titleList, cs); + // 写入文件内容 + for (List row: dataMap) { + writeRow(row, cs); + } + cs.flush(); + OutputStream out = response.getOutputStream(); + byte[] b = new byte[10240]; + File fileLoad = new File(tempFile.getCanonicalPath()); + response.reset(); + response.setContentType("application/octet-stream; charset=utf-8"); + response.setHeader("Content-Disposition", "attachment; filename="+fileName); + long fileLength = fileLoad.length(); + String length1 = String.valueOf(fileLength); + response.setHeader("Content_Length", length1); + FileInputStream in = new FileInputStream(fileLoad); + int n; + while ((n = in.read(b)) != -1) { + out.write(b, 0, n); // 每次写入out1024字节 + } + in.close(); + out.close(); + deleteFile(tempFile); + } catch (Exception e) { + e.printStackTrace(); + } + } } \ No newline at end of file diff --git a/src/main/java/com/nis/web/controller/BaseController.java b/src/main/java/com/nis/web/controller/BaseController.java index c63a10dcc..3aa1881d1 100644 --- a/src/main/java/com/nis/web/controller/BaseController.java +++ b/src/main/java/com/nis/web/controller/BaseController.java @@ -2291,7 +2291,22 @@ public class BaseController { fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1"); } new ExportExcel(msgProp.getProperty(code, code),code,titleTime, headerList).ajaxDataList(dataList, code).write(response, fileName).dispose(); - + } + + + public void _ajaxCsv(HttpServletRequest request, HttpServletResponse response, + String code,String titleTime,List headerList, List> dataList) + throws Exception{ + Properties msgProp = getMsgProp(); + String fileName = msgProp.getProperty(code, code) + "_" + DateUtils.getDate("yyyyMMddHHmmss") + + ".csv"; + fileName = fileName.replaceAll(" ", "_"); + if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) { + fileName = URLEncoder.encode(fileName, "UTF-8"); + } else { + fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1"); + } + ExcelCsv.ajaxCSVFile(response,headerList,dataList,fileName,titleTime,msgProp); } public String initLogMap(BaseLogEntity log,String title){ diff --git a/src/main/java/com/nis/web/controller/report/ExportController.java b/src/main/java/com/nis/web/controller/report/ExportController.java index d494c8973..1ea68e5a6 100644 --- a/src/main/java/com/nis/web/controller/report/ExportController.java +++ b/src/main/java/com/nis/web/controller/report/ExportController.java @@ -34,6 +34,27 @@ public class ExportController extends BaseController { } _ajaxExport(request,response,titleCode, titleTime, heard, list); } + + + @RequestMapping(value = "ajaxCsv") + public void ajaxCsv(String exports,HttpServletRequest request,HttpServletResponse response) throws Exception{ + JSONObject jsonObject = JSONObject.fromObject(StringEscapeUtils.unescapeHtml(exports)); + Map map=JSONObject.fromObject(jsonObject); + List> list=(List>) map.get("book"); + List heard=(List) map.get("heard"); + String titleTime=String.valueOf(map.get("titleTime")); + String titleCode=String.valueOf(map.get("titleCode")); + if(!StringUtil.isEmpty(titleTime)){ + if(titleTime.contains("\"")){ + titleTime = titleTime.replaceAll("\"", "").trim(); + } + if(titleTime.startsWith("[")){ + titleTime = titleTime.substring(1, titleTime.length()-1); + } + } + _ajaxCsv(request,response,titleCode, titleTime, heard, list); + } + } diff --git a/src/main/webapp/WEB-INF/views/report/list.jsp b/src/main/webapp/WEB-INF/views/report/list.jsp index a5bc10067..16ec192ff 100644 --- a/src/main/webapp/WEB-INF/views/report/list.jsp +++ b/src/main/webapp/WEB-INF/views/report/list.jsp @@ -631,9 +631,9 @@ white-space:nowrap; - - --%> + href="javascript:;"> @@ -225,7 +234,7 @@ - <%--
+
" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/>
-
--%> +
@@ -256,10 +265,14 @@ + <%-- --%> - - + <%-- --%> + + + + <%-- --%> @@ -270,24 +283,28 @@ --%> - - <%-- --%> + + <%-- --%> - <%-- - --%> + + <%-- --%> - + + ${cfg.compileId } ${cfg.cfgDesc } - ${cfg.asnIpGroup } + <%-- ${cfg.asnIpGroup } --%> + ${cfg.organization } + ${cfg.country } + ${cfg.detail } ${cfg.userRegion1} @@ -377,21 +394,30 @@ - <%-- + + - --%> + <%-- + + + + + + + --%> + <%--
--%> ${cfg.creatorName } ${cfg.editorName } - <%-- ${cfg.auditorName } - --%> + ${cfg.auditorName } +
diff --git a/src/main/webapp/WEB-INF/views/basics/policyGroupForm.jsp b/src/main/webapp/WEB-INF/views/basics/policyGroupForm.jsp index 7abc1c023..a205db40a 100644 --- a/src/main/webapp/WEB-INF/views/basics/policyGroupForm.jsp +++ b/src/main/webapp/WEB-INF/views/basics/policyGroupForm.jsp @@ -61,9 +61,9 @@ $(function(){ - + <%-- - + --%> @@ -127,7 +127,7 @@ $(function(){ diff --git a/src/main/webapp/WEB-INF/views/basics/policyGroupList.jsp b/src/main/webapp/WEB-INF/views/basics/policyGroupList.jsp index b7ac63c7a..10ea63231 100644 --- a/src/main/webapp/WEB-INF/views/basics/policyGroupList.jsp +++ b/src/main/webapp/WEB-INF/views/basics/policyGroupList.jsp @@ -36,12 +36,12 @@ var checkboxes=$("tbody tr td input.i-checks:checkbox"); var ids=""; var str=""; - var serviceGroupIds=[]; + /* var serviceGroupIds=[]; */ checkboxes.each(function(){ if(true == $(this).is(':checked')){ - if($(this).attr("groupType")==4){ + /* if($(this).attr("groupType")==4){ serviceGroupIds.push($(this).attr("serviceGroupId")); - } + } */ str+=$(this).attr("id")+","; } }); @@ -50,7 +50,7 @@ } var canDel=true; - var tip=''; + /* var tip=''; if(serviceGroupIds.length>0){ $.ajax({ type:'post', @@ -63,29 +63,15 @@ } } }); - /* if(canDel){ // 不能删除包含ASN IP的 ASN组 - $.ajax({ - type:'post', - url:'${ctx}/basics/policyGroup/ajaxHasAsnIPs', - data:{"serviceGroupIds":serviceGroupIds.join(',')}, - async:false, - success:function(data,textStatus){//处理返回结果 - if(data){ - canDel=false; - tip=''; - } - } - }); - } */ - } + } */ if(canDel){ var added = ""; - if(serviceGroupIds.length != 0){ + /* if(serviceGroupIds.length != 0){ added = ""; - } + } */ top.$.jBox.confirm(""+added,"",function(v,h,f){ if(v=="ok"){ - if(serviceGroupIds.length != 0){ + /* if(serviceGroupIds.length != 0){ $.ajax({ type:'post', url:'${ctx}/basics/asn/ajaxDeleteAsnIp', @@ -97,9 +83,9 @@ } } }); - }else{ + }else{ */ window.location = url+"&ids="+ids; - } + /* } */ } },{buttonsFocus:1}); @@ -125,7 +111,7 @@

- <%-- + @@ -136,8 +122,8 @@ - --%> - + + <%-- --%>

@@ -179,9 +165,9 @@ - + <%-- - + --%>
diff --git a/src/main/webapp/WEB-INF/views/cfg/ipaddr/asnForm.jsp b/src/main/webapp/WEB-INF/views/cfg/ipaddr/asnForm.jsp index d6537941c..7472e627f 100644 --- a/src/main/webapp/WEB-INF/views/cfg/ipaddr/asnForm.jsp +++ b/src/main/webapp/WEB-INF/views/cfg/ipaddr/asnForm.jsp @@ -15,13 +15,13 @@
- + <%-- --%>
diff --git a/src/main/webapp/WEB-INF/views/cfg/ipaddr/ipSubList.jsp b/src/main/webapp/WEB-INF/views/cfg/ipaddr/ipSubList.jsp index 0740788c7..534fcdc91 100644 --- a/src/main/webapp/WEB-INF/views/cfg/ipaddr/ipSubList.jsp +++ b/src/main/webapp/WEB-INF/views/cfg/ipaddr/ipSubList.jsp @@ -219,28 +219,50 @@ -
-
-
-
- - + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
-
-
-
- - -
-
-
-
+ \ No newline at end of file diff --git a/src/main/webapp/static/global/plugins/jquery-validation/1.11.0/jquery.validate.method.js b/src/main/webapp/static/global/plugins/jquery-validation/1.11.0/jquery.validate.method.js index e24c3c119..153653db1 100644 --- a/src/main/webapp/static/global/plugins/jquery-validation/1.11.0/jquery.validate.method.js +++ b/src/main/webapp/static/global/plugins/jquery-validation/1.11.0/jquery.validate.method.js @@ -945,14 +945,14 @@ jQuery.validator.addMethod("addrPoolUnique",function(value, element) { // 策略分组管理asn号唯一 jQuery.validator.addMethod("asnNoUnique",function(value, element) { var ctx=$(element).attr("ctx"); - var groupId= $("[name='groupId']").val(); - var url = ctx+"/basics/policyGroup/checkAsnNo"; + var id= $("[name='id']").val(); + var url = ctx+"/basics/asnGroup/checkAsnNo"; var result = true; $.ajax({ type:'post', async:false, url: url, - data:{"groupId":groupId,"asnNo":value}, + data:{"id":id,"asnId":value}, success:function(data){ result = data; } diff --git a/src/main/webapp/static/pages/scripts/appNames.js b/src/main/webapp/static/pages/scripts/appNames.js index 6a37ed096..aece709a8 100644 --- a/src/main/webapp/static/pages/scripts/appNames.js +++ b/src/main/webapp/static/pages/scripts/appNames.js @@ -32,7 +32,7 @@ $(function(){ } }); } - var asnNos=[]; + /*var asnNos=[]; $(".configGroup").each(function(){ if($(this).attr("asnNo")&&$(this).attr("asnNo")!=''){ asnNos.push($(this).attr("asnNo")); @@ -53,5 +53,5 @@ $(function(){ } } }); - } + }*/ }); \ No newline at end of file From f593aeecb3d9e3d9e8ac82eceb5be55a8a5d816f Mon Sep 17 00:00:00 2001 From: wangxin Date: Fri, 4 Jan 2019 20:52:32 +0800 Subject: [PATCH 09/11] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/messages/message_en.properties | 7 ++++++- src/main/resources/messages/message_ru.properties | 2 -- src/main/resources/messages/message_zh_CN.properties | 7 ++++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/resources/messages/message_en.properties b/src/main/resources/messages/message_en.properties index ae0399ed6..13af75260 100644 --- a/src/main/resources/messages/message_en.properties +++ b/src/main/resources/messages/message_en.properties @@ -1446,4 +1446,9 @@ hex_minlength_16=Please enter a hexadecimal string of length 16 need_input=Attributes need to be filled in max_input=Fill in at most four no_need_input=Attributes no need to be filled in -close_link=Close Link \ No newline at end of file +close_link=Close Link +asn_group=ASN Group +can_not_edit_issued_ans_group=Can not edit valid ASN group +can_not_delete_asn_group_with_audited_ip=Can not delete ASN group with approved IP +organization=Organization +mismatch=Mismatch \ No newline at end of file diff --git a/src/main/resources/messages/message_ru.properties b/src/main/resources/messages/message_ru.properties index be04d9d20..1323cfb06 100644 --- a/src/main/resources/messages/message_ru.properties +++ b/src/main/resources/messages/message_ru.properties @@ -1449,5 +1449,3 @@ hex_minlength_8=Please enter a hexadecimal string of length 8 hex_minlength_16=Please enter a hexadecimal string of length 16 need_input=Attributes need to be filled in max_input=Fill in at most four -no_need_input=Attributes no need to be filled in -close_link=Close Link \ No newline at end of file diff --git a/src/main/resources/messages/message_zh_CN.properties b/src/main/resources/messages/message_zh_CN.properties index 383029823..047278f7c 100644 --- a/src/main/resources/messages/message_zh_CN.properties +++ b/src/main/resources/messages/message_zh_CN.properties @@ -1446,4 +1446,9 @@ hex_minlength_16=\u8bf7\u8f93\u5165\u957f\u5ea6\u4e3a16\u7684\u5341\u516d\u8fdb\ need_input=\u9700\u8981\u586b\u5199\u5c5e\u6027 max_input=\u6700\u591a\u586b\u5199\u56db\u4e2a no_need_input=\u65e0\u9700\u586b\u5199\u5c5e\u6027 -close_link=\u5173\u95ed\u8fde\u63a5 \ No newline at end of file +close_link=\u5173\u95ed\u8fde\u63a5 +asn_group=ASN\u7ec4 +can_not_edit_issued_ans_group=\u4e0d\u80fd\u4fee\u6539\u6709\u6548\u7684ASN\u7ec4 +can_not_delete_asn_group_with_audited_ip=\u4e0d\u80fd\u5220\u9664\u5305\u542b\u5ba1\u6838\u901a\u8fc7ip\u7684ASN\u7ec4 +organization=\u7ec4\u7ec7 +mismatch=\u4e0d\u5339\u914d \ No newline at end of file From 2102923c4ee9969229be0a455b68a485cc89d014 Mon Sep 17 00:00:00 2001 From: tanghao Date: Fri, 4 Jan 2019 21:15:57 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dpdf=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/plugins/highcharts/js/offline-exporting.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/webapp/static/global/plugins/highcharts/js/offline-exporting.js b/src/main/webapp/static/global/plugins/highcharts/js/offline-exporting.js index 3e5f3f282..f753848d0 100644 --- a/src/main/webapp/static/global/plugins/highcharts/js/offline-exporting.js +++ b/src/main/webapp/static/global/plugins/highcharts/js/offline-exporting.js @@ -1,8 +1,3 @@ -/* -charts JS v6.1.0 (2018-04-13) - Client side exporting module - -*/ (function(n){"object"===typeof module&&module.exports?module.exports=n:n(Highcharts)})(function(n){(function(c){function n(a,f){var d=t.getElementsByTagName("head")[0],b=t.createElement("script");b.type="text/javascript";b.src=a;b.onload=f;b.onerror=function(){c.error("Error loading script "+a)};d.appendChild(b)}var C=c.merge,e=c.win,r=e.navigator,t=e.document,w=c.each,x=e.URL||e.webkitURL||e,B=/Edge\/|Trident\/|MSIE /.test(r.userAgent),D=/Edge\/\d+/.test(r.userAgent),E=B?150:0;c.CanVGRenderer={}; c.dataURLtoBlob=function(a){if(e.atob&&e.ArrayBuffer&&e.Uint8Array&&e.Blob&&x.createObjectURL){a=a.match(/data:([^;]*)(;base64)?,([0-9A-Za-z+/]+)/);for(var c=e.atob(a[3]),d=new e.ArrayBuffer(c.length),d=new e.Uint8Array(d),b=0;br.userAgent.indexOf("Chrome");try{if(!c&&0>r.userAgent.toLowerCase().indexOf("firefox"))return x.createObjectURL(new e.Blob([a],{type:"image/svg+xml;charset-utf-16"}))}catch(d){}return"data:image/svg+xml;charset\x3dUTF-8,"+ @@ -13,4 +8,4 @@ break}c=c.parentNode}});b.style["font-family"]=b.style["font-family"]&&b.style[" A,k=a.match(/^]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1]*A,m=function(){u.drawSvg(a,0,0,l,k);try{c.downloadURL(r.msSaveOrOpenBlob?f.msToBlob():f.toDataURL(q),v),b&&b()}catch(H){d()}finally{g()}};f.width=l;f.height=k;e.canvg?m():(p=!0,n(h+"rgbcolor.js",function(){n(h+"canvg.js",function(){m()})}))},d,d,function(){p&&g()}))};c.Chart.prototype.getSVGForLocalExport=function(a,e,d,b){var f=this,l,k=0,m,p,g,h,n,q=function(a,c,d){++k;d.imageElement.setAttributeNS("http://www.w3.org/1999/xlink","href", a);k===l.length&&b(f.sanitizeSVG(m.innerHTML,p))};c.wrap(c.Chart.prototype,"getChartHTML",function(b){var a=b.apply(this,Array.prototype.slice.call(arguments,1));p=this.options;m=this.container.cloneNode(!0);return a});f.getSVGForExport(a,e);l=m.getElementsByTagName("image");try{if(l.length)for(h=0,n=l.length;h Date: Fri, 4 Jan 2019 21:38:13 +0800 Subject: [PATCH 11/11] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E6=8B=89=E5=A7=86?= =?UTF-8?q?=E8=BE=BE=E8=A1=A8=E8=BE=BE=E5=BC=8F=E7=9A=84=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/nis/web/service/basics/AsnIpCfgService.java | 6 ++++-- src/main/resources/messages/message_ru.properties | 7 +++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/nis/web/service/basics/AsnIpCfgService.java b/src/main/java/com/nis/web/service/basics/AsnIpCfgService.java index 10d9ec8e2..117f5263d 100644 --- a/src/main/java/com/nis/web/service/basics/AsnIpCfgService.java +++ b/src/main/java/com/nis/web/service/basics/AsnIpCfgService.java @@ -444,7 +444,8 @@ public class AsnIpCfgService extends CrudService, AsnIpCfg> { SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); final SqlSession batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); try{ - data.entrySet().stream().forEach( enrty->{ + for(Entry> enrty:data.entrySet()) { + //data.entrySet().stream().forEach( enrty->{ Long asn=enrty.getKey();//ans group 的group id List asnIpCfgs=enrty.getValue(); for(int index = 0; index < asnIpCfgs.size();index++){ @@ -548,7 +549,8 @@ public class AsnIpCfgService extends CrudService, AsnIpCfg> { }else { throw new RuntimeException("isValid value is "+isValid); } - }); + //}); + } }finally { if(batchSqlSession != null){ batchSqlSession.close(); diff --git a/src/main/resources/messages/message_ru.properties b/src/main/resources/messages/message_ru.properties index 1323cfb06..fac54d252 100644 --- a/src/main/resources/messages/message_ru.properties +++ b/src/main/resources/messages/message_ru.properties @@ -1449,3 +1449,10 @@ hex_minlength_8=Please enter a hexadecimal string of length 8 hex_minlength_16=Please enter a hexadecimal string of length 16 need_input=Attributes need to be filled in max_input=Fill in at most four +no_need_input=Attributes no need to be filled in +close_link=Close Link +asn_group=ASN Group +can_not_edit_issued_ans_group=Can not edit valid ASN group +can_not_delete_asn_group_with_audited_ip=Can not delete ASN group with approved IP +organization=Organization +mismatch=Mismatch \ No newline at end of file