This repository has been archived on 2025-11-27. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
AUTS_OLD/UTS_Core/UTSModule/Service/AppRegister.vb

392 lines
14 KiB
VB.net
Raw Normal View History

2024-03-11 16:32:52 +08:00
Imports System.Text
Imports UTS_Core.Database
Imports UTS_Core.UTSModule.DbConnect
Imports UTS_Core.UTSModule.DbTableModel.Manage
Namespace UTSModule.Service
Public Class AppRegister
Implements IDisposable
''' <summary>
''' 当前App所属服务索引
''' </summary>
''' <returns></returns>
Public ReadOnly Property ServiceIndex As Integer
''' <summary>
''' 当前App名称
''' </summary>
''' <returns></returns>
Public ReadOnly Property AppName As String
''' <summary>
''' 当前App版本
''' </summary>
''' <returns></returns>
Public ReadOnly Property AppVersion As String
''' <summary>
''' 当前App运行信息
''' </summary>
''' <returns></returns>
Public Property AppMsg As String
''' <summary>
''' 当前App状态默认0为空闲
''' </summary>
''' <returns></returns>
Public Property AppStatus As Integer
Private ReadOnly _logLock As Object = New Object()
Private ReadOnly _logQueue As New Queue(Of Dictionary(Of String, String))
Enum LogTypeEnum
''' <summary>
''' 调试信息
''' </summary>
Debug
''' <summary>
''' 流程信息
''' </summary>
Info
''' <summary>
''' 警告信息
''' </summary>
Warn
''' <summary>
''' 错误信息
''' </summary>
[Error]
''' <summary>
''' 致命信息
''' </summary>
Fatal
End Enum
Sub New(serviceIndex As Integer, appName As String, appVersion As String)
Me.ServiceIndex = serviceIndex
Me.AppName = appName
Me.AppVersion = appVersion
InitApp().GetAwaiter().GetResult()
2024-03-11 16:32:52 +08:00
End Sub
Public Property ProjectName() As String
Public Property StationName() As String
Public Property TestPlan() As String
Private Async Function InitApp() As Task
2024-03-11 16:32:52 +08:00
If AppRegistered() Then
'更新App版本
Try
Await UpdateAppVersion()
2024-03-11 16:32:52 +08:00
Catch ex As Exception
Throw New Exception($"UpdateAppVersion Error: {ex.Message}")
End Try
Return
End If
Try
RegisterApp() '注册App
Catch ex As Exception
Throw New Exception($"RegisterApp Error: {ex.Message}")
End Try
End Function
2024-03-11 16:32:52 +08:00
Private Function AppRegistered() As Boolean
Dim result As Integer
Dim colName As String = $"count(*)"
Dim tableName As String = $"{AppListTable.TableName}"
Dim condition As String = $"`{AppListTable.ColNamesEnum.ServiceID}` = {ServiceIndex} and
`{AppListTable.ColNamesEnum.AppName}` = '{AppName}'"
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString)
db.Open()
Dim cmdText As String = db.CmdHelper.Search(colName, tableName, condition)
result = CInt(db.ExecuteScalar(cmdText))
db.Close()
End Using
Return result > 0
End Function
Private Sub RegisterApp()
Dim tableName As String = AppListTable.TableName
Dim filed As New Dictionary(Of String, String) From {
{$"{AppListTable.ColNamesEnum.ServiceID}", ServiceIndex.ToString()},
{$"{AppListTable.ColNamesEnum.AppName}", AppName},
{$"{AppListTable.ColNamesEnum.AppVersion}", AppVersion},
{$"{AppListTable.ColNamesEnum.RegisterDateTime}", Now.ToString("yyyy-MM-dd HH:mm:ss")},
{$"{AppListTable.ColNamesEnum.LastActiveDateTime}", Now.ToString("yyyy-MM-dd HH:mm:ss")}
}
Dim saved As Boolean
Dim cmdText As String
Try
'远程注册App
Using db As New DbExecutor(UtsDb.RemoteDbType, UtsDb.RemoteConnString)
db.Open()
cmdText = $"call `uts_manage`.`RegisterApp` ({ServiceIndex},'{AppName}','{AppVersion}','{Now:yyyy-MM-dd HH:mm:ss}')"
db.ExecuteNonQuery(cmdText)
db.Close()
End Using
saved = True
Catch ex As Exception
saved = False
Console.WriteLine("Register Remote App Error:" & ex.Message)
End Try
'本地注册App
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString)
db.Open()
cmdText = db.CmdHelper.Insert(tableName, filed)
db.ExecuteNonQuery(cmdText)
If saved = False Then
cmdText = $"call `uts_manage`.`RegisterApp` ({ServiceIndex},'{AppName}','{AppVersion}','{Now:yyyy-MM-dd HH:mm:ss}')"
DbConnector.SaveCmdStringToCacheTable(db, cmdText)
End If
db.Close()
End Using
End Sub
Private Async Function UpdateAppVersion() As Task
2024-03-11 16:32:52 +08:00
Dim tableName As String = AppListTable.TableName
Dim filed As New Dictionary(Of String, String) From {
{$"{AppListTable.ColNamesEnum.AppVersion}", AppVersion},
{$"{AppListTable.ColNamesEnum.LastActiveDateTime}", Now.ToString("yyyy-MM-dd HH:mm:ss")}
}
Dim condition As String = $"`{AppListTable.ColNamesEnum.ServiceID}` = {ServiceIndex} and `{AppListTable.ColNamesEnum.AppName}` = '{AppName}'"
Dim saved As Boolean
Dim cmdText As String
Try
'远程更新App版本
Using db As New DbExecutor(UtsDb.RemoteDbType, UtsDb.RemoteConnString)
cmdText = db.CmdHelper.DbUpdate(UtsDb.RemotePublicDb, tableName, filed, condition)
Await db.OpenAsync()
2024-03-11 16:32:52 +08:00
Await db.ExecuteNonQueryAsync(cmdText)
2024-03-11 16:32:52 +08:00
db.Close()
End Using
saved = True
Catch ex As Exception
saved = False
Console.WriteLine("Update Remote AppVersion Error:" & ex.Message)
End Try
'本地更新App版本
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString)
Await db.OpenAsync()
2024-03-11 16:32:52 +08:00
cmdText = db.CmdHelper.Update(tableName, filed, condition)
Await db.ExecuteNonQueryAsync(cmdText)
2024-03-11 16:32:52 +08:00
'保存至缓冲队列
If saved = False Then
cmdText = New DbExecutor(UtsDb.RemoteDbType, UtsDb.RemoteConnString).CmdHelper.DbUpdate(UtsDb.RemotePublicDb, tableName, filed, condition)
DbConnector.SaveCmdStringToCacheTable(db, cmdText)
End If
db.Close()
End Using
End Function
2024-03-11 16:32:52 +08:00
''' <summary>
''' 定期更新APP的活动时间调用则会定期基于本地调用存储过程至缓存表
''' </summary>
Public Sub UpdateAliveTime()
Dim sb As New StringBuilder
sb.Append($"update `{UtsDb.RemotePublicDb}`.`{AppListTable.TableName}` set ")
sb.Append($"`{AppListTable.ColNamesEnum.AppVersion}` = '{AppVersion}' ")
sb.Append($",`{AppListTable.ColNamesEnum.LastActiveDateTime}` = current_timestamp() ")
If String.IsNullOrEmpty(AppMsg) = False Then
Select Case AppStatus
Case 0 '空闲状态
sb.Append($",`{AppListTable.ColNamesEnum.LastInfomation}` = '{AppMsg},Status:Idle' ")
Case 1 '测试中
sb.Append($",`{AppListTable.ColNamesEnum.LastInfomation}` = '{AppMsg},Status:Testing'")
End Select
End If
sb.Append($"where `{AppListTable.ColNamesEnum.ServiceID}` = {ServiceIndex} ")
sb.Append($"and `{AppListTable.ColNamesEnum.AppName}` = '{AppName}' ")
Try
Using db As New DbExecutor(UtsDb.RemoteDbType, UtsDb.RemoteConnString)
db.Open()
db.ExecuteNonQuery(sb.ToString)
db.Close()
End Using
Catch ex As Exception
Console.WriteLine($"Update AppInfo Error:{ex.Message}")
End Try
End Sub
Public Shared Sub CreateAppLogTable()
Try
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString)
db.Open()
Dim cmdText As String = AppLogTable.CreateTableString("", DbExecutor.DbTypeEnum.Sqlite)
db.ExecuteNonQuery(cmdText)
db.Close()
End Using
Catch ex As Exception
Throw New Exception($"CreateAppLogTable Error:{ex.Message}")
End Try
End Sub
Public Shared Sub CreateAppListTable()
Try
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString)
db.Open()
Dim cmdText As String = AppListTable.CreateTableString("", DbExecutor.DbTypeEnum.Sqlite)
db.ExecuteNonQuery(cmdText)
db.Close()
End Using
Catch ex As Exception
Throw New Exception($"CreateAppListTable Error:{ex.Message}")
End Try
End Sub
Public Sub AppendDebugLog(logText As String)
AppendLogToLogQueue(LogTypeEnum.Debug, logText)
End Sub
Public Sub AppendTraceLog(logText As String)
AppendLogToLogQueue(LogTypeEnum.Info, logText)
End Sub
Public Sub AppendWarningLog(logText As String)
AppendLogToLogQueue(LogTypeEnum.Warn, logText)
End Sub
Public Sub AppendErrorLog(logText As String)
AppendLogToLogQueue(LogTypeEnum.Error, logText)
End Sub
Public Sub AppendFatalLog(logText As String)
AppendLogToLogQueue(LogTypeEnum.Fatal, logText)
End Sub
''' <summary>
''' 添加日志内容至缓存的日志队列中
''' 调用SaveLogQueueToDb将队列中的数据写入到数据库
'''
''' Tip:缓存队列仅记录每条日志不同的内容,例如写入时间,日志类型,日志内容等
''' </summary>
''' <param name="logType"></param>
''' <param name="logText"></param>
Public Sub AppendLogToLogQueue(logType As LogTypeEnum, logText As String)
Dim dicFiled As New Dictionary(Of String, String)
dicFiled.Add($"{AppLogTable.ColNamesEnum.DateTime}", $"{Now:yyyy-MM-dd HH:mm:ss}")
dicFiled.Add($"{AppLogTable.ColNamesEnum.LogType}", $"{logType}")
dicFiled.Add($"{AppLogTable.ColNamesEnum.LogText}", $"{logText}")
SyncLock _logLock
_logQueue.Enqueue(dicFiled) '将日志信息放入缓冲队列
End SyncLock
End Sub
Public Sub SaveLogQueueToDb()
If _logQueue.Count <= 0 Then Return
Dim tableName As String = AppLogTable.TableName
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString)
db.Open()
db.BeginTransaction()
Dim dicFiled As Dictionary(Of String, String)
Dim cmdText As String
Dim cmdHelper As DbCmdHelper = DbCmdHelper.CreateCmdHelper(UtsDb.RemoteDbType)
SyncLock _logLock
While _logQueue.Count > 0
dicFiled = _logQueue.Dequeue()
dicFiled.Add($"{AppLogTable.ColNamesEnum.ServiceID}", $"{ServiceIndex}")
dicFiled.Add($"{AppLogTable.ColNamesEnum.AppName}", $"{AppName}")
dicFiled.Add($"{AppLogTable.ColNamesEnum.AppVersion}", $"{AppVersion}")
dicFiled.Add($"{AppLogTable.ColNamesEnum.ProjectName}", $"{ProjectName}")
dicFiled.Add($"{AppLogTable.ColNamesEnum.StationName}", $"{StationName}")
dicFiled.Add($"{AppLogTable.ColNamesEnum.TestPlan}", $"{TestPlan}")
Try
cmdText = db.CmdHelper.Insert(tableName, dicFiled)
db.ExecuteNonQuery(cmdText) '执行语句
Catch ex As Exception
Console.WriteLine($"Write LogQueue To Local DB Error: {ex.Message}")
Continue While
End Try
Try
cmdText = cmdHelper.DbInsert(UtsDb.RemotePublicDb, tableName, dicFiled)
DbConnector.SaveCmdStringToCacheTable(db, cmdText) '执行命令入缓存库
Catch ex As Exception
Console.WriteLine($"Write LogQueue To Chche DB Error: {ex.Message}")
Continue While
End Try
End While
End SyncLock
db.CommitTransaction()
db.Close()
End Using
End Sub
Public Sub Dispose() Implements IDisposable.Dispose
End Sub
End Class
End Namespace