1615 lines
69 KiB
VB.net
1615 lines
69 KiB
VB.net
Imports System.Data.Common
|
||
Imports System.Data.SQLite
|
||
Imports System.IO
|
||
Imports System.Text
|
||
Imports System.Threading
|
||
Imports Scripting
|
||
|
||
Public Class LogParsing
|
||
|
||
Enum Debugtype
|
||
log = 1
|
||
End Enum
|
||
Enum LNetComm
|
||
N_Send = 1 '网络发送数据
|
||
N_Recv '网络接收数据
|
||
End Enum
|
||
''' <summary>
|
||
''' 日志数据 - 设备通讯信息
|
||
''' </summary>
|
||
Enum LCOMM
|
||
ASK_TO_Reply = 1 '轮询回复数据
|
||
Send_Control 'RCU下发控制数据
|
||
Control_Reply 'RCU控制回复数据
|
||
Adjust_Baud '设备调整波特率
|
||
End Enum
|
||
''' <summary>
|
||
''' 温控器设备数据结构
|
||
''' </summary>
|
||
Class Device_Temp
|
||
Public on_off As Byte '开关机
|
||
Public mode As Byte '模式
|
||
Public fan As Byte '风速
|
||
Public valve As Byte '阀门
|
||
Public set_temp As Byte '设置温度
|
||
Public indoor_temp As Byte '室内温度
|
||
End Class
|
||
''' <summary>
|
||
''' BLV设备类型
|
||
''' </summary>
|
||
Enum BLV_DEVICE_TYPE
|
||
|
||
RS485_Switch = &H6 'T1开关
|
||
RS485_Temp = &H7 'T1温控器
|
||
RS485_Card = &HA 'T1插卡取电
|
||
RS485_IR_SEND = &HF '红外转发
|
||
RS485_RGB_Light = &H12 'RGB灯带
|
||
RS485_XiaoBao = &H13 '小宝语音
|
||
RS485_Time = &H23 '时间同步
|
||
|
||
C12Dimming = &H12 'BLV_Cx Dimming设备
|
||
C5Music = &H15 'BLV_Cx MUSIC设备
|
||
C5IO = &HF1 'BLV_Cx IO设备
|
||
PC_TEST = &HF2 'BLV_Cx PC测试
|
||
End Enum
|
||
''' <summary>
|
||
''' 日志数据 - 系统运行信息
|
||
''' </summary>
|
||
Enum LSYS
|
||
PHY_Change = 1 'PHY状态变化记录
|
||
DevInfo_Error '设备链表信息错误
|
||
API_State '升级状态
|
||
NET_ARGC '网络初始化参数
|
||
MQTT_ARGC 'MQTT参数
|
||
NetComm_State '网络通讯状态
|
||
NET_DafaultARGC '网络默认参数
|
||
End Enum
|
||
Enum LOG_DEV_State
|
||
Online = &H1
|
||
Offline = &H2
|
||
End Enum
|
||
''' <summary>
|
||
''' 日志数据类型
|
||
''' </summary>
|
||
Enum log_type
|
||
Launcher = 1 'Launcher信息记录
|
||
SYS_Record '系统运行信息记录
|
||
Device_COMM '设备通讯记录
|
||
Device_Online '设备通讯状态记录
|
||
Global_Parameters '所有设备状态定期记录 - 暂时还没用
|
||
Net_COMM '网络通讯记录 - 暂时还没定
|
||
Logic_Record '逻辑处理记录 - 暂时还没定
|
||
|
||
End Enum
|
||
''' <summary>
|
||
''' 日志数据 - Launcher记录信息
|
||
''' </summary>
|
||
Enum LLauncher
|
||
''' <summary>
|
||
''' 校验APP
|
||
''' </summary>
|
||
App_Check = 1
|
||
''' <summary>
|
||
''' 读取APP
|
||
''' </summary>
|
||
Read_App
|
||
''' <summary>
|
||
''' 写Flash
|
||
''' </summary>
|
||
Write_Flash
|
||
''' <summary>
|
||
''' 恢复出厂设置
|
||
''' </summary>
|
||
Factory_Reset
|
||
''' <summary>
|
||
''' 复位信号源
|
||
''' 0x00:软件复位
|
||
''' 0x01:上电复位
|
||
''' 0x02:看门狗复位
|
||
''' 0x03:外部手动复位
|
||
''' 0x05:从下电模式唤醒时的复位 - 通过WCHISPTool烧录后的复位
|
||
''' </summary>
|
||
Reset_Source
|
||
End Enum
|
||
Public Structure LogDataInfoStruct
|
||
Public MAC As String
|
||
Public Log_Valid As Boolean
|
||
Public Log_SN As UInt16
|
||
Public Log_Len As UInt16
|
||
Public Log_DateTime As Log_DateStruct
|
||
Public Log_TimeSpan As Int64
|
||
Public Log_Type As Byte
|
||
Public Log_Content() As Byte
|
||
Public HotelId As String
|
||
Public RoomId As String
|
||
Public CreateDateTime As String
|
||
Public LogFileName As String
|
||
Public parsing As List(Of String)
|
||
End Structure
|
||
Public Structure Log_DateStruct
|
||
Public year As UInt16
|
||
Public month As Byte
|
||
Public day As Byte
|
||
Public hour As Byte
|
||
Public minute As Byte
|
||
Public second As Byte
|
||
Public milliscond As UInt16
|
||
End Structure
|
||
''' <summary>
|
||
''' 文件名结构解析
|
||
''' </summary>
|
||
Public Structure fileNameInfoStruct
|
||
Public MAC As String
|
||
Public HotelId As String
|
||
Public RoomId As String
|
||
Public CreateDateTime As String
|
||
Public LogFileName As String
|
||
End Structure
|
||
''' <summary>
|
||
''' dat原始文件内容中的数据格式
|
||
''' </summary>
|
||
Enum LOG_DATA_FORMAT
|
||
Hand = 0
|
||
SN '日志每条数据增加序列号
|
||
Len
|
||
Len_8 '新增
|
||
Check
|
||
Date_H '年:5bit 月:5bit 日:5bit
|
||
Date_L
|
||
Type
|
||
Time8B '小时时间戳
|
||
Time16B
|
||
Time24B
|
||
Time32B
|
||
Data
|
||
End Enum
|
||
Private Shared Log_Data_Len_Max As Int16 = 512
|
||
Private g_Queue As Queue
|
||
Sub New()
|
||
InsertData = True
|
||
g_Queue = New Queue()
|
||
IsCreationDbFile()
|
||
' CreateTable("Insqlite_UserTest")
|
||
|
||
End Sub
|
||
Public Function ScanFile(g_StrPath As String)
|
||
|
||
|
||
End Function
|
||
|
||
Public Function Parsefile(path As String, strFileName As String) As Boolean
|
||
Dim MacDataList As New List(Of List(Of LogDataInfoStruct))
|
||
Dim ObjFileSystem As New FileSystemObject
|
||
Dim ErrMsg As String = ""
|
||
Dim AvalibFileList As New List(Of Scripting.File)
|
||
If IsFileReady(strFileName) = False Then Return False
|
||
|
||
Dim tmpFileInfo As New FileInfo(strFileName)
|
||
Dim LastModified As Integer = (Now - tmpFileInfo.LastWriteTime).Minutes
|
||
Dim ObjFileExtName As String = tmpFileInfo.Extension.ToUpper '获取文件后缀名
|
||
Dim FileSize As Long = tmpFileInfo.Length
|
||
|
||
If ObjFileExtName <> ".DAT" OrElse
|
||
FileSize = 0 OrElse
|
||
LastModified < 1 Then
|
||
If ObjFileExtName <> ".DAT" OrElse
|
||
FileSize = 0 Then
|
||
IO.File.Delete(strFileName) '删除非法文件
|
||
End If
|
||
Return False
|
||
End If
|
||
'文件内容读取到 objfile 中
|
||
'’ShowRichTextBox(RichTextBox1, ">>>read:" & strFileName)
|
||
Dim ObjFile As Scripting.File = ObjFileSystem.GetFile(strFileName)
|
||
'解析文件名,获取MAC、酒店id、房号、生成日期等信息
|
||
Dim tmpFileNameInfo As fileNameInfoStruct = GetFileNameInfo(ObjFile)
|
||
Dim tablenamelog As String = "TBL_Rcu_Log"
|
||
' If CreateTable(tablenamelog) Then
|
||
'解析文件内容,获取详细文件信息
|
||
Dim tmpDataInfoList As New List(Of LogDataInfoStruct) '读取文件内容保存在此变量
|
||
'’ShowRichTextBox(RichTextBox1, ">>>get:" & strFileName)
|
||
'Dim tmpResult As Boolean = GetFileInfoList(tmpFileNameInfo, ObjFile, tmpDataInfoList, ErrMsg)
|
||
|
||
'If tmpResult = False Then
|
||
' AddErrorFileToErrorfile(path, strFileName) '错误文件
|
||
' Return False '读取文件失败
|
||
'End If
|
||
|
||
'文件数据入队列了 【通过线程进行入库】
|
||
'g_Queue.Enqueue(tmpDataInfoList)
|
||
'文件解析合法
|
||
'’ShowRichTextBox(RichTextBox1, ">>>add:" & strFileName)
|
||
|
||
AddAvalibFileToErrorfile(path, strFileName)
|
||
'建表
|
||
|
||
'线程入库
|
||
' StartThread()
|
||
'Else
|
||
' Return False
|
||
'End If
|
||
|
||
|
||
Return True
|
||
End Function
|
||
|
||
Public Event Fileschedule(ispass As Integer, ismax As Boolean)
|
||
|
||
|
||
''' <summary>
|
||
''' 解析文件内容
|
||
''' </summary>
|
||
''' <param name="datFile"></param>
|
||
''' <returns></returns>
|
||
Private Function GetFileInfoList(ByVal datFileName As fileNameInfoStruct,
|
||
ByVal datFile As Scripting.File,
|
||
ByRef fileInfoList As List(Of LogDataInfoStruct),
|
||
ByRef ErrMsg As String) As Boolean
|
||
Dim result As Boolean = True
|
||
'确认文件是否存在
|
||
If IO.File.Exists(datFile.Path) = False Then
|
||
ErrMsg = "文件不存在"
|
||
Return False
|
||
End If
|
||
|
||
'读取文件内容
|
||
Dim file_data As Byte() = My.Computer.FileSystem.ReadAllBytes(datFile.Path)
|
||
Dim sampleArr_len As UInt32 = file_data.Length
|
||
Dim sampleArr_showlen As UInt32 = 0
|
||
Dim data_len As UInt16
|
||
Dim data_end As Byte
|
||
' Dim data_list As New List(Of Byte())
|
||
Dim Addnode As LogDataInfoStruct
|
||
'Dim wacth As New Stopwatch
|
||
'wacth.Restart() '开启计时
|
||
RaiseEvent Fileschedule(file_data.Length, False)
|
||
Try
|
||
While sampleArr_showlen < sampleArr_len
|
||
If file_data(sampleArr_showlen) = &HA5 And sampleArr_showlen + 3 < sampleArr_len Then '判断文件头
|
||
data_len = file_data(sampleArr_showlen + LOG_DATA_FORMAT.Len) Or (file_data(sampleArr_showlen + LOG_DATA_FORMAT.Len_8) << 8) '读取数据长度
|
||
|
||
RaiseEvent Fileschedule(sampleArr_showlen, True)
|
||
|
||
If data_len < Log_Data_Len_Max And sampleArr_showlen + data_len - 1 < file_data.Length Then
|
||
data_end = file_data(sampleArr_showlen + data_len - 1)
|
||
'Console.WriteLine($"Data Len :{data_len:d} Data :{data_end:X}")
|
||
If sampleArr_showlen + data_len <= sampleArr_len AndAlso file_data(sampleArr_showlen + data_len - 1) = &H5A Then '判断文件尾
|
||
|
||
Dim data_buff(data_len - 1) As Byte
|
||
' Dim data_string As String
|
||
|
||
Array.Copy(file_data, sampleArr_showlen, data_buff, 0, data_len)
|
||
sampleArr_showlen += data_len '数据偏移
|
||
If GetSumCheckMod(data_buff, data_len) = &H0 Then
|
||
'Console.WriteLine("Data Check Succ !\r\n")
|
||
|
||
'Parsing_a_piece_of_data(data_buff, show_form, DataGridView1)
|
||
|
||
' data_list.Add(data_buff) '保存一份数据,添加到列表中
|
||
|
||
If fileInfoList.Count = 0 Then
|
||
Addnode = File_Data_Parsing_To_Iten(datFileName, data_buff, Nothing)
|
||
Else
|
||
Addnode = File_Data_Parsing_To_Iten(datFileName, data_buff, fileInfoList.Item(fileInfoList.Count - 1))
|
||
End If
|
||
fileInfoList.Add(Addnode)
|
||
'data_string = BitConverter.ToString(data_buff)
|
||
'data_string = data_string.Replace("-", " ")
|
||
'Console.WriteLine(data_string)
|
||
Else
|
||
' AnalysisLog("Data Check Fail !\r\n")
|
||
Console.WriteLine("Data Check Fail !\r\n")
|
||
End If
|
||
Else
|
||
sampleArr_showlen += 1
|
||
' AnalysisLog("Data Len Fail!!! Now Len:" & sampleArr_showlen)
|
||
Console.WriteLine("Data Len Fail!!! Now Len:" & sampleArr_showlen)
|
||
result = False
|
||
End If
|
||
Else
|
||
sampleArr_showlen += 1
|
||
'AnalysisLog("Data Len Fail!!! Now Len:" & sampleArr_showlen)
|
||
result = False
|
||
Console.WriteLine("Data Len Error!!! " & sampleArr_showlen)
|
||
End If
|
||
Else
|
||
sampleArr_showlen += 1
|
||
result = False
|
||
End If
|
||
'delay(1)
|
||
'Application.DoEvents()
|
||
End While
|
||
RaiseEvent Fileschedule(sampleArr_len, True)
|
||
Catch ex As Exception
|
||
AdminLog.ApplicationLog.WriteErrorLog(ex)
|
||
End Try
|
||
|
||
'数据添加到列表
|
||
' fileInfoList = File_Data_Parsing_To_List(datFileName, data_list)
|
||
Return result
|
||
End Function
|
||
|
||
Public Function File_Data_Parsing_To_Iten(ByVal datFileName As fileNameInfoStruct, databuff() As Byte, lastdata As LogDataInfoStruct) As LogDataInfoStruct
|
||
Dim save_data As New LogDataInfoStruct
|
||
'Dim parsing_string As String
|
||
Dim hour_tick As Int32
|
||
Dim hour_temp As Int32
|
||
Dim data_date As Int32
|
||
'数据类型及长度等
|
||
'save_data.original_data = file_data(idx)
|
||
save_data.Log_SN = databuff(LOG_DATA_FORMAT.SN)
|
||
save_data.Log_Type = databuff(LOG_DATA_FORMAT.Type)
|
||
hour_temp = databuff(LOG_DATA_FORMAT.Len_8)
|
||
save_data.Log_Len = (databuff(LOG_DATA_FORMAT.Len) Or (hour_temp << 8)) - LOG_DATA_FORMAT.Data '数据长度
|
||
|
||
' If save_data.Log_Len > Log_Data_Len_Max Then
|
||
'save_data.len = Log_Data_Len_Max 数据长度超过数据最大长度
|
||
' Return tmpDataList
|
||
' End If
|
||
|
||
'日期
|
||
data_date = (databuff(LOG_DATA_FORMAT.Date_L) And &HFF) '记录时间
|
||
hour_temp = databuff(LOG_DATA_FORMAT.Date_H)
|
||
data_date = data_date Or (hour_temp << 8)
|
||
|
||
hour_tick = databuff(LOG_DATA_FORMAT.Time8B)
|
||
hour_temp = databuff(LOG_DATA_FORMAT.Time16B)
|
||
hour_tick = hour_tick Or (hour_temp << 8)
|
||
hour_temp = databuff(LOG_DATA_FORMAT.Time24B)
|
||
hour_tick = hour_tick Or (hour_temp << 16)
|
||
hour_temp = databuff(LOG_DATA_FORMAT.Time32B)
|
||
hour_tick = hour_tick Or (hour_temp << 24)
|
||
|
||
save_data.Log_DateTime.year = (data_date >> 10) And &H1F
|
||
save_data.Log_DateTime.month = (data_date >> 5) And &H1F
|
||
save_data.Log_DateTime.day = (data_date) And &H1F
|
||
|
||
'时间
|
||
save_data.Log_DateTime.hour = hour_tick \ 3600000
|
||
|
||
'防止24:00:00 溢出 Momo 2022-06-26 24:00:00
|
||
If save_data.Log_DateTime.hour >= 24 Then save_data.Log_DateTime.hour = 0
|
||
|
||
hour_temp = hour_tick Mod 3600000
|
||
save_data.Log_DateTime.minute = hour_temp \ 60000
|
||
hour_temp = hour_temp Mod 60000
|
||
save_data.Log_DateTime.second = hour_temp \ 1000
|
||
save_data.Log_DateTime.milliscond = hour_temp Mod 1000
|
||
|
||
|
||
'分离文件内容中的数据
|
||
Dim copy As UInt16 = save_data.Log_Len - 1
|
||
Dim parsing_data(copy - 1) As Byte
|
||
|
||
Array.Copy(databuff, LOG_DATA_FORMAT.Data, parsing_data, 0, copy)
|
||
|
||
save_data.Log_Content = parsing_data
|
||
|
||
'parsing_string = BitConverter.ToString(parsing_data)
|
||
'parsing_string = parsing_string.Replace("-", " ")
|
||
'Console.WriteLine($"parsing_string:{parsing_string}")
|
||
|
||
'parsing_string = $"Data SN:{save_data.Log_SN:d} TYPE:{save_data.Log_Type:d} Len:{save_data.Log_Len:d} data_date:{data_date:X} hour_tick:{hour_tick:X}"
|
||
' Console.WriteLine(parsing_string)
|
||
|
||
'解析数据内容
|
||
Dim Parsing_Param As New List(Of String)
|
||
Parsing_Data_Content(save_data.Log_Type, parsing_data, Parsing_Param) '解析
|
||
|
||
'判断Param参数,不够10个则补足
|
||
If Parsing_Param.Count > 0 Then
|
||
Dim len As Integer = 10 - Parsing_Param.Count
|
||
Dim par(len - 1) As String
|
||
Parsing_Param.AddRange(par)
|
||
End If
|
||
save_data.parsing = Parsing_Param
|
||
save_data.Log_TimeSpan = Get_Data_Time_Difference2(lastdata, save_data) '时间差
|
||
save_data.Log_Valid = True
|
||
save_data.HotelId = datFileName.HotelId
|
||
save_data.RoomId = datFileName.RoomId
|
||
save_data.CreateDateTime = datFileName.CreateDateTime
|
||
save_data.LogFileName = datFileName.LogFileName
|
||
save_data.MAC = datFileName.MAC
|
||
' Dim savedata As String = $"[HotelId:{save_data.HotelId }],{vbCrLf}[RoomId:{save_data.RoomId}],{vbCrLf}[LogFileName:{save_data.LogFileName }],{vbCrLf}[Log_SN:{save_data.Log_SN }],{vbCrLf}[Log_Len:{save_data.Log_SN}],{vbCrLf}[Log_DateTime:{ newtime_h(save_data).ToString("yyyy-MM-dd HH:mm:ss") }],{vbCrLf}[Log_TimeSpan:{save_data.Log_TimeSpan}],{vbCrLf}[Log_Type:{Parsing_Param}],{vbCrLf}[CreateDateTime:{save_data.CreateDateTime}],{vbCrLf}[LogFileName:{save_data.LogFileName }]"
|
||
' Console.WriteLine($"解析数据包({idx}):{vbCrLf}{savedata}")
|
||
' Console.WriteLine($"解析数据包({idx})")
|
||
Return save_data
|
||
End Function
|
||
|
||
Public Function File_Data_Parsing_To_List(ByVal datFileName As fileNameInfoStruct,
|
||
ByVal file_data As List(Of Byte())) As List(Of LogDataInfoStruct)
|
||
Dim data_num As Int32 = file_data.Count
|
||
|
||
Dim hour_tick As Int32
|
||
Dim hour_temp As Int32
|
||
Dim data_date As Int32
|
||
|
||
Console.WriteLine($"当前有效数据总包数:{data_num}")
|
||
|
||
Dim tmpDataList As New List(Of LogDataInfoStruct)
|
||
'Try
|
||
For idx = 0 To data_num - 1
|
||
Dim save_data As New LogDataInfoStruct
|
||
Dim parsing_string As String
|
||
'数据类型及长度等
|
||
'save_data.original_data = file_data(idx)
|
||
save_data.Log_SN = file_data(idx)(LOG_DATA_FORMAT.SN)
|
||
save_data.Log_Type = file_data(idx)(LOG_DATA_FORMAT.Type)
|
||
hour_temp = file_data(idx)(LOG_DATA_FORMAT.Len_8)
|
||
save_data.Log_Len = (file_data(idx)(LOG_DATA_FORMAT.Len) Or (hour_temp << 8)) - LOG_DATA_FORMAT.Data '数据长度
|
||
|
||
If save_data.Log_Len > Log_Data_Len_Max Then
|
||
'save_data.len = Log_Data_Len_Max 数据长度超过数据最大长度
|
||
' Return tmpDataList
|
||
End If
|
||
|
||
'日期
|
||
data_date = (file_data(idx)(LOG_DATA_FORMAT.Date_L) And &HFF) '记录时间
|
||
hour_temp = file_data(idx)(LOG_DATA_FORMAT.Date_H)
|
||
data_date = data_date Or (hour_temp << 8)
|
||
|
||
hour_tick = file_data(idx)(LOG_DATA_FORMAT.Time8B)
|
||
hour_temp = file_data(idx)(LOG_DATA_FORMAT.Time16B)
|
||
hour_tick = hour_tick Or (hour_temp << 8)
|
||
hour_temp = file_data(idx)(LOG_DATA_FORMAT.Time24B)
|
||
hour_tick = hour_tick Or (hour_temp << 16)
|
||
hour_temp = file_data(idx)(LOG_DATA_FORMAT.Time32B)
|
||
hour_tick = hour_tick Or (hour_temp << 24)
|
||
|
||
save_data.Log_DateTime.year = (data_date >> 10) And &H1F
|
||
save_data.Log_DateTime.month = (data_date >> 5) And &H1F
|
||
save_data.Log_DateTime.day = (data_date) And &H1F
|
||
|
||
'时间
|
||
save_data.Log_DateTime.hour = hour_tick \ 3600000
|
||
|
||
'防止24:00:00 溢出 Momo 2022-06-26 24:00:00
|
||
If save_data.Log_DateTime.hour >= 24 Then save_data.Log_DateTime.hour = 0
|
||
|
||
hour_temp = hour_tick Mod 3600000
|
||
save_data.Log_DateTime.minute = hour_temp \ 60000
|
||
hour_temp = hour_temp Mod 60000
|
||
save_data.Log_DateTime.second = hour_temp \ 1000
|
||
save_data.Log_DateTime.milliscond = hour_temp Mod 1000
|
||
|
||
|
||
'分离文件内容中的数据
|
||
Dim copy As UInt16 = save_data.Log_Len - 1
|
||
Dim parsing_data(copy - 1) As Byte
|
||
|
||
Array.Copy(file_data(idx), LOG_DATA_FORMAT.Data, parsing_data, 0, copy)
|
||
|
||
save_data.Log_Content = parsing_data
|
||
|
||
parsing_string = BitConverter.ToString(parsing_data)
|
||
parsing_string = parsing_string.Replace("-", " ")
|
||
'Console.WriteLine($"parsing_string:{parsing_string}")
|
||
|
||
parsing_string = $"Data SN:{save_data.Log_SN:d} TYPE:{save_data.Log_Type:d} Len:{save_data.Log_Len:d} data_date:{data_date:X} hour_tick:{hour_tick:X}"
|
||
' Console.WriteLine(parsing_string)
|
||
|
||
'解析数据内容
|
||
Dim Parsing_Param As New List(Of String)
|
||
Parsing_Data_Content(save_data.Log_Type, parsing_data, Parsing_Param) '解析
|
||
|
||
'判断Param参数,不够10个则补足
|
||
If Parsing_Param.Count > 0 Then
|
||
Dim len As Integer = 10 - Parsing_Param.Count
|
||
Dim par(len - 1) As String
|
||
Parsing_Param.AddRange(par)
|
||
End If
|
||
save_data.parsing = Parsing_Param
|
||
save_data.Log_TimeSpan = Get_Data_Time_Difference2(tmpDataList, save_data) '时间差
|
||
save_data.Log_Valid = True
|
||
save_data.HotelId = datFileName.HotelId
|
||
save_data.RoomId = datFileName.RoomId
|
||
save_data.CreateDateTime = datFileName.CreateDateTime
|
||
save_data.LogFileName = datFileName.LogFileName
|
||
save_data.MAC = datFileName.MAC
|
||
Dim savedata As String = $"[HotelId:{save_data.HotelId }],{vbCrLf}[RoomId:{save_data.RoomId}],{vbCrLf}[LogFileName:{save_data.LogFileName }],{vbCrLf}[Log_SN:{save_data.Log_SN }],{vbCrLf}[Log_Len:{save_data.Log_SN}],{vbCrLf}[Log_DateTime:{ newtime_h(save_data).ToString("yyyy-MM-dd HH:mm:ss") }],{vbCrLf}[Log_TimeSpan:{save_data.Log_TimeSpan}],{vbCrLf}[Log_Type:{Parsing_Param}],{vbCrLf}[CreateDateTime:{save_data.CreateDateTime}],{vbCrLf}[LogFileName:{save_data.LogFileName }]"
|
||
' Console.WriteLine($"解析数据包({idx}):{vbCrLf}{savedata}")
|
||
Console.WriteLine($"解析数据包({idx})")
|
||
' AnalysisLog($"解析数据包({idx}):{vbCrLf}{savedata}")
|
||
'将解析后的数据添加到列表中
|
||
tmpDataList.Add(save_data)
|
||
'delay(1)
|
||
Next
|
||
'Catch ex As Exception
|
||
' AdminLog.ApplicationLog.WriteErrorLog(ex)
|
||
'End Try
|
||
|
||
|
||
Return tmpDataList
|
||
End Function
|
||
Public Function newtime_h(data As LogDataInfoStruct) As DateTime
|
||
Dim temp_time As New Log_DateStruct
|
||
temp_time.year = data.Log_DateTime.year + 2000
|
||
|
||
If data.Log_DateTime.month = 0 Then
|
||
temp_time.month = data.Log_DateTime.month + 1
|
||
Else
|
||
temp_time.month = data.Log_DateTime.month
|
||
End If
|
||
|
||
If data.Log_DateTime.day = 0 Then
|
||
temp_time.day = data.Log_DateTime.day + 1
|
||
Else
|
||
temp_time.day = data.Log_DateTime.day
|
||
End If
|
||
temp_time.hour = data.Log_DateTime.hour
|
||
temp_time.minute = data.Log_DateTime.minute
|
||
temp_time.second = data.Log_DateTime.second
|
||
temp_time.milliscond = data.Log_DateTime.milliscond
|
||
Dim temp_date1 As New DateTime(temp_time.year, temp_time.month, temp_time.day, temp_time.hour, temp_time.minute, temp_time.second)
|
||
Return temp_date1
|
||
End Function
|
||
''' <summary>
|
||
''' 本条数据与上条数据的时间差
|
||
''' </summary>
|
||
''' <param name="data_list"></param>
|
||
''' <param name="data"></param>
|
||
''' <returns></returns>
|
||
Public Function Get_Data_Time_Difference2(data_list As List(Of LogDataInfoStruct), data As LogDataInfoStruct) As Int64
|
||
Dim temp_tick As Int64 = 0
|
||
Dim temp_time As New Log_DateStruct
|
||
Dim temp_time2 As New Log_DateStruct
|
||
Dim temp_num As Int32
|
||
|
||
temp_num = data_list.Count '获取当前数据列表中有多少条数据
|
||
'Console.WriteLine($"now list num:{temp_num:00}")
|
||
|
||
If temp_num >= 1 Then
|
||
|
||
temp_time.year = data.Log_DateTime.year + 2000
|
||
|
||
If data.Log_DateTime.month = 0 Then
|
||
temp_time.month = data.Log_DateTime.month + 1
|
||
Else
|
||
temp_time.month = data.Log_DateTime.month
|
||
End If
|
||
|
||
If data.Log_DateTime.day = 0 Then
|
||
temp_time.day = data.Log_DateTime.day + 1
|
||
Else
|
||
temp_time.day = data.Log_DateTime.day
|
||
End If
|
||
temp_time.hour = data.Log_DateTime.hour
|
||
temp_time.minute = data.Log_DateTime.minute
|
||
temp_time.second = data.Log_DateTime.second
|
||
temp_time.milliscond = data.Log_DateTime.milliscond
|
||
|
||
temp_time2.year = data_list(temp_num - 1).Log_DateTime.year + 2000
|
||
If data_list(temp_num - 1).Log_DateTime.month = 0 Then
|
||
temp_time2.month = data_list(temp_num - 1).Log_DateTime.month + 1
|
||
Else
|
||
temp_time2.month = data_list(temp_num - 1).Log_DateTime.month
|
||
End If
|
||
|
||
If data_list(temp_num - 1).Log_DateTime.day = 0 Then
|
||
temp_time2.day = data_list(temp_num - 1).Log_DateTime.day + 1
|
||
Else
|
||
temp_time2.day = data_list(temp_num - 1).Log_DateTime.day
|
||
End If
|
||
temp_time2.hour = data_list(temp_num - 1).Log_DateTime.hour
|
||
temp_time2.minute = data_list(temp_num - 1).Log_DateTime.minute
|
||
temp_time2.second = data_list(temp_num - 1).Log_DateTime.second
|
||
temp_time2.milliscond = data_list(temp_num - 1).Log_DateTime.milliscond
|
||
|
||
Dim tmpSn As UInt16 = data_list(temp_num - 1).Log_SN
|
||
Try
|
||
|
||
Dim temp_date1 As New DateTime(temp_time.year, temp_time.month, temp_time.day, temp_time.hour, temp_time.minute, temp_time.second)
|
||
Dim temp_date2 As New DateTime(temp_time2.year, temp_time2.month, temp_time2.day, temp_time2.hour, temp_time2.minute, temp_time2.second)
|
||
|
||
temp_tick = DateDiff(DateInterval.Second, temp_date2, temp_date1) 'temp_date1 - temp_date2
|
||
temp_tick = temp_tick * 1000 + temp_time.milliscond - temp_time2.milliscond
|
||
|
||
Catch ex As Exception
|
||
'ShowRichTextBox(RichTextBox1, " xxx 时间格式错误:tempDate1:" & tmpSn & "," & temp_time.year & "," & temp_time.month & "," & temp_time.day & "," & temp_time.hour & "," & temp_time.minute & "," & temp_time.second)
|
||
'ShowRichTextBox(RichTextBox1, " xxx 时间格式错误:tempDate2:" & tmpSn & "," & temp_time2.year & "," & temp_time2.month & "," & temp_time2.day & "," & temp_time2.hour & "," & temp_time2.minute & "," & temp_time2.second)
|
||
End Try
|
||
|
||
End If
|
||
|
||
Return temp_tick
|
||
End Function
|
||
Public Function Get_Data_Time_Difference2(lastdata As LogDataInfoStruct, data As LogDataInfoStruct) As Int64
|
||
Dim temp_tick As Int64 = 0
|
||
Dim temp_time As New Log_DateStruct
|
||
Dim temp_time2 As New Log_DateStruct
|
||
If IsNothing(lastdata) Then Return temp_tick
|
||
|
||
temp_time.year = data.Log_DateTime.year + 2000
|
||
|
||
If data.Log_DateTime.month = 0 Then
|
||
temp_time.month = data.Log_DateTime.month + 1
|
||
Else
|
||
temp_time.month = data.Log_DateTime.month
|
||
End If
|
||
|
||
If data.Log_DateTime.day = 0 Then
|
||
temp_time.day = data.Log_DateTime.day + 1
|
||
Else
|
||
temp_time.day = data.Log_DateTime.day
|
||
End If
|
||
temp_time.hour = data.Log_DateTime.hour
|
||
temp_time.minute = data.Log_DateTime.minute
|
||
temp_time.second = data.Log_DateTime.second
|
||
temp_time.milliscond = data.Log_DateTime.milliscond
|
||
|
||
temp_time2.year = lastdata.Log_DateTime.year + 2000
|
||
If lastdata.Log_DateTime.month = 0 Then
|
||
temp_time2.month = lastdata.Log_DateTime.month + 1
|
||
Else
|
||
temp_time2.month = lastdata.Log_DateTime.month
|
||
End If
|
||
|
||
If lastdata.Log_DateTime.day = 0 Then
|
||
temp_time2.day = lastdata.Log_DateTime.day + 1
|
||
Else
|
||
temp_time2.day = lastdata.Log_DateTime.day
|
||
End If
|
||
temp_time2.hour = lastdata.Log_DateTime.hour
|
||
temp_time2.minute = lastdata.Log_DateTime.minute
|
||
temp_time2.second = lastdata.Log_DateTime.second
|
||
temp_time2.milliscond = lastdata.Log_DateTime.milliscond
|
||
|
||
|
||
Try
|
||
|
||
Dim temp_date1 As New DateTime(temp_time.year, temp_time.month, temp_time.day, temp_time.hour, temp_time.minute, temp_time.second)
|
||
Dim temp_date2 As New DateTime(temp_time2.year, temp_time2.month, temp_time2.day, temp_time2.hour, temp_time2.minute, temp_time2.second)
|
||
|
||
temp_tick = DateDiff(DateInterval.Second, temp_date2, temp_date1) 'temp_date1 - temp_date2
|
||
temp_tick = temp_tick * 1000 + temp_time.milliscond - temp_time2.milliscond
|
||
|
||
Catch ex As Exception
|
||
'ShowRichTextBox(RichTextBox1, " xxx 时间格式错误:tempDate1:" & tmpSn & "," & temp_time.year & "," & temp_time.month & "," & temp_time.day & "," & temp_time.hour & "," & temp_time.minute & "," & temp_time.second)
|
||
'ShowRichTextBox(RichTextBox1, " xxx 时间格式错误:tempDate2:" & tmpSn & "," & temp_time2.year & "," & temp_time2.month & "," & temp_time2.day & "," & temp_time2.hour & "," & temp_time2.minute & "," & temp_time2.second)
|
||
End Try
|
||
|
||
|
||
|
||
Return temp_tick
|
||
End Function
|
||
|
||
Private Sub AddErrorFileToErrorfile(g_StrPath As String, strFileName As String)
|
||
Dim errorfilepath As String = g_StrPath & "\NG\"
|
||
If Not IO.Directory.Exists(errorfilepath) Then
|
||
IO.Directory.CreateDirectory(errorfilepath)
|
||
End If
|
||
Dim filen As String = strFileName.Substring(strFileName.LastIndexOf("\") + 1)
|
||
|
||
Dim bufa() As String = filen.Split("_")
|
||
errorfilepath = errorfilepath & bufa(0) & "\"
|
||
If Not IO.Directory.Exists(errorfilepath) Then
|
||
IO.Directory.CreateDirectory(errorfilepath)
|
||
End If
|
||
|
||
errorfilepath = errorfilepath & filen
|
||
'IO.File.Copy(strFileName, errorfilepath, True)
|
||
' IO.File.Delete(strFileName)
|
||
Try
|
||
My.Computer.FileSystem.MoveFile(strFileName, errorfilepath)
|
||
Catch ex As Exception
|
||
AdminLog.ApplicationLog.WriteErrorLog($"文件{strFileName}移动到{vbCrLf }{errorfilepath}{vbCrLf} 失败!{vbCrLf} 问题详情{vbCrLf }{ex.Message }")
|
||
End Try
|
||
End Sub
|
||
Private Sub AddAvalibFileToErrorfile(g_StrPath As String, strFileName As String)
|
||
Dim errorfilepath As String = g_StrPath & "\OK\"
|
||
If Not IO.Directory.Exists(errorfilepath) Then
|
||
IO.Directory.CreateDirectory(errorfilepath)
|
||
End If
|
||
Dim filen As String = strFileName.Substring(strFileName.LastIndexOf("\") + 1)
|
||
|
||
Dim bufa() As String = filen.Split("_")
|
||
errorfilepath = errorfilepath & bufa(0) & "\"
|
||
If Not IO.Directory.Exists(errorfilepath) Then
|
||
IO.Directory.CreateDirectory(errorfilepath)
|
||
End If
|
||
errorfilepath = errorfilepath & filen
|
||
'IO.File.Copy(strFileName, errorfilepath, True)
|
||
' IO.File.Delete(strFileName)
|
||
Try
|
||
My.Computer.FileSystem.MoveFile(strFileName, errorfilepath)
|
||
Catch ex As Exception
|
||
AdminLog.ApplicationLog.WriteErrorLog($"文件{strFileName}移动到{vbCrLf }{errorfilepath}{vbCrLf} 失败!{vbCrLf} 问题详情{vbCrLf }{ex.Message }")
|
||
End Try
|
||
|
||
|
||
End Sub
|
||
''' <summary>
|
||
''' Launcher类型数据解析
|
||
''' </summary>
|
||
''' <param name="data_content"></param>
|
||
''' <returns></returns>
|
||
Public Function Parsing_LogData_Launcher_Content(data_content As Byte(), ByRef Type_Param As List(Of String)) As List(Of String)
|
||
|
||
Dim Launcher_type As Byte = data_content(0)
|
||
Try
|
||
Select Case Launcher_type
|
||
Case LLauncher.App_Check
|
||
Type_Param.Add("校验APP")
|
||
|
||
If data_content(1) = &H0 Then
|
||
Type_Param.Add("相同")
|
||
ElseIf data_content(1) = &H1 Then
|
||
Type_Param.Add("APP版本号不同")
|
||
ElseIf data_content(1) = &H2 Then
|
||
Type_Param.Add("特征区CRC不同")
|
||
ElseIf data_content(1) = &H3 Then
|
||
Type_Param.Add("Flash APP地址错误")
|
||
ElseIf data_content(1) = &H4 Then
|
||
Type_Param.Add("Flash APP数据校验错误")
|
||
ElseIf data_content(1) = &H5 Then
|
||
Type_Param.Add("Flash APP标志未置位")
|
||
ElseIf data_content(1) = &H6 Then
|
||
Type_Param.Add("Flash 特征区的CRC校验错误")
|
||
ElseIf data_content(1) = &H7 Then
|
||
Type_Param.Add("MCU Flash数据校验错误")
|
||
ElseIf data_content(1) = &H8 Then
|
||
Type_Param.Add("MCU Flash的APP标志未置位")
|
||
ElseIf data_content(1) = &H9 Then
|
||
Type_Param.Add("MCU Flash特征区的CRC校验错误")
|
||
Else
|
||
Type_Param.Add("数据错误")
|
||
End If
|
||
|
||
|
||
Case LLauncher.Read_App
|
||
Type_Param.Add("读取APP")
|
||
If data_content(1) = &H0 Then
|
||
Type_Param.Add("成功")
|
||
ElseIf data_content(1) = &H1 Then
|
||
Type_Param.Add("失败")
|
||
End If
|
||
|
||
|
||
Case LLauncher.Reset_Source
|
||
Type_Param.Add("复位源")
|
||
If data_content(1) = &H0 Then
|
||
Type_Param.Add("软件复位")
|
||
ElseIf data_content(1) = &H1 Then
|
||
Type_Param.Add("上电复位")
|
||
ElseIf data_content(1) = &H2 Then
|
||
Type_Param.Add("看门狗超时复位")
|
||
ElseIf data_content(1) = &H3 Then
|
||
Type_Param.Add("外部手动复位")
|
||
ElseIf data_content(1) = &H5 Then
|
||
Type_Param.Add("从下电模式唤醒时的复位")
|
||
Else
|
||
Type_Param.Add($"复位源位置:{data_content(1):00}")
|
||
End If
|
||
Case Else
|
||
Type_Param.Add("数据类型错误")
|
||
End Select
|
||
Catch ex As Exception
|
||
AdminLog.ApplicationLog.WriteErrorLog(ex)
|
||
End Try
|
||
|
||
|
||
Return Type_Param
|
||
End Function
|
||
Private Function GetFileNameInfo(ByVal datFile As Scripting.File) As fileNameInfoStruct
|
||
Dim tmpFileInfo As New fileNameInfoStruct
|
||
Dim FileNameStr As String = datFile.Name
|
||
Dim Strbyte As String() = FileNameStr.Split("_")
|
||
Try
|
||
tmpFileInfo.MAC = Strbyte(0)
|
||
tmpFileInfo.HotelId = Strbyte(1)
|
||
tmpFileInfo.RoomId = Strbyte(2)
|
||
'tmpFileInfo.CreateDateTime = datFile.DateLastModified
|
||
tmpFileInfo.CreateDateTime = Format(datFile.DateLastModified, "yyyy-MM-dd HH:mm:ss")
|
||
|
||
tmpFileInfo.LogFileName = datFile.Name
|
||
Catch ex As Exception
|
||
AdminLog.ApplicationLog.WriteErrorLog(ex)
|
||
End Try
|
||
|
||
Return tmpFileInfo
|
||
End Function
|
||
''' <summary>
|
||
''' 解析数据内容
|
||
''' 按照数据类型来解析,用于加载表格时的数据显示 - 简单的内容解析
|
||
''' </summary>
|
||
''' <param name="data_content"></param>
|
||
''' <returns></returns>
|
||
Public Function Parsing_Data_Content(data_type As Byte, data_content As Byte(), ByRef Type_Param As List(Of String)) As List(Of String)
|
||
|
||
|
||
Dim dev_temp As New Device_Temp
|
||
Try
|
||
Select Case data_type
|
||
|
||
Case log_type.Launcher
|
||
Type_Param.Add("Launcher信息")
|
||
Type_Param = Parsing_LogData_Launcher_Content(data_content, Type_Param)
|
||
Case log_type.SYS_Record
|
||
Type_Param.Add("系统信息")
|
||
Type_Param = Parsing_LogData_SYS_Record_Content(data_content, Type_Param)
|
||
Case log_type.Device_COMM
|
||
Type_Param.Add("设备通讯")
|
||
Type_Param = Parsing_LogData_Device_COMM_Content(data_content, Type_Param)
|
||
Case log_type.Device_Online
|
||
Type_Param.Add("设备通讯状态")
|
||
Type_Param = Parsing_LogData_Device_Online_Content(data_content, Type_Param)
|
||
Case log_type.Global_Parameters
|
||
Type_Param.Add("定期保存设备信息")
|
||
Type_Param = Parsing_LogData_Global_Parameters_Content(data_content, Type_Param)
|
||
Case log_type.Net_COMM
|
||
Type_Param.Add("网络处理")
|
||
Type_Param = Parsing_LogData_Net_COMM_Content(data_content, Type_Param)
|
||
Case log_type.Logic_Record
|
||
Type_Param.Add("事件处理")
|
||
Type_Param = Parsing_LogData_Logic_Record_Content(data_content, Type_Param)
|
||
Case Else
|
||
Type_Param.Add("数据类型错误")
|
||
End Select
|
||
Catch ex As Exception
|
||
AdminLog.ApplicationLog.WriteErrorLog(ex)
|
||
End Try
|
||
|
||
|
||
Return Type_Param
|
||
End Function
|
||
''' <summary>
|
||
''' 事件处理记录信息解析
|
||
''' </summary>
|
||
''' <param name="data_content"></param>
|
||
''' <returns></returns>
|
||
Public Function Parsing_LogData_Logic_Record_Content(data_content As Byte(), ByRef Type_Param As List(Of String)) As List(Of String)
|
||
'Type_Param.Add("事件处理记录信息解析" & BitConverter.ToString(data_content).Replace("-", " "))
|
||
Dim net_type As Byte = data_content(0)
|
||
Select Case net_type
|
||
Case Debugtype.log
|
||
Type_Param.Add("调试日志")
|
||
Type_Param.Add(Encoding.GetEncoding("GBK").GetString(data_content, 1, data_content.Length - 1))
|
||
End Select
|
||
Return Type_Param
|
||
End Function
|
||
''' <summary>
|
||
''' 网络处理记录信息解析
|
||
''' </summary>
|
||
''' <param name="data_content"></param>
|
||
''' <returns></returns>
|
||
Public Function Parsing_LogData_Net_COMM_Content(data_content As Byte(), ByRef Type_Param As List(Of String)) As List(Of String)
|
||
|
||
Dim net_type As Byte = data_content(0)
|
||
Dim net_port As UInt16
|
||
Select Case net_type
|
||
Case LNetComm.N_Recv
|
||
Try
|
||
Type_Param.Add("网络接收记录")
|
||
Type_Param.Add($"套接字序号(1~4):{data_content(1)}")
|
||
Type_Param.Add($"接收IP:{data_content(2)}.{data_content(3)}.{data_content(4)}.{data_content(5)}")
|
||
net_port = data_content(7)
|
||
net_port <<= 8
|
||
net_port = net_port Or data_content(6)
|
||
Type_Param.Add($"接收端口Port:{net_port}")
|
||
Type_Param.Add("Data:" & BitConverter.ToString(data_content, 8).Replace("-", " "))
|
||
DataTypes.Check_Network_Data(data_content, Type_Param, True)
|
||
Catch ex As Exception
|
||
Type_Param.Add("网络数据解析错误:" & BitConverter.ToString(data_content, 1).Replace("-", " "))
|
||
End Try
|
||
|
||
Case LNetComm.N_Send
|
||
Try
|
||
Type_Param.Add("网络发送记录")
|
||
Type_Param.Add($"套接字序号(1~4):{data_content(1)}")
|
||
Type_Param.Add($"发送IP:{data_content(2)}.{data_content(3)}.{data_content(4)}.{data_content(5)}")
|
||
net_port = data_content(7)
|
||
net_port <<= 8
|
||
net_port = net_port Or data_content(6)
|
||
Type_Param.Add($"发送端口Port:{net_port}")
|
||
Type_Param.Add("Data:" & BitConverter.ToString(data_content, 8).Replace("-", " "))
|
||
DataTypes.Check_Network_Data(data_content, Type_Param, False)
|
||
Catch ex As Exception
|
||
Console.WriteLine("网络数据解析错误:长度不够")
|
||
Type_Param.Add("网络数据解析错误:" & BitConverter.ToString(data_content, 1).Replace("-", " "))
|
||
End Try
|
||
End Select
|
||
|
||
Return Type_Param
|
||
End Function
|
||
''' <summary>
|
||
''' 所有设备状态定期保存数据解析
|
||
''' </summary>
|
||
''' <param name="data_content"></param>
|
||
''' <returns></returns>
|
||
Public Function Parsing_LogData_Global_Parameters_Content(data_content As Byte(), ByRef Type_Param As List(Of String)) As List(Of String)
|
||
Type_Param.Add("所有设备状态定期保存数据解析" & BitConverter.ToString(data_content).Replace("-", " "))
|
||
Return Type_Param
|
||
End Function
|
||
''' <summary>
|
||
''' 设备通讯数据解析
|
||
''' </summary>
|
||
''' <param name="data_content"></param>
|
||
''' <returns></returns>
|
||
Public Function Parsing_LogData_Device_COMM_Content(data_content As Byte(), ByRef Type_Param As List(Of String)) As List(Of String)
|
||
Dim data_type As Byte = data_content(0)
|
||
Dim data_port As Byte = data_content(1)
|
||
Dim data_baud As UInt32
|
||
Dim data_buff(data_content.Length - 7) As Byte
|
||
|
||
Array.Copy(data_content, 6, data_buff, 0, data_content.Length - 6)
|
||
|
||
data_baud = data_content(5)
|
||
data_baud = (data_baud << 8) Or data_content(4)
|
||
data_baud = (data_baud << 8) Or data_content(3)
|
||
data_baud = (data_baud << 8) Or data_content(2)
|
||
Try
|
||
Select Case data_type
|
||
Case LCOMM.Adjust_Baud '设备切换通讯波特率
|
||
|
||
Type_Param.Add($"设备切换通讯波特率")
|
||
data_baud = data_content(6)
|
||
data_baud = (data_baud << 8) Or data_content(5)
|
||
data_baud = (data_baud << 8) Or data_content(4)
|
||
data_baud = (data_baud << 8) Or data_content(3)
|
||
|
||
Obtaining_The_Device_Type(data_content(1), Type_Param)
|
||
Type_Param.Add($" 设备地址:{data_content(2)}")
|
||
Type_Param.Add($" 切换波特率:{data_baud}" & vbCrLf)
|
||
|
||
|
||
Case LCOMM.ASK_TO_Reply '轮询回复数据
|
||
Type_Param.Add($"轮询回复数据")
|
||
Type_Param.Add($"Port_{data_port} ")
|
||
Type_Param.Add($"Baud:{data_baud} ")
|
||
Type_Param.Add("485通讯数据:" & BitConverter.ToString(data_buff).Replace("-", " "))
|
||
DataTypes.Parsing_485Data_type(data_buff, Type_Param)
|
||
|
||
Case LCOMM.Control_Reply 'RCU下发数据
|
||
Type_Param.Add($"RCU下发数据")
|
||
Type_Param.Add($"Port_{data_port}")
|
||
Type_Param.Add($"Baud:{data_baud}")
|
||
Type_Param.Add("485通讯数据:" & BitConverter.ToString(data_buff).Replace("-", " "))
|
||
DataTypes.Parsing_485Data_type(data_buff, Type_Param)
|
||
|
||
Case LCOMM.Send_Control 'RCU接收控制回复数据
|
||
Type_Param.Add($"RCU接收控制回复数据")
|
||
Type_Param.Add($"Port_{data_port}")
|
||
Type_Param.Add($"Baud:{data_baud}")
|
||
Type_Param.Add("485通讯数据:" & BitConverter.ToString(data_buff).Replace("-", " "))
|
||
DataTypes.Parsing_485Data_type(data_buff, Type_Param)
|
||
Case Else
|
||
Type_Param.Add("类型错误:" & BitConverter.ToString(data_content).Replace("-", " "))
|
||
End Select
|
||
Catch ex As Exception
|
||
AdminLog.ApplicationLog.WriteErrorLog(ex)
|
||
End Try
|
||
|
||
|
||
Return Type_Param
|
||
End Function
|
||
|
||
''' <summary>
|
||
''' 系统运行信息数据解析
|
||
''' </summary>
|
||
''' <param name="data_content"></param>
|
||
''' <returns></returns>
|
||
Public Function Parsing_LogData_SYS_Record_Content(data_content As Byte(), ByRef Type_Param As List(Of String)) As List(Of String)
|
||
|
||
'data_parsing = "系统运行数据解析" & BitConverter.ToString(data_content).Replace("-", " ")
|
||
|
||
Dim sys_type As Byte = data_content(0)
|
||
|
||
Try
|
||
Select Case sys_type
|
||
Case LSYS.PHY_Change
|
||
Type_Param.Add("网络PHY状态记录")
|
||
If data_content(1) = &H0 Then
|
||
Type_Param.Add("拔出")
|
||
ElseIf data_content(1) = &H1 Then
|
||
Type_Param.Add("插入")
|
||
Else
|
||
Type_Param.Add($"PHY状态错误: {data_content(1)}")
|
||
End If
|
||
|
||
Case LSYS.DevInfo_Error
|
||
Type_Param.Add("设备链表读取信息错误记录")
|
||
Type_Param.Add($"设备类型:{data_content(1)}")
|
||
Type_Param.Add($"地址:{data_content(2)}")
|
||
Type_Param.Add($"链表信息读取错误")
|
||
Case LSYS.API_State
|
||
Type_Param.Add("系统升级信息")
|
||
If data_content(1) = &H1 Then
|
||
Type_Param.Add("串口升级")
|
||
ElseIf data_content(1) = &H2 Then
|
||
Type_Param.Add("网络升级")
|
||
Else
|
||
Type_Param.Add("错误升级类型")
|
||
End If
|
||
|
||
If data_content(2) = &H1 Then
|
||
Type_Param.Add("写入成功")
|
||
ElseIf data_content(2) = &H2 Then
|
||
Type_Param.Add("写入失败")
|
||
ElseIf data_content(2) = &H3 Then
|
||
Type_Param.Add("文件块数错误")
|
||
ElseIf data_content(2) = &H4 Then
|
||
Type_Param.Add("MD5校验错误")
|
||
ElseIf data_content(2) = &H5 Then
|
||
Type_Param.Add("CRC校验错误")
|
||
ElseIf data_content(2) = &H6 Then
|
||
Type_Param.Add("跳转Launcher")
|
||
Else
|
||
Type_Param.Add("未知状态")
|
||
End If
|
||
|
||
Case LSYS.NET_ARGC
|
||
Type_Param.Add("网络初始化:")
|
||
Type_Param.Add($"IP : {data_content(1)}.{data_content(2)}.{data_content(3)}.{data_content(4)}")
|
||
Type_Param.Add($"MAC : {data_content(5)}.{data_content(6)}.{data_content(7)}.{data_content(8)}.{data_content(9)}.{data_content(10)}")
|
||
Type_Param.Add($"服务器IP : {data_content(11)}.{data_content(12)}.{data_content(13)}.{data_content(14)}")
|
||
Type_Param.Add($"TFTP服务器IP : {data_content(15)}.{data_content(16)}.{data_content(17)}.{data_content(18)}")
|
||
Type_Param.Add($"MQTT服务器IP : {data_content(19)}.{data_content(20)}.{data_content(21)}.{data_content(22)}")
|
||
Case LSYS.MQTT_ARGC
|
||
Type_Param.Add("MQTT初始化参数")
|
||
Type_Param.Add("还没解析")
|
||
Case LSYS.NetComm_State
|
||
Type_Param.Add("云端通讯状态")
|
||
If data_content(1) = &H0 Then
|
||
Type_Param.Add("服务器状态:离线")
|
||
ElseIf data_content(1) = &H1 Then
|
||
Type_Param.Add("本地服务器通信正常")
|
||
ElseIf data_content(1) = &H2 Then
|
||
Type_Param.Add("云端服务器通信正常")
|
||
Else
|
||
Type_Param.Add("云端通讯状态 - 未知状态")
|
||
End If
|
||
Case LSYS.NET_DafaultARGC
|
||
|
||
Type_Param.Add("网络初始化")
|
||
Type_Param.Add($"IP : {data_content(1)}.{data_content(2)}.{data_content(3)}.{data_content(4)}")
|
||
Type_Param.Add($"网关 : {data_content(5)}.{data_content(6)}.{data_content(7)}.{data_content(8)}")
|
||
Type_Param.Add($"子网掩码 : {data_content(9)}.{data_content(10)}.{data_content(11)}.{data_content(12)}")
|
||
Type_Param.Add($"DNS_IP : {data_content(13)}.{data_content(14)}.{data_content(15)}.{data_content(16)}")
|
||
|
||
If data_content(17) = &H1 Then
|
||
Type_Param.Add("网络ArgcFlag标志:PC设置参数")
|
||
Else
|
||
Type_Param.Add("网络ArgcFlag标志:主机默认参数")
|
||
End If
|
||
|
||
If data_content(18) = &H2 Then
|
||
Type_Param.Add("DHCP标志:关闭DHCP")
|
||
Else
|
||
Type_Param.Add("DHCP标志:启动DHCP")
|
||
End If
|
||
|
||
If data_content(19) = &H1 Then
|
||
Type_Param.Add("使用本地服务器标志")
|
||
Else
|
||
Type_Param.Add("使用云端服务器标志")
|
||
End If
|
||
Case Else
|
||
Type_Param.Add($"系统运行信息 类型错误{sys_type}")
|
||
End Select
|
||
Catch ex As Exception
|
||
AdminLog.ApplicationLog.WriteErrorLog(ex)
|
||
Type_Param.Add("数据异常----")
|
||
End Try
|
||
|
||
|
||
Return Type_Param
|
||
End Function
|
||
|
||
''' <summary>
|
||
''' 获取设备类型
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Function Obtaining_The_Device_Type(data As Byte, ByRef Type_Param As List(Of String)) As List(Of String)
|
||
Try
|
||
Select Case data
|
||
Case BLV_DEVICE_TYPE.C12Dimming
|
||
Type_Param.Add("设备类型:C12调光设备")
|
||
Case BLV_DEVICE_TYPE.C5IO
|
||
Type_Param.Add("设备类型:C5IO设备")
|
||
Case BLV_DEVICE_TYPE.C5Music
|
||
Type_Param.Add("设备类型:C5Music设备")
|
||
Case BLV_DEVICE_TYPE.PC_TEST
|
||
Type_Param.Add("设备类型:BLV PC TEST")
|
||
Case BLV_DEVICE_TYPE.RS485_Card
|
||
Type_Param.Add("设备类型:RS485 插卡取电")
|
||
Case BLV_DEVICE_TYPE.RS485_IR_SEND
|
||
Type_Param.Add("设备类型:RS485 红外转发")
|
||
Case BLV_DEVICE_TYPE.RS485_RGB_Light
|
||
Type_Param.Add("设备类型:RS485 RGB灯带")
|
||
Case BLV_DEVICE_TYPE.RS485_Switch
|
||
Type_Param.Add("设备类型:RS485 开关")
|
||
Case BLV_DEVICE_TYPE.RS485_Temp
|
||
Type_Param.Add("设备类型:RS485 温控器")
|
||
Case BLV_DEVICE_TYPE.RS485_Time
|
||
Type_Param.Add("设备类型:时间同步")
|
||
Case BLV_DEVICE_TYPE.RS485_XiaoBao
|
||
Type_Param.Add("设备类型:RS485 小宝语音")
|
||
Case Else
|
||
Type_Param.Add($"未知设备:{data}")
|
||
End Select
|
||
Catch ex As Exception
|
||
AdminLog.ApplicationLog.WriteErrorLog(ex)
|
||
End Try
|
||
|
||
|
||
Return Type_Param
|
||
End Function
|
||
''' <summary>
|
||
''' 设备通讯状态数据解析
|
||
''' </summary>
|
||
''' <param name="data_content"></param>
|
||
''' <returns></returns>
|
||
Public Function Parsing_LogData_Device_Online_Content(data_content As Byte(), ByRef Type_Param As List(Of String)) As List(Of String)
|
||
Dim dev_type As Byte = data_content(0)
|
||
Dim dev_addr As Byte = data_content(1)
|
||
Dim dev_state As Byte = data_content(2)
|
||
Try
|
||
Type_Param.Add("设备状态改变")
|
||
Type_Param = Obtaining_The_Device_Type(dev_type, Type_Param)
|
||
Type_Param.Add($"设备地址:{dev_addr} ")
|
||
If dev_state = LOG_DEV_State.Offline Then
|
||
Type_Param.Add("设备状态:离线")
|
||
ElseIf dev_state = LOG_DEV_State.Online Then
|
||
Type_Param.Add("设备状态:在线")
|
||
Else
|
||
Type_Param.Add($"状态错误:{dev_state}")
|
||
End If
|
||
Catch ex As Exception
|
||
AdminLog.ApplicationLog.WriteErrorLog(ex)
|
||
End Try
|
||
|
||
|
||
Return Type_Param
|
||
End Function
|
||
''' <summary>
|
||
''' 和校验取余数
|
||
''' 求Byte数组的和校验取余数
|
||
''' </summary>
|
||
''' <param name="dataPacket">Byte数组</param>
|
||
''' <returns></returns>
|
||
Public Function GetSumCheckMod(dataPacket As Byte(), datalen As Byte) As Byte
|
||
Dim sum As Integer
|
||
For idx = 0 To datalen - 1
|
||
sum += dataPacket(idx)
|
||
sum = sum And &HFF
|
||
Next
|
||
Dim sumMod As Byte = &HFF - sum
|
||
Return sumMod
|
||
End Function
|
||
''' <summary>
|
||
''' 判断文件是否被占用
|
||
''' </summary>
|
||
''' <param name="filepath"></param>
|
||
''' <returns></returns>
|
||
Public Function IsFileReady(ByVal filepath As String) As Boolean '检查文件是否正在被使用的函数
|
||
If IO.File.Exists(filepath) = False Then
|
||
Return True
|
||
Exit Function '如果filpath文件不存在,也就不没有被占用,应该返回true
|
||
End If
|
||
Try
|
||
IO.File.Open(filepath, FileMode.Open).Close()
|
||
Return True
|
||
Catch e As Exception
|
||
'MsgBox("Writing was disallowed, as expected: " & e.ToString())
|
||
Return False
|
||
End Try
|
||
End Function
|
||
|
||
#Region "线程入库"
|
||
Private g_FileDataToSql As Thread
|
||
'Private g_IsThread As Boolean = False
|
||
Public Sub StartThread()
|
||
If IsNothing(g_FileDataToSql) Then
|
||
g_FileDataToSql = New Thread(AddressOf FileDataToSqlRuning)
|
||
End If
|
||
If g_FileDataToSql.IsAlive Then Return
|
||
g_FileDataToSql = New Thread(AddressOf FileDataToSqlRuning)
|
||
g_FileDataToSql.Start()
|
||
End Sub
|
||
Public InsertData As Boolean
|
||
Public Sub FileDataToSqlRuning()
|
||
Dim tmpDataInfoList As List(Of LogDataInfoStruct)
|
||
Dim starttime As Date = Date.Now
|
||
Dim tsp As TimeSpan
|
||
If InsertData Then
|
||
While True
|
||
If g_Queue.Count > 0 Then
|
||
starttime = Date.Now
|
||
tmpDataInfoList = g_Queue.Dequeue()
|
||
'WriteDataToDB(tmpDataInfoList)
|
||
tsp = Now - starttime
|
||
Console.WriteLine("线程入库时间:" & tsp.TotalMilliseconds)
|
||
Else
|
||
Exit While
|
||
End If
|
||
End While
|
||
Else
|
||
g_Queue.Clear()
|
||
End If
|
||
|
||
|
||
End Sub
|
||
#End Region
|
||
|
||
#Region "数据库操作"
|
||
Public DbConnString As String = "Server=blv-cloud-db.mysql.rds.aliyuncs.com;Port=3307;Database=rculog;Uid=blv_rcu;Pwd=fnadiaJDIJ7546;charset=utf8;"
|
||
|
||
|
||
Public Function CreateTable(tadblname As String) As Boolean
|
||
|
||
Dim localConn As New DbConnectionStringBuilder
|
||
localConn.Add("Data Source", $"{Application.StartupPath }\LocalDB\LogService.db")
|
||
'localConn.Add("Password", "123456")
|
||
Dim LocalConnString As String = localConn.ToString()
|
||
Using db As New DbExecutor(DbExecutor.DbTypeEnum.Mysql, DbConnString)
|
||
Try
|
||
db.Open()
|
||
Dim CreateTableStr As String = MysqlCreateTablecolumn(tadblname)
|
||
db.ExecuteNonQuery(CreateTableStr)
|
||
db.Close()
|
||
Return True
|
||
Catch ex As Exception
|
||
' MsgBox($"Create Tableco Error, {ex.Message}")
|
||
AdminLog.ApplicationLog.WriteErrorLog($"Create Tableco Error, {ex.Message}")
|
||
db.Close()
|
||
Return False
|
||
End Try
|
||
End Using
|
||
End Function
|
||
|
||
''' <summary>
|
||
''' 拼接sql语句入库
|
||
''' </summary>
|
||
''' <param name="dataDict"></param>
|
||
''' <returns></returns>
|
||
Private Function WriteDataToDB(lstLogData As List(Of LogDataInfoStruct)) As Boolean
|
||
Dim LocalConnString As String
|
||
|
||
Dim localConn As New DbConnectionStringBuilder
|
||
localConn.Add("Data Source", $"{Application.StartupPath }\LocalDB\LogService.db")
|
||
'localConn.Add("Password", "123456")
|
||
LocalConnString = localConn.ToString()
|
||
Dim dic As New Dictionary(Of String, String)
|
||
Dim trans As DbTransaction
|
||
Dim Isauto As Integer = 0
|
||
Using db As New DbExecutor(DbExecutor.DbTypeEnum.Mysql, DbConnString)
|
||
Try
|
||
|
||
Try
|
||
db.Open()
|
||
Catch ex As Exception
|
||
Console.WriteLine($"Open local db Error, {ex.Message}")
|
||
' MsgBox($"Open local db Error, {ex.Message}")
|
||
AdminLog.ApplicationLog.WriteErrorLog($"Open database Error, {ex.Message}")
|
||
Return False
|
||
End Try
|
||
trans = db.BeginTransaction
|
||
For Each logDataInfo As LogDataInfoStruct In lstLogData
|
||
' AddLoadSqlRequestData(logDataInfo.MAC, logDataInfo, logDataInfo.parsing) '本地入库
|
||
'组插入键值对
|
||
dic.Clear()
|
||
InsertDictionary(dic, logDataInfo.MAC, logDataInfo, logDataInfo.parsing)
|
||
'添加测试记录
|
||
Dim tablenamelog As String = "TBL_Rcu_Log"
|
||
Dim cmdText As String = db.CmdHelper.Insert(tablenamelog, dic)
|
||
|
||
Try
|
||
db.ExecuteNonQuery(cmdText)
|
||
Catch ex As Exception
|
||
db.Close()
|
||
'MsgBox($"Insert Table error,{ex.Message} {vbCrLf }{cmdText}")
|
||
AdminLog.ApplicationLog.WriteErrorLog($"Insert Table error, {ex.Message}")
|
||
Return False
|
||
End Try
|
||
Isauto = Isauto + 1
|
||
If Isauto > 500 Then
|
||
trans.Commit()
|
||
trans = db.BeginTransaction
|
||
Isauto = 0
|
||
Thread.Sleep(1000)
|
||
End If
|
||
|
||
|
||
Next
|
||
trans.Commit()
|
||
|
||
db.Close()
|
||
|
||
Return True
|
||
Catch ex As Exception
|
||
Console.WriteLine($"写库失败:{ex.ToString }")
|
||
AdminLog.ApplicationLog.WriteErrorLog(ex)
|
||
db.Close()
|
||
Return False
|
||
End Try
|
||
End Using
|
||
End Function
|
||
Private _1970StartDateTime As DateTime = TimeZone.CurrentTimeZone.ToLocalTime(New System.DateTime(1970, 1, 1, 0, 0, 0, 0))
|
||
Public Function AddLoadSqlRequestData(strMacAdd As String, logDataInfo As LogDataInfoStruct, parsing_data As List(Of String))
|
||
|
||
'组插入键值对
|
||
Dim dic As New Dictionary(Of String, String)
|
||
InsertDictionary(dic, strMacAdd, logDataInfo, parsing_data)
|
||
|
||
|
||
|
||
|
||
Dim LocalConnString As String
|
||
|
||
Dim localConn As New DbConnectionStringBuilder
|
||
localConn.Add("Data Source", $"{Application.StartupPath }\LocalDB\LogService.db")
|
||
'localConn.Add("Password", "123456")
|
||
LocalConnString = localConn.ToString()
|
||
|
||
Using db As New DbExecutor(DbExecutor.DbTypeEnum.Mysql, DbConnString)
|
||
Try
|
||
db.Open()
|
||
Catch ex As Exception
|
||
Console.WriteLine($"Open local db Error, {ex.Message}")
|
||
MsgBox($"Open local db Error, {ex.Message}")
|
||
Return False
|
||
End Try
|
||
'建表
|
||
|
||
Dim CreateTableStr As String = $"Create Table if Not exists {strMacAdd} ( 'ID' integer COLLATE BINARY NOT NULL PRIMARY KEY AUTOINCREMENT );"
|
||
Try
|
||
db.ExecuteNonQuery(CreateTableStr)
|
||
Catch ex As Exception
|
||
db.Close()
|
||
MsgBox($"Create Table error,{ex.Message}")
|
||
Return False
|
||
End Try
|
||
'添加字段
|
||
Dim dtCol As DataTable
|
||
Try
|
||
dtCol = db.ExecuteDataTable($"Select * From {strMacAdd} ")
|
||
Catch ex As Exception
|
||
MsgBox($"Select Table error,{ex.Message}")
|
||
db.Close()
|
||
Return False
|
||
End Try
|
||
Dim length As Integer
|
||
Dim typeString As String
|
||
For Each colname As String In dic.Keys
|
||
If String.IsNullOrWhiteSpace(colname) Then Continue For '剔除无效数据库字段名
|
||
length = GetFiledLength(dic(colname).Length)
|
||
If length = -1 Then
|
||
Throw New Exception($"字段[{colname}] 超过最大长度2048的限制,无法入库!")
|
||
Else
|
||
typeString = $"varchar({length})"
|
||
End If
|
||
If dtCol.Columns.Contains(colname) Then '当前数据表是否已经存在对应列信息
|
||
|
||
Else
|
||
Try
|
||
db.ExecuteNonQuery(db.CmdHelper.DbAddCol("", strMacAdd, colname, typeString))
|
||
Catch ex As Exception
|
||
db.Close()
|
||
MsgBox($"Add column[{strMacAdd}] To Table error,{ex.Message}")
|
||
Return False
|
||
End Try '插入字段语句
|
||
|
||
End If
|
||
Next
|
||
|
||
'添加测试记录
|
||
Dim cmdText As String = db.CmdHelper.Insert(strMacAdd, dic)
|
||
|
||
Try
|
||
db.ExecuteNonQuery(cmdText)
|
||
Catch ex As Exception
|
||
db.Close()
|
||
MsgBox($"Insert Table error,{ex.Message}")
|
||
Return False
|
||
End Try
|
||
db.Close()
|
||
End Using
|
||
|
||
End Function
|
||
Public Sub IsCreationDbFile()
|
||
'If Not IO.File.Exists($"{Application.StartupPath }\LocalDB\LogService.db") Then
|
||
' If Not IO.Directory.Exists($"{Application.StartupPath }\LocalDB") Then
|
||
' IO.Directory.CreateDirectory($"{Application.StartupPath }\LocalDB")
|
||
' End If
|
||
' SQLiteConnection.CreateFile($"{Application.StartupPath }\LocalDB\LogService.db")
|
||
' Dim Main_dataBase_file As FileInfo = New FileInfo($"{Application.StartupPath }\LocalDB\LogService.db")
|
||
'End If
|
||
|
||
End Sub
|
||
Public Sub InsertDictionary(ByRef dic As Dictionary(Of String, String), strMacAdd As String, logDataInfo As LogDataInfoStruct, parsing_data As List(Of String))
|
||
Dim DataTimes As String = Parsing_DateTime(logDataInfo.Log_DateTime)
|
||
Dim data_string = BitConverter.ToString(logDataInfo.Log_Content).Replace("-", " ")
|
||
dic.Add("TimeSpan", CType(Math.Round((DateTime.Now - _1970StartDateTime).TotalSeconds, MidpointRounding.AwayFromZero), UInteger))
|
||
dic.Add("MAC".ToLower(), $"{strMacAdd}")
|
||
dic.Add("CreateDateTime".ToLower(), $"{logDataInfo.CreateDateTime}")
|
||
dic.Add("LogFileName".ToLower(), $"{logDataInfo.LogFileName}")
|
||
dic.Add("LogProjectid".ToLower(), $"{logDataInfo.HotelId}")
|
||
dic.Add("LogRoomid".ToLower(), $"{logDataInfo.RoomId}")
|
||
dic.Add("Log_Valid".ToLower(), $"{logDataInfo.Log_Valid}")
|
||
dic.Add("Log_SN".ToLower(), $"{logDataInfo.Log_SN}")
|
||
dic.Add("Log_Len".ToLower(), $"{logDataInfo.Log_Len}")
|
||
dic.Add("Log_DateTime".ToLower(), $"{DataTimes}")
|
||
dic.Add("Log_TimeSpan".ToLower(), $"{logDataInfo.Log_TimeSpan}")
|
||
dic.Add("Log_Type".ToLower(), $"{logDataInfo.Log_Type}")
|
||
dic.Add("Log_Content".ToLower(), $"{data_string}")
|
||
dic.Add("Type_Param_1".ToLower(), $"{parsing_data(0)}")
|
||
dic.Add("Type_Param_2".ToLower(), $"{parsing_data(1)}")
|
||
dic.Add("Type_Param_3".ToLower(), $"{parsing_data(2)}")
|
||
dic.Add("Type_Param_4".ToLower(), $"{parsing_data(3)}")
|
||
dic.Add("Type_Param_5".ToLower(), $"{parsing_data(4)}")
|
||
dic.Add("Type_Param_6".ToLower(), $"{parsing_data(5)}")
|
||
dic.Add("Type_Param_7".ToLower(), $"{parsing_data(6)}")
|
||
dic.Add("Type_Param_8".ToLower(), $"{parsing_data(7)}")
|
||
dic.Add("Type_Param_9".ToLower(), $"{parsing_data(8)}")
|
||
dic.Add("Type_Param_10".ToLower(), $"{parsing_data(9)}")
|
||
dic.Add("Remark".ToLower(), " ")
|
||
End Sub
|
||
|
||
Public Function MysqlCreateTablecolumn(strMacAdd As String)
|
||
Dim result As String
|
||
result = $"CREATE TABLE IF NOT EXISTS `{strMacAdd}` (
|
||
`ID` int NOT NULL AUTO_INCREMENT ,
|
||
`TimeSpan` varchar(254) DEFAULT NULL,
|
||
`mac` varchar(254) DEFAULT NULL,
|
||
`createdatetime` varchar(254) DEFAULT NULL,
|
||
`logfilename` varchar(254) DEFAULT NULL,
|
||
`logprojectid` varchar(254) DEFAULT NULL,
|
||
`logroomid` varchar(254) DEFAULT NULL,
|
||
`log_valid` varchar(254) DEFAULT NULL,
|
||
`log_sn` varchar(254) DEFAULT NULL,
|
||
`log_len` varchar(254) DEFAULT NULL,
|
||
`log_datetime` varchar(254) DEFAULT NULL,
|
||
`log_timespan` varchar(254) DEFAULT NULL,
|
||
`log_type` varchar(254) DEFAULT NULL,
|
||
`log_content` text DEFAULT NULL,
|
||
`type_param_1` text DEFAULT NULL,
|
||
`type_param_2` text DEFAULT NULL,
|
||
`type_param_3` text DEFAULT NULL,
|
||
`type_param_4` text DEFAULT NULL,
|
||
`type_param_5` text DEFAULT NULL,
|
||
`type_param_6` text DEFAULT NULL,
|
||
`type_param_7` text DEFAULT NULL,
|
||
`type_param_8` text DEFAULT NULL,
|
||
`type_param_9` text DEFAULT NULL,
|
||
`type_param_10` text DEFAULT NULL,
|
||
`remark` varchar(254) DEFAULT NULL,
|
||
PRIMARY KEY (`ID`)
|
||
) "
|
||
Return result
|
||
End Function
|
||
|
||
Public Function CreateTablecolumn(strMacAdd As String)
|
||
Dim result As String
|
||
result = $"Create Table if Not exists {strMacAdd} ( [ID] integer COLLATE BINARY NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||
[TimeSpan] varchar(16) COLLATE BINARY DEFAULT 'Null',
|
||
[mac] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[createdatetime] varchar(24) COLLATE BINARY DEFAULT 'Null',
|
||
[logfilename] varchar(40) COLLATE BINARY DEFAULT 'Null',
|
||
[logprojectid] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[logroomid] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[log_valid] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[log_sn] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[log_len] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[log_datetime] varchar(24) COLLATE BINARY DEFAULT 'Null',
|
||
[log_timespan] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[log_type] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[log_content] varchar(40) COLLATE BINARY DEFAULT 'Null',
|
||
[type_param_1] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[type_param_2] varchar(16) COLLATE BINARY DEFAULT 'Null',
|
||
[type_param_3] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[type_param_4] varchar(16) COLLATE BINARY DEFAULT 'Null',
|
||
[type_param_5] varchar(32) COLLATE BINARY DEFAULT 'Null',
|
||
[type_param_6] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[type_param_7] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[type_param_8] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[type_param_9] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[type_param_10] varchar(8) COLLATE BINARY DEFAULT 'Null',
|
||
[remark] varchar(8) COLLATE BINARY DEFAULT 'Null');"
|
||
Return result
|
||
End Function
|
||
Private Shared Function GetFiledLength(len As Integer) As Integer
|
||
Dim result As Integer
|
||
If len = 0 Then
|
||
result = 8
|
||
ElseIf len <= 2048 Then
|
||
If len Mod 8 = 0 Then
|
||
result = len
|
||
Else
|
||
result = ((len \ 8) + 1) * 8
|
||
End If
|
||
Else
|
||
result = -1
|
||
End If
|
||
Return result
|
||
End Function
|
||
''' <summary>
|
||
''' 字符串显示 DateTime
|
||
''' </summary>
|
||
''' <param name="data_list"></param>
|
||
''' <returns></returns>
|
||
Public Function Parsing_DateTime(data_list As Log_DateStruct) As String
|
||
Dim temp_string As String
|
||
temp_string = $"20{data_list.year:00}-{data_list.month:00}-{data_list.day:00} {data_list.hour:00}:{data_list.minute:00}:{data_list.second:00}.{data_list.milliscond:000}"
|
||
'temp_string = $"{data_list.hour:00}:{data_list.minute:00}:{data_list.second:00}.{data_list.milliscond:000}"
|
||
Return temp_string
|
||
End Function
|
||
#End Region
|
||
|
||
|
||
Public Function Gettablename() As List(Of String)
|
||
Dim dic As New List(Of String)
|
||
Dim localConn As New DbConnectionStringBuilder
|
||
localConn.Add("Data Source", $"{Application.StartupPath }\LocalDB\LogService.db")
|
||
'localConn.Add("Password", "123456")
|
||
Dim LocalConnString As String = localConn.ToString()
|
||
Dim CreateTableStr As String = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;"
|
||
Dim dtCol As DataTable
|
||
Using db As New DbExecutor(DbExecutor.DbTypeEnum.Sqlite, LocalConnString)
|
||
Try
|
||
db.Open()
|
||
|
||
dtCol = db.ExecuteDataTable(CreateTableStr)
|
||
|
||
For i As Integer = 1 To dtCol.Rows.Count - 1
|
||
If dtCol.Rows(i)(0).ToString.Contains("sqlite_") Then Continue For
|
||
dic.Add(dtCol.Rows(i)(0).ToString)
|
||
Next
|
||
db.Close()
|
||
Return dic
|
||
Catch ex As Exception
|
||
MsgBox($"Create Tableco Error, {ex.Message}")
|
||
db.Close()
|
||
Return Nothing
|
||
End Try
|
||
End Using
|
||
End Function
|
||
|
||
Public Function DeleteTable(tabname As String) As Boolean
|
||
Dim dic As New List(Of String)
|
||
Dim localConn As New DbConnectionStringBuilder
|
||
localConn.Add("Data Source", $"{Application.StartupPath }\LocalDB\LogService.db")
|
||
'localConn.Add("Password", "123456")
|
||
Dim LocalConnString As String = localConn.ToString()
|
||
Dim CreateTableStr As String = $"DROP TABLE '{tabname}';"
|
||
|
||
Using db As New DbExecutor(DbExecutor.DbTypeEnum.Sqlite, LocalConnString)
|
||
Try
|
||
db.Open()
|
||
|
||
db.ExecuteNonQuery(CreateTableStr)
|
||
|
||
|
||
db.Close()
|
||
Return True
|
||
Catch ex As Exception
|
||
MsgBox($"Create Tableco Error, {ex.Message}")
|
||
db.Close()
|
||
Return False
|
||
End Try
|
||
End Using
|
||
End Function
|
||
Public Function QueryDatabase(tabname As String) As DataTable
|
||
Dim dic As New List(Of String)
|
||
Dim localConn As New DbConnectionStringBuilder
|
||
localConn.Add("Data Source", $"{Application.StartupPath }\LocalDB\LogService.db")
|
||
'localConn.Add("Password", "123456")
|
||
Dim LocalConnString As String = localConn.ToString()
|
||
Dim CreateTableStr As String = $"DROP TABLE '{tabname}';"
|
||
Dim udt As DataTable
|
||
Using db As New DbExecutor(DbExecutor.DbTypeEnum.Sqlite, LocalConnString)
|
||
Try
|
||
db.Open()
|
||
|
||
udt = db.ExecuteDataTable($"Select * From {tabname} ")
|
||
|
||
db.Close()
|
||
Return udt
|
||
Catch ex As Exception
|
||
MsgBox($"Create Tableco Error, {ex.Message}")
|
||
db.Close()
|
||
Return Nothing
|
||
End Try
|
||
End Using
|
||
End Function
|
||
End Class
|