diff options
| author | 段冬梅 <[email protected]> | 2018-12-15 23:08:37 +0800 |
|---|---|---|
| committer | 段冬梅 <[email protected]> | 2018-12-15 23:08:37 +0800 |
| commit | 7f40c4aca4fd8372867d8b297af7ebc15f3aa57a (patch) | |
| tree | c2c16b830c55c6791e6e600c6ec2c1c87069a385 | |
| parent | 781ba434d023e3d22ca9a9d6a14e52edc7c558d9 (diff) | |
radius日志excel导出
6 files changed, 191 insertions, 48 deletions
diff --git a/src/main/java/com/nis/domain/log/BaseLogEntity.java b/src/main/java/com/nis/domain/log/BaseLogEntity.java index e1c53ff..01b94e2 100644 --- a/src/main/java/com/nis/domain/log/BaseLogEntity.java +++ b/src/main/java/com/nis/domain/log/BaseLogEntity.java @@ -1,34 +1,62 @@ package com.nis.domain.log;
+import com.google.gson.annotations.Expose;
import com.nis.domain.BaseEntity;
+import com.nis.util.excel.ExcelField;
public class BaseLogEntity<T> extends BaseEntity<T> {
private static final long serialVersionUID = 8321337584518281424L;
protected Integer cfgId;
+ @ExcelField(title="found_time",sort=5)
protected String foundTime; //发现时间,timestamp
+ @ExcelField(title="recv_time",sort=6)
protected String recvTime; //接收时间,timestamp
+ @ExcelField(title="transport_layer_protocol",dictType="LOG_PROTOCOL",sort=30)
protected String transProto; //协议类型,从字典LOG_PROTOCOL取值
+ @ExcelField(title="addr_type",dictType="IP_TYPE",sort=35)
protected Integer addrType; //ip地址类型,从字典IP_TYPE取值
+ @Expose
+ @ExcelField(title="server_ip",sort=40)
protected String dIp; //服务端ip地址
+ @Expose
+ @ExcelField(title="client_ip",sort=41)
protected String sIp; //客户端ip地址
+ @Expose
+ @ExcelField(title="server_port",sort=42)
protected String dPort; //服务端ip端口
+ @Expose
+ @ExcelField(title="client_port",sort=43)
protected String sPort; //客户端ip端口
protected Integer service; //配置表的serviceId
+ @ExcelField(title="entrance_id",dictType="ENTRANCE",sort=7)
protected Integer entranceId; //出入口编号
+ @ExcelField(title="deviceid",dictType="DEVICE",sort=45)
protected Integer deviceId; //串联设备编号
+ @ExcelField(title="direction",dictType="LOG_DIRECTION",sort=55)
protected Integer direction; //传输方向 0:域内->域外,1:域外->域内,从字典LOG_DIRECTION取值
+ @ExcelField(title="stream_type",dictType="LOG_STREAM_TYPE",sort=65)
protected Integer streamDir; //流类型 0:c2s;1:s2c;2:double,从字典LOG_STREAMTYPE取值
+ @ExcelField(title="clj_ip",sort=27)
protected String capIp; //处理机IP
+ @ExcelField(title="nest_addr_list",sort=66)
protected String addrList; //嵌套地址列表
+ @ExcelField(title="server_locate",sort=67)
protected String serverLocate;// 服务端地址定位信息
+ @ExcelField(title="client_locate",sort=68)
protected String clientLocate;// 客户端地址定位信息
+ @ExcelField(title="user_region",sort=76)
protected String userRegion; //用户自定义
+ @ExcelField(title="s_asn",sort=70)
protected String sAsn;//客户端ASN
+ @ExcelField(title="d_asn",sort=71)
protected String dAsn;//服务端ASN
+ @ExcelField(title="s_subscribe_id",sort=73)
protected String sSubscribeId;//客户端用户名
+ @ExcelField(title="d_subscribe_id",sort=74)
protected String dSubscribeId;//服务端用户名
+ @ExcelField(title="scene_file",sort=77)
protected String sceneFile;//现场日志文件地址
protected Integer functionId;
@@ -44,9 +72,13 @@ public class BaseLogEntity<T> extends BaseEntity<T> { protected String orderBy;//排序参数
//新增字段
+ @ExcelField(title="encap_type",dictType="ENCAP_TYPE",sort=50)
protected Integer encapType;//原始二层封装格式
+ @ExcelField(title="link_id",dictType="LINK",sort=47)
protected Integer linkId;//串联设备链路号
+ @ExcelField(title="inner_smac",sort=58)
protected String innerSmac;//MAC_IN_MAC的内层源MAC
+ @ExcelField(title="inner_dmac",sort=59)
protected String innerDmac;//MAC_IN_MAC的内层目标MAC
diff --git a/src/main/java/com/nis/domain/log/NtcCollectRadiusLog.java b/src/main/java/com/nis/domain/log/NtcCollectRadiusLog.java index 3f932f9..52924f0 100644 --- a/src/main/java/com/nis/domain/log/NtcCollectRadiusLog.java +++ b/src/main/java/com/nis/domain/log/NtcCollectRadiusLog.java @@ -1,12 +1,18 @@ package com.nis.domain.log;
+import com.nis.util.excel.ExcelField;
+
public class NtcCollectRadiusLog extends BaseLogEntity<NtcCollectRadiusLog> {
private static final long serialVersionUID = -4947912502754359817L;
+ @ExcelField(title="message_type",dictType="MESSAGE_TYPE",sort=10)
protected Integer code;
+ @ExcelField(title="nas_ip",sort=15)
protected String nasIp;
+ @ExcelField(title="framed_ip",sort=20)
protected String framedIp;
+ @ExcelField(title="log_user_name",sort=25)
protected String account;
public Integer getCode() {
return code;
diff --git a/src/main/java/com/nis/util/Reflections.java b/src/main/java/com/nis/util/Reflections.java index c811cb3..075420c 100644 --- a/src/main/java/com/nis/util/Reflections.java +++ b/src/main/java/com/nis/util/Reflections.java @@ -40,7 +40,25 @@ public class Reflections { public static Object invokeGetter(Object obj, String propertyName) { Object object = obj; for (String name : StringUtils.split(propertyName, ".")){ - String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name); + String getName=StringUtils.capitalize(name); + if(getName.equals("SIp")){ + getName="sIp"; + }else if(getName.equals("DIp")){ + getName="dIp"; + }else if(getName.equals("DPort")){ + getName="dPort"; + }else if(getName.equals("SPort")){ + getName="sPort"; + }else if(getName.equals("SAsn")){ + getName="sAsn"; + }else if(getName.equals("DAsn")){ + getName="dAsn"; + }else if(getName.equals("SSubscribeId")){ + getName="sSubscribeId"; + }else if(getName.equals("DSubscribeId")){ + getName="dSubscribeId"; + } + String getterMethodName = GETTER_PREFIX + getName; object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {}); } return object; diff --git a/src/main/java/com/nis/util/excel/ExportExcel.java b/src/main/java/com/nis/util/excel/ExportExcel.java index c74b8e1..0d34ebf 100644 --- a/src/main/java/com/nis/util/excel/ExportExcel.java +++ b/src/main/java/com/nis/util/excel/ExportExcel.java @@ -1910,7 +1910,7 @@ public class ExportExcel { val = getBasicInfo(ef.dictType(),map,valStr); }else{ //字典数据已做国际化处理 - String dict=DictUtils.getDictLabel(ef.dictType(), valStr, ""); + String dict=DictUtils.getDictLabel(ef.dictType(), valStr, valStr); //如果找不到字典国际化值,把字典本身作为默认值放进去,不然导出就是空了 val = msgProp.getProperty(dict,dict); } @@ -1997,7 +1997,7 @@ public class ExportExcel { val = getBasicInfo(ef.dictType(),map,valStr); }else{ //字典数据已做国际化处理 - String dict=DictUtils.getDictLabel(ef.dictType(), valStr, ""); + String dict=DictUtils.getDictLabel(ef.dictType(), valStr, valStr); //如果找不到字典国际化值,把字典本身作为默认值放进去,不然导出就是空了 val = msgProp.getProperty(dict,dict); } diff --git a/src/main/java/com/nis/web/controller/log/ntc/NtcCollectRadiusLogController.java b/src/main/java/com/nis/web/controller/log/ntc/NtcCollectRadiusLogController.java index 77506b1..891357a 100644 --- a/src/main/java/com/nis/web/controller/log/ntc/NtcCollectRadiusLogController.java +++ b/src/main/java/com/nis/web/controller/log/ntc/NtcCollectRadiusLogController.java @@ -1,26 +1,24 @@ package com.nis.web.controller.log.ntc;
+
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
-
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.nis.domain.FunctionServiceDict;
import com.nis.domain.Page;
import com.nis.domain.PageLog;
-import com.nis.domain.log.IrDnatLog;
-import com.nis.domain.log.IrSnatLog;
import com.nis.domain.log.NtcCollectRadiusLog;
import com.nis.domain.maat.LogRecvData;
import com.nis.util.Constants;
@@ -33,14 +31,21 @@ import com.nis.web.controller.BaseController; public class NtcCollectRadiusLogController extends BaseController {
@RequestMapping(value = {"list", ""})
- public String list(@ModelAttribute("log") IrSnatLog log, Model model, HttpServletRequest request, HttpServletResponse response) {
+ public String list(@ModelAttribute("log") NtcCollectRadiusLog log, Model model, HttpServletRequest request, HttpServletResponse response) {
try {
PageLog<NtcCollectRadiusLog> page = new PageLog<NtcCollectRadiusLog>(request, response);
Map<String, Object> params = new HashMap<String, Object>();
params.put("pageSize", page.getPageSize());
params.put("pageNo", page.getPageNo());
initLogSearchValue(log, params);
-
+ // 请求参数判断
+ if(StringUtils.isNotBlank(log.getNasIp())) {
+ params.put("searchNasIp", log.getNasIp());
+ }else if(StringUtils.isNotBlank(log.getFramedIp())) {
+ params.put("searchFramedIp", log.getFramedIp());
+ }else if(StringUtils.isNotBlank(log.getAccount())) {
+ params.put("searchAccount", log.getAccount());
+ }
List<FunctionServiceDict> serviceList = DictUtils.getFunctionServiceDictList(log.getFunctionId());
model.addAttribute("serviceList", serviceList);
@@ -71,4 +76,54 @@ public class NtcCollectRadiusLogController extends BaseController { return "/log/ntc/radiusLogList";
}
+ //radius配置导出
+ @RequestMapping(value = "exportRadius")
+ public void exportRadius(@ModelAttribute("log") NtcCollectRadiusLog log, Model model,String hColumns, HttpServletRequest request, HttpServletResponse response,RedirectAttributes redirectAttributes){
+ try {
+ //export data info
+ List<String> titleList=new ArrayList<String>();
+ Map<String, Class<?>> classMap=new HashMap<String, Class<?>>();
+ Map<String, List> dataMap=new HashMap<String, List>();
+ Map<String, String> noExportMap=new HashMap<String, String>();
+ //---------------------------
+ PageLog<NtcCollectRadiusLog> page = new PageLog<NtcCollectRadiusLog>(request, response);
+ page.setPageNo(1);
+ page.setPageSize(Constants.MAX_EXPORT_SIZE);
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("pageSize", page.getPageSize());
+ params.put("pageNo", page.getPageNo());
+ initLogSearchValue(log, params);
+ // 请求参数判断
+ if(StringUtils.isNotBlank(log.getNasIp())) {
+ params.put("searchNasIp", log.getNasIp());
+ }else if(StringUtils.isNotBlank(log.getFramedIp())) {
+ params.put("searchFramedIp", log.getFramedIp());
+ }else if(StringUtils.isNotBlank(log.getAccount())) {
+ params.put("searchAccount", log.getAccount());
+ }
+ List<NtcCollectRadiusLog> list=new ArrayList<NtcCollectRadiusLog>();
+ String url =Constants.LOG_BASE_URL + Constants.NTC_COLLECT_RADIUS_LOG;
+ String recv = HttpClientUtil.getMsg(url, params, request);
+ if (StringUtils.isNotBlank(recv)) {
+ Gson gson = new GsonBuilder().create();
+ LogRecvData<NtcCollectRadiusLog> fromJson = gson.fromJson(recv, new TypeToken<LogRecvData<NtcCollectRadiusLog>>(){}.getType());
+ if (fromJson.getStatus().intValue() == 200) {
+ Page<NtcCollectRadiusLog> data = fromJson.getData();
+ list= data.getList();
+ }
+ }
+ titleList.add("radius_log");
+ classMap.put("radius_log", NtcCollectRadiusLog.class);
+ String cfgIndexInfoNoExport=","+hColumns;
+ noExportMap.put("radius_log",cfgIndexInfoNoExport);
+ dataMap.put("radius_log",list);
+ /*}*/
+ this._export(model, request, response, redirectAttributes,"radius_log",titleList,classMap,dataMap,noExportMap);
+ } catch (Exception e) {
+ logger.error("radius export failed",e);
+ addMessage(redirectAttributes,"error","export_failed");
+ }
+ }
+
+
}
diff --git a/src/main/webapp/WEB-INF/views/log/ntc/radiusLogList.jsp b/src/main/webapp/WEB-INF/views/log/ntc/radiusLogList.jsp index 3108c54..5ed735e 100644 --- a/src/main/webapp/WEB-INF/views/log/ntc/radiusLogList.jsp +++ b/src/main/webapp/WEB-INF/views/log/ntc/radiusLogList.jsp @@ -7,6 +7,9 @@ </title>
<script>
$(document).ready(function() {
+
+ $("#searchForm [name='nasIp']").attr("placeholder","IPv4 0.0.0.0 or IPv6 ::");
+ $("#searchForm [name='framedIp']").attr("placeholder","IPv4 0.0.0.0 or IPv6 ::");
//reset
$("#resetBtn").on("click",function(){
$("select.selectpicker").each(function(){
@@ -24,7 +27,7 @@ filterActionInit();
- $("span[id^=close]").on("click",function(){
+ $("span[id^=close]").on("click",function(){
var closeId=$(this).attr("id");
var openId=$(this).attr("id").replace("close","open");
$("#"+closeId).hide();
@@ -69,7 +72,7 @@ </c:if>
</c:forEach>
</c:forEach>
- </form:select>
+ </form:seleact>
</div> --%>
<div class="pull-left">
<div class="input-group">
@@ -95,6 +98,17 @@ <button type="button" class="btn btn-default" id="filter-btn"> <spring:message code="filter"/><i class="fa fa-angle-double-down"></i></button>
</div>
<div class="pull-right">
+ <%-- <div class="btn-group">
+ <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
+ <i class="fa fa-wrench"></i> <spring:message code="export"></spring:message>
+ <i class="fa fa-angle-down"></i>
+ </button>
+ <ul class="dropdown-menu pull-right">
+ <li><sys:delRow url="${ctx}/log/ntc/radiusLogs/exportRadius?cfgid=" searchUrl="${ctx}/log/ntc/radiusLogs/list" id="contentTable" maxRow="10000" label="excel"></sys:delRow></li>
+ <li><sys:delRow url="${ctx}/log/ntc/radiusLogs/exportRadius?cfgid=" searchUrl="${ctx}/log/ntc/radiusLogs/list" id="contentTable" maxRow="10000" label="csv"></sys:delRow></li>
+ </ul>
+ </div> --%>
+ <sys:delRow url="${ctx}/log/ntc/radiusLogs/exportRadius?cfgid=" searchUrl="${ctx}/log/ntc/radiusLogs/list" id="contentTable" maxRow="10000" label="export"></sys:delRow>
<a class="btn btn-icon-only btn-default setfields tooltips"
data-container="body" data-placement="top" data-original-title=<spring:message code="custom_columns"/> href="javascript:;">
<i class="icon-wrench"></i>
@@ -164,11 +178,29 @@ </div>
</div>
<div class="row">
- <div class="col-md-2">
+ <%-- <div class="col-md-2">
<label><spring:message code="cfg_id"></spring:message>:</label>
<input name="cfgId" type="text" class="form-control logCfgId number" value="${log.cfgId }"/>
+ </div> --%>
+ <div class="col-md-2">
+ <div class="form-group">
+ <label><spring:message code="nas_ip"></spring:message>:</label>
+ <input name="nasIp" type="text" class="form-control" value="${log.nasIp }"/>
</div>
- </div>
+ </div>
+ <div class="col-md-2">
+ <div class="form-group">
+ <label><spring:message code="framed_ip"></spring:message>:</label>
+ <input name="framedIp" type="text" class="form-control " value="${log.framedIp }"/>
+ </div>
+ </div>
+ <div class="col-md-2">
+ <div class="form-group">
+ <label><spring:message code="log_user_name"></spring:message>:</label>
+ <input name="account" type="text" class="form-control " value="${log.account }"/>
+ </div>
+ </div>
+ </div>
</div>
<!-- /筛选搜索内容栏 结束-->
</form:form>
@@ -180,42 +212,42 @@ <thead>
<tr>
<th><spring:message code="log"/></th>
- <th class="sort-column cfg_id " isVisible="false" ><spring:message code="cfg_id"/></th>
- <th class="sort-column service" isVisible="false"><spring:message code="action"/></th>
- <th class="sort-column found_time"><spring:message code="found_time"/></th>
- <th class="sort-column recv_time" isVisible="false"><spring:message code="recv_time"/></th>
- <th class="sort-column entrance_id" isVisible="false"><spring:message code="entrance_id"/></th>
+ <%-- <th class="sort-column cfg_id " isVisible="false" ><spring:message code="cfg_id"/></th>
+ <th class="sort-column service" isVisible="false"><spring:message code="action"/></th> --%>
+ <th class="sort-column found_time" column="" ><spring:message code="found_time"/></th>
+ <th class="sort-column recv_time" isVisible="false" column="recv_time"><spring:message code="recv_time"/></th>
+ <th class="sort-column entrance_id" isVisible="false" column="entrance_id"><spring:message code="entrance_id"/></th>
- <th class="sort-column code" ><spring:message code="message_type"/></th>
- <th class="sort-column nas_ip"><spring:message code="nas_ip"/></th>
- <th class="sort-column framed_ip"><spring:message code='framed_ip'/></th>
- <th class="sort-column account"><spring:message code="log_user_name"/></th>
+ <th class="sort-column code" column="message_type"><spring:message code="message_type"/></th>
+ <th class="sort-column nas_ip" column="nas_ip"><spring:message code="nas_ip"/></th>
+ <th class="sort-column framed_ip" column="framed_ip"><spring:message code='framed_ip'/></th>
+ <th class="sort-column account" column="log_user_name"><spring:message code="log_user_name"/></th>
- <th class="sort-column cap_ip" isVisible="false"><spring:message code="clj_ip"/></th>
- <th class="sort-column trans_proto"><spring:message code="transport_layer_protocol"/></th>
- <th class="sort-column addr_type"><spring:message code='addr_type'/></th>
- <th class="sort-column d_ip"><spring:message code="server_ip"/></th>
- <th class="sort-column s_ip"><spring:message code="client_ip"/></th>
- <th class="sort-column d_port"><spring:message code="server_port"/></th>
- <th class="sort-column s_port"><spring:message code="client_port"/></th>
- <th class="sort-column device_id" isVisible="false"><spring:message code="deviceid"/></th>
- <th class="sort-column link_id" isVisible="false"><spring:message code="link_id"/></th>
- <th class="sort-column encap_type"><spring:message code="encap_type"/></th>
- <th class="sort-column direction"><spring:message code="direction"/></th>
- <th class="sort-column inner_smac"><spring:message code="inner_smac"/></th>
- <th class="sort-column inner_dmac"><spring:message code="inner_dmac"/></th>
- <th class="sort-column stream_dir"><spring:message code="stream_type"/></th>
+ <th class="sort-column cap_ip" isVisible="false" column="clj_ip"><spring:message code="clj_ip"/></th>
+ <th class="sort-column trans_proto" column="transport_layer_protocol"><spring:message code="transport_layer_protocol"/></th>
+ <th class="sort-column addr_type" column="addr_type"><spring:message code='addr_type'/></th>
+ <th class="sort-column d_ip" column="server_ip"><spring:message code="server_ip"/></th>
+ <th class="sort-column s_ip" column="client_ip"><spring:message code="client_ip"/></th>
+ <th class="sort-column d_port" column="server_port"><spring:message code="server_port"/></th>
+ <th class="sort-column s_port" column="client_port"><spring:message code="client_port"/></th>
+ <th class="sort-column device_id" isVisible="false" column="deviceid"><spring:message code="deviceid"/></th>
+ <th class="sort-column link_id" isVisible="false" column="link_id"><spring:message code="link_id"/></th>
+ <th class="sort-column encap_type" column="encap_type"><spring:message code="encap_type"/></th>
+ <th class="sort-column direction" column="direction"><spring:message code="direction"/></th>
+ <th class="sort-column inner_smac" column="inner_smac"><spring:message code="inner_smac"/></th>
+ <th class="sort-column inner_dmac" column="inner_dmac"><spring:message code="inner_dmac"/></th>
+ <th class="sort-column stream_dir" column="stream_type"><spring:message code="stream_type"/></th>
- <th class="sort-column addr_list"><spring:message code="nest_addr_list"/></th>
- <th class="sort-column server_locate"><spring:message code='server_locate'/></th>
- <th class="sort-column client_locate"><spring:message code='client_locate'/></th>
- <th class="sort-column s_asn" isVisible="false"><spring:message code='s_asn'/></th>
- <th class="sort-column d_asn" isVisible="false"><spring:message code='d_asn'/></th>
- <th class="sort-column s_subscribe_id" isVisible="false"><spring:message code='s_subscribe_id'/></th>
- <th class="sort-column d_subscribe_id" isVisible="false"><spring:message code='d_subscribe_id'/></th>
- <th class="sort-column user_region" isVisible="false"><spring:message code='user_region'/></th>
- <c:if test="${fns:getUser().isAdmin()}"><th class="sort-column scene_file"><spring:message code='scene_file'/></th></c:if>
+ <th class="sort-column addr_list" column="nest_addr_list"><spring:message code="nest_addr_list"/></th>
+ <th class="sort-column server_locate" column="server_locate"><spring:message code='server_locate'/></th>
+ <th class="sort-column client_locate" column="client_locate"><spring:message code='client_locate'/></th>
+ <th class="sort-column s_asn" isVisible="false" column="s_asn"><spring:message code='s_asn'/></th>
+ <th class="sort-column d_asn" isVisible="false" column="d_asn"><spring:message code='d_asn'/></th>
+ <th class="sort-column s_subscribe_id" isVisible="false" column="s_subscribe_id"><spring:message code='s_subscribe_id'/></th>
+ <th class="sort-column d_subscribe_id" isVisible="false" column="d_subscribe_id"><spring:message code='d_subscribe_id'/></th>
+ <th class="sort-column user_region" isVisible="false" column="user_region"><spring:message code='user_region'/></th>
+ <c:if test="${fns:getUser().isAdmin()}"><th class="sort-column scene_file" column="scene_file"><spring:message code='scene_file'/></th></c:if>
</tr>
</thead>
<tbody>
@@ -225,7 +257,7 @@ <%-- <span id="open${status.index}" class="log-open-cfg" compileId="${log.cfgId }"> ▷ </span><span style="display: none" id="close${status.index}" > ▼ </span> --%>
<a href="javascript:void(0)" name="viewLogInfo" ><i class="icon-book-open"></i></a>
</td>
- <td>${log.cfgId }</td>
+ <%-- <td>${log.cfgId }</td>
<td>
<c:set var="actions">${log.action }</c:set>
<c:forEach items="${fns:getDictList('SERVICE_ACTION')}" var="dict">
@@ -234,7 +266,7 @@ </c:if>
</c:forEach>
<spring:message code="${actions}"/>
- </td>
+ </td> --%>
<td>${log.foundTime }</td>
<td>${log.recvTime }</td>
<td>
|
