yx
2 years ago
5 changed files with 644 additions and 0 deletions
@ -0,0 +1,40 @@
@@ -0,0 +1,40 @@
|
||||
package com.ruoyi.code.camera.domain; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
import java.util.*; |
||||
|
||||
|
||||
@Data |
||||
public class LogInfo implements Serializable{ |
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
/** 记录时间 */ |
||||
private String cLogTime; |
||||
|
||||
/** 用户名 */ |
||||
private String cOperUserName; |
||||
|
||||
/** 主类型 */ |
||||
private String cMainType; |
||||
|
||||
/** 次类型 */ |
||||
private String cSubType; |
||||
|
||||
/** 远程ip */ |
||||
private String cRemoteIP; |
||||
|
||||
/** 通道号 */ |
||||
private String iChannel; |
||||
|
||||
/** 配置名称 */ |
||||
private String cConfigName; |
||||
|
||||
/** 网络适配 */ |
||||
private String cNetAdapter; |
||||
|
||||
/** 客户端类型 */ |
||||
private String cClientType; |
||||
|
||||
} |
@ -0,0 +1,477 @@
@@ -0,0 +1,477 @@
|
||||
package utils; |
||||
|
||||
import java.awt.EventQueue; |
||||
import java.awt.Toolkit; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.util.ArrayList; |
||||
import java.util.Calendar; |
||||
import java.util.List; |
||||
import java.util.Vector; |
||||
|
||||
import javax.swing.JFrame; |
||||
import javax.swing.JLabel; |
||||
import javax.swing.JOptionPane; |
||||
import javax.swing.JScrollPane; |
||||
import javax.swing.JTextField; |
||||
import javax.swing.table.DefaultTableModel; |
||||
|
||||
import com.alibaba.fastjson.JSON; |
||||
import com.ruoyi.code.camera.domain.LogInfo; |
||||
import com.ruoyi.common.utils.StringUtils; |
||||
import com.sun.jna.NativeLong; |
||||
import com.sun.jna.Pointer; |
||||
import com.sun.jna.ptr.IntByReference; |
||||
|
||||
import sdk.java.common.GlobalTool; |
||||
import sdk.java.lib.DataUtils; |
||||
import sdk.java.lib.netmanager.NetDefs; |
||||
import sdk.java.lib.netmanager.NetLib; |
||||
import sdk.java.lib.netmanager.NetEnums.EM_DEVICE_CFG_TYPE; |
||||
import sdk.java.lib.netmanager.NetStructs; |
||||
import sdk.java.lib.netmanager.NetStructs.STU_CFG_LOG; |
||||
import sdk.java.lib.netmanager.NetStructs.STU_CFG_LOG_INFO; |
||||
|
||||
import javax.swing.JButton; |
||||
import javax.swing.JTable; |
||||
|
||||
public class run_device_log_search implements ActionListener { |
||||
|
||||
private JFrame m_frame; |
||||
|
||||
private JTextField m_jtf_ip; |
||||
private JTextField m_jtf_port; |
||||
private JTextField m_jtf_username; |
||||
private JTextField m_jtf_password; |
||||
private JTable m_table_log_info; |
||||
private DefaultTableModel m_tableModel; |
||||
|
||||
private JButton m_btn_login; |
||||
private JButton m_btn_logout; |
||||
|
||||
private NativeLong m_loginID = new NativeLong(0); |
||||
private JButton m_btn_refresh; |
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/** |
||||
* Create the application. |
||||
*/ |
||||
public run_device_log_search() |
||||
{ |
||||
initialize(); |
||||
initilizeRyNetLib(); |
||||
} |
||||
|
||||
/** |
||||
* Initialize the contents of the frame. |
||||
*/ |
||||
private void initialize() |
||||
{ |
||||
m_frame = new JFrame(); |
||||
m_frame.setBounds(100, 100, 562, 457); |
||||
Toolkit kit = Toolkit.getDefaultToolkit(); |
||||
int x = kit.getScreenSize().width/2 - this.m_frame.getWidth()/2; |
||||
int y = kit.getScreenSize().height/2 - this.m_frame.getHeight()/2; |
||||
m_frame.setLocation(x, y); |
||||
m_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
||||
m_frame.getContentPane().setLayout(null); |
||||
|
||||
JLabel label = new JLabel("IP:"); |
||||
label.setBounds(10, 13, 79, 15); |
||||
m_frame.getContentPane().add(label); |
||||
|
||||
m_jtf_ip = new JTextField(); |
||||
m_jtf_ip.setColumns(10); |
||||
m_jtf_ip.setBounds(82, 10, 178, 21); |
||||
m_frame.getContentPane().add(m_jtf_ip); |
||||
|
||||
JLabel label_1 = new JLabel("Port:"); |
||||
label_1.setBounds(280, 13, 79, 15); |
||||
m_frame.getContentPane().add(label_1); |
||||
|
||||
m_jtf_port = new JTextField(); |
||||
m_jtf_port.setColumns(10); |
||||
m_jtf_port.setBounds(358, 10, 178, 21); |
||||
m_frame.getContentPane().add(m_jtf_port); |
||||
|
||||
JLabel label_2 = new JLabel("Username:"); |
||||
label_2.setBounds(10, 38, 79, 15); |
||||
m_frame.getContentPane().add(label_2); |
||||
|
||||
m_jtf_username = new JTextField(); |
||||
m_jtf_username.setColumns(10); |
||||
m_jtf_username.setBounds(81, 35, 179, 21); |
||||
m_frame.getContentPane().add(m_jtf_username); |
||||
|
||||
JLabel label_3 = new JLabel("Password:"); |
||||
label_3.setBounds(280, 38, 79, 15); |
||||
m_frame.getContentPane().add(label_3); |
||||
|
||||
m_jtf_password = new JTextField(); |
||||
m_jtf_password.setColumns(10); |
||||
m_jtf_password.setBounds(358, 35, 178, 21); |
||||
m_frame.getContentPane().add(m_jtf_password); |
||||
|
||||
m_btn_login = new JButton("登陆"); |
||||
m_btn_login.addActionListener(this); |
||||
m_btn_login.setBounds(340, 66, 93, 23); |
||||
m_frame.getContentPane().add(m_btn_login); |
||||
|
||||
m_btn_logout = new JButton("登出"); |
||||
m_btn_logout.addActionListener(this); |
||||
m_btn_logout.setEnabled(false); |
||||
m_btn_logout.setBounds(443, 66, 93, 23); |
||||
m_frame.getContentPane().add(m_btn_logout); |
||||
|
||||
Vector<String> columTitle = new Vector<String>(); |
||||
columTitle.addElement("记录时间"); |
||||
columTitle.addElement("操作用户名"); |
||||
columTitle.addElement("主日志类型"); |
||||
columTitle.addElement("次日志类型"); |
||||
columTitle.addElement("远程IP"); |
||||
columTitle.addElement("通道号"); |
||||
columTitle.addElement("配置名称"); |
||||
columTitle.addElement("网络适配器"); |
||||
columTitle.addElement("客户端类型"); |
||||
Vector<Vector<String>> data = new Vector<Vector<String>>(); |
||||
m_tableModel = new DefaultTableModel(data, columTitle); |
||||
|
||||
m_table_log_info = new JTable(m_tableModel); |
||||
m_table_log_info.setBounds(10, 99, 474, 309); |
||||
JScrollPane jspLogInfo = new JScrollPane(m_table_log_info); |
||||
jspLogInfo.setBounds(10, 99, 526, 276); |
||||
m_frame.getContentPane().add(jspLogInfo); |
||||
|
||||
m_btn_refresh = new JButton("刷新"); |
||||
m_btn_refresh.addActionListener(this); |
||||
m_btn_refresh.setBounds(443, 385, 93, 23); |
||||
m_frame.getContentPane().add(m_btn_refresh); |
||||
|
||||
refreshEnables(); |
||||
} |
||||
|
||||
private void initilizeRyNetLib() |
||||
{ |
||||
NetLib.instance.Net_Init(null, null); |
||||
NetLib.instance.Net_SetLogOption(3); |
||||
} |
||||
|
||||
protected void finalize() |
||||
{ |
||||
NetLib.instance.Net_Exit(); |
||||
} |
||||
|
||||
private boolean checkParams() |
||||
{ |
||||
String tmp = this.m_jtf_ip.getText().trim(); |
||||
if(tmp.isEmpty()) |
||||
{ |
||||
return false; |
||||
} |
||||
|
||||
tmp = this.m_jtf_port.getText().trim(); |
||||
if(tmp.isEmpty()) |
||||
{ |
||||
return false; |
||||
} |
||||
|
||||
tmp = this.m_jtf_username.getText().trim(); |
||||
if(tmp.isEmpty()) |
||||
{ |
||||
return false; |
||||
} |
||||
|
||||
tmp = this.m_jtf_password.getText().trim(); |
||||
if(tmp.isEmpty()) |
||||
{ |
||||
return false; |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
private void refreshEnables() |
||||
{ |
||||
boolean bLogin = this.m_loginID.longValue() != 0; |
||||
|
||||
this.m_btn_login.setEnabled(!bLogin); |
||||
this.m_btn_logout.setEnabled(bLogin); |
||||
this.m_btn_refresh.setEnabled(bLogin); |
||||
} |
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
private boolean onBtnLogin() |
||||
{ |
||||
if(checkParams()) |
||||
{ |
||||
int nPort = Integer.parseInt(m_jtf_port.getText()); |
||||
IntByReference nError = new IntByReference(0); |
||||
|
||||
this.m_loginID = NetLib.instance.Net_LoginDevice(m_jtf_ip.getText(), nPort, m_jtf_username.getText(), m_jtf_password.getText(), null, nError); |
||||
if(0 == this.m_loginID.longValue()) |
||||
{ |
||||
JOptionPane.showMessageDialog(null, "登陆失败", "提示", JOptionPane.ERROR_MESSAGE); |
||||
int error = NetLib.instance.Net_LastError(); |
||||
String strError = String.format("Net_LoginDevice fail, errorCode = %d", error); |
||||
System.out.println(strError); |
||||
return false; |
||||
} |
||||
else |
||||
{ |
||||
logInfoSearch(); |
||||
} |
||||
|
||||
refreshEnables(); |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
private void onBtnLogout() |
||||
{ |
||||
if(0 != this.m_loginID.longValue()) |
||||
{ |
||||
boolean bResult = NetLib.instance.Net_LogoutDevice(this.m_loginID); |
||||
if(!bResult) |
||||
{ |
||||
int error = NetLib.instance.Net_LastError(); |
||||
String strError = String.format("Net_GetAllFaceGroups fail, errorCode = %d", error); |
||||
System.out.println(strError); |
||||
return; |
||||
} |
||||
|
||||
this.m_loginID = new NativeLong(0); |
||||
refreshEnables(); |
||||
} |
||||
} |
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
private void onBtnRefresh() |
||||
{ |
||||
logInfoSearch(); |
||||
} |
||||
|
||||
private void logInfoSearch() |
||||
{ |
||||
this.m_tableModel.setRowCount(0); |
||||
|
||||
STU_CFG_LOG stuLogSearch = new STU_CFG_LOG(); |
||||
String strStartTime = "2000-01-01 00:00:00"; |
||||
byte[] tmpByArr = DataUtils.sdk_data_stringToByteArray(strStartTime, GlobalTool.getEncodeType()); |
||||
System.arraycopy(tmpByArr, 0, stuLogSearch.stuSearchCondition.cStartTime, 0, tmpByArr.length); |
||||
|
||||
Calendar cal = Calendar.getInstance(); |
||||
String strEndTime = String.format("%04d-%02d-%02d %02d:%02d:%02d", |
||||
cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH), |
||||
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); |
||||
tmpByArr = DataUtils.sdk_data_stringToByteArray(strEndTime, GlobalTool.getEncodeType()); |
||||
System.arraycopy(tmpByArr, 0, stuLogSearch.stuSearchCondition.cEndTime, 0, tmpByArr.length); |
||||
|
||||
int nBufferSize = stuLogSearch.size(); |
||||
Pointer pBuffer = DataUtils.sdk_data_createPtr(nBufferSize); |
||||
DataUtils.sdk_data_structureToPtr(stuLogSearch, pBuffer, 0); |
||||
|
||||
IntByReference nReturnSize = new IntByReference(0); |
||||
|
||||
while(true) |
||||
{ |
||||
// 循环重复调用,获取日志信息,直到获取到最新的一条
|
||||
boolean bResult = NetLib.instance.Net_GetDeviceCfg( |
||||
m_loginID, |
||||
EM_DEVICE_CFG_TYPE.DEVICE_CFG_LOGSEARCH, |
||||
0, |
||||
pBuffer, |
||||
nBufferSize, |
||||
nReturnSize, |
||||
6000); |
||||
|
||||
if(!bResult) |
||||
{ |
||||
int error = NetLib.instance.Net_LastError(); |
||||
String strError = String.format("Net_GetDeviceCfg fail, errorCode = %d", error); |
||||
System.out.println(strError); |
||||
break; |
||||
} |
||||
else |
||||
{ |
||||
DataUtils.sdk_data_ptrToStructure(pBuffer, stuLogSearch); |
||||
ui_showLogInfo(stuLogSearch); |
||||
|
||||
if(NetDefs.MAX_LOG_AMOUNT > stuLogSearch.stuLogResult.uCurAmount) |
||||
{ |
||||
// 此处判断成立,则表示已查完所有日志
|
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
private void ui_showLogInfo(STU_CFG_LOG stuLogSearch) |
||||
{ |
||||
for(int i=0; i<stuLogSearch.stuLogResult.uCurAmount; i++) |
||||
{ |
||||
Vector<String> rowData = new Vector<String>(); |
||||
STU_CFG_LOG_INFO stuLogInfo = stuLogSearch.stuLogResult.stuResult[i]; |
||||
|
||||
String value = DataUtils.sdk_data_byteArrayToString(stuLogInfo.cLogTime, GlobalTool.getEncodeType()); |
||||
rowData.addElement(value); |
||||
|
||||
value = DataUtils.sdk_data_byteArrayToString(stuLogInfo.cOperUserName, GlobalTool.getEncodeType()); |
||||
rowData.addElement(value); |
||||
|
||||
value = DataUtils.sdk_data_byteArrayToString(stuLogInfo.cMainType, GlobalTool.getEncodeType()); |
||||
rowData.addElement(value); |
||||
|
||||
value = DataUtils.sdk_data_byteArrayToString(stuLogInfo.cSubType, GlobalTool.getEncodeType()); |
||||
rowData.addElement(value); |
||||
|
||||
value = DataUtils.sdk_data_byteArrayToString(stuLogInfo.stuLogDetail.cRemoteIP, GlobalTool.getEncodeType()); |
||||
rowData.addElement(value); |
||||
|
||||
value = String.format("%d", stuLogInfo.stuLogDetail.iChannel); |
||||
rowData.addElement(value); |
||||
|
||||
value = DataUtils.sdk_data_byteArrayToString(stuLogInfo.stuLogDetail.cConfigName, GlobalTool.getEncodeType()); |
||||
rowData.addElement(value); |
||||
|
||||
value = DataUtils.sdk_data_byteArrayToString(stuLogInfo.stuLogDetail.cNetAdapter, GlobalTool.getEncodeType()); |
||||
rowData.addElement(value); |
||||
|
||||
value = DataUtils.sdk_data_byteArrayToString(stuLogInfo.stuLogDetail.cClientType, GlobalTool.getEncodeType()); |
||||
rowData.addElement(value); |
||||
|
||||
this.m_tableModel.addRow(rowData); |
||||
|
||||
} |
||||
} |
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) |
||||
{ |
||||
Object obj = e.getSource(); |
||||
if(obj == this.m_btn_login) |
||||
{ |
||||
onBtnLogin(); |
||||
} |
||||
else if(obj == this.m_btn_logout) |
||||
{ |
||||
onBtnLogout(); |
||||
} |
||||
else if(obj == this.m_btn_refresh) |
||||
{ |
||||
onBtnRefresh(); |
||||
} |
||||
} |
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/** |
||||
* Launch the application. |
||||
*/ |
||||
public static void main(String[] args) { |
||||
EventQueue.invokeLater(new Runnable() { |
||||
public void run() { |
||||
try { |
||||
run_device_log_search window = new run_device_log_search(); |
||||
window.m_frame.setVisible(true); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public List<LogInfo> logInfoSearchByTime(NativeLong loginID , String strStartTime, String strEndTime) |
||||
{ |
||||
|
||||
|
||||
STU_CFG_LOG stuLogSearch = new STU_CFG_LOG(); |
||||
|
||||
if(StringUtils.isEmpty(strStartTime)) |
||||
strStartTime = "2000-01-01 00:00:00"; |
||||
|
||||
byte[] tmpByArr = DataUtils.sdk_data_stringToByteArray(strStartTime, GlobalTool.getEncodeType()); |
||||
System.arraycopy(tmpByArr, 0, stuLogSearch.stuSearchCondition.cStartTime, 0, tmpByArr.length); |
||||
|
||||
Calendar cal = Calendar.getInstance(); |
||||
if (StringUtils.isEmpty(strEndTime)) |
||||
strEndTime = String.format("%04d-%02d-%02d %02d:%02d:%02d", |
||||
cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH), |
||||
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); |
||||
|
||||
tmpByArr = DataUtils.sdk_data_stringToByteArray(strEndTime, GlobalTool.getEncodeType()); |
||||
System.arraycopy(tmpByArr, 0, stuLogSearch.stuSearchCondition.cEndTime, 0, tmpByArr.length); |
||||
|
||||
int nBufferSize = stuLogSearch.size(); |
||||
Pointer pBuffer = DataUtils.sdk_data_createPtr(nBufferSize); |
||||
DataUtils.sdk_data_structureToPtr(stuLogSearch, pBuffer, 0); |
||||
|
||||
IntByReference nReturnSize = new IntByReference(0); |
||||
List<LogInfo> logInfoList=new ArrayList<>(); |
||||
while(true) |
||||
{ |
||||
// 循环重复调用,获取日志信息,直到获取到最新的一条
|
||||
boolean bResult = NetLib.instance.Net_GetDeviceCfg( |
||||
loginID, |
||||
EM_DEVICE_CFG_TYPE.DEVICE_CFG_LOGSEARCH, |
||||
0, |
||||
pBuffer, |
||||
nBufferSize, |
||||
nReturnSize, |
||||
6000); |
||||
|
||||
if(!bResult) |
||||
{ |
||||
int error = NetLib.instance.Net_LastError(); |
||||
String strError = String.format("Net_GetDeviceCfg fail, errorCode = %d", error); |
||||
System.out.println(strError); |
||||
break; |
||||
} |
||||
else |
||||
{ |
||||
DataUtils.sdk_data_ptrToStructure(pBuffer, stuLogSearch); |
||||
|
||||
|
||||
LogInfo logInfo = new LogInfo(); |
||||
for(int i=0; i<stuLogSearch.stuLogResult.uCurAmount; i++) |
||||
{ |
||||
|
||||
STU_CFG_LOG_INFO stuLogInfo = stuLogSearch.stuLogResult.stuResult[i]; |
||||
|
||||
String cLogTime = DataUtils.sdk_data_byteArrayToString(stuLogInfo.cLogTime, GlobalTool.getEncodeType()); |
||||
logInfo.setCLogTime(cLogTime); |
||||
|
||||
|
||||
String cOperUserName = DataUtils.sdk_data_byteArrayToString(stuLogInfo.cOperUserName, GlobalTool.getEncodeType()); |
||||
logInfo.setCOperUserName(cOperUserName); |
||||
|
||||
String cMainType = DataUtils.sdk_data_byteArrayToString(stuLogInfo.cMainType, GlobalTool.getEncodeType()); |
||||
logInfo.setCMainType(cMainType); |
||||
|
||||
String cSubType = DataUtils.sdk_data_byteArrayToString(stuLogInfo.cSubType, GlobalTool.getEncodeType()); |
||||
logInfo.setCSubType(cSubType); |
||||
|
||||
String cRemoteIP = DataUtils.sdk_data_byteArrayToString(stuLogInfo.stuLogDetail.cRemoteIP, GlobalTool.getEncodeType()); |
||||
logInfo.setCRemoteIP(cRemoteIP); |
||||
|
||||
String cClientType = DataUtils.sdk_data_byteArrayToString(stuLogInfo.stuLogDetail.cClientType, GlobalTool.getEncodeType()); |
||||
logInfo.setCClientType(cClientType); |
||||
|
||||
System.out.println(JSON.toJSON(logInfo)); |
||||
logInfoList.add(logInfo); |
||||
|
||||
} |
||||
|
||||
if(NetDefs.MAX_LOG_AMOUNT > stuLogSearch.stuLogResult.uCurAmount) |
||||
{ |
||||
// 此处判断成立,则表示已查完所有日志
|
||||
break; |
||||
} |
||||
} |
||||
} |
||||
return logInfoList; |
||||
} |
||||
} |
Loading…
Reference in new issue