初始化提交

仓库转移到Gitea,初始化提交,可能丢失以前的git版本日志
This commit is contained in:
2025-11-27 16:41:05 +08:00
commit 027d0f8024
663 changed files with 171319 additions and 0 deletions

View File

@@ -0,0 +1,146 @@
Imports System.IO
Imports SharpCompress.Archives
Imports SharpCompress.Archives.Zip
Imports SharpCompress.Common
Imports SharpCompress.Readers
Imports SharpCompress.Writers
Namespace Compress
Public Class Compress
''' <summary>
''' 压缩文件夹到zip文件
''' </summary>
''' <param name="dirPath">需要压缩的文件夹</param>
''' <param name="zipPath">压缩后的zip文件路径</param>
Public Shared Sub SaveDirToZip(dirPath As String, zipPath As String)
Using fileStream As FileStream = File.OpenWrite(zipPath)
Using archive As ZipArchive = ZipArchive.Create()
archive.AddAllFromDirectory(dirPath)
archive.SaveTo(fileStream)
End Using
End Using
End Sub
Public Shared Sub LoadFromZip(dirPath As String, zipPath As String)
Using fileStream As FileStream = File.OpenRead(zipPath)
Using reader As IReader = ReaderFactory.Open(fileStream)
Dim options As New ExtractionOptions With {.ExtractFullPath = True, .Overwrite = True, .PreserveFileTime = True}
While reader.MoveToNextEntry
If reader.Entry.IsDirectory = False Then
reader.WriteEntryToDirectory(dirPath, options)
End If
End While
End Using
End Using
End Sub
''' <summary>
''' 压缩文件至Zip文件
''' </summary>
''' <param name="filePath">被压缩的文件路径</param>
''' <param name="zipFilePath">压缩文件路径</param>
Public Shared Sub SaveFileToZip(filePath As String, zipFilePath As String)
If File.Exists(zipFilePath) Then File.Delete(zipFilePath)
Using tarStream As FileStream = File.OpenWrite(zipFilePath)
Using writer As IWriter = WriterFactory.Open(tarStream, ArchiveType.Zip, CompressionType.None)
writer.Write(Path.GetFileName(filePath), File.OpenRead(filePath), File.GetLastWriteTimeUtc(filePath))
End Using
End Using
End Sub
''' <summary>
''' 压缩指定文件夹至tar格式文件,不会生成根文件目录
''' </summary>
''' <param name="tarFilename">压缩文件名</param>
''' <param name="sourceDirectory">源文件夹</param>
Public Shared Sub TarCreateFromStream(tarFilename As String, sourceDirectory As String)
Dim filesPath As String = sourceDirectory
Using tarStream As FileStream = File.OpenWrite(tarFilename)
Using writer As IWriter = WriterFactory.Open(tarStream, ArchiveType.Tar, CompressionType.GZip)
writer.WriteAll(filesPath, "*", SearchOption.AllDirectories)
End Using
End Using
End Sub
''' <summary>
''' 压缩指定文件列表到tar格式文件
''' </summary>
''' <param name="fileList">文件列表</param>
''' <param name="tarFilePath">压缩文件路径</param>
''' <param name="dirFullPath">压缩文件所在文件夹路径</param>
Public Shared Sub TarFiles(fileList As List(Of String), tarFilePath As String, dirFullPath As String)
If File.Exists(tarFilePath) Then File.Delete(tarFilePath)
Using tarStream As FileStream = File.OpenWrite(tarFilePath)
Using writer As IWriter = WriterFactory.Open(tarStream, ArchiveType.Tar, CompressionType.GZip)
For i As Integer = 0 To fileList.Count - 1
If Right(fileList.Item(i), 1) = "\" OrElse Right(fileList.Item(i), 1) = "/" Then
writer.WriteAll($"{dirFullPath}\{fileList.Item(i)}", "*", SearchOption.AllDirectories)
Else
writer.Write(fileList.Item(i), File.OpenRead($"{dirFullPath}\{fileList.Item(i)}"), File.GetLastWriteTimeUtc($"{dirFullPath}\{fileList.Item(i)}"))
End If
Next
End Using
End Using
GC.Collect() '回收资源
End Sub
''' <summary>
''' 填充文件表,供压缩文件使用
''' </summary>
''' <param name="fileList">文件列表</param>
''' <param name="dir">需要压缩的文件夹</param>
''' <param name="prefix">文件前缀</param>
Public Shared Sub FillFileList(fileList As List(Of String), dir As String, prefix As String)
For Each fName As String In Directory.GetFiles(dir)
fileList.Add($"{prefix}/{Path.GetFileName(fName) }")
Next
For Each dirName As String In Directory.GetDirectories(dir)
FillFileList(fileList, dirName, $"{prefix}/{Path.GetFileName(dirName)}")
Next
End Sub
Public Shared Sub TarFiles(fileList As List(Of String), filePathList As List(Of String), tarFileName As String)
If File.Exists(tarFileName) Then File.Delete(tarFileName)
Using tarStream As FileStream = File.OpenWrite(tarFileName)
Using writer As IWriter = WriterFactory.Open(tarStream, ArchiveType.Tar, CompressionType.GZip)
For i As Integer = 0 To fileList.Count - 1
If Right(fileList.Item(i), 1) = "\" OrElse Right(fileList.Item(i), 1) = "/" Then
writer.WriteAll($"{filePathList(i)}", "*", SearchOption.AllDirectories)
Else
writer.Write(fileList.Item(i), File.OpenRead($"{filePathList(i)}"), File.GetLastWriteTimeUtc($"{filePathList(i)}"))
End If
Next
End Using
End Using
End Sub
''' <summary>
''' 解压Tar格式文件夹
''' </summary>
''' <param name="filePath">文件路径</param>
''' <param name="destDirectory">目标文件夹</param>
Public Shared Sub TarExtractToDirectory(filePath As String, destDirectory As String)
Using tar As Stream = File.OpenRead(filePath)
Using reader As IReader = ReaderFactory.Open(tar)
While reader.MoveToNextEntry
If Not reader.Entry.IsDirectory Then
Dim a As New ExtractionOptions With {
.ExtractFullPath = True,
.Overwrite = True,
.PreserveFileTime = True
}
reader.WriteEntryToDirectory(destDirectory, a)
End If
End While
End Using
End Using
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,15 @@

Namespace Database.Base
''' <summary>
''' Contains the schema of a single DB column.
''' </summary>
Public Class ColumnSchema
Public ColumnName As String
Public ColumnType As String
Public Length As Integer
Public IsNullable As Boolean
Public DefaultValue As String
Public IsIdentity As Boolean
Public IsCaseSensitivity As Boolean? = Nothing
End Class
End NameSpace

View File

@@ -0,0 +1,297 @@
Imports System.Text
Namespace Database.Base
Public MustInherit Class CommandHelpers
Public Overridable Function Search(param As SearchParams) As String
Dim searchString As New StringBuilder
'基础查询
searchString.Append("Select")
searchString.Append(" ")
searchString.Append($"{String.Join(",", param.SearchColNames)}")
searchString.Append(" ")
searchString.Append("From")
searchString.Append(" ")
searchString.Append($"`{param.TableName}`")
'筛选条件
If param.SearchCondition IsNot Nothing Then
If param.SearchCondition.Count > 0 Then
searchString.Append(" ")
searchString.Append("Where")
For i As Integer = 0 To param.SearchCondition.Count - 1
If i > 0 Then
searchString.Append(" ")
searchString.Append(param.SearchCondition(i).LogicPrevious.ToString())
End If
searchString.Append(param.SearchCondition(i).ToString())
Next
End If
End If
'排序与排序方式
If param.OrderType <> SearchParams.OrderTypeEnum.None Then
searchString.Append($" Order By {param.OrderColName} {param.OrderType}")
End If
'返回结果行数
If param.Limit > -1 Then
searchString.Append($" Limit {param.Limit}")
End If
searchString.Append(";")
Return searchString.ToString()
End Function
Public Overridable Function SearchAll(tableName As String) As String
Return $"Select * FROM `{tableName}`;"
End Function
Public Overridable Function SearchAll(tableName As String, condition As String) As String
Return $"Select * FROM `{tableName}` WHERE {condition};"
End Function
Public Overridable Function Search(columnName As List(Of String), tableName As String) As String
Dim colNameString As New StringBuilder
For i As Integer = 0 To columnName.Count - 1
If i = 0 Then
colNameString.Append($"`{columnName(i)}`")
Else
colNameString.Append($",`{columnName(i)}`")
End If
Next
Return $"Select {colNameString} FROM `{tableName}`;"
End Function
Public Overridable Function Search(columnName As String, tableName As String) As String
Return $"Select {columnName} FROM `{tableName}`;"
End Function
Public Overridable Function Search(columnName As String, tableName As String, condition As String) As String
Return $"Select {columnName} FROM `{tableName}` WHERE {condition};"
End Function
Public Overridable Function Search(columnName As String, tableName As String, condition As String, limit As Integer) As String
Return $"Select {columnName} FROM `{tableName}` WHERE {condition} Limit {limit};"
End Function
Public Overridable Function SearchDistinct(columnName As String, tableName As String) As String
Return $"Select Distinct {columnName} FROM `{tableName}`;"
End Function
Public Overridable Function SearchDistinct(columnName As String, tableName As String, condition As String) As String
Return $"Select Distinct {columnName} FROM `{tableName}` WHERE {condition};"
End Function
Public Overridable Function SearchDescOrder(columnName As String, tableName As String, orderCol As String) As String
Return $"Select {columnName} FROM `{tableName}` Order By {orderCol} Desc;"
End Function
Public Overridable Function SearchDescOrder(columnName As String, tableName As String, orderCol As String, limit As Integer) As String
Return $"Select {columnName} FROM `{tableName}` Order By {orderCol} Desc Limit {limit};"
End Function
Public Overridable Function SearchDescOrder(columnName As String, ByVal tableName As String, ByVal condition As String, ByVal orderCol As String) As String
Return $"Select {columnName} FROM `{tableName}` WHERE {condition} Order By `{orderCol}` Desc;"
End Function
Public Overridable Function SearchDescOrder(columnName As String, ByVal tableName As String, ByVal condition As String, ByVal orderCol As String, limit As Integer) As String
Return $"Select {columnName} FROM `{tableName}` WHERE {condition} Order By `{orderCol}` Desc Limit {limit};"
End Function
Public Overridable Function SearchAscOrder(ByVal columnName As String, ByVal tableName As String, ByVal orderCol As String) As String
Return $"Select {columnName} FROM `{tableName}` Order By {orderCol} Asc;"
End Function
Public Overridable Function SearchAscOrder(ByVal columnName As String, ByVal tableName As String, ByVal condition As String, ByVal orderCol As String) As String
Return $"Select {columnName} FROM `{tableName}` WHERE {condition} Order By {orderCol} Asc;"
End Function
Public Overridable Function SearchNullTable(tableName As String) As String
Return $"Select * FROM `{tableName}` Where Limit 0;"
End Function
Public Overridable Function Insert(ByVal tableName As String, ByVal values As String) As String
Return $"Insert into `{tableName}` Values ( {values} );"
End Function
Public Overridable Function Insert(ByVal tableName As String, ByVal colNames As String, ByVal values As String) As String
Return $"Insert into `{tableName}` ({colNames}) Values ( {values} );"
End Function
Public Overridable Function Insert(tableName As String, dicNameValues As Dictionary(Of String, String)) As String
Dim colNames As New StringBuilder
Dim values As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If colNames.Length = 0 Then
colNames.Append($"`{keyValuePair.Key}`")
values.Append($"'{keyValuePair.Value}'")
Else
colNames.Append($",`{keyValuePair.Key}`")
values.Append($",'{keyValuePair.Value}'")
End If
Next
Return Insert(tableName, colNames.ToString(), values.ToString())
End Function
Public Overridable Function InsertByParameters(tableName As String, dicNameValues As Dictionary(Of String, String)) As String
Dim colNames As New StringBuilder
Dim values As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If colNames.Length = 0 Then
colNames.Append($"`{keyValuePair.Key}`")
values.Append($"{keyValuePair.Value}")
Else
colNames.Append($",`{keyValuePair.Key}`")
values.Append($",{keyValuePair.Value}")
End If
Next
Return Insert(tableName, colNames.ToString(), values.ToString())
End Function
Public Overridable Function AddCol(ByVal tableName As String, ByVal colName As String, ByVal colType As String, Optional isNull As Boolean = True) As String
Return $"Alter Table `{tableName}` Add `{colName}` {colType} {IIf(isNull, "Default Null", "Not Null")};"
End Function
Public Overridable Function AddCol(ByVal tableName As String, colParam As DatabaseData) As String
Dim sb As New StringBuilder
sb.Append($"Alter Table `{tableName}` ")
sb.Append("Add ")
sb.Append(colParam.ToAddColString())
Return sb.ToString()
End Function
Public Overridable Function AddCols(tableName As String, colList As List(Of DatabaseData)) As String
Dim sb As New StringBuilder
sb.Append($"Alter Table `{tableName}` ")
sb.Append("Add ")
sb.Append("( ")
sb.Append(colList(0).ToAddColString())
For i As Integer = 1 To colList.Count - 1
sb.Append($",{colList(i).ToAddColString()}")
Next
sb.Append(");")
Return sb.ToString()
End Function
Public Overridable Function Update(ByVal tableName As String, ByVal destStr As String, ByVal condition As String) As String
Return $"Update `{tableName}` Set {destStr} Where {condition};"
End Function
Public Overridable Function Update(ByVal tableName As String, dicNameValues As Dictionary(Of String, String), ByVal condition As String) As String
Dim destStr As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If destStr.Length = 0 Then
destStr.Append($"`{keyValuePair.Key}` = '{keyValuePair.Value}'")
Else
destStr.Append($",`{keyValuePair.Key}` = '{keyValuePair.Value}'")
End If
Next
Return Update(tableName, destStr.ToString(), condition)
End Function
Public Overridable Function Update(ByVal tableName As String, names() As String, values() As String, condition As String) As String
Dim destStr As New StringBuilder
If names.Length <> values.Length Then
Throw New Exception("DBHelpers_Update:names.Length <> values.Length")
End If
For i As Integer = 0 To names.Length - 1
If i = 0 Then
destStr.Append($"{names(i)} = '{values(i)}'")
Else
destStr.Append($",{names(i)} = '{values(i)}'")
End If
Next
Return Update(tableName, destStr.ToString(), condition)
End Function
Public Overridable Function DeleteRows(ByVal tableName As String, ByVal condition As String) As String
Return $"Delete From `{tableName}` Where {condition};"
End Function
''' <summary>
''' 清空数据表
''' </summary>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DeleteTable(ByVal tableName As String) As String
Return $"Delete From `{tableName}`;"
End Function
Public Overridable Function DropCol(ByVal tableName As String, ByVal colName As String) As String
Return $"Alter Table `{tableName}` Drop Column `{colName}`;"
End Function
''' <summary>
''' 删除数据表
''' </summary>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DropTable(ByVal tableName As String) As String
Return $"Drop Table `{tableName}`;"
End Function
Public Overridable Function CreateTable(ByVal tableName As String, ByVal createStr As String) As String
Return $"Create Table `{tableName}` ( {createStr} );"
End Function
Public Overridable Function CreateTableWhenNotExists(tableName As String, createStr As String) As String
Return $"Create Table if not exists `{tableName}` ( {createStr} );"
End Function
Public Overridable Function CreateLikeTable(tableName As String, baseTableName As String) As String
Return $"create table `{tableName}` like `{baseTableName}`;"
End Function
Public Overridable Function CreateLikeTableNotExists(tableName As String, baseTableName As String) As String
Return $"create table if not exists `{tableName}` like `{baseTableName}`;"
End Function
''' <summary>
''' 创建表,同时复制基础表数据(不包含原表索引与主键)
''' 若想复制表结构加数据,则先复制表结构创建表,再拷贝数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="baseTableName">基础表名</param>
''' <returns></returns>
Public Overridable Function CreateCopyTable(tableName As String, baseTableName As String) As String
Return $"create table `{tableName}` as select * from `{baseTableName}`;"
End Function
''' <summary>
''' 不存在表时即创建表,同时复制基础表数据(不包含原表索引与主键)
''' 若想复制表结构加数据,则先复制表结构创建表,再拷贝数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="baseTableName">基础表名</param>
''' <returns></returns>
Public Overridable Function CreateCopyTableNotExists(tableName As String, baseTableName As String) As String
Return $"create table if not exists `{tableName}` as select * from `{baseTableName}`;"
End Function
''' <summary>
''' 复制基础表数据到新表中
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="baseTableName">基础表名</param>
''' <returns></returns>
Public Overridable Function InsertCopyTable(tableName As String, baseTableName As String) As String
Return $"insert into `{tableName}` select * from `{baseTableName}`;"
End Function
End Class
End Namespace

View File

@@ -0,0 +1,94 @@
Imports System.Text
Namespace Database.Base
Public Class DatabaseData
Enum TypeEnum
[Bit]
[Char]
[Date]
[DateTime]
[Double]
[Enum]
[Float]
[Int]
[IntUnsigned]
[Json]
[Text]
[Time]
Varchar
[Year]
End Enum
''' <summary>
''' 列名
''' </summary>
''' <returns></returns>
Public Property ColumnName() As String
''' <summary>
''' 当前值
''' </summary>
''' <returns></returns>
Public Property Value() As String
''' <summary>
''' 默认值
''' </summary>
''' <returns></returns>
Public Property DefaultValue() As String
''' <summary>
''' 数据类型
''' </summary>
''' <returns></returns>
Public Property DataType() As TypeEnum
''' <summary>
''' 数据类型长度
''' </summary>
''' <returns></returns>
Public Property DataTypeLength() As Integer
''' <summary>
''' 是否允许为空
''' </summary>
''' <returns></returns>
Public Property IsNull() As Boolean = True
''' <summary>
''' 是否自动增长
''' </summary>
''' <returns></returns>
Public Property IsAutoIncrement() As Boolean
''' <summary>
''' 是否为主键
''' </summary>
''' <returns></returns>
Public Property IsPrimaryKey() As Boolean
Public Function ToAddColString() As String
Dim sb As New StringBuilder
sb.Append($"`{ColumnName}`")
Select Case DataType
Case TypeEnum.Char, TypeEnum.Varchar
sb.Append($" {DataType}({DataTypeLength}) ")
Case TypeEnum.Int
sb.Append($" {DataType}")
If IsAutoIncrement Then sb.Append($" AUTO_INCREMENT")
Case Else
sb.Append($" {DataType}")
End Select
sb.Append(IIf(IsNull, " Default Null", " Not Null"))
If IsPrimaryKey Then
sb.Append($" PRIMARY KEY")
End If
Return sb.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,12 @@
Imports System.Collections.Generic
Namespace Database.Base
''' <summary>
''' Contains the entire database schema
''' </summary>
Public Class DatabaseSchema
Public Tables As List(Of TableSchema) = New List(Of TableSchema)()
Public Views As List(Of ViewSchema) = New List(Of ViewSchema)()
End Class
End NameSpace

View File

@@ -0,0 +1,11 @@

Namespace Database.Base
Public Class ForeignKeySchema
Public TableName As String
Public ColumnName As String
Public ForeignTableName As String
Public ForeignColumnName As String
Public CascadeOnDelete As Boolean
Public IsNullable As Boolean
End Class
End NameSpace

View File

@@ -0,0 +1,16 @@
Imports System.Collections.Generic
Namespace Database.Base
Public Class IndexSchema
Public IndexName As String
Public IsUnique As Boolean
Public Columns As List(Of IndexColumn)
End Class
Public Class IndexColumn
Public ColumnName As String
Public IsAscending As Boolean
End Class
End NameSpace

View File

@@ -0,0 +1,7 @@
Namespace Database.Base
Public Class InsertParams
Public Property TableName() As String
Public Property InsertKeyValue As Dictionary(Of String, String)
End Class
End Namespace

View File

@@ -0,0 +1,71 @@
Imports System.Text
Namespace Database.Base
Public Class SearchCondition
Enum ConditionType
LessThan
GreaterThen
EqualTo
LessThanOrEqualTo
GreaterThenOrEqualTo
End Enum
Enum LogicType
[And]
[Or]
[Not]
End Enum
''' <summary>
''' 判断列名
''' </summary>
''' <returns></returns>
Public Property ColName() As String
''' <summary>
''' 判断条件
''' </summary>
''' <returns></returns>
Public Property Condition() As ConditionType = ConditionType.EqualTo
''' <summary>
''' 判断值
''' </summary>
''' <returns></returns>
Public Property ColValue() As String
''' <summary>
''' 当前条件与上一个条件的逻辑关系
''' </summary>
''' <returns></returns>
Public Property LogicPrevious() As LogicType = LogicType.And
''' <summary>
''' 将当前条件转换为字符串,不支持将条件逻辑关系同时转换
''' </summary>
''' <returns></returns>
Public Overrides Function ToString() As String
Dim stringBuilder As New StringBuilder
stringBuilder.Append(" ")
stringBuilder.Append(ColName)
Select Case Condition
Case ConditionType.EqualTo
stringBuilder.Append("=")
Case ConditionType.LessThan
stringBuilder.Append("<")
Case ConditionType.LessThanOrEqualTo
stringBuilder.Append("<=")
Case ConditionType.GreaterThen
stringBuilder.Append(">")
Case ConditionType.GreaterThenOrEqualTo
stringBuilder.Append(">=")
End Select
stringBuilder.Append($"'{ColValue}'")
Return stringBuilder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,46 @@
Namespace Database.Base
Public Class SearchParams
Enum OrderTypeEnum
None
Desc
Asc
End Enum
''' <summary>
''' 查询条件的表名
''' </summary>
''' <returns></returns>
Public Property TableName() As String
''' <summary>
''' 当IsSearchAllCols = False时,查询返回列名集合
''' </summary>
''' <returns></returns>
Public Property SearchColNames() As String()
''' <summary>
''' 查询的条件
''' </summary>
''' <returns></returns>
Public Property SearchCondition() As List(Of SearchCondition)
''' <summary>
''' 排序方式
''' </summary>
''' <returns></returns>
Public Property OrderType As OrderTypeEnum = OrderTypeEnum.None
''' <summary>
''' 但需要排序时排序列名
''' </summary>
''' <returns></returns>
Public Property OrderColName() As String
''' <summary>
''' 从返回结果提取指定行的内容
''' </summary>
''' <returns></returns>
Public Property Limit() As Integer = 0
End Class
End Namespace

View File

@@ -0,0 +1,14 @@
Imports System.Collections.Generic
Namespace Database.Base
Public Class TableSchema
Public TableName As String
Public TableSchemaName As String
Public Columns As List(Of ColumnSchema)
Public PrimaryKey As List(Of String)
Public ForeignKeys As List(Of ForeignKeySchema)
Public Indexes As List(Of IndexSchema)
End Class
End NameSpace

View File

@@ -0,0 +1,71 @@
Imports System.Collections.Generic
Imports System.Text
Namespace Database.Base
Public Module TriggerBuilder
Public Function GetForeignKeyTriggers(ByVal dt As TableSchema) As IList(Of TriggerSchema)
Dim result As IList(Of TriggerSchema) = New List(Of TriggerSchema)()
For Each fks As ForeignKeySchema In dt.ForeignKeys
result.Add(GenerateInsertTrigger(fks))
result.Add(GenerateUpdateTrigger(fks))
result.Add(GenerateDeleteTrigger(fks))
Next
Return result
End Function
Private Function MakeTriggerName(ByVal fks As ForeignKeySchema, ByVal prefix As String) As String
Return prefix & "_" & fks.TableName & "_" & fks.ColumnName & "_" & fks.ForeignTableName & "_" & fks.ForeignColumnName
End Function
Public Function GenerateInsertTrigger(ByVal fks As ForeignKeySchema) As TriggerSchema
Dim trigger As TriggerSchema = New TriggerSchema()
trigger.Name = MakeTriggerName(fks, "fki")
trigger.Type = TriggerType.Before
trigger.Event = TriggerEvent.Insert
trigger.Table = fks.TableName
Dim nullString As String = ""
If fks.IsNullable Then
nullString = " NEW." & fks.ColumnName & " IS NOT NULL AND"
End If
trigger.Body = "SELECT RAISE(ROLLBACK, 'insert on table " & fks.TableName & " violates foreign key constraint " & trigger.Name & "')" & " WHERE" & nullString & " (SELECT " & fks.ForeignColumnName & " FROM " & fks.ForeignTableName & " WHERE " & fks.ForeignColumnName & " = NEW." & fks.ColumnName & ") IS NULL; "
Return trigger
End Function
Public Function GenerateUpdateTrigger(ByVal fks As ForeignKeySchema) As TriggerSchema
Dim trigger As TriggerSchema = New TriggerSchema()
trigger.Name = MakeTriggerName(fks, "fku")
trigger.Type = TriggerType.Before
trigger.Event = TriggerEvent.Update
trigger.Table = fks.TableName
Dim triggerName As String = trigger.Name
Dim nullString As String = ""
If fks.IsNullable Then
nullString = " NEW." & fks.ColumnName & " IS NOT NULL AND"
End If
trigger.Body = "SELECT RAISE(ROLLBACK, 'update on table " & fks.TableName & " violates foreign key constraint " & triggerName & "')" & " WHERE" & nullString & " (SELECT " & fks.ForeignColumnName & " FROM " & fks.ForeignTableName & " WHERE " & fks.ForeignColumnName & " = NEW." & fks.ColumnName & ") IS NULL; "
Return trigger
End Function
Public Function GenerateDeleteTrigger(ByVal fks As ForeignKeySchema) As TriggerSchema
Dim trigger As TriggerSchema = New TriggerSchema()
trigger.Name = MakeTriggerName(fks, "fkd")
trigger.Type = TriggerType.Before
trigger.Event = TriggerEvent.Delete
trigger.Table = fks.ForeignTableName
Dim triggerName as String = trigger.Name
If Not fks.CascadeOnDelete Then
trigger.Body = "SELECT RAISE(ROLLBACK, 'delete on table " & fks.ForeignTableName & " violates foreign key constraint " & triggerName & "')" & " WHERE (SELECT " & fks.ColumnName & " FROM " & fks.TableName & " WHERE " & fks.ColumnName & " = OLD." & fks.ForeignColumnName & ") IS NOT NULL; "
Else
trigger.Body = "DELETE FROM [" & fks.TableName & "] WHERE " & fks.ColumnName & " = OLD." & fks.ForeignColumnName & "; "
End If
Return trigger
End Function
End Module
End NameSpace

View File

@@ -0,0 +1,20 @@
Namespace Database.Base
Public Enum TriggerEvent
Delete
Update
Insert
End Enum
Public Enum TriggerType
After
Before
End Enum
Public Class TriggerSchema
Public Name As String
Public [Event] As TriggerEvent
Public Type As TriggerType
Public Body As String
Public Table As String
End Class
End Namespace

View File

@@ -0,0 +1,17 @@

Namespace Database.Base
''' <summary>
''' Describes a single view schema
''' </summary>
Public Class ViewSchema
''' <summary>
''' Contains the view name
''' </summary>
Public ViewName As String
''' <summary>
''' Contains the view SQL statement
''' </summary>
Public ViewSql As String
End Class
End NameSpace

View File

@@ -0,0 +1,744 @@
Imports System.Text
Imports UTS_Core.Database.Mssql
Imports UTS_Core.Database.Mysql
Imports UTS_Core.Database.Sqlite
Namespace Database
''' <summary>
''' 数据库语句助手
''' 时间2020-12-21
''' 作者ML
''' 版本1.0
'''
''' 注意:添加一条数据库帮助语句时,需要考虑Mysql/Sqlite/Mssql等数据库是否支持命令,不支持则需要在对应帮助类中重写该帮助语句
''' 注意Sqlite数据库与大多数据库不相同,DB开头数据库语句大多不适用
'''
''' </summary>
Public MustInherit Class DbCmdHelper
Protected FiledSuffix As Char
Protected FiledPrefix As Char
Public Shared Function CreateCmdHelper(type As DbExecutor.DbTypeEnum) As DbCmdHelper
Select Case type
Case DbExecutor.DbTypeEnum.Mysql
Return New MysqlCmdHelper()
Case DbExecutor.DbTypeEnum.Mssql
Return New MssqlCmdHelper()
Case DbExecutor.DbTypeEnum.Sqlite
Return New SqliteCmdHelper()
Case Else
Throw New Exception($"CreateCmdHelper :Unknown Type {type}")
End Select
End Function
#Region "访问单数据库连接"
''' <summary>
''' 查询指定数据表符合条件的所有数据
''' </summary>
''' <param name="tableName">指定表名</param>
''' <param name="condition">查询条件,</param>
''' <returns></returns>
Public Overridable Function SearchAll(tableName As String, Optional condition As String = "") As String
If String.IsNullOrWhiteSpace(condition) Then
Return $"Select * FROM {FiledSuffix}{tableName}{FiledPrefix};"
Else
Return $"Select * FROM {FiledSuffix}{tableName}{FiledPrefix} WHERE {condition};"
End If
End Function
''' <summary>
''' 查询表符合条件的所有指定列的数据
''' </summary>
''' <param name="columnName">列名集合,需要返回多列时用','符号分隔列名</param>
''' <param name="tableName">表名</param>
''' <param name="condition">条件</param>
''' <returns></returns>
Public Overridable Function Search(columnName As String, tableName As String, Optional condition As String = "") As String
If String.IsNullOrWhiteSpace(condition) Then
Return $"Select {columnName} FROM {FiledSuffix}{tableName}{FiledPrefix};"
Else
Return $"Select {columnName} FROM {FiledSuffix}{tableName}{FiledPrefix} WHERE {condition};"
End If
End Function
''' <summary>
''' 查询表符合条件的所有指定列的数据
''' </summary>
''' <param name="columnName">表名</param>
''' <param name="tableName">条件</param>
''' <returns></returns>
Public Overridable Function Search(columnName As List(Of String), tableName As String, Optional condition As String = "") As String
Dim colNameString As New StringBuilder
For i As Integer = 0 To columnName.Count - 1
If i = 0 Then
colNameString.Append($"{FiledSuffix}{columnName(i)}{FiledPrefix}")
Else
colNameString.Append($",{FiledSuffix}{columnName(i)}{FiledPrefix}")
End If
Next
If String.IsNullOrWhiteSpace(condition) Then
Return $"Select {colNameString} FROM {FiledSuffix}{tableName}{FiledPrefix};"
Else
Return $"Select {colNameString} FROM {FiledSuffix}{tableName}{FiledPrefix} Where {condition};"
End If
End Function
Public Overridable Function SearchOrder(columnName As List(Of String), tableName As String, Optional orderString As String = "") As String
Dim colNameString As New StringBuilder
For i As Integer = 0 To columnName.Count - 1
If i = 0 Then
colNameString.Append($"{FiledSuffix}{columnName(i)}{FiledPrefix}")
Else
colNameString.Append($",{FiledSuffix}{columnName(i)}{FiledPrefix}")
End If
Next
If String.IsNullOrWhiteSpace(orderString) Then
Return $"Select {colNameString} FROM {FiledSuffix}{tableName}{FiledPrefix};"
Else
Return $"Select {colNameString} FROM {FiledSuffix}{tableName}{FiledPrefix} {orderString};"
End If
End Function
''' <summary>
''' 查询指定表包含的内容行数
''' </summary>
''' <param name="tableName">数据表名</param>
''' <param name="condition">查询条件</param>
''' <returns></returns>
Public Overridable Function SearchCount(tableName As String, Optional condition As String = "") As String
Return Search("count(*)", tableName, condition)
End Function
''' <summary>
''' 查询指定数据表的信息
''' </summary>
''' <param name="tableName">表名</param>
''' <returns></returns>
Public Overridable Function SearchTableInfo(tableName As String) As String
Return $"Select * from information_schema.tables where table_name = '{tableName}';"
End Function
''' <summary>
''' 查询指定数据表是否存在的信息,返回查询当前表在数据库中存在的数量
''' </summary>
''' <param name="tableName">表名</param>
''' <returns></returns>
Public Overridable Function SearchTableExists(tableName As String) As String
Return $"Select count(*) from information_schema.tables where table_name = '{tableName}';"
End Function
''' <summary>
''' 数据表插入一行数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="colNames">列名字符串</param>
''' <param name="values">列值字符串</param>
''' <returns></returns>
Public Overridable Function Insert(tableName As String, colNames As String, values As String) As String
Return $"Insert into {FiledSuffix}{tableName}{FiledPrefix} ({colNames}) Values ( {values} );"
End Function
''' <summary>
''' 数据表插入一行数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="dicNameValues">列名与列值键值对</param>
''' <returns></returns>
Public Overridable Function Insert(tableName As String, dicNameValues As Dictionary(Of String, String)) As String
Dim colNames As New StringBuilder
Dim values As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If colNames.Length = 0 Then
colNames.Append($"{FiledSuffix}{keyValuePair.Key}{FiledPrefix}")
values.Append($"'{keyValuePair.Value}'")
Else
colNames.Append($",{FiledSuffix}{keyValuePair.Key}{FiledPrefix}")
values.Append($",'{keyValuePair.Value}'")
End If
Next
Return Insert(tableName, colNames.ToString(), values.ToString())
End Function
''' <summary>
''' 数据表插入一行,通过命令参数方式执行时使用
''' </summary>
''' <param name="tableName"></param>
''' <param name="dicNameValues"></param>
''' <returns></returns>
Public Overridable Function InsertParam(tableName As String, dicNameValues As Dictionary(Of String, String)) As String
Dim colNames As New StringBuilder
Dim values As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If colNames.Length = 0 Then
colNames.Append($"{FiledSuffix}{keyValuePair.Key}{FiledPrefix}")
values.Append($"{keyValuePair.Value}")
Else
colNames.Append($",{FiledSuffix}{keyValuePair.Key}{FiledPrefix}")
values.Append($",{keyValuePair.Value}")
End If
Next
Return Insert(tableName, colNames.ToString(), values.ToString())
End Function
Public Overridable Function InsertParam(dbnema As String, tableName As String, dicNameValues As Dictionary(Of String, String)) As String
Dim colNames As New StringBuilder
Dim values As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If colNames.Length = 0 Then
colNames.Append($"{FiledSuffix}{keyValuePair.Key}{FiledPrefix}")
values.Append($"'{keyValuePair.Value}'")
Else
colNames.Append($",{FiledSuffix}{keyValuePair.Key}{FiledPrefix}")
values.Append($",'{keyValuePair.Value}'")
End If
Next
tableName = $"{dbnema}`.`{tableName}"
Return Insert(tableName, colNames.ToString(), values.ToString())
End Function
''' <summary>
''' 数据表插入一行,通过命令参数方式执行时使用,参数名由@{ColName}
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="colNames">字段列表</param>
''' <returns></returns>
Public Overridable Function InsertParam(tableName As String, colNames As List(Of String)) As String
Dim colNameString As New StringBuilder
Dim values As New StringBuilder
For Each colName As String In colNames
If colNameString.Length = 0 Then
colNameString.Append($"{FiledSuffix}{colName}{FiledPrefix}")
values.Append($"@{colName}")
Else
colNameString.Append($",{FiledSuffix}{colName}{FiledPrefix}")
values.Append($",@{colName}")
End If
Next
Return Insert(tableName, colNameString.ToString(), values.ToString())
End Function
''' <summary>
''' 更新指定表数据
''' </summary>
''' <param name="tableName">指定表名</param>
''' <param name="destStr">更新字符串</param>
''' <param name="condition"></param>
''' <returns></returns>
Public Overridable Function Update(tableName As String, destStr As String, condition As String) As String
Return $"Update {FiledSuffix}{tableName}{FiledPrefix} Set {destStr} Where {condition};"
End Function
''' <summary>
''' 更新指定表数据
''' </summary>
''' <param name="tableName">指定表名</param>
''' <param name="dicNameValues">更新列名与列值键值对</param>
''' <param name="condition">更新列索引条件</param>
''' <returns></returns>
Public Overridable Function Update(tableName As String, dicNameValues As Dictionary(Of String, String), condition As String) As String
Dim destStr As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If destStr.Length = 0 Then
destStr.Append($"{FiledSuffix}{keyValuePair.Key}{FiledPrefix} = '{keyValuePair.Value}'")
Else
destStr.Append($",{FiledSuffix}{keyValuePair.Key}{FiledPrefix} = '{keyValuePair.Value}'")
End If
Next
Return Update(tableName, destStr.ToString(), condition)
End Function
''' <summary>
''' 更新指定数据库中指定表数据,参数名由@{ColName}
''' </summary>
''' <param name="tableName">指定表名</param>
''' <param name="colNames">更新列名的集合</param>
''' <param name="condition">更新列索引条件</param>
''' <returns></returns>
Public Overridable Function UpdateParam(tableName As String, colNames As List(Of String), condition As String) As String
Dim destStr As New StringBuilder
For Each colName As String In colNames
If destStr.Length = 0 Then
destStr.Append($"{FiledSuffix}{colName}{FiledPrefix} = @{colName}")
Else
destStr.Append($",{FiledSuffix}{colName}{FiledPrefix} = @{colName}")
End If
Next
Return Update(tableName, destStr.ToString(), condition)
End Function
''' <summary>
''' 指定数据表增加一列数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="colName">列名</param>
''' <param name="colType">列类型</param>
''' <param name="isNull">是否允许为空</param>
''' <returns></returns>
Public Overridable Function AddCol(tableName As String, colName As String, colType As String, Optional isNull As Boolean = True) As String
Return $"Alter Table {FiledSuffix}{tableName}{FiledPrefix} Add {FiledSuffix}{colName}{FiledPrefix} {colType} {IIf(isNull, "Default Null", "Not Null")};"
End Function
''' <summary>
''' 数据表删除一列数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="colName">需要删除的列名,仅一列</param>
''' <returns></returns>
Public Overridable Function DropCol(tableName As String, colName As String) As String
Return $"Alter Table {FiledSuffix}{tableName}{FiledPrefix} Drop Column {FiledSuffix}{colName}{FiledPrefix};"
End Function
''' <summary>
''' 删除指定表多行数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="condition">条件</param>
''' <returns></returns>
Public Overridable Function DeleteRows(tableName As String, condition As String) As String
Return $"Delete From {FiledSuffix}{tableName}{FiledPrefix} Where {condition};"
End Function
''' <summary>
''' 创建数据表
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="createStr">创建表的列信息字符串</param>
''' <returns></returns>
Public Overridable Function CreateTable(tableName As String, createStr As String) As String
Return $"Create Table {FiledSuffix}{tableName}{FiledPrefix} ( {createStr} );"
End Function
''' <summary>
''' 创建数据表,如果存在则不创建
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="createStr">创建表的列信息字符串</param>
''' <returns></returns>
Public Overridable Function CreateTableWhenNotExists(tableName As String, createStr As String) As String
Return $"Create Table if not exists {FiledSuffix}{tableName}{FiledPrefix} ( {createStr} );"
End Function
''' <summary>
''' 清空数据表,表依旧存在
''' </summary>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DeleteTable(tableName As String) As String
Return $"Delete From {FiledSuffix}{tableName}{FiledPrefix};"
End Function
''' <summary>
''' 删除数据表
''' </summary>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DropTable(tableName As String) As String
Return $"Drop Table {FiledSuffix}{tableName}{FiledPrefix};"
End Function
''' <summary>
''' 删除数据表
''' </summary>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DropTableWhenExists(tableName As String) As String
Return $"Drop Table If Exists {FiledSuffix}{tableName}{FiledPrefix};"
End Function
#End Region
#Region "访问多数据库连接"
''' <summary>
''' 查询指定数据库中指定数据表符合条件的所有指定列的数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="ColsName">列名集合,需要返回多列时用','符号分隔列名</param>
''' <param name="tableName">表名</param>
''' <param name="condition">条件</param>
''' <returns></returns>
Public Overridable Function DbSearch(dbName As String, colsName As String, tableName As String, Optional condition As String = "") As String
Dim cmdText As New StringBuilder
cmdText.Append($"Select {colsName} From ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
If String.IsNullOrWhiteSpace(condition) = False Then
cmdText.Append($" WHERE {condition}")
End If
cmdText.Append($";")
Return cmdText.ToString()
End Function
''' <summary>
''' 查询指定数据库中指定数据表符合条件的所有指定列的去重数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="ColsName">列名集合,需要返回多列时用','符号分隔列名</param>
''' <param name="tableName">表名</param>
''' <param name="condition">条件</param>
''' <returns></returns>
Public Overridable Function DbDistinctSearch(dbName As String, colsName As String, tableName As String, Optional condition As String = "") As String
Dim cmdText As New StringBuilder
cmdText.Append($"Select Distinct {colsName} From ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
If String.IsNullOrWhiteSpace(condition) = False Then
cmdText.Append($" WHERE {condition}")
End If
cmdText.Append($";")
Return cmdText.ToString()
End Function
''' <summary>
''' 查询指定数据库中指定数据表符合条件的所有指定列的数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="columnName">表名</param>
''' <param name="tableName">条件</param>
''' <returns></returns>
Public Overridable Function DbSearch(dbName As String, columnName As List(Of String), tableName As String, Optional condition As String = "") As String
Dim colNameString As New StringBuilder
For i As Integer = 0 To columnName.Count - 1
If i = 0 Then
colNameString.Append($"{FiledSuffix}{columnName(i)}{FiledPrefix}")
Else
colNameString.Append($",{FiledSuffix}{columnName(i)}{FiledPrefix}")
End If
Next
Return DbSearch(dbName, colNameString.ToString(), tableName, condition)
End Function
''' <summary>
''' 查询指定表包含的内容行数
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">数据表名</param>
''' <param name="condition">查询条件</param>
''' <returns></returns>
Public Overridable Function DbSearchCount(dbName As String, tableName As String, Optional condition As String = "") As String
Return DbSearch(dbName, "count(*)", tableName, condition)
End Function
''' <summary>
''' 查询指定数据库中指定数据表符合条件的所有数据
'''
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">数据表名</param>
''' <param name="condition">查询条件(可选)</param>
''' <returns></returns>
Public Overridable Function DbSearchAll(dbName As String, tableName As String, Optional condition As String = "") As String
Return DbSearch(dbName, "*", tableName, condition)
End Function
''' <summary>
''' 查询指定数据库中指定数据表的信息
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <returns></returns>
Public Overridable Function DbSearchTableInfo(dbName As String, tableName As String) As String
Return DbSearch("", "*", "information_schema.tables", "table_schema = '{dbName}' and table_name = '{tableName}'")
End Function
''' <summary>
''' 查询指定数据表是否存在的信息,返回查询当前表在指定数据库中存在的数量
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <returns></returns>
Public Overridable Function DbSearchTableExists(dbName As String, tableName As String) As String
Return DbSearch("", "count(*)", "information_schema.tables", "table_schema = '{dbName}' and table_name = '{tableName}'")
End Function
''' <summary>
''' 指定数据库中数据表插入一行数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="colNames">列名字符串</param>
''' <param name="values">列值字符串</param>
''' <returns></returns>
Public Overridable Function DbInsert(dbName As String, tableName As String, colNames As String, values As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Insert into ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($" ({colNames}) Values ( {values} );")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中数据表插入一行数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="dicNameValues">列名与列值键值对</param>
''' <returns></returns>
Public Overridable Function DbInsert(dbName As String, tableName As String, dicNameValues As Dictionary(Of String, String)) As String
Dim colNames As New StringBuilder
Dim values As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If colNames.Length = 0 Then
colNames.Append($"{FiledSuffix}{keyValuePair.Key}{FiledPrefix}")
values.Append($"'{keyValuePair.Value}'")
Else
colNames.Append($",{FiledSuffix}{keyValuePair.Key}{FiledPrefix}")
values.Append($",'{keyValuePair.Value}'")
End If
Next
Return DbInsert(dbName, tableName, colNames.ToString(), values.ToString())
End Function
''' <summary>
''' 指定数据库中数据表插入一行,通过命令参数方式执行时使用,参数名由@{ColName}
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName"></param>
''' <param name="colNames">需要插入列名的集合</param>
''' <returns></returns>
Public Overridable Function DbInsertParam(dbName As String, tableName As String, colNames As List(Of String)) As String
Dim colNameBuilder As New StringBuilder
Dim valueBuilder As New StringBuilder
For Each colName As String In colNames
If colNameBuilder.Length = 0 Then
colNameBuilder.Append($"{FiledSuffix}{colName}{FiledPrefix}")
valueBuilder.Append($"@{colName}")
Else
colNameBuilder.Append($",{FiledSuffix}{colName}{FiledPrefix}")
valueBuilder.Append($",@{colName}")
End If
Next
'insert into dbName.tablename (1,2,3) value (@1,@2,@3)
Return DbInsert(dbName, tableName, colNameBuilder.ToString(), valueBuilder.ToString())
End Function
''' <summary>
''' 更新指定数据库中指定表数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">指定表名</param>
''' <param name="destStr">更新字符串</param>
''' <param name="condition"></param>
''' <returns></returns>
Public Overridable Function DbUpdate(dbName As String, tableName As String, destStr As String, condition As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Update ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($" Set {destStr} Where {condition};")
Return cmdText.ToString()
End Function
''' <summary>
''' 更新指定数据库中指定表数据,参数名由@{ColName}
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">指定表名</param>
''' <param name="colNames">更新列名的集合</param>
''' <param name="condition">更新列索引条件</param>
''' <returns></returns>
Public Overridable Function DbUpdateParam(dbName As String, tableName As String, colNames As List(Of String), condition As String) As String
Dim destStr As New StringBuilder
For Each colName As String In colNames
If destStr.Length = 0 Then
destStr.Append($"{FiledSuffix}{colName}{FiledPrefix} = @{colName}")
Else
destStr.Append($",{FiledSuffix}{colName}{FiledPrefix} = @{colName}")
End If
Next
Return DbUpdate(dbName, tableName, destStr.ToString(), condition)
End Function
''' <summary>
''' 更新指定数据库中指定表数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">指定表名</param>
''' <param name="filedDictionary">更新列名与列值键值对</param>
''' <param name="condition">更新列索引条件</param>
''' <returns></returns>
Public Overridable Function DbUpdate(dbName As String, tableName As String, filedDictionary As Dictionary(Of String, String), condition As String) As String
Dim destStr As New StringBuilder
For Each filed As KeyValuePair(Of String, String) In filedDictionary
If destStr.Length = 0 Then
destStr.Append($"{FiledSuffix}{filed.Key}{FiledPrefix} = '{filed.Value}'")
Else
destStr.Append($",{FiledSuffix}{filed.Key}{FiledPrefix} = '{filed.Value}'")
End If
Next
Return DbUpdate(dbName, tableName, destStr.ToString(), condition)
End Function
''' <summary>
''' 指定数据库中指定数据表增加一列数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="colName">列名</param>
''' <param name="colType">列类型</param>
''' <param name="isNull">是否允许为空</param>
''' <returns></returns>
Public Overridable Function DbAddCol(dbName As String, tableName As String, colName As String, colType As String, Optional isNull As Boolean = True) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Alter Table ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($" Add {FiledSuffix}{colName}{FiledPrefix} {colType} {IIf(isNull, "Default Null", "Not Null")};")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中数据表删除一列数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="colName">需要删除的列名,仅一列</param>
''' <returns></returns>
Public Overridable Function DbDropCol(dbName As String, tableName As String, colName As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Alter Table ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($" Drop Column {FiledSuffix}{colName}{FiledPrefix};")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中指定表删除多行数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="condition">条件</param>
''' <returns></returns>
Public Overridable Function DbDeleteRows(dbName As String, tableName As String, condition As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Delete From ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($" Where {condition};")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中创建数据表
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="createStr">创建表的列信息字符串</param>
''' <returns></returns>
Public Overridable Function DbCreateTable(dbName As String, tableName As String, createStr As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Create Table ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($" ( {createStr} );")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中创建数据表,如果存在则不创建
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="createStr">创建表的列信息字符串</param>
''' <returns></returns>
Public Overridable Function DbCreateTableWhenNotExists(dbName As String, tableName As String, createStr As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Create Table if not exists ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($" ( {createStr} );")
Return cmdText.ToString()
End Function
''' <summary>
''' 清空指定数据库中数据表,表依旧存在
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DbDeleteTable(dbName As String, tableName As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Delete From ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($";")
Return cmdText.ToString()
End Function
''' <summary>
''' 删除指定数据库中数据表
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DbDropTable(dbName As String, tableName As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Drop Table ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"{FiledSuffix}{dbName}{FiledPrefix}.")
End If
cmdText.Append($"{FiledSuffix}{tableName}{FiledPrefix}")
cmdText.Append($";")
Return cmdText.ToString()
End Function
#End Region
End Class
End Namespace

View File

@@ -0,0 +1,703 @@
Imports System.Text
Imports UTS_Core.Database.Mssql
Imports UTS_Core.Database.Mysql
Imports UTS_Core.Database.Sqlite
Namespace Database
''' <summary>
''' 数据库语句助手
''' 时间2020-12-21
''' 作者ML
''' 版本1.0
'''
''' 注意:添加一条数据库帮助语句时,需要考虑Mysql/Sqlite/Mssql等数据库是否支持命令,不支持则需要在对应帮助类中重写该帮助语句
''' 注意Sqlite数据库与大多数据库不相同,DB开头数据库语句大多不适用
'''
''' </summary>
Public MustInherit Class DbCmdHelper
Protected FiledSuffix As Char
Protected FiledPrefix As Char
Public Shared Function CreateCmdHelper(type As DbExecutor.DbTypeEnum) As DbCmdHelper
Select Case type
Case DbExecutor.DbTypeEnum.Mysql
Return New MysqlCmdHelper()
Case DbExecutor.DbTypeEnum.Mssql
Return New MssqlCmdHelper()
Case DbExecutor.DbTypeEnum.Sqlite
Return New SqliteCmdHelper()
Case Else
Throw New Exception($"CreateCmdHelper :Unknown Type {type}")
End Select
End Function
#Region "访问单数据库连接"
''' <summary>
''' 查询指定数据表符合条件的所有数据
''' </summary>
''' <param name="tableName">指定表名</param>
''' <param name="condition">查询条件,</param>
''' <returns></returns>
Public Overridable Function SearchAll(tableName As String, Optional condition As String = "") As String
If String.IsNullOrWhiteSpace(condition) Then
Return $"Select * FROM `{tableName}`;"
Else
Return $"Select * FROM `{tableName}` WHERE {condition};"
End If
End Function
''' <summary>
''' 查询表符合条件的所有指定列的数据
''' </summary>
''' <param name="columnName">列名集合,需要返回多列时用','符号分隔列名</param>
''' <param name="tableName">表名</param>
''' <param name="condition">条件</param>
''' <returns></returns>
Public Overridable Function Search(columnName As String, tableName As String, Optional condition As String = "") As String
If String.IsNullOrWhiteSpace(condition) Then
Return $"Select {columnName} FROM `{tableName}`;"
Else
Return $"Select {columnName} FROM `{tableName}` WHERE {condition};"
End If
End Function
''' <summary>
''' 查询表符合条件的所有指定列的数据
''' </summary>
''' <param name="columnName">表名</param>
''' <param name="tableName">条件</param>
''' <returns></returns>
Public Overridable Function Search(columnName As List(Of String), tableName As String, Optional condition As String = "") As String
Dim colNameString As New StringBuilder
For i As Integer = 0 To columnName.Count - 1
If i = 0 Then
colNameString.Append($"`{columnName(i)}`")
Else
colNameString.Append($",`{columnName(i)}`")
End If
Next
If String.IsNullOrWhiteSpace(condition) Then
Return $"Select {colNameString} FROM `{tableName}`;"
Else
Return $"Select {colNameString} FROM `{tableName}` Where {condition};"
End If
End Function
Public Overridable Function SearchOrder(columnName As List(Of String), tableName As String, Optional orderString As String = "") As String
Dim colNameString As New StringBuilder
For i As Integer = 0 To columnName.Count - 1
If i = 0 Then
colNameString.Append($"`{columnName(i)}`")
Else
colNameString.Append($",`{columnName(i)}`")
End If
Next
If String.IsNullOrWhiteSpace(orderString) Then
Return $"Select {colNameString} FROM `{tableName}`;"
Else
Return $"Select {colNameString} FROM `{tableName}` {orderString};"
End If
End Function
''' <summary>
''' 查询指定表包含的内容行数
''' </summary>
''' <param name="tableName">数据表名</param>
''' <param name="condition">查询条件</param>
''' <returns></returns>
Public Overridable Function SearchCount(tableName As String, Optional condition As String = "") As String
Return Search("count(*)", tableName, condition)
End Function
''' <summary>
''' 查询指定数据表的信息
''' </summary>
''' <param name="tableName">表名</param>
''' <returns></returns>
Public Overridable Function SearchTableInfo(tableName As String) As String
Return $"Select * from information_schema.tables where table_name = '{tableName}';"
End Function
''' <summary>
''' 查询指定数据表是否存在的信息,返回查询当前表在数据库中存在的数量
''' </summary>
''' <param name="tableName">表名</param>
''' <returns></returns>
Public Overridable Function SearchTableExists(tableName As String) As String
Return $"Select count(*) from information_schema.tables where table_name = '{tableName}';"
End Function
''' <summary>
''' 数据表插入一行数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="colNames">列名字符串</param>
''' <param name="values">列值字符串</param>
''' <returns></returns>
Public Overridable Function Insert(tableName As String, colNames As String, values As String) As String
Return $"Insert into `{tableName}` ({colNames}) Values ( {values} );"
End Function
''' <summary>
''' 数据表插入一行数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="dicNameValues">列名与列值键值对</param>
''' <returns></returns>
Public Overridable Function Insert(tableName As String, dicNameValues As Dictionary(Of String, String)) As String
Dim colNames As New StringBuilder
Dim values As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If colNames.Length = 0 Then
colNames.Append($"`{keyValuePair.Key}`")
values.Append($"'{keyValuePair.Value}'")
Else
colNames.Append($",`{keyValuePair.Key}`")
values.Append($",'{keyValuePair.Value}'")
End If
Next
Return Insert(tableName, colNames.ToString(), values.ToString())
End Function
''' <summary>
''' 数据表插入一行,通过命令参数方式执行时使用
''' </summary>
''' <param name="tableName"></param>
''' <param name="dicNameValues"></param>
''' <returns></returns>
Public Overridable Function InsertParam(tableName As String, dicNameValues As Dictionary(Of String, String)) As String
Dim colNames As New StringBuilder
Dim values As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If colNames.Length = 0 Then
colNames.Append($"`{keyValuePair.Key}`")
values.Append($"{keyValuePair.Value}")
Else
colNames.Append($",`{keyValuePair.Key}`")
values.Append($",{keyValuePair.Value}")
End If
Next
Return Insert(tableName, colNames.ToString(), values.ToString())
End Function
''' <summary>
''' 数据表插入一行,通过命令参数方式执行时使用,参数名由@{ColName}
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="colNames">字段列表</param>
''' <returns></returns>
Public Overridable Function InsertParam(tableName As String, colNames As List(Of String)) As String
Dim colNameString As New StringBuilder
Dim values As New StringBuilder
For Each colName As String In colNames
If colNameString.Length = 0 Then
colNameString.Append($"`{colName}`")
values.Append($"@{colName}")
Else
colNameString.Append($",`{colName}`")
values.Append($",@{colName}")
End If
Next
Return Insert(tableName, colNameString.ToString(), values.ToString())
End Function
''' <summary>
''' 更新指定表数据
''' </summary>
''' <param name="tableName">指定表名</param>
''' <param name="destStr">更新字符串</param>
''' <param name="condition"></param>
''' <returns></returns>
Public Overridable Function Update(tableName As String, destStr As String, condition As String) As String
Return $"Update `{tableName}` Set {destStr} Where {condition};"
End Function
''' <summary>
''' 更新指定表数据
''' </summary>
''' <param name="tableName">指定表名</param>
''' <param name="dicNameValues">更新列名与列值键值对</param>
''' <param name="condition">更新列索引条件</param>
''' <returns></returns>
Public Overridable Function Update(tableName As String, dicNameValues As Dictionary(Of String, String), condition As String) As String
Dim destStr As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If destStr.Length = 0 Then
destStr.Append($"`{keyValuePair.Key}` = '{keyValuePair.Value}'")
Else
destStr.Append($",`{keyValuePair.Key}` = '{keyValuePair.Value}'")
End If
Next
Return Update(tableName, destStr.ToString(), condition)
End Function
''' <summary>
''' 更新指定数据库中指定表数据,参数名由@{ColName}
''' </summary>
''' <param name="tableName">指定表名</param>
''' <param name="colNames">更新列名的集合</param>
''' <param name="condition">更新列索引条件</param>
''' <returns></returns>
Public Overridable Function UpdateParam(tableName As String, colNames As List(Of String), condition As String) As String
Dim destStr As New StringBuilder
For Each colName As String In colNames
If destStr.Length = 0 Then
destStr.Append($"`{colName}` = @{colName}")
Else
destStr.Append($",`{colName}` = @{colName}")
End If
Next
Return Update(tableName, destStr.ToString(), condition)
End Function
''' <summary>
''' 指定数据表增加一列数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="colName">列名</param>
''' <param name="colType">列类型</param>
''' <param name="isNull">是否允许为空</param>
''' <returns></returns>
Public Overridable Function AddCol(tableName As String, colName As String, colType As String, Optional isNull As Boolean = True) As String
Return $"Alter Table `{tableName}` Add `{colName}` {colType} {IIf(isNull, "Default Null", "Not Null")};"
End Function
''' <summary>
''' 数据表删除一列数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="colName">需要删除的列名,仅一列</param>
''' <returns></returns>
Public Overridable Function DropCol(tableName As String, colName As String) As String
Return $"Alter Table `{tableName}` Drop Column `{colName}`;"
End Function
''' <summary>
''' 删除指定表多行数据
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="condition">条件</param>
''' <returns></returns>
Public Overridable Function DeleteRows(tableName As String, condition As String) As String
Return $"Delete From `{tableName}` Where {condition};"
End Function
''' <summary>
''' 创建数据表
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="createStr">创建表的列信息字符串</param>
''' <returns></returns>
Public Overridable Function CreateTable(tableName As String, createStr As String) As String
Return $"Create Table `{tableName}` ( {createStr} );"
End Function
''' <summary>
''' 创建数据表,如果存在则不创建
''' </summary>
''' <param name="tableName">表名</param>
''' <param name="createStr">创建表的列信息字符串</param>
''' <returns></returns>
Public Overridable Function CreateTableWhenNotExists(tableName As String, createStr As String) As String
Return $"Create Table if not exists `{tableName}` ( {createStr} );"
End Function
''' <summary>
''' 清空数据表,表依旧存在
''' </summary>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DeleteTable(tableName As String) As String
Return $"Delete From `{tableName}`;"
End Function
''' <summary>
''' 删除数据表
''' </summary>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DropTable(tableName As String) As String
Return $"Drop Table `{tableName}`;"
End Function
''' <summary>
''' 删除数据表
''' </summary>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DropTableWhenExists(tableName As String) As String
Return $"Drop Table If Exists `{tableName}`;"
End Function
#End Region
#Region "访问多数据库连接"
''' <summary>
''' 查询指定数据库中指定数据表符合条件的所有指定列的数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="ColsName">列名集合,需要返回多列时用','符号分隔列名</param>
''' <param name="tableName">表名</param>
''' <param name="condition">条件</param>
''' <returns></returns>
Public Overridable Function DbSearch(dbName As String, colsName As String, tableName As String, Optional condition As String = "") As String
Dim cmdText As New StringBuilder
cmdText.Append($"Select {colsName} From ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"`{dbName}`.")
End If
cmdText.Append($"`{tableName}`")
If String.IsNullOrWhiteSpace(condition) = False Then
cmdText.Append($" WHERE {condition}")
End If
cmdText.Append($";")
Return cmdText.ToString()
End Function
''' <summary>
''' 查询指定数据库中指定数据表符合条件的所有指定列的数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="columnName">表名</param>
''' <param name="tableName">条件</param>
''' <returns></returns>
Public Overridable Function DbSearch(dbName As String, columnName As List(Of String), tableName As String, Optional condition As String = "") As String
Dim colNameString As New StringBuilder
For i As Integer = 0 To columnName.Count - 1
If i = 0 Then
colNameString.Append($"`{columnName(i)}`")
Else
colNameString.Append($",`{columnName(i)}`")
End If
Next
Return DbSearch(dbName, colNameString.ToString(), tableName, condition)
End Function
''' <summary>
''' 查询指定表包含的内容行数
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">数据表名</param>
''' <param name="condition">查询条件</param>
''' <returns></returns>
Public Overridable Function DbSearchCount(dbName As String, tableName As String, Optional condition As String = "") As String
Return DbSearch(dbName, "count(*)", tableName, condition)
End Function
''' <summary>
''' 查询指定数据库中指定数据表符合条件的所有数据
'''
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">数据表名</param>
''' <param name="condition">查询条件(可选)</param>
''' <returns></returns>
Public Overridable Function DbSearchAll(dbName As String, tableName As String, Optional condition As String = "") As String
Return DbSearch(dbName, "*", tableName, condition)
End Function
''' <summary>
''' 查询指定数据库中指定数据表的信息
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <returns></returns>
Public Overridable Function DbSearchTableInfo(dbName As String, tableName As String) As String
Return DbSearch("", "*", "information_schema.tables", "table_schema = '{dbName}' and table_name = '{tableName}'")
End Function
''' <summary>
''' 查询指定数据表是否存在的信息,返回查询当前表在指定数据库中存在的数量
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <returns></returns>
Public Overridable Function DbSearchTableExists(dbName As String, tableName As String) As String
Return DbSearch("", "count(*)", "information_schema.tables", "table_schema = '{dbName}' and table_name = '{tableName}'")
End Function
''' <summary>
''' 指定数据库中数据表插入一行数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="colNames">列名字符串</param>
''' <param name="values">列值字符串</param>
''' <returns></returns>
Public Overridable Function DbInsert(dbName As String, tableName As String, colNames As String, values As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Insert into ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"`{dbName}`.")
End If
cmdText.Append($"`{tableName}`")
cmdText.Append($" ({colNames}) Values ( {values} );")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中数据表插入一行数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="dicNameValues">列名与列值键值对</param>
''' <returns></returns>
Public Overridable Function DbInsert(dbName As String, tableName As String, dicNameValues As Dictionary(Of String, String)) As String
Dim colNames As New StringBuilder
Dim values As New StringBuilder
For Each keyValuePair As KeyValuePair(Of String, String) In dicNameValues
If colNames.Length = 0 Then
colNames.Append($"`{keyValuePair.Key}`")
values.Append($"'{keyValuePair.Value}'")
Else
colNames.Append($",`{keyValuePair.Key}`")
values.Append($",'{keyValuePair.Value}'")
End If
Next
Return DbInsert(dbName, tableName, colNames.ToString(), values.ToString())
End Function
''' <summary>
''' 指定数据库中数据表插入一行,通过命令参数方式执行时使用,参数名由@{ColName}
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName"></param>
''' <param name="colNames">需要插入列名的集合</param>
''' <returns></returns>
Public Overridable Function DbInsertParam(dbName As String, tableName As String, colNames As List(Of String)) As String
Dim colNameBuilder As New StringBuilder
Dim valueBuilder As New StringBuilder
For Each colName As String In colNames
If colNameBuilder.Length = 0 Then
colNameBuilder.Append($"`{colName}`")
valueBuilder.Append($"@{colName}")
Else
colNameBuilder.Append($",`{colName}`")
valueBuilder.Append($",@{colName}")
End If
Next
'insert into dbName.tablename (1,2,3) value (@1,@2,@3)
Return DbInsert(dbName, tableName, colNameBuilder.ToString(), valueBuilder.ToString())
End Function
''' <summary>
''' 更新指定数据库中指定表数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">指定表名</param>
''' <param name="destStr">更新字符串</param>
''' <param name="condition"></param>
''' <returns></returns>
Public Overridable Function DbUpdate(dbName As String, tableName As String, destStr As String, condition As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Update ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"`{dbName}`.")
End If
cmdText.Append($"`{tableName}`")
cmdText.Append($" Set {destStr} Where {condition};")
Return cmdText.ToString()
End Function
''' <summary>
''' 更新指定数据库中指定表数据,参数名由@{ColName}
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">指定表名</param>
''' <param name="colNames">更新列名的集合</param>
''' <param name="condition">更新列索引条件</param>
''' <returns></returns>
Public Overridable Function DbUpdateParam(dbName As String, tableName As String, colNames As List(Of String), condition As String) As String
Dim destStr As New StringBuilder
For Each colName As String In colNames
If destStr.Length = 0 Then
destStr.Append($"`{colName}` = @{colName}")
Else
destStr.Append($",`{colName}` = @{colName}")
End If
Next
Return DbUpdate(dbName, tableName, destStr.ToString(), condition)
End Function
''' <summary>
''' 更新指定数据库中指定表数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">指定表名</param>
''' <param name="filedDictionary">更新列名与列值键值对</param>
''' <param name="condition">更新列索引条件</param>
''' <returns></returns>
Public Overridable Function DbUpdate(dbName As String, tableName As String, filedDictionary As Dictionary(Of String, String), condition As String) As String
Dim destStr As New StringBuilder
For Each filed As KeyValuePair(Of String, String) In filedDictionary
If destStr.Length = 0 Then
destStr.Append($"`{filed.Key}` = '{filed.Value}'")
Else
destStr.Append($",`{filed.Key}` = '{filed.Value}'")
End If
Next
Return DbUpdate(dbName, tableName, destStr.ToString(), condition)
End Function
''' <summary>
''' 指定数据库中指定数据表增加一列数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="colName">列名</param>
''' <param name="colType">列类型</param>
''' <param name="isNull">是否允许为空</param>
''' <returns></returns>
Public Overridable Function DbAddCol(dbName As String, tableName As String, colName As String, colType As String, Optional isNull As Boolean = True) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Alter Table ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"`{dbName}`.")
End If
cmdText.Append($"`{tableName}`")
cmdText.Append($" Add `{colName}` {colType} {IIf(isNull, "Default Null", "Not Null")};")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中数据表删除一列数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="colName">需要删除的列名,仅一列</param>
''' <returns></returns>
Public Overridable Function DbDropCol(dbName As String, tableName As String, colName As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Alter Table ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"`{dbName}`.")
End If
cmdText.Append($"`{tableName}`")
cmdText.Append($" Drop Column `{colName}`;")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中指定表删除多行数据
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="condition">条件</param>
''' <returns></returns>
Public Overridable Function DbDeleteRows(dbName As String, tableName As String, condition As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Delete From ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"`{dbName}`.")
End If
cmdText.Append($"`{tableName}`")
cmdText.Append($" Where {condition};")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中创建数据表
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="createStr">创建表的列信息字符串</param>
''' <returns></returns>
Public Overridable Function DbCreateTable(dbName As String, tableName As String, createStr As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Create Table ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"`{dbName}`.")
End If
cmdText.Append($"`{tableName}`")
cmdText.Append($" ( {createStr} );")
Return cmdText.ToString()
End Function
''' <summary>
''' 指定数据库中创建数据表,如果存在则不创建
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">表名</param>
''' <param name="createStr">创建表的列信息字符串</param>
''' <returns></returns>
Public Overridable Function DbCreateTableWhenNotExists(dbName As String, tableName As String, createStr As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Create Table if not exists ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"`{dbName}`.")
End If
cmdText.Append($"`{tableName}`")
cmdText.Append($" ( {createStr} );")
Return cmdText.ToString()
End Function
''' <summary>
''' 清空指定数据库中数据表,表依旧存在
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DbDeleteTable(dbName As String, tableName As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Delete From ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"`{dbName}`.")
End If
cmdText.Append($"`{tableName}`")
cmdText.Append($";")
Return cmdText.ToString()
End Function
''' <summary>
''' 删除指定数据库中数据表
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tableName">数据表名</param>
''' <returns></returns>
Public Overridable Function DbDropTable(dbName As String, tableName As String) As String
Dim cmdText As New StringBuilder
cmdText.Append($"Drop Table ")
If String.IsNullOrEmpty(dbName) = False Then
cmdText.Append($"`{dbName}`.")
End If
cmdText.Append($"`{tableName}`")
cmdText.Append($";")
Return cmdText.ToString()
End Function
#End Region
End Class
End Namespace

View File

@@ -0,0 +1,511 @@
Imports System.Data.Common
Imports System.Data.SqlClient
Imports System.Data.SQLite
Imports MySql.Data.MySqlClient
Imports UTS_Core.Database.Mssql
Imports UTS_Core.Database.Mysql
Imports UTS_Core.Database.Sqlite
Namespace Database
''' <summary>
''' 数据库通用命令执行器
''' 时间2020-12-21
''' 作者ML
''' 版本1.0
''' </summary>
Public Class DbExecutor
Implements IDisposable
''' <summary>
''' 数据库类型,目前支持Mysql与Sqlite
''' </summary>
Enum DbTypeEnum
Mysql
Sqlite
Mssql
End Enum
Private ReadOnly _connectionString As String '数据库连接语句
Private ReadOnly _dbType As DbTypeEnum '数据库类型
Private _connection As DbConnection '数据库连接句柄
Private _command As DbCommand '数据库命令句柄
Private _dataAdapter As DbDataAdapter '数据库查询填充器句柄
Private _transaction As DbTransaction '数据库事务句柄
Private _commandHelper As DbCmdHelper '数据库语句填充助手
Sub New(type As DbTypeEnum, connectionString As String)
_dbType = type
_connectionString = connectionString
InitByDbType(_dbType)
End Sub
Private Sub InitByDbType(type As DbTypeEnum)
Select Case type
Case DbTypeEnum.Mysql
_connection = New MySqlConnection()
_command = _connection.CreateCommand()
_dataAdapter = New MySqlDataAdapter() With {.MissingSchemaAction = MissingSchemaAction.AddWithKey}
_commandHelper = New MysqlCmdHelper()
Case DbTypeEnum.Sqlite
_connection = New SQLiteConnection()
_command = _connection.CreateCommand()
_dataAdapter = New SQLiteDataAdapter() With {.MissingSchemaAction = MissingSchemaAction.AddWithKey}
_commandHelper = New SqliteCmdHelper()
Case DbTypeEnum.Mssql
_connection = New SqlConnection()
_command = _connection.CreateCommand()
_dataAdapter = New SqlDataAdapter() With {.MissingSchemaAction = MissingSchemaAction.AddWithKey}
_commandHelper = New MssqlCmdHelper()
End Select
End Sub
Public ReadOnly Property DatabaseType() As DbTypeEnum
Get
Return _dbType
End Get
'Set(value As DbTypeEnum)
' _dbType = value
' '执行上一个数据库的关闭操作
' InitByDbType(_dbType)
'End Set
End Property
Public ReadOnly Property Connection() As DbConnection
Get
Return _connection
End Get
End Property
Public ReadOnly Property Command() As DbCommand
Get
Return _command
End Get
End Property
Public ReadOnly Property CmdHelper() As DbCmdHelper
Get
Return _commandHelper
End Get
End Property
''' <summary>
''' 打开数据库连接
''' </summary>
''' <returns></returns>
Public Function Open() As Boolean
If _connection Is Nothing Then Return False
If String.IsNullOrWhiteSpace(_connectionString) Then Return False
Try
_connection.ConnectionString = _connectionString
_connection.Open()
Catch ex As Exception
Throw
End Try
Return True
End Function
''' <summary>
''' 打开数据库连接
''' </summary>
''' <returns></returns>
Public Async Function OpenAsync() As Task(Of Boolean)
If _connection Is Nothing Then Return False
If String.IsNullOrWhiteSpace(_connectionString) Then Return False
Try
_connection.ConnectionString = _connectionString
Await _connection.OpenAsync()
Catch ex As Exception
Throw
End Try
Return True
End Function
''' <summary>
''' 关闭数据库连接
''' </summary>
Public Sub Close()
If _connection Is Nothing Then Return
If _connection.State = ConnectionState.Closed Then Return
_connection.Close()
End Sub
''' <summary>
''' 创建当前连接的命令执行句柄
''' </summary>
''' <returns></returns>
Public Function CreateCommand() As DbCommand
Return _connection.CreateCommand()
End Function
''' <summary>
''' 运行非查询语句,返回执行该语句受到影响的行数
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Function ExecuteNonQuery(commandText As String) As Integer
Dim result As Integer
Try
_command.CommandText = commandText
result = _command.ExecuteNonQuery()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 运行非查询语句,返回执行该语句受到影响的行数
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Async Function ExecuteNonQueryAsync(commandText As String) As Task(Of Integer)
Dim result As Integer
Try
_command.CommandText = commandText
result = Await _command.ExecuteNonQueryAsync()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 使用命令参数模式执行非查询语句,返回执行该语句受到影响的行数
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Function ExecuteNonQuery(commandText As String, commandParams As DbParameterCollection) As Integer
Dim result As Integer
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
result = _command.ExecuteNonQuery()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 使用命令参数模式执行非查询语句,返回执行该语句受到影响的行数
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Async Function ExecuteNonQueryAsync(commandText As String, commandParams As DbParameterCollection) As Task(Of Integer)
Dim result As Integer
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
result = Await _command.ExecuteNonQueryAsync()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 执行数据库语句,返回数据库读取流的句柄
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Function ExecuteReader(commandText As String) As DbDataReader
Dim result As DbDataReader
Try
_command.CommandText = commandText
result = _command.ExecuteReader()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 执行数据库语句,返回数据库读取流的句柄
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Async Function ExecuteReaderAsync(commandText As String) As Task(Of DbDataReader)
Dim result As DbDataReader
Try
_command.CommandText = commandText
result = Await _command.ExecuteReaderAsync()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 使用命令参数模式执行数据库语句,返回数据库读取流的句柄
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Function ExecuteReader(commandText As String, commandParams As DbParameterCollection) As DbDataReader
Dim result As DbDataReader
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
result = _command.ExecuteReader()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 使用命令参数模式执行数据库语句,返回数据库读取流的句柄
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Async Function ExecuteReaderAsync(commandText As String, commandParams As DbParameterCollection) As Task(Of DbDataReader)
Dim result As DbDataReader
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
result = Await _command.ExecuteReaderAsync()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 执行数据库语句,返回查询结果的第一行第一列的内容
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Function ExecuteScalar(commandText As String) As Object
Dim result As Object
Try
_command.CommandText = commandText
result = _command.ExecuteScalar()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 执行数据库语句,返回查询结果的第一行第一列的内容
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Async Function ExecuteScalarAsync(commandText As String) As Task(Of Object)
Dim result As Object
Try
_command.CommandText = commandText
result = Await _command.ExecuteScalarAsync()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 使用命令参数模式执行数据库语句,返回查询结果的第一行第一列的内容
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Function ExecuteScalar(commandText As String, commandParams As DbParameterCollection) As Object
Dim result As Object
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
result = _command.ExecuteScalar()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 使用命令参数模式执行数据库语句,返回查询结果的第一行第一列的内容
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Async Function ExecuteScalarAsync(commandText As String, commandParams As DbParameterCollection) As Task(Of Object)
Dim result As Object
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
result = Await _command.ExecuteScalarAsync()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 执行数据库语句,返回执行结果返回的数据表,常用于查询命令
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Function ExecuteDataTable(commandText As String, Optional withKey As Boolean = True) As DataTable
Dim dataTable As New DataTable
Try
_command.CommandText = commandText
If withKey Then
_dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
Else
_dataAdapter.MissingSchemaAction = MissingSchemaAction.Add
End If
_dataAdapter.SelectCommand = _command
_dataAdapter.Fill(dataTable)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return dataTable
End Function
''' <summary>
''' 执行数据库语句,返回执行结果返回的数据表,常用于查询命令
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Function ExecuteDataTable(commandText As String, commandParams As DbParameterCollection) As DataTable
Dim dataTable As New DataTable
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
_dataAdapter.SelectCommand = _command
_dataAdapter.Fill(dataTable)
Catch ex As Exception
Throw
End Try
Return dataTable
End Function
''' <summary>
''' 开启事务
''' </summary>
''' <returns></returns>
Public Function BeginTransaction() As DbTransaction
_transaction = _connection.BeginTransaction()
Return _transaction
End Function
''' <summary>
''' 提交事务
''' </summary>
Public Sub CommitTransaction()
Try
_transaction.Commit()
Catch ex As Exception
Throw
End Try
End Sub
''' <summary>
''' 回滚事务
''' </summary>
Public Sub RollbackTransaction()
Try
_transaction.Rollback()
Catch ex As Exception
Throw
End Try
End Sub
''' <summary>
''' 创建数据参数
''' </summary>
''' <param name="type">参数数据类型</param>
''' <param name="ParameterName">参数名称</param>
''' <param name="value">参数值</param>
''' <returns></returns>
Public Function CreateDbParameter(type As DbType, parameterName As String, value As Object) As DbParameter
Dim dbParam As DbParameter = _command.CreateParameter()
dbParam.DbType = type
dbParam.ParameterName = parameterName
dbParam.Value = value
Return dbParam
End Function
''' <summary>
''' 添加数据参数
''' </summary>
''' <param name="type"></param>
''' <param name="parameterName"></param>
''' <param name="value"></param>
''' <returns></returns>
Public Function AddDbParameter(type As DbType, parameterName As String, value As Object) As DbParameter
Dim dbParam As DbParameter = _command.CreateParameter()
dbParam.DbType = type
dbParam.ParameterName = parameterName
dbParam.Value = value
_command.Parameters.Add(dbParam)
Return dbParam
End Function
''' <summary>
''' 清空数据
''' </summary>
Public Sub ClearDbParameter()
_command.Parameters.Clear()
End Sub
''' <summary>
''' 回收资源
''' </summary>
Public Sub Dispose() Implements IDisposable.Dispose
If _connection IsNot Nothing Then
If _connection.State = ConnectionState.Open Then
_connection.Close()
End If
_connection.Dispose()
End If
If _command IsNot Nothing Then _command.Dispose()
If _dataAdapter IsNot Nothing Then _dataAdapter.Dispose()
GC.Collect() '对所有缓存垃圾进行回收
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,10 @@
Namespace Database.Mssql
Public Class MssqlCmdHelper
Inherits DbCmdHelper
Sub New()
FiledSuffix = "["c
FiledPrefix = "]"c
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,222 @@
Imports System.Text
Namespace Database.Mysql
Public Class DataParam
Enum DataTypeEnum
'###############################数值类型#############################
''' <summary>
''' 1 byte,小整数值
''' </summary>
Tinyint
''' <summary>
''' 2 bytes,大整数值
''' </summary>
Smallint
''' <summary>
''' 3 bytes,大整数值
''' </summary>
Mediumint
''' <summary>
''' 4 bytes,大整数值
''' </summary>
Int
''' <summary>
''' 4 bytes,大整数值
''' </summary>
[Integer]
''' <summary>
''' 8 bytes,极大整数值
''' </summary>
Bigint
''' <summary>
''' 4 bytes,单精度浮点数值
''' </summary>
Float
''' <summary>
''' 8 bytes,双精度浮点数值
''' </summary>
[Double]
'####################日期类型###############################
''' <summary>
''' 对DECIMAL(M,D) 如果M>D为M+2否则为D+2.小数值
''' </summary>
[Decimal]
''' <summary>
''' 3 bytes,日期值,YYYY-MM-DD
''' </summary>
[Date]
''' <summary>
''' 3 bytes,时间值或持续时间,HH:MM:SS
''' </summary>
Time
''' <summary>
''' 1 bytes,年份值,YYYY
''' </summary>
Year
''' <summary>
''' 8 bytes,混合日期和时间值,YYYY-MM-DD HH:MM:SS
''' </summary>
Datetime
''' <summary>
''' 4 bytes,混合日期和时间值,时间戳,YYYYMMDD HHMMSS
''' </summary>
Timestamp
'####################字符类型###############################
''' <summary>
''' 0-255 bytes,定长字符串
''' </summary>
[Char]
''' <summary>
''' 0-65535 bytes,变长字符串
''' </summary>
Varchar
''' <summary>
''' 0-255 bytes,不超过 255 个字符的二进制字符串
''' </summary>
Tinyblob
''' <summary>
''' 0-255 bytes,短文本字符串
''' </summary>
Tinytext
''' <summary>
''' 0-65 535 bytes,二进制形式的长文本数据
''' </summary>
Blob
''' <summary>
''' 0-65 535 bytes,长文本数据
''' </summary>
Text
''' <summary>
''' 0-16 777 215 bytes,二进制形式的中等长度文本数据
''' </summary>
Mediumblob
''' <summary>
''' 0-16 777 215 bytes,中等长度文本数据
''' </summary>
Mediumtext
''' <summary>
''' 0-4 294 967 295 bytes,二进制形式的极大文本数据
''' </summary>
Longblob
''' <summary>
''' 0-4 294 967 295 bytes,极大文本数据
''' </summary>
Longtext
End Enum
''' <summary>
''' 列名
''' </summary>
''' <returns></returns>
Public Property ColumnName() As String
''' <summary>
''' 当前值
''' </summary>
''' <returns></returns>
Public Property Value() As String
''' <summary>
''' 默认值
''' </summary>
''' <returns></returns>
Public Property DefaultValue() As String
''' <summary>
''' 数据类型
''' </summary>
''' <returns></returns>
Public Property DataType() As DataTypeEnum
''' <summary>
''' 数据类型长度
''' </summary>
''' <returns></returns>
Public Property DataTypeLength() As Integer
''' <summary>
''' 数据类型是否带符号
''' </summary>
''' <returns></returns>
Public Property IsUnsigned() As Boolean
''' <summary>
''' 是否允许为空
''' </summary>
''' <returns></returns>
Public Property IsNull() As Boolean = True
''' <summary>
''' 是否自动增长
''' </summary>
''' <returns></returns>
Public Property IsAutoIncrement() As Boolean
''' <summary>
''' 是否为主键
''' </summary>
''' <returns></returns>
Public Property IsPrimaryKey() As Boolean
Public Function ToAddColString() As String
Dim sb As New StringBuilder
sb.Append($"`{ColumnName}`")
Select Case DataType
Case DataTypeEnum.Varchar,DataTypeEnum.[Char]
sb.Append($" {DataType}({DataTypeLength}) ")
Case DataTypeEnum.Int
sb.Append($" {DataType}")
if IsUnsigned Then sb.Append($" Unsigned")
If IsAutoIncrement Then sb.Append($" AUTO_INCREMENT")
Case Else
sb.Append($" {DataType}")
End Select
sb.Append(IIf(IsNull, " Default Null", " Not Null"))
If IsPrimaryKey Then
sb.Append($" PRIMARY KEY")
End If
Return sb.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,13 @@
Imports System.Text
Namespace Database.Mysql
Public Class MysqlCmdHelper
Inherits DbCmdHelper
Sub New
FiledSuffix = "`"c
FiledPrefix = "`"c
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,106 @@
Imports System.Text
Namespace Database.Sqlite
Public Class DataParam
Enum DataTypeEnum
Varchar
Nchar
Blob
Bit
Datetime
[Decimal]
Real
UniqueIdentifier
Int
[Integer]
TinyInt
[Single]
Nvarchar
SmallInt
SmallUint
Uint
UnsignedInteger
End Enum
''' <summary>
''' 列名
''' </summary>
''' <returns></returns>
Public Property ColumnName() As String
''' <summary>
''' 当前值
''' </summary>
''' <returns></returns>
Public Property Value() As String
''' <summary>
''' 默认值
''' </summary>
''' <returns></returns>
Public Property DefaultValue() As String
''' <summary>
''' 数据类型
''' </summary>
''' <returns></returns>
Public Property DataType() As DataTypeEnum
''' <summary>
''' 数据类型长度
''' </summary>
''' <returns></returns>
Public Property DataTypeLength() As Integer
''' <summary>
''' 是否允许为空
''' </summary>
''' <returns></returns>
Public Property IsNull() As Boolean = True
''' <summary>
''' 是否自动增长
''' </summary>
''' <returns></returns>
Public Property IsAutoIncrement() As Boolean
''' <summary>
''' 是否为主键
''' </summary>
''' <returns></returns>
Public Property IsPrimaryKey() As Boolean
''' <summary>
''' 是否为唯一值
''' </summary>
''' <returns></returns>
Public Property IsUnique() As Boolean
Public Function ToAddColString() As String
Dim sb As New StringBuilder
sb.Append($"`{ColumnName}`")
Select Case DataType
Case DataTypeEnum.Varchar, DataTypeEnum.Nchar, DataTypeEnum.Nvarchar
sb.Append($" {DataType}({DataTypeLength}) ")
Case DataTypeEnum.Int,DataTypeEnum.Integer
sb.Append($" {DataType}")
Case Else
sb.Append($" {DataType}")
End Select
If IsAutoIncrement Then sb.Append($" AUTOINCREMENT")
sb.Append(IIf(IsNull, " Default Null", " Not Null"))
If IsPrimaryKey Then
sb.Append($" PRIMARY KEY")
End If
Return sb.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,20 @@
Namespace Database.Sqlite
Public Class SqliteCmdHelper
Inherits DbCmdHelper
Sub New()
FiledSuffix = "["c
FiledPrefix = "]"c
End Sub
''' <summary>
''' 查询指定数据表的信息
''' </summary>
''' <param name="tableName"></param>
''' <returns></returns>
Public Overrides Function SearchTableInfo(tableName As String) As String
Return $"select * from sqlite_master where tbl_name = '{tableName}';"
End Function
End Class
End Namespace

View File

@@ -0,0 +1,4 @@
Uts_Core V0.1
1.测试流程基本编辑完成,后续可能会增加表格树状节点。
2.自动获取串口功能完成,串口通讯与数据处理功能尚待商榷。
3.测试流程功能尚未添加。

View File

@@ -0,0 +1,48 @@
Imports System.ComponentModel
Imports System.Reflection
Namespace EnumExtend
''' <summary>
''' 枚举扩展类
''' </summary>
Public Class EnumExtender
''' <summary>
''' 获取枚举描述特性
''' </summary>
''' <param name="enumValue">需要获取特性的枚举值</param>
''' <returns>枚举描述特性</returns>
Public Shared Function GetEnumDescription(enumValue As [Enum]) As String
Dim field As FieldInfo = enumValue.GetType().GetField(enumValue.ToString())
Dim attributes() As DescriptionAttribute =
DirectCast(field.GetCustomAttributes(GetType(DescriptionAttribute),
False), DescriptionAttribute())
If attributes.Length > 0 Then
Return attributes(0).Description
Else
Return field.Name
End If
End Function
''' <summary>
''' 获取当前枚举所有描述特性值,未填的枚举采用枚举名
''' </summary>
''' <param name="enumType">枚举类型</param>
''' <returns></returns>
Public Shared Function GetEnumAllDesc(enumType As Type) As String()
Dim fields As FieldInfo() = enumType.GetFields( BindingFlags.Static Or BindingFlags.Public)
Dim fieldsDesc As New List(Of String)
For Each field As FieldInfo In fields
Dim attributes() As DescriptionAttribute =
DirectCast(field.GetCustomAttributes(GetType(DescriptionAttribute),
False), DescriptionAttribute())
If attributes.Length > 0 Then
fieldsDesc.Add(attributes(0).Description)
Else
fieldsDesc.Add(field.Name)
End If
Next
Return fieldsDesc.ToArray()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,539 @@
Imports System.Text
Namespace Expression
''' <summary>
''' 字符算数表达式求和
''' </summary>
Public Class StringExpression
''' <summary>精度</summary>
Private Shared _doublePrecision As Double = 0.000001
''' <summary>
''' 替换占位符
''' </summary>
''' <param name="str">字符串表达式</param>
''' <returns></returns>
Public Shared Function UseMarkSymbolReplace(str As String) As String
Dim destString As New StringBuilder
str = str.Replace(" ", "")
str = str.Replace(">>", "r") 'right move
str = str.Replace("<<", "l") ' left move
str = str.Replace("||", "o") 'or
str = str.Replace("&&", "a") 'and
str = str.Replace(">=", "g") 'greater equal
str = str.Replace("<=", "s") 'small equal
str = str.Replace("<>", "u") 'unequal
str = str.Replace("!=", "u") 'unequal
str = str.Replace("==", "e") 'equal
For i As Integer = 0 To str.Length - 1 '替换负号
If i = 0 Then
If str.Chars(i) = "-"c Then
destString.Append("0"c)
End If
destString.Append(str.Chars(i))
ElseIf str.Chars(i) = "-"c AndAlso str.Chars(i - 1) = "("c Then
destString.Append("0"c)
destString.Append(str.Chars(i))
Else
destString.Append(str.Chars(i))
End If
Next
Return destString.ToString()
End Function
''' <summary>
''' 替换表达式式中的十六进制占位符为实际内容,例如替换B4为buf中的第4位即buf(4)的值
''' </summary>
''' <param name="buf"></param>
''' <param name="expressionString"></param>
''' <returns></returns>
Public Shared Function ReplaceBytes(buf() As Byte, expressionString As String) As String
Dim ch As Char
Dim count As Integer = 0
Dim str As String = ""
Dim tmp As Integer
For i As Integer = 0 To expressionString.Length - 1
If expressionString.Chars(i) = "B"c Then
ch = expressionString.Chars(i + count + 1)
While IsNumeric(ch)
count += 1
If i + count + 1 >= expressionString.Length Then Exit While
ch = expressionString.Chars(i + count + 1)
End While
If count <= 0 Then Return ""
Dim st As String = Mid(expressionString, i + 1 + 1, count)
tmp = Convert.ToInt32(st)
If tmp > buf.Length - 1 Then Return ""
str += buf(tmp).ToString
i += count
count = 0
Else
str += expressionString.Chars(i)
End If
Next
Return str
End Function
''' <summary>
''' 获取表达式转换后的结果是否为真,0、false、空字符为假1true为真, 其余为通过计算不为0判断真假
''' </summary>
''' <param name="exp"></param>
''' <returns></returns>
Public Shared Function GetBooleanResult(exp As String) As Boolean
If exp Is Nothing Then Return False
If String.IsNullOrWhiteSpace(exp) Then Return False
exp = exp.ToLower()
If exp.Equals($"false") Then Return False
If exp.Equals($"true") Then Return True
exp = exp.Replace("false", "0"c)
exp = exp.Replace("true", "1"c)
Dim str As String = GetDoubleExpressionResult(exp).ToString()
Console.WriteLine($"Result:{str}")
Return Math.Abs(GetDoubleExpressionResult(exp) - 0) > _doublePrecision
End Function
''' <summary>
''' 获取double类型运算式字符串后缀表达式
''' </summary>
''' <param name="str">字符串表达式</param>
''' <returns></returns>
Public Shared Function GetDoubleExpressionResult(str As String) As Double
Dim isNum As Boolean
Dim numStack As New Stack(Of Double)
Dim operatorStack As New Stack(Of Char)
Dim num1, num2 As Double
Dim priority As Integer
Dim ch As Char
str = UseMarkSymbolReplace(str)
For i As Integer = 0 To str.Length - 1
ch = str.Chars(i)
If ch >= "0"c AndAlso ch <= "9"c Then '数字处理
Dim tmpStr As String = String.Empty
Dim len As Integer = 1
tmpStr += ch
isNum = True
While isNum
If i + len >= str.Length Then Exit While
ch = str.Chars(i + len)
If ch >= "0"c AndAlso ch <= "9"c Then
tmpStr += ch
len += 1
ElseIf ch = "."c Then
tmpStr += ch
len += 1
Else
isNum = False
End If
End While
numStack.Push(Double.Parse(tmpStr))
i += len - 1
ElseIf CheckCharValidity(ch) = 1 Then '运算符号
If operatorStack.Count = 0 Then
operatorStack.Push(ch)
Else
priority = GetCharacterPriority(ch) '获取当前符号的优先级
While operatorStack.Count > 0 AndAlso GetCharacterPriority(operatorStack.Peek) < 11 AndAlso priority <= GetCharacterPriority(operatorStack.Peek)
num1 = numStack.Pop
num2 = numStack.Pop
numStack.Push(GetDoubleResult(num2, num1, operatorStack.Pop))
End While
If priority = 0 Then '为后半边括号
operatorStack.Pop()
Else '为前半边括号
operatorStack.Push(ch)
End If
End If
End If
If i = str.Length - 1 Then
priority = -1
While operatorStack.Count > 0 AndAlso GetCharacterPriority(operatorStack.Peek) < 11 AndAlso priority <= GetCharacterPriority(operatorStack.Peek)
num1 = numStack.Pop
num2 = numStack.Pop
numStack.Push(GetDoubleResult(num2, num1, operatorStack.Pop))
End While
End If
Next
Return Math.Round(numStack.Pop, 3) '计算保留小数位三位
End Function
''' <summary>
''' 获取小数类型运算结果
''' </summary>
''' <param name="num1">浮点型数1</param>
''' <param name="num2">浮点型数2</param>
''' <param name="c">运算符</param>
''' <returns></returns>
Public Shared Function GetDoubleResult(num1 As Double, num2 As Double, c As Char) As Double
Dim result As Double
Select Case c
Case "*"c
result = num1 * num2
Case "/"c
If Math.Abs(num2 - 0) < _doublePrecision Then Throw New Exception($"除数为0执行失败")
result = num1 / num2
Case "%"c
result = num1 Mod num2
Case "+"c
result = num1 + num2
Case "-"c
result = num1 - num2
Case "l"c '左移
result = CInt(num1) << CInt(num2)
Case "r"c '右移
result = CInt(num1) >> CInt(num2)
Case "&"c
result = CInt(num1) And CInt(num2)
Case "^"c
result = CInt(num1) Xor CInt(num2)
Case "|"c
result = CInt(num1) Or CInt(num2)
Case ">"c '大于等于
result = CInt(IIf(num1 > num2, 1, 0))
Case "<"c '大于等于
result = CInt(IIf(num1 < num2, 1, 0))
Case "="c '等于
result = CInt(IIf(Math.Abs(num1 - num2) < _doublePrecision, 1, 0))
Case "g"c '大于等于
result = CInt(IIf(num1 >= num2, 1, 0))
Case "s"c '小于等于
result = CInt(IIf(num1 <= num2, 1, 0))
Case "u"c '不等于
result = CInt(IIf(Math.Abs(num1 - num2) > _doublePrecision, 1, 0))
Case "e"c '等于
result = CInt(IIf(Math.Abs(num1 - num2) < _doublePrecision, 1, 0))
Case "a"c '逻辑与
If num1 > 0 AndAlso num2 > 0 Then
result = 1
Else
result = 0
End If
Case "o"c '逻辑或
If num1 > 0 OrElse num2 > 0 Then
result = 1
Else
result = 0
End If
Case Else
Throw New Exception($"未知的操作符:[{c}]")
End Select
Return result
End Function
''' <summary>
''' 获取符号的优先级
''' </summary>
''' <param name="c">运算符号</param>
''' <returns></returns>
Private Shared Function GetCharacterPriority(c As Char) As Integer
Dim intNum As Integer
Select Case c
Case "("c
intNum = 11
Case "*"c, "/"c, "%"c
intNum = 10
Case "+"c, "-"c
intNum = 9
Case "l"c, "r"c
intNum = 8
Case ">"c, "<"c, "b"c, "s"c
intNum = 7
Case "="c, "u"c, "e"c
intNum = 6
Case "&"c
intNum = 5
Case "^"c
intNum = 4
Case "|"c
intNum = 3
Case "a"c
intNum = 2
Case "o"c
intNum = 1
Case ")"c
intNum = 0
Case Else
Throw New Exception($"未知的操作符:[{c}]")
End Select
Return intNum
End Function
''' <summary>
''' 校验字符合法性0为数字1为运算符-1为未使用的运算符
''' </summary>
''' <param name="c">需要校验的字符</param>
''' <returns></returns>
Private Shared Function CheckCharValidity(c As Char) As Integer
Select Case c
Case "1"c, "2"c, "3"c, "4"c, "5"c, "6"c, "7"c, "8"c, "9"c, "0"c
Return 0
Case "+"c, "-"c, "*"c, "/"c, "%"c, "^"c, "|"c, "&"c, "("c, ")"c, "o"c, "a"c, "l"c, "r"c, "."c,
"u"c, "g"c, "s"c, "<"c, ">"c, "="c, "e"c
Return 1
Case Else
Return -1
End Select
End Function
''' <summary>
''' 校验运算式字符串合法性(todo:待进一步完善检测逻辑)
''' </summary>
''' <param name="str">需要校验的字符串</param>
''' <returns></returns>
Public Shared Function CheckExpressionString(str As String) As Boolean
str = str.Replace(" ", "")
For i As Integer = 0 To str.Length - 1
If CheckCharValidity(str.Chars(i)) = -1 Then
Return False
End If
Next
Return True
End Function
'''' <summary>
'''' 获取int类型运算式字符串后缀表达式
'''' </summary>
'''' <param name="str">字符串表达式</param>
'''' <returns></returns>
'Public Shared Function GetIntegerExpressionResult(str As String) As Integer
' Dim isNum As Boolean
' Dim numberStack As New Stack(Of Integer)
' Dim operatorStack As New Stack(Of Char)
' Dim num1, num2, priority As Integer
' str = UseMarkSymbolReplace(str, False)
' For Each c As Char In str
' If c >= "0"c AndAlso c <= "9"c Then
' If isNum Then
' Dim tmp As Integer = numberStack.Pop
' tmp = tmp * 10 + Integer.Parse(c.ToString)
' numberStack.Push(tmp)
' Else
' numberStack.Push(Integer.Parse(c.ToString))
' isNum = True
' End If
' ElseIf CheckCharValidity(c) = 1 Then
' isNum = False
' If operatorStack.Count = 0 Then
' operatorStack.Push(c)
' Else
' priority = GetCharacterPriority(c)
' While operatorStack.Count > 0 AndAlso GetCharacterPriority(operatorStack.Peek) < 11 AndAlso priority <= GetCharacterPriority(operatorStack.Peek)
' num1 = numberStack.Pop
' num2 = numberStack.Pop
' numberStack.Push(GetIntegerResult(num2, num1, operatorStack.Pop))
' End While
' If priority = 0 Then
' operatorStack.Pop()
' Else
' operatorStack.Push(c)
' End If
' End If
' End If
' If c = str.Chars(str.Length - 1) Then
' priority = GetCharacterPriority(c)
' While operatorStack.Count > 0 AndAlso GetCharacterPriority(operatorStack.Peek) < 11 AndAlso priority <= GetCharacterPriority(operatorStack.Peek)
' num1 = numberStack.Pop
' num2 = numberStack.Pop
' numberStack.Push(GetIntegerResult(num2, num1, operatorStack.Pop))
' End While
' End If
' Next
' Return numberStack.Pop
'End Function
'''' <summary>
'''' 获取整形的运算结果
'''' </summary>
'''' <param name="num1">整数1</param>
'''' <param name="num2">整数2</param>
'''' <param name="c">运算符</param>
'''' <returns>预算结果</returns>
'Public Shared Function GetIntegerResult(num1 As Integer, num2 As Integer, c As Char) As Integer
' Dim result As Integer
' Select Case c
' Case "*"c
' result = num1 * num2
' Case "/"c
' result = num1 \ num2
' Case "%"c
' result = num1 Mod num2
' Case "+"c
' result = num1 + num2
' Case "-"c
' result = num1 - num2
' Case "L"c
' result = num1 << num2
' Case "R"c
' result = num1 >> num2
' Case "&"c
' result = num1 And num2
' Case "^"c
' result = num1 Xor num2
' Case "|"c
' result = num1 Or num2
' Case ">"c '大于等于
' result = CInt(IIf(num1 > num2, 1, 0))
' Case "<"c '大于等于
' result = CInt(IIf(num1 < num2, 1, 0))
' Case "="c '等于
' result = CInt(IIf(num1 = num2, 1, 0))
' Case "g"c '大于等于
' result = CInt(IIf(num1 >= num2, 1, 0))
' Case "l"c '小于等于
' result = CInt(IIf(num1 <= num2, 1, 0))
' Case "u"c '不等于
' result = CInt(IIf(num1 <> num2, 1, 0))
' Case "e"c '等于
' result = CInt(IIf(num1 = num2, 1, 0))
' Case "A"c
' If num1 > 0 AndAlso num2 > 0 Then
' result = 1
' Else
' result = 0
' End If
' Case "O"c
' If num1 > 0 OrElse num2 > 0 Then
' result = 1
' Else
' result = 0
' End If
' Case Else
' Throw New Exception($"未知的操作符:[{c}]")
' End Select
' Return result
'End Function
' Private Shared ReadOnly _operateList As New List(Of Char) From {"+"c, "*"c, "/"c, "%"c, "-"c, "^"c, "|"c, "&"c}
'Private Shared Function CheckDoubleResultChar(exp As String) As Boolean
' For i As Integer = 0 To exp.Length - 1
' If exp.Chars(i) > "0"c AndAlso exp.Chars(i) < "9"c Then
' '有效数字
' Continue For
' End If
' Select Case exp.Chars(i)
' Case "-"c
' '减运算符前不能为运算符
' Case "+"c, "*"c, "/"c, "%"c
' '运算符前后位必须为数字
' If i = 0 Then Return False '不能为开头
' If i = exp.Length - 1 Then Return False '不能为结尾
' ' If exp.Chars(i + 1) Then Return False'下一位不能
' Case "!"c'是否应该支持
' '按位操作前后须有数字
' Case "^"c
' '按位操作前后须有数字
' Case "|"c
' '按位操作前后须有数字
' '逻辑操作前后须有数字
' '确定是否为逻辑操作
' Case "&"c
' '按位操作前后须有数字
' '逻辑操作前后须有数字
' '确定是否为逻辑操作
' Case ">"c
' '判断逻辑符或是组合符号
' Case "<"c
' '判断逻辑符或是组合符号
' Case "="c
' '判断逻辑符或是组合符号
' Case "."c
' '前后必为数字
' Case "("c
' '括号必须匹配
' Case ")"c
' '括号必须匹配
' Case " "c
' '空格忽略
' Case Else
' End Select
' Next
' Return False
'End Function
''' <summary>
''' 返回表达式的值 'Momo 2022-11-10 增加 、Momo 2023-12-15 错误时抛出错误而不是弹窗
''' </summary>
''' <returns></returns>
Public Shared Function ExecuteLimit(ByVal strExpression As String, ByRef dblResult As String) As Boolean
'检测有无需要计算的表达式
If String.IsNullOrWhiteSpace(strExpression) Then
'MsgBox(strExpression & " 是空白值或表达式,执行失败!")
'Throw New Exception(strExpression & " 是空白值或表达式,执行失败!") 'Momo 2023-12-15 错误时抛出错误而不是弹窗
Return False
End If
'检测表达式的有效性
If StringExpression.CheckExpressionString(strExpression) = False Then
'MsgBox(strExpression & " 是无效值或表达式,执行失败!")
'Throw New Exception(strExpression & " 是无效值或表达式,执行失败!") 'Momo 2023-12-15 错误时抛出错误而不是弹窗
Return False
End If
Try
dblResult = StringExpression.GetDoubleExpressionResult(strExpression).ToString()
Return True
Catch ex As Exception
'MsgBox(strExpression & " 表达式计算失败,执行失败!")
'Throw New Exception(strExpression & " 表达式计算失败,执行失败!") 'Momo 2023-12-15 错误时抛出错误而不是弹窗
Return False
End Try
End Function
End Class
End Namespace

View File

@@ -0,0 +1,248 @@
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.IO
Imports System.Windows.Forms
Namespace ImageProcessor
Public Class ImageProcessor
Public Shared Function GetBitmapImage(path As String) As Image
Using fileStream As New FileStream(path, FileMode.Open, FileAccess.Read)
Dim byteLength As Integer = CInt(fileStream.Length)
Dim fileBytes(byteLength - 1) As Byte
fileStream.Read(fileBytes, 0, byteLength)
fileStream.Close()
Return Image.FromStream(New MemoryStream(fileBytes))
End Using
End Function
Public Shared Function ImagePathToBytes(path As String) As Byte()
Using fileStream As New FileStream(path, FileMode.Open, FileAccess.Read)
Dim byteLength As Integer = CInt(fileStream.Length)
Dim fileBytes(byteLength - 1) As Byte
fileStream.Read(fileBytes, 0, byteLength)
fileStream.Close()
Return fileBytes
End Using
End Function
''' <summary>
''' 将图像格式转换为二进制数组,以jpeg的格式
''' </summary>
''' <param name="img"></param>
''' <returns></returns>
Public Shared Function ImageToBytes(img As Image) As Byte()
Dim ms As New MemoryStream()
If img Is Nothing Then Return New Byte() {}
img.Save(ms, ImageFormat.Jpeg)
Return ms.GetBuffer()
End Function
''' <summary>
''' 将图像格式转换为二进制数组
''' </summary>
''' <param name="img">图像</param>
''' <param name="format">图像格式</param>
''' <returns></returns>
Public Shared Function ImageToBytes(img As Image, format As ImageFormat) As Byte()
Dim ms As New MemoryStream()
If img Is Nothing Then Return New Byte() {}
img.Save(ms, format)
Return ms.GetBuffer()
End Function
''' <summary>
''' 将二进制数组转换为图像格式
''' </summary>
''' <param name="bytes"></param>
''' <returns></returns>
Public Shared Function BytesToImage(bytes() As Byte) As Image
Dim ms As New MemoryStream(bytes)
Dim img As Image = Nothing
Try
img = Image.FromStream(ms)
Catch ex As Exception
Console.WriteLine($"BytesToImage Error:{ex.Message}")
End Try
Return img
End Function
''' <summary>
''' 将图片变更为String格式,默认PNG格式保存
''' </summary>
''' <param name="img"></param>
''' <returns></returns>
Public Shared Function ImageToString(img As Image) As String
If img Is Nothing Then Return String.Empty
Using ms As New MemoryStream()
img.Save(ms, ImageFormat.Png) 'png格式支持存储文件中并还原,其他格式存在问题
Dim buffer6() As Byte = ms.GetBuffer
Return Convert.ToBase64String(buffer6)
End Using
End Function
''' <summary>
''' 将图片变更为String格式
''' </summary>
''' <param name="img"></param>
''' <param name="format">保存格式</param>
''' <returns></returns>
Public Shared Function ImageToString(img As Image, format As Imaging.ImageFormat) As String
If img Is Nothing Then Return String.Empty
Using ms As New MemoryStream()
img.Save(ms, format)
Dim buffer() As Byte = ms.GetBuffer
Return Convert.ToBase64String(buffer)
End Using
End Function
''' <summary>
''' 将图片string还原为图片格式
''' </summary>
''' <param name="imgString"></param>
''' <returns></returns>
Public Shared Function StringToImage(imgString As String) As Image
If String.IsNullOrEmpty(imgString) Then Return Nothing
Using ms As New MemoryStream(Convert.FromBase64String(imgString))
Return Image.FromStream(ms, True)
End Using
End Function
''' <summary>
''' 压缩图像到指定的高度与宽度
''' </summary>
''' <param name="bitmap">图像</param>
''' <param name="maxWidth">指定的宽度</param>
''' <param name="maxHeight">指定的高度</param>
''' <returns></returns>
Public Shared Function CompressImageWithSize(bitmap As Image, Optional maxWidth As Integer = 120, Optional maxHeight As Integer = 90) As System.Drawing.Bitmap
If bitmap Is Nothing Then Return Nothing
Dim actualWidth As Integer = CInt(IIf(bitmap.Width < maxWidth, bitmap.Width, maxWidth))
Dim actualHeight As Integer = CInt(IIf(bitmap.Height < maxHeight, bitmap.Height, maxHeight))
Dim actualBitmap As New System.Drawing.Bitmap(actualWidth, actualHeight)
Using g As Graphics = System.Drawing.Graphics.FromImage(actualBitmap)
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default
g.DrawImage(bitmap, New System.Drawing.Rectangle(0, 0, actualWidth, actualHeight), New System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), System.Drawing.GraphicsUnit.Pixel)
End Using
Return actualBitmap
End Function
''' <summary>
''' 压缩图像,根据宽度比
''' </summary>
''' <param name="bitmap">图像</param>
''' <param name="maxWidth">指定的宽度</param>
''' <returns></returns>
Public Shared Function CompressImageWithWidth(bitmap As Bitmap, Optional maxWidth As Integer = 600) As System.Drawing.Bitmap
If bitmap Is Nothing Then Return Nothing
If bitmap.Width = maxWidth Then Return bitmap
Dim actualWidth As Integer = CInt(IIf(bitmap.Width < maxWidth, bitmap.Width, maxWidth))
Dim actualHeight As Integer = CInt(Math.Round(bitmap.Height * (actualWidth / bitmap.Width)))
Dim actualBitmap As New System.Drawing.Bitmap(actualWidth, actualHeight)
Using g As Graphics = System.Drawing.Graphics.FromImage(actualBitmap)
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default
g.DrawImage(bitmap, New System.Drawing.Rectangle(0, 0, actualWidth, actualHeight), New System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), System.Drawing.GraphicsUnit.Pixel)
End Using
Return actualBitmap
End Function
''' <summary>
''' 压缩图像,根据高度比
''' </summary>
''' <param name="bitmap">图像</param>
''' <param name="maxHeight">指定的高度</param>
''' <returns></returns>
Public Shared Function CompressImageWithHeight(bitmap As Bitmap, Optional maxHeight As Integer = 450) As System.Drawing.Bitmap
If bitmap Is Nothing Then Return Nothing
If bitmap.Height < maxHeight Then Return bitmap
Dim actualHeight As Integer = CInt(IIf(bitmap.Height < maxHeight, bitmap.Height, maxHeight))
Dim actualWidth As Integer = CInt(Math.Round(bitmap.Width * (actualHeight / bitmap.Height)))
Dim actualBitmap As New System.Drawing.Bitmap(actualWidth, actualHeight)
Using g As Graphics = System.Drawing.Graphics.FromImage(actualBitmap)
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default
g.DrawImage(bitmap, New System.Drawing.Rectangle(0, 0, actualWidth, actualHeight), New System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), System.Drawing.GraphicsUnit.Pixel)
End Using
Return actualBitmap
End Function
''' <summary>
''' 按指定比例有损的压缩图像
''' </summary>
''' <param name="bitmap"></param>
''' <param name="encoding"></param>
''' <param name="quality"></param>
''' <returns></returns>
Public Shared Function CompressImageWithQuality(bitmap As Bitmap, encoding As Imaging.ImageCodecInfo, Optional quality As Integer = 20) As Bitmap
If bitmap Is Nothing Then Return Nothing
Dim ps As New System.Drawing.Imaging.EncoderParameters(1)
ps.Param(0) = New EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality)
Dim ms As New MemoryStream
bitmap.Save(ms, encoding, ps)
Dim compressedBitmap As New System.Drawing.Bitmap(ms)
Return compressedBitmap
End Function
''' <summary>
''' 获取图片的代码器信息
''' </summary>
''' <returns></returns>
Public Shared Function GetImageEncoders() As Dictionary(Of String, System.Drawing.Imaging.ImageCodecInfo)
Dim result As New Dictionary(Of String, System.Drawing.Imaging.ImageCodecInfo)
Dim encoders As List(Of ImageCodecInfo) = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders().ToList()
For Each encode As ImageCodecInfo In encoders
result.Add(encode.MimeType, encode)
Next
Return result
End Function
''' <summary>
''' 截取整个电脑屏幕
''' </summary>
''' <returns></returns>
Public Shared Function CaptureScreen() As Image
Dim startPoint As New Point(0, 0)
Dim regionSize As New Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
Dim pic As New Bitmap(regionSize.Width, regionSize.Height)
Using g As Graphics = Graphics.FromImage(pic)
g.CopyFromScreen(startPoint, startPoint, regionSize)
End Using
Return pic
End Function
''' <summary>
''' 截取整个电脑屏幕,并指定文件路径下生成jpg格式文件。
''' </summary>
Public Shared Sub SaveScreenCapture(path As String)
Dim startPoint As New Point(0, 0)
Dim regionSize As New Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
Dim pic As New Bitmap(regionSize.Width, regionSize.Height)
Using g As Graphics = Graphics.FromImage(pic)
g.CopyFromScreen(startPoint, startPoint, regionSize)
pic.Save(path, ImageFormat.Jpeg)
End Using
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,13 @@
'------------------------------------------------------------------------------
' <auto-generated>
' 此代码由工具生成。
' 运行时版本:4.0.30319.42000
'
' 对此文件的更改可能会导致不正确的行为,并且如果
' 重新生成代码,这些更改将会丢失。
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>false</MySubMain>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<ApplicationType>1</ApplicationType>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

View File

@@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' 有关程序集的一般信息由以下
' 控制。更改这些特性值可修改
' 与程序集关联的信息。
'查看程序集特性的值
<Assembly: AssemblyTitle("UTS_Core")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("")>
<Assembly: AssemblyProduct("UTS_Core")>
<Assembly: AssemblyCopyright("Copyright © 2020")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'如果此项目向 COM 公开,则下列 GUID 用于 typelib 的 ID
<Assembly: Guid("af21bb12-fc57-4d45-9cdf-0ecf12840569")>
' 程序集的版本信息由下列四个值组成:
'
' 主版本
' 次版本
' 生成号
' 修订号
'
'可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
'通过使用 "*",如下所示:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>

View File

@@ -0,0 +1,63 @@
'------------------------------------------------------------------------------
' <auto-generated>
' 此代码由工具生成。
' 运行时版本:4.0.30319.42000
'
' 对此文件的更改可能会导致不正确的行为,并且如果
' 重新生成代码,这些更改将会丢失。
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'此类是由 StronglyTypedResourceBuilder
'类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
'若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
'(以 /str 作为命令选项),或重新生成 VS 项目。
'''<summary>
''' 一个强类型的资源类,用于查找本地化的字符串等。
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' 返回此类使用的缓存的 ResourceManager 实例。
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("UTS_Core.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' 重写当前线程的 CurrentUICulture 属性,对
''' 使用此强类型资源类的所有资源查找执行重写。
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
End Module
End Namespace

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

133
UTS_Core/My Project/Settings.Designer.vb generated Normal file
View File

@@ -0,0 +1,133 @@
'------------------------------------------------------------------------------
' <auto-generated>
' 此代码由工具生成。
' 运行时版本:4.0.30319.42000
'
' 对此文件的更改可能会导致不正确的行为,并且如果
' 重新生成代码,这些更改将会丢失。
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.6.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
#Region "My.Settings 自动保存功能"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property IsAutoLogin() As Boolean
Get
Return CType(Me("IsAutoLogin"),Boolean)
End Get
Set
Me("IsAutoLogin") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property IsRecordPassWord() As Boolean
Get
Return CType(Me("IsRecordPassWord"),Boolean)
End Get
Set
Me("IsRecordPassWord") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("")> _
Public Property UserAccount() As String
Get
Return CType(Me("UserAccount"),String)
End Get
Set
Me("UserAccount") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("")> _
Public Property UserPassword() As String
Get
Return CType(Me("UserPassword"),String)
End Get
Set
Me("UserPassword") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("0")> _
Public Property SpcMain_SplitterDistance() As Integer
Get
Return CType(Me("SpcMain_SplitterDistance"),Integer)
End Get
Set
Me("SpcMain_SplitterDistance") = value
End Set
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.UTS_Core.My.MySettings
Get
Return Global.UTS_Core.My.MySettings.Default
End Get
End Property
End Module
End Namespace

View File

@@ -0,0 +1,21 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="My" GeneratedClassName="MySettings" UseMySettingsClassName="true">
<Profiles />
<Settings>
<Setting Name="IsAutoLogin" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="IsRecordPassWord" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="UserAccount" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="UserPassword" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="SpcMain_SplitterDistance" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
</Settings>
</SettingsFile>

164
UTS_Core/Security/Aes128.vb Normal file
View File

@@ -0,0 +1,164 @@
Imports System.Security.Cryptography
Imports System.Text
Namespace Security
Public Class Aes128
'todo解密秘钥不应出现明文考虑修改为十六进制数组
''' <summary>服务器密钥</summary>
Public Shared ReadOnly ServerAesKey As String = "^5GHo96tr5ff&*Hphg7665^fyu&uOhj0j[0[(jOIhI&g77FgghO*hhHY8h(*H&-987OygO8yg*yS$&G&aG9*&6g96*&7^RA65s76r*&&G(*(7(Gyg7#7Ff7F*&(*&&^"
''' <summary>
''' 加密文本为Base64编码
''' </summary>
''' <param name="source">需要加密字符串</param>
''' <param name="key">密钥</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function EncryptStr(source As String, key As String) As String
Dim inBuff As Byte()
Dim crypt As ICryptoTransform
Dim msp As New MD5CryptoServiceProvider
Using encrypt As Aes = Aes.Create("AES")
Dim keyBytes() As Byte = msp.ComputeHash(Encoding.UTF8.GetBytes(key))
encrypt.BlockSize = keyBytes.Length * 8
encrypt.Key = keyBytes
encrypt.IV = keyBytes
encrypt.Mode = CipherMode.CBC
encrypt.Padding = PaddingMode.PKCS7
crypt = encrypt.CreateEncryptor()
End Using
inBuff = Encoding.UTF8.GetBytes(source)
msp.Dispose()
Return Convert.ToBase64String(crypt.TransformFinalBlock(inBuff, 0, inBuff.Length))
End Function
''' <summary>
''' 加密文本为Base64编码
''' </summary>
''' <param name="source">需要加密字符串</param>
''' <param name="key">密钥</param>
''' <returns></returns>
Public Shared Function EncryptStr(ByVal source As String, key() As Byte) As String
Dim inBuff As Byte()
Dim crypt As ICryptoTransform
Dim msp As New MD5CryptoServiceProvider
Using encrypt As Aes = Aes.Create("AES")
Dim keyBytes() As Byte = msp.ComputeHash(key)
encrypt.BlockSize = keyBytes.Length * 8
encrypt.Key = keyBytes
encrypt.IV = keyBytes
encrypt.Mode = CipherMode.CBC
encrypt.Padding = PaddingMode.PKCS7
crypt = encrypt.CreateEncryptor()
End Using
inBuff = Encoding.UTF8.GetBytes(source)
msp.Dispose()
Return Convert.ToBase64String(crypt.TransformFinalBlock(inBuff, 0, inBuff.Length))
End Function
''' <summary>
''' 加密文本为Base64编码
''' </summary>
''' <param name="source">需要加密字符串</param>
''' <param name="key">密钥</param>
''' <param name="encode">密钥转换字符编码</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function EncryptStr(ByVal source As String, ByVal key As String, ByVal encode As Encoding) As String
Dim inBuff As Byte()
Dim crypt As ICryptoTransform
Dim msp As New MD5CryptoServiceProvider
Using encrypt As Aes = Aes.Create("AES")
Dim keyBytes() As Byte = msp.ComputeHash(encode.GetBytes(key))
encrypt.BlockSize = keyBytes.Length * 8
encrypt.Key = keyBytes
encrypt.IV = keyBytes
encrypt.Mode = CipherMode.CBC
encrypt.Padding = PaddingMode.PKCS7
crypt = encrypt.CreateEncryptor()
End Using
inBuff = encode.GetBytes(source)
msp.Dispose()
Return Convert.ToBase64String(crypt.TransformFinalBlock(inBuff, 0, inBuff.Length))
End Function
''' <summary>
''' 解密Base64编码的字符串
''' </summary>
''' <param name="encodedStr">需要解密字符串</param>
''' <param name="key">密钥</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function DecryptStr(ByVal encodedStr As String, ByVal key As String) As String
Dim inBuff As Byte()
Dim crypt As ICryptoTransform
Dim msp As New MD5CryptoServiceProvider
Using decrypt As Aes = Aes.Create("AES")
Dim keyBytes() As Byte = msp.ComputeHash(Encoding.UTF8.GetBytes(key)) '设置密钥
decrypt.BlockSize = keyBytes.Length * 8
decrypt.Key = keyBytes
decrypt.IV = keyBytes
decrypt.Mode = CipherMode.CBC
decrypt.Padding = PaddingMode.PKCS7
crypt = decrypt.CreateDecryptor()
End Using
inBuff = Convert.FromBase64String(encodedStr)
msp.Dispose()
Return Encoding.UTF8.GetString(crypt.TransformFinalBlock(inBuff, 0, inBuff.Length))
End Function
''' <summary>
''' 解密Base64编码的字符串
''' </summary>
''' <param name="encodedStr">需要解密字符串</param>
''' <param name="key">密钥</param>
''' <returns></returns>
Public Shared Function DecryptStr(encodedStr As String, key() As Byte) As String
Dim inBuff As Byte()
Dim crypt As ICryptoTransform
Dim msp As New MD5CryptoServiceProvider
Using decrypt As Aes = Aes.Create("AES")
Dim keyBytes() As Byte = msp.ComputeHash(key)
decrypt.BlockSize = keyBytes.Length * 8
decrypt.Key = keyBytes
decrypt.IV = keyBytes
decrypt.Mode = CipherMode.CBC
decrypt.Padding = PaddingMode.PKCS7
crypt = decrypt.CreateDecryptor()
End Using
inBuff = Convert.FromBase64String(encodedStr)
msp.Dispose()
Return Encoding.UTF8.GetString(crypt.TransformFinalBlock(inBuff, 0, inBuff.Length))
End Function
''' <summary>
''' 解密Base64编码的字符串
''' </summary>
''' <param name="encodedStr">需要解密字符串</param>
''' <param name="key">密钥</param>
''' <param name="encode">密钥转换字符编码</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function DecryptStr(ByVal encodedStr As String, ByVal key As String, ByVal encode As Encoding) As String
Dim inBuff As Byte()
Dim crypt As ICryptoTransform
Dim msp As New MD5CryptoServiceProvider
Using decrypt As Aes = Aes.Create("AES")
Dim keyBytes() As Byte = msp.ComputeHash(encode.GetBytes(key)) '设置密钥
decrypt.BlockSize = keyBytes.Length * 8
decrypt.Key = keyBytes
decrypt.IV = keyBytes
decrypt.Mode = CipherMode.CBC
decrypt.Padding = PaddingMode.PKCS7
crypt = decrypt.CreateDecryptor()
End Using
inBuff = Convert.FromBase64String(encodedStr)
msp.Dispose()
Return encode.GetString(crypt.TransformFinalBlock(inBuff, 0, inBuff.Length))
End Function
End Class
End Namespace

40
UTS_Core/Security/MD5.vb Normal file
View File

@@ -0,0 +1,40 @@
Imports System.Security.Cryptography
Imports System.Text
Namespace Security
Public Class Md5
''' <summary>
''' 获取字符串的MD5值
''' </summary>
''' <param name="str">需要求MD5的原文字符串</param>
''' <returns></returns>
Public Shared Function GetStringMd5(str As String) As String
Dim md5Hasher As New MD5CryptoServiceProvider()
Dim data As Byte() = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(str))
Dim fileMd5 As New StringBuilder()
Dim i As Integer
For i = 0 To data.Length - 1
fileMd5.Append(data(i).ToString("X2"))
Next
Return fileMd5.ToString()
End Function
''' <summary>
''' 获取文件的MD5值
''' </summary>
''' <param name="filepath">文件路径</param>
''' <returns></returns>
Public Shared Function GetFileMd5(filepath As String) As String
Dim md5Hasher As New MD5CryptoServiceProvider()
Dim data As Byte() = md5Hasher.ComputeHash(IO.File.ReadAllBytes(filepath))
Dim fileMd5 As New StringBuilder()
Dim i As Integer
For i = 0 To data.Length - 1
fileMd5.Append(data(i).ToString("X2"))
Next
Return fileMd5.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,62 @@
Imports System.IO
Imports System.Xml.Serialization
Namespace Serialize
Public Class Serializer
''' <summary>
''' 将类对象序列化为xml文件
''' </summary>
''' <param name="path"></param>
''' <param name="srcObject"></param>
Public Shared Sub SerializeToXml(path As String, srcObject As Object)
Dim serializer As New XmlSerializer(srcObject.GetType)
Dim xmlString As String = String.Empty
Using writer As New StringWriter
serializer.Serialize(writer, srcObject)
xmlString = writer.ToString()
End Using
Using ws As New StreamWriter(path)
ws.Write(xmlString)
End Using
End Sub
''' <summary>
''' 将类对象序列化为xml文件
''' </summary>
''' <param name="path"></param>
''' <param name="srcObject"></param>
Public Shared Sub SerializeToXml(Of T)(path As String, srcObject As T)
Dim serializer As New XmlSerializer(GetType(T))
Dim xmlString As String
Using writer As New StringWriter
serializer.Serialize(writer, srcObject)
xmlString = writer.ToString()
End Using
Using ws As New StreamWriter(path)
ws.Write(xmlString)
End Using
End Sub
''' <summary>
''' 从Xml文件中反序列化成指定类
''' </summary>
''' <typeparam name="T"></typeparam>
''' <param name="path"></param>
''' <returns></returns>
Public Shared Function DeserializeFormXml(Of T)(path As String) As T
Dim serializer As New XmlSerializer(GetType(T))
Using reader As New StreamReader(path)
Return CType(serializer.Deserialize(reader), T)
End Using
End Function
End Class
End Namespace

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,24 @@
Namespace UTSModule.DbTableModel.Customer
''' <summary>
''' 生产流程签名表,待删除
''' </summary>
Public Class FlowCtrTable
Enum ColNamesEnum
ID
''' <summary>
''' 项目唯一标识
''' </summary>
ProjectID
''' <summary>
''' 产品序号唯一标识
''' </summary>
DUT_SN
''' <summary>
''' 流程签名
''' </summary>
ProcessRecord
End Enum
Public Shared Property TableName() As String = "TBL_FlowCtr"
End Class
End Namespace

View File

@@ -0,0 +1,59 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
''' <summary>
''' Sn关联信息表
''' </summary>
Public Class ImportInfoTable
Enum ColNames
''' <summary>
''' 索引
''' </summary>
ID
''' <summary>
''' 项目唯一标识
''' </summary>
ProjectID
''' <summary>
''' 产品序号唯一标识
''' </summary>
Barcode
''' <summary>
''' 录入时间
''' </summary>
ImportDateTime
''' <summary>
''' 更新时间,用于同步下载
''' </summary>
UpdateTime
End Enum
Public Shared Property TableName() As String = "TBL_ImportInfo"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT,")
builder.Append($"`{ColNames.ProjectID}` int(11) NOT NULL DEFAULT -1 COMMENT '项目唯一标识',")
builder.Append($"`{ColNames.Barcode}` varchar(32) NOT NULL COMMENT '产品序号唯一标识',")
builder.Append($"`{ColNames.ImportDateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '录入时间',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,53 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
''' <summary>
''' 用户操作记录总表
''' </summary>
Public Class LogTable
Enum ColNamesEnum
ID
''' <summary>
''' 操作者
''' </summary>
UserID
''' <summary>
''' 操作时间
''' </summary>
DateTime
''' <summary>
''' 操作内容说明
''' </summary>
Operation
End Enum
Public Shared Property TableName() As String = "TBL_Log"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNamesEnum.ID}` int(11) Not NULL,")
builder.Append($"`{ColNamesEnum.UserID}` int(11) DEFAULT NULL COMMENT '用户索引',")
builder.Append($"`{ColNamesEnum.DateTime}` datetime DEFAULT NULL COMMENT '操作时间',")
builder.Append($"`{ColNamesEnum.Operation}` varchar(254) DEFAULT NULL COMMENT '操作内容说明',")
builder.Append($"PRIMARY KEY (`{ColNamesEnum.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,116 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
Public Class OrderInternalTable
Enum ColNames
''' <summary>
''' 内部订单索引
''' </summary>
ID
''' <summary>
''' 订单ID
''' </summary>
OrderID
''' <summary>
''' 内部单号
''' </summary>
InternalNo
''' <summary>
''' 订单所属公司索引
''' </summary>
CompanyID
''' <summary>
''' 产品索引
''' </summary>
ProductID
''' <summary>
''' 产品类型索引
''' </summary>
ProductTypeID
''' <summary>
''' 创建时间
''' </summary>
CreateTime
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
''' <summary>
''' 目标产量
''' </summary>
ObjectiveYield
''' <summary>
''' 累计目标产量
''' </summary>
ObjectiveYieldTotal
''' <summary>
''' 订单状态
''' </summary>
OrderStatus
''' <summary>
''' 交货时间
''' </summary>
DeliveryTime
''' <summary>
''' 适用站位
''' </summary>
Station
''' <summary>
''' 条码范围
''' </summary>
BarCode
End Enum
Public Shared Property TableName() As String = "TBL_OrderInternal"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT,")
builder.Append($"`{ColNames.OrderID}` int(11) NOT NULL COMMENT '订单ID',")
builder.Append($"`{ColNames.CompanyID}` int(11) NOT NULL COMMENT '订单所属公司索引',")
builder.Append($"`{ColNames.ProductTypeID}` int(11) NOT NULL COMMENT '产品类型索引',")
builder.Append($"`{ColNames.ProductID}` int(11) NOT NULL COMMENT '产品索引',")
builder.Append($"`{ColNames.OrderStatus}` int(11) NOT NULL COMMENT '订单状态',")
builder.Append($"`{ColNames.InternalNo}` varchar(64) NOT NULL COMMENT '内部单号',")
builder.Append($"`{ColNames.CreateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.DeliveryTime}` datetime DEFAULT NULL COMMENT '交货时间',")
builder.Append($"`{ColNames.ObjectiveYield}` int(11) DEFAULT NULL COMMENT '目标产量',")
builder.Append($"`{ColNames.ObjectiveYieldTotal}` int(11) DEFAULT NULL COMMENT '累计目标产量',")
builder.Append($"`{ColNames.Station}` varchar(64) DEFAULT NULL ,")
builder.Append($"`{ColNames.BarCode}` varchar(254) DEFAULT NULL ,")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,98 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
''' <summary>
''' 客户订单表
''' </summary>
Public Class OrdersTable
Enum ColNames
''' <summary>
''' 订单索引
''' </summary>
ID
''' <summary>
''' 公司索引
''' </summary>
CompanyID
''' <summary>
''' 订单生产产品索引
''' </summary>
ProductID
''' <summary>
''' 订单号
''' </summary>
OrderNo
''' <summary>
''' 生产数量
''' </summary>
OrderCount
''' <summary>
''' 交货日期
''' </summary>
DeliveryTime
''' <summary>
''' 订单生成日期
''' </summary>
CreateTime
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
''' <summary>
''' 成本单价
''' </summary>
CostPrice
''' <summary>
''' 销售单价
''' </summary>
TransactPrice
''' <summary>
''' 订单状态
''' </summary>
OrderStatus
End Enum
Public Shared Property TableName() As String = "TBL_Orders"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单索引',")
builder.Append($"`{ColNames.CompanyID}` int(11) NOT NULL COMMENT '所属厂商索引',")
builder.Append($"`{ColNames.ProductID}` int(11) NOT NULL COMMENT '订单生产产品索引',")
builder.Append($"`{ColNames.OrderNo}` varchar(64) NOT NULL DEFAULT '' COMMENT '订单号',")
builder.Append($"`{ColNames.OrderCount}` int(11) NOT NULL DEFAULT 0 COMMENT '生产数量',")
builder.Append($"`{ColNames.DeliveryTime}` datetime DEFAULT NULL COMMENT '交货日期',")
builder.Append($"`{ColNames.CreateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '订单生成日期',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.CostPrice}` float DEFAULT NULL COMMENT '成本单价',")
builder.Append($"`{ColNames.TransactPrice}` float DEFAULT NULL COMMENT '销售单价',")
builder.Append($"`{ColNames.OrderStatus}` int(11) DEFAULT NULL COMMENT '订单状态',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End NameSpace

View File

@@ -0,0 +1,52 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
Public Class ProductTypesTable
Enum ColNames
ID
''' <summary>
''' 产品类型
''' </summary>
ProductType
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
''' <summary>
''' 备注
''' </summary>
Remark
End Enum
Public Shared Property TableName() As String = "TBL_ProductTypes"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) Not NULL AUTO_INCREMENT,")
builder.Append($"`{ColNames.ProductType}` varchar(255) Not NULL,")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.Remark}` varchar(255) DEFAULT NULL,")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,59 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
Public Class ProductionLineTable
Enum ColNames
''' <summary>
''' 产线索引
''' </summary>
ID
''' <summary>
''' 产线名称
''' </summary>
Name
''' <summary>
''' 产线描述
''' </summary>
Description
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
''' <summary>
''' 备注
''' </summary>
Remark
End Enum
Public Shared Property TableName() As String = "TBL_ProductionLine"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT,")
builder.Append($"`{ColNames.Name}` varchar(64) NOT NULL DEFAULT '' COMMENT '产线名',")
builder.Append($"`{ColNames.Description}` varchar(255) DEFAULT NULL COMMENT '工艺说明',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.Remark}` varchar(255) DEFAULT NULL COMMENT '备注',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End NameSpace

View File

@@ -0,0 +1,99 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
Public Class ProductionPlanTable
Enum ColNames
''' <summary>
''' 生产计划索引
''' </summary>
ID
''' <summary>
''' 订单索引
''' </summary>
OrderID
''' <summary>
''' 内部订单
''' </summary>
OrderInternalID
''' <summary>
''' 站位索引
''' </summary>
StationID
''' <summary>
''' 产线索引
''' </summary>
ProductionLineID
''' <summary>
''' 生产时间
''' </summary>
ProductionTime
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
''' <summary>
''' 已完成产量
''' </summary>
ActualOutput
''' <summary>
''' 目标产量
''' </summary>
ObjectiveYield
''' <summary>
''' 累计目标产量
''' </summary>
ObjectiveYieldTotal
''' <summary>
''' 备注
''' </summary>
Remark
End Enum
Public Shared Property TableName() As String = "TBL_ProductionPlan"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT COMMENT '生产计划索引',")
builder.Append($"`{ColNames.OrderID}` int(11) NOT NULL COMMENT '订单索引',")
builder.Append($"`{ColNames.OrderInternalID}` int(11) NOT NULL COMMENT '内部单ID',")
builder.Append($"`{ColNames.StationID}` int(11) NOT NULL COMMENT '工艺站ID',")
builder.Append($"`{ColNames.ProductionLineID}` int(11) NOT NULL COMMENT '产线索引',")
builder.Append($"`{ColNames.ProductionTime}` datetime NOT NULL COMMENT '生产时间',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.ActualOutput}` int(11) NOT NULL COMMENT '已完成产量',")
builder.Append($"`{ColNames.ObjectiveYield}` int(11) NOT NULL COMMENT '目标产量',")
builder.Append($"`{ColNames.ObjectiveYieldTotal}` int(11) NOT NULL COMMENT '累计目标产量',")
builder.Append($"`{ColNames.Remark}` varchar(255) DEFAULT NULL COMMENT '备注',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,116 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
''' <summary>
''' 项目总表
''' </summary>
Public Class ProjectTable
Enum ColNames
''' <summary>
''' 项目唯一标识
''' </summary>
ID
''' <summary>
''' 项目类型索引
''' </summary>
ProductTypeID
''' <summary>
''' 项目名称
''' </summary>
ProjectName
''' <summary>
''' 项目描述
''' </summary>
Description
''' <summary>
''' 创建人
''' </summary>
UserID
''' <summary>
''' 创建时间
''' </summary>
CreateTime
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
''' <summary>
''' 备注
''' </summary>
Remark
''' <summary>
''' 预览图
''' </summary>
ImageName
''' <summary>
''' 预览图
''' </summary>
PreviewImage
''' <summary>
''' 单价
''' </summary>
Price
''' <summary>
''' 单价单位
''' </summary>
Currency
''' <summary>
''' 当前项目是否有效
''' </summary>
IsValid
''' <summary>
''' 最后有效日期
''' </summary>
EolDate
''' <summary>
''' 录入条码总表类型0无订单1有订单
''' </summary>
SnType
End Enum
Public Shared Property TableName() As String = "TBL_Project"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) Not NULL AUTO_INCREMENT,")
builder.Append($"`{ColNames.ProductTypeID}` int(11) Not NULL,")
builder.Append($"`{ColNames.ProjectName}` varchar(64) Not NULL,")
builder.Append($"`{ColNames.Description}` varchar(64) DEFAULT NULL,")
builder.Append($"`{ColNames.UserID}` int(11) Not NULL,")
builder.Append($"`{ColNames.CreateTime}` datetime NOT NULL DEFAULT current_timestamp(),")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.EolDate}` datetime DEFAULT NULL,")
builder.Append($"`{ColNames.Remark}` varchar(255) DEFAULT NULL,")
builder.Append($"`{ColNames.ImageName}` varchar(255) DEFAULT NULL,")
builder.Append($"`{ColNames.PreviewImage}` mediumblob DEFAULT NULL,")
builder.Append($"`{ColNames.Price}` float(10,2) DEFAULT NULL,")
builder.Append($"`{ColNames.Currency}` varchar(10) DEFAULT NULL,")
builder.Append($"`{ColNames.IsValid}` tinyint(4) DEFAULT 1,")
builder.Append($"`{ColNames.SnType}` int(11) NOT NULL DEFAULT 1,")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,71 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
''' <summary>
''' 不良代码类型表
''' </summary>
Public Class RejectsExplainTable
Enum ColNames
''' <summary>
''' 索引
''' </summary>
ID
''' <summary>
''' 所属维修分类索引
''' </summary>
Matlab
''' <summary>
''' 名称
''' </summary>
Introductions
''' <summary>
''' 创建日期
''' </summary>
CreateTime
''' <summary>
''' 更新时间
''' </summary>
UpdateTime
''' <summary>
''' 备注
''' </summary>
Remark
End Enum
Public Shared Property TableName() As String = "TBL_RejectsExplain"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT COMMENT '不良代码索引',")
builder.Append($"`{ColNames.Matlab}` varchar(255) NOT NULL COMMENT '不良品代码',")
builder.Append($"`{ColNames.Introductions}` varchar(255) NOT NULL COMMENT '不良品说明',")
builder.Append($"`{ColNames.CreateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.Remark}` varchar(254) DEFAULT NULL COMMENT '备注',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,101 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
Public Class RepairLogTable
Enum ColNamesEnum
''' <summary>
''' 维修日志索引
''' </summary>
ID
''' <summary>
''' 维修产品索引
''' </summary>
ProductID
''' <summary>
''' 维修产品条码
''' </summary>
DUT_SN
''' <summary>
''' 产品错误代码
''' </summary>
ErrCode
''' <summary>
''' 维修原因类型
''' </summary>
RepairType
''' <summary>
''' 维修人工注释
''' </summary>
RepairComment
''' <summary>
''' 维修产品日期
''' </summary>
RepairDate
''' <summary>
''' 维修产品结果
''' </summary>
RepairResult
''' <summary>
''' 产品图像文件名1
''' </summary>
ProductImg1
''' <summary>
''' 产品图像文件名2
''' </summary>
ProductImg2
''' <summary>
''' 产品图像文件名3
''' </summary>
ProductImg3
''' <summary>
''' 产品图像文件名4
''' </summary>
ProductImg4
End Enum
Public Shared Property TableName() As String = "TBL_RepairLog"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNamesEnum.ID}` int(11) NOT NULL AUTO_INCREMENT COMMENT '维修日志索引',")
builder.Append($"`{ColNamesEnum.ProductID}` int(11) Not NULL COMMENT '维修产品索引',")
builder.Append($"`{ColNamesEnum.DUT_SN}` varchar(32) Not NULL COMMENT '维修产品条码',")
builder.Append($"`{ColNamesEnum.ErrCode}` varchar(32) DEFAULT NULL COMMENT '产品错误代码',")
builder.Append($"`{ColNamesEnum.RepairType}` int(11) DEFAULT NULL COMMENT '维修原因类型',")
builder.Append($"`{ColNamesEnum.RepairComment}` varchar(254) DEFAULT NULL COMMENT '维修人工注释',")
builder.Append($"`{ColNamesEnum.RepairDate}` datetime DEFAULT NULL COMMENT '维修产品日期',")
builder.Append($"`{ColNamesEnum.RepairResult}` bit(1) Not NULL DEFAULT 0 COMMENT '维修产品结果',")
builder.Append($"`{ColNamesEnum.ProductImg1}` varchar(64) DEFAULT NULL COMMENT '产品图像文件名1',")
builder.Append($"`{ColNamesEnum.ProductImg2}` varchar(64) DEFAULT NULL COMMENT '产品图像文件名2',")
builder.Append($"`{ColNamesEnum.ProductImg3}` varchar(64) DEFAULT NULL COMMENT '产品图像文件名3',")
builder.Append($"`{ColNamesEnum.ProductImg4}` varchar(64) DEFAULT NULL COMMENT '产品图像文件名4',")
builder.Append($"PRIMARY KEY (`{ColNamesEnum.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End NameSpace

View File

@@ -0,0 +1,161 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
Public Class RepairLogTable
Enum ColNames
''' <summary>
''' 维修日志索引
''' </summary>
ID
''' <summary>
''' 维修产品索引
''' </summary>
ProductID
''' <summary>
''' 所属站位索引
''' </summary>
StationID
''' <summary>
''' 所属订单索引
''' </summary>
OrderID
''' <summary>
''' 维修所属测试日志索引
''' </summary>
TestLogID
''' <summary>
''' 维修产品条码
''' </summary>
DUT_SN
''' <summary>
''' 测试日志所属测试流程名称
''' </summary>
TestPlan
''' <summary>
''' 产品测试日志失败步骤名
''' </summary>
FailSteps
''' <summary>
''' 产品测试日志失败信息
''' </summary>
FailMsg
''' <summary>
''' 产品测试日志错误代码
''' </summary>
ErrCode
''' <summary>
''' 维修产品日期
''' </summary>
RepairDate
''' <summary>
''' 当条记录更新时间
''' </summary>
UpdateTime
''' <summary>
''' 维修原因类型
''' </summary>
RepairType
''' <summary>
''' 维修原因
''' </summary>
RepairReason
''' <summary>
''' 维修来源
''' </summary>
RepairSource
''' <summary>
''' 维修来源订单号
''' </summary>
DocuNumber
''' <summary>
''' 维修人工注释
''' </summary>
RepairComment
''' <summary>
''' 维修产品结果索引
''' </summary>
RepairResult
''' <summary>
''' 产品图像文件名1
''' </summary>
ProductImg1
''' <summary>
''' 产品图像文件名2
''' </summary>
ProductImg2
''' <summary>
''' 产品图像文件名3
''' </summary>
ProductImg3
''' <summary>
''' 产品图像文件名4
''' </summary>
ProductImg4
End Enum
Public Shared Property TableName() As String = "TBL_RepairLog"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT COMMENT '维修日志索引',")
builder.Append($"`{ColNames.ProductID}` int(11) Not NULL COMMENT '维修产品索引',")
builder.Append($"`{ColNames.StationID}` int(11) Not NULL COMMENT '站位索引',")
builder.Append($"`{ColNames.OrderID}` int(11) Not NULL COMMENT '订单索引',")
builder.Append($"`{ColNames.TestLogID}` int(11) Not NULL COMMENT '测试记录索引',")
builder.Append($"`{ColNames.DUT_SN}` varchar(64) NOT NULL COMMENT '维修产品条码',")
builder.Append($"`{ColNames.TestPlan}` varchar(64) DEFAULT NULL COMMENT '测试流程名称',")
builder.Append($"`{ColNames.FailSteps}` varchar(254) DEFAULT NULL COMMENT '错误步骤',")
builder.Append($"`{ColNames.FailMsg}` varchar(254) DEFAULT NULL COMMENT '错误提示信息',")
builder.Append($"`{ColNames.ErrCode}` varchar(32) DEFAULT NULL COMMENT '产品错误代码',")
builder.Append($"`{ColNames.RepairDate}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '维修产品日期',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.RepairType}` int(11) NOT NULL COMMENT '维修类型索引',")
builder.Append($"`{ColNames.RepairReason}` int(11) NOT NULL COMMENT '维修原因索引',")
builder.Append($"`{ColNames.RepairSource}` int(11) NOT NULL COMMENT '维修来源索引',")
builder.Append($"`{ColNames.DocuNumber}` varchar(64) DEFAULT NULL COMMENT '返修来源订单号',")
builder.Append($"`{ColNames.RepairComment}` varchar(254) DEFAULT NULL COMMENT '维修人工注释',")
builder.Append($"`{ColNames.RepairResult}` int(11) NOT NULL DEFAULT 0 COMMENT '维修产品结果',")
builder.Append($"`{ColNames.ProductImg1}` varchar(64) DEFAULT NULL COMMENT '产品图像文件名1',")
builder.Append($"`{ColNames.ProductImg2}` varchar(64) DEFAULT NULL COMMENT '产品图像文件名2',")
builder.Append($"`{ColNames.ProductImg3}` varchar(64) DEFAULT NULL COMMENT '产品图像文件名3',")
builder.Append($"`{ColNames.ProductImg4}` varchar(64) DEFAULT NULL COMMENT '产品图像文件名4',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End NameSpace

View File

@@ -0,0 +1,70 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
''' <summary>
''' 维修原因类型表
''' </summary>
Public Class RepairReasonTable
Enum ColNames
''' <summary>
''' 索引
''' </summary>
ID
''' <summary>
''' 所属维修分类索引
''' </summary>
RepairType
''' <summary>
''' 名称
''' </summary>
Name
''' <summary>
''' 创建日期
''' </summary>
CreateTime
''' <summary>
''' 更新时间
''' </summary>
UpdateTime
''' <summary>
''' 备注
''' </summary>
Remark
End Enum
Public Shared Property TableName() As String = "TBL_RepairReason"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT COMMENT '维修类型索引',")
builder.Append($"`{ColNames.RepairType}` int(11) NOT NULL COMMENT '所属维修分类索引',")
builder.Append($"`{ColNames.Name}` varchar(254) NOT NULL COMMENT '名称',")
builder.Append($"`{ColNames.CreateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.Remark}` varchar(254) DEFAULT NULL COMMENT '备注',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,130 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
''' <summary>
''' 维修原因类型表
''' </summary>
Public Class RepairRequestTable
Enum ColNames
''' <summary>
''' 索引
''' </summary>
ID
''' <summary>
''' 报修人员
''' </summary>
UserID
''' <summary>
''' 报修单号
''' </summary>
RepairRequestNum
''' <summary>
''' 产品类型
''' </summary>
ProductID
''' <summary>
''' 产品条码
''' </summary>
Barcode
''' <summary>
''' 产品图像
''' </summary>
ProductImage
''' <summary>
''' 不良品来源
''' </summary>
RejectSource
''' <summary>
''' 不良代码
''' </summary>
RejectCode
''' <summary>
''' 不良说明
''' </summary>
RejectDesc
''' <summary>
''' 创建日期
''' </summary>
CreateTime
''' <summary>
''' 更新时间
''' </summary>
UpdateTime
''' <summary>
''' 维修进度
''' </summary>
RepairProgress
''' <summary>
''' 维修结果
''' </summary>
RepairResult
''' <summary>
''' 维修记录索引
''' </summary>
RepairLogID
''' <summary>
''' 维修人员
''' </summary>
Repairier
''' <summary>
''' 备注
''' </summary>
Remark
End Enum
Public Shared Property TableName() As String = "TBL_RepairRequest"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT COMMENT '维修类型索引',")
builder.Append($"`{ColNames.UserID}` int(11) NOT NULL COMMENT '报修人员',")
builder.Append($"`{ColNames.RepairRequestNum}` varchar(254) NOT NULL COMMENT '报修单号',")
builder.Append($"`{ColNames.ProductID}` int(11) NOT NULL COMMENT '产品类型',")
builder.Append($"`{ColNames.Barcode}` varchar(64) NOT NULL COMMENT '产品条码',")
builder.Append($"`{ColNames.ProductImage}` varchar(254) DEFAULT NULL COMMENT '产品图像',")
builder.Append($"`{ColNames.RejectSource}` varchar(254) DEFAULT NULL COMMENT '不良品来源',")
builder.Append($"`{ColNames.RejectCode}` varchar(254) DEFAULT NULL COMMENT '不良代码',")
builder.Append($"`{ColNames.RejectDesc}` varchar(254) DEFAULT NULL COMMENT '不良说明',")
builder.Append($"`{ColNames.CreateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.RepairProgress}` varchar(64) DEFAULT NULL COMMENT '维修进度',")
builder.Append($"`{ColNames.RepairResult}` int(11) DEFAULT NULL COMMENT '维修结果',")
builder.Append($"`{ColNames.RepairLogID}` int(11) DEFAULT NULL COMMENT '维修记录索引',")
builder.Append($"`{ColNames.Repairier}` int(11) DEFAULT NULL COMMENT '维修人员',")
builder.Append($"`{ColNames.Remark}` varchar(254) DEFAULT NULL COMMENT '备注',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,63 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
Public Class RepairResultTable
Enum ColNames
''' <summary>
''' 索引
''' </summary>
ID
''' <summary>
''' 维修结果名称
''' </summary>
Name
''' <summary>
''' 创建时间
''' </summary>
CreateTime
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
''' <summary>
''' 备注
''' </summary>
Remark
End Enum
Public Shared Property TableName() As String = "TBL_RepairResults"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT COMMENT '维修结果索引',")
builder.Append($"`{ColNames.Name}` varchar(254) NOT NULL COMMENT '维修结果名称',")
builder.Append($"`{ColNames.CreateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.Remark}` varchar(254) DEFAULT NULL COMMENT '备注',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,60 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
Public Class RepairSourceTable
Enum ColNames
''' <summary>
''' 维修来源索引
''' </summary>
ID
''' <summary>
''' 维修来源名称
''' </summary>
Name
''' <summary>
''' 创建时间
''' </summary>
CreateTime
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
''' <summary>
''' 备注
''' </summary>
Remark
End Enum
Public Shared Property TableName() As String = "TBL_RepairSource"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT COMMENT '维修来源索引',")
builder.Append($"`{ColNames.Name}` varchar(254) NOT NULL COMMENT '维修来源名称',")
builder.Append($"`{ColNames.CreateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.Remark}` varchar(254) DEFAULT NULL COMMENT '备注',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,62 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
''' <summary>
''' 维修原因类型表
''' </summary>
Public Class RepairTypesTable
Enum ColNames
''' <summary>
''' 维修类型索引
''' </summary>
ID
''' <summary>
''' 维修类型说明
''' </summary>
Name
''' <summary>
''' 创建时间
''' </summary>
CreateTime
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
''' <summary>
''' 备注
''' </summary>
Remark
End Enum
Public Shared Property TableName() As String = "TBL_RepairTypes"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT COMMENT '维修类型索引',")
builder.Append($"`{ColNames.Name}` varchar(254) NOT NULL COMMENT '维修类型名称',")
builder.Append($"`{ColNames.CreateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.Remark}` varchar(254) DEFAULT NULL COMMENT '备注',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,211 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
Public Class SnListTable
Enum ColNames
''' <summary>
''' 索引
''' </summary>
ID
''' <summary>
''' 订单ID
''' </summary>
OrderID
''' <summary>
''' 内部单ID
''' </summary>
OrderInternalID
''' <summary>
''' 机型ID
''' </summary>
ProductID
''' <summary>
''' 条码
''' </summary>
BarCode
''' <summary>
''' 创建时间
''' </summary>
CreateTime
''' <summary>
''' 更新时间
''' </summary>
UpdateTime
''' <summary>
''' 条码生成类型
''' </summary>
SnType
''' <summary>
''' 参与组装条码
''' </summary>
AssemblySn
''' <summary>
''' 被组装的时间
''' </summary>
AssemblyTime
''' <summary>
''' 第1站测试时间
''' </summary>
S1
''' <summary>
''' 第2站测试时间
''' </summary>
S2
''' <summary>
''' 第3站测试时间
''' </summary>
S3
''' <summary>
''' 第4站测试时间
''' </summary>
S4
''' <summary>
''' 第5站测试时间
''' </summary>
S5
''' <summary>
''' 第6站测试时间
''' </summary>
S6
''' <summary>
''' 第7站测试时间
''' </summary>
S7
''' <summary>
''' 第8站测试时间
''' </summary>
S8
''' <summary>
''' 第9站测试时间
''' </summary>
S9
''' <summary>
''' 第10站测试时间
''' </summary>
S10
''' <summary>
''' 第11站测试时间
''' </summary>
S11
''' <summary>
''' 第12站测试时间
''' </summary>
S12
''' <summary>
''' 第1站测试结果
''' </summary>
Result1
''' <summary>
''' 第2站测试结果
''' </summary>
Result2
''' <summary>
''' 第3站测试结果
''' </summary>
Result3
''' <summary>
''' 第4站测试结果
''' </summary>
Result4
''' <summary>
''' 第5站测试结果
''' </summary>
Result5
''' <summary>
''' 第6站测试结果
''' </summary>
Result6
''' <summary>
''' 第7站测试结果
''' </summary>
Result7
''' <summary>
''' 第8站测试结果
''' </summary>
Result8
''' <summary>
''' 第9站测试结果
''' </summary>
Result9
''' <summary>
''' 第10站测试结果
''' </summary>
Result10
''' <summary>
''' 第11站测试结果
''' </summary>
Result11
''' <summary>
''' 第12站测试结果
''' </summary>
Result12
End Enum
Public Shared Property TableName() As String = "TBL_SnList"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',")
builder.Append($"`{ColNames.OrderID}` int(11) NOT NULL COMMENT '订单ID',")
builder.Append($"`{ColNames.OrderInternalID}` int(11) NOT NULL COMMENT '内部单ID',")
builder.Append($"`{ColNames.ProductID}` int(11) NOT NULL COMMENT '机型ID',")
builder.Append($"`{ColNames.BarCode}` varchar(64) NOT NULL COMMENT '机型ID',")
builder.Append($"`{ColNames.CreateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.SnType}` int(11) NOT NULL DEFAULT 1 COMMENT '条码生成类型',")
builder.Append($"`{ColNames.AssemblySn}` varchar(254) DEFAULT NULL COMMENT '被组装的条码集合',")
builder.Append($"`{ColNames.AssemblyTime}` datetime DEFAULT NULL COMMENT '被组装的时间',")
builder.Append($"`{ColNames.S1}` datetime DEFAULT NULL COMMENT '第1站测试时间',")
builder.Append($"`{ColNames.S2}` datetime DEFAULT NULL COMMENT '第2站测试时间',")
builder.Append($"`{ColNames.S3}` datetime DEFAULT NULL COMMENT '第3站测试时间',")
builder.Append($"`{ColNames.S4}` datetime DEFAULT NULL COMMENT '第4站测试时间',")
builder.Append($"`{ColNames.S5}` datetime DEFAULT NULL COMMENT '第5站测试时间',")
builder.Append($"`{ColNames.S6}` datetime DEFAULT NULL COMMENT '第6站测试时间',")
builder.Append($"`{ColNames.S7}` datetime DEFAULT NULL COMMENT '第7站测试时间',")
builder.Append($"`{ColNames.S8}` datetime DEFAULT NULL COMMENT '第8站测试时间',")
builder.Append($"`{ColNames.S9}` datetime DEFAULT NULL COMMENT '第9站测试时间',")
builder.Append($"`{ColNames.S10}` datetime DEFAULT NULL COMMENT '第10站测试时间',")
builder.Append($"`{ColNames.S11}` datetime DEFAULT NULL COMMENT '第11站测试时间',")
builder.Append($"`{ColNames.S12}` datetime DEFAULT NULL COMMENT '第12站测试时间',")
builder.Append($"`{ColNames.Result1}` tinyint(4) DEFAULT NULL COMMENT '第1站测试结果',")
builder.Append($"`{ColNames.Result2}` tinyint(4) DEFAULT NULL COMMENT '第2站测试结果',")
builder.Append($"`{ColNames.Result3}` tinyint(4) DEFAULT NULL COMMENT '第3站测试结果',")
builder.Append($"`{ColNames.Result4}` tinyint(4) DEFAULT NULL COMMENT '第4站测试结果',")
builder.Append($"`{ColNames.Result5}` tinyint(4) DEFAULT NULL COMMENT '第5站测试结果',")
builder.Append($"`{ColNames.Result6}` tinyint(4) DEFAULT NULL COMMENT '第6站测试结果',")
builder.Append($"`{ColNames.Result7}` tinyint(4) DEFAULT NULL COMMENT '第7站测试结果',")
builder.Append($"`{ColNames.Result8}` tinyint(4) DEFAULT NULL COMMENT '第8站测试结果',")
builder.Append($"`{ColNames.Result9}` tinyint(4) DEFAULT NULL COMMENT '第9站测试结果',")
builder.Append($"`{ColNames.Result10}` tinyint(4) DEFAULT NULL COMMENT '第10站测试结果',")
builder.Append($"`{ColNames.Result11}` tinyint(4) DEFAULT NULL COMMENT '第11站测试结果',")
builder.Append($"`{ColNames.Result12}` tinyint(4) DEFAULT NULL COMMENT '第12站测试结果',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,61 @@
Namespace UTSModule.DbTableModel.Customer
''' <summary>
''' 产品需要索引客户订单号表
''' </summary>
Public Class SnRulesTable
Enum ColNamesEnum
''' <summary>
''' 索引,暂无作用
''' </summary>
ID
''' <summary>
''' 客户订单索引
''' </summary>
OrderID
''' <summary>
''' 内部订单号
''' </summary>
OrderInternalID
''' <summary>
''' 产品索引
''' </summary>
ProductID
''' <summary>
''' 工作站索引集合以,分割
''' </summary>
StationIDs
''' <summary>
''' 创建时间
''' </summary>
CreateTime
''' <summary>
''' SN前缀
''' </summary>
Sn_Prefix
''' <summary>
''' SN起始号
''' </summary>
Sn_Start
''' <summary>
''' SN结束号
''' </summary>
Sn_End
End Enum
Public Shared Property TableName() As String = "TBL_SnRules"
End Class
End NameSpace

View File

@@ -0,0 +1,134 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
''' <summary>
''' 产品工艺站总表
''' </summary>
Public Class StationListTable
Enum ColNames
''' <summary>
''' 工艺站索引
''' </summary>
ID
''' <summary>
''' 项目索引
''' </summary>
ProjectID
''' <summary>
''' 工艺站名称
''' </summary>
StationName
''' <summary>
''' 工艺站类型
''' </summary>
StationType
''' <summary>
''' 工艺站序号,从1开始
''' </summary>
ArtworkOrder
''' <summary>
''' Sn总表序号
''' </summary>
SnListOrder
''' <summary>
''' 工艺站描述
''' </summary>
StationDesc
''' <summary>
''' 最后更新日期(重复字段等待删除)
''' </summary>
LastUpdateDate
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
''' <summary>
''' 测试记录表名
''' </summary>
LogTableName
''' <summary>
''' 预览图片
''' </summary>
PreviewImage
''' <summary>
''' 备注
''' </summary>
Remark
''' <summary>
''' 最新测试包名
''' </summary>
PacketName
''' <summary>
''' 最新包MD5
''' </summary>
PacketMd5
''' <summary>
''' 当前站位是否有效
''' </summary>
Isvalid
''' <summary>
''' 站位条码生成规则1系统生成2客户录入
''' </summary>
SnType
''' <summary>
''' 编辑密码
''' </summary>
EditPwd
''' <summary>
''' 发布密码
''' </summary>
ReleasePwd
End Enum
Public Shared Property TableName() As String = "TBL_StationList"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT COMMENT '工艺站索引',")
builder.Append($"`{ColNames.ProjectID}` int(11) NOT NULL COMMENT '项目ID',")
builder.Append($"`{ColNames.StationName}` varchar(128) NOT NULL COMMENT '工艺站名',")
builder.Append($"`{ColNames.StationType}` varchar(128) NOT NULL COMMENT '工艺站类型',")
builder.Append($"`{ColNames.ArtworkOrder}` int(11) NOT NULL COMMENT '测试站位序号',")
builder.Append($"`{ColNames.SnListOrder}` int(11) NOT NULL COMMENT 'SN总表序号',")
builder.Append($"`{ColNames.StationDesc}` varchar(128) DEFAULT NULL COMMENT '站位描述',")
builder.Append($"`{ColNames.LastUpdateDate}` datetime DEFAULT NULL COMMENT '最后一次更新日期时间',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.LogTableName}` varchar(128) DEFAULT NULL COMMENT '测试记录表名',")
builder.Append($"`{ColNames.PreviewImage}` mediumblob DEFAULT NULL COMMENT '预览图片',")
builder.Append($"`{ColNames.Remark}` varchar(128) DEFAULT NULL COMMENT ' 备注',")
builder.Append($"`{ColNames.PacketName}` varchar(128) DEFAULT NULL COMMENT '最新测试包名',")
builder.Append($"`{ColNames.PacketMd5}` varchar(32) DEFAULT NULL COMMENT '测试站包MD5值',")
builder.Append($"`{ColNames.Isvalid}` tinyint(4) not NULL DEFAULT 1 COMMENT '是否有效',")
builder.Append($"`{ColNames.SnType}` int(11) not NULL DEFAULT 1,")
builder.Append($"`{ColNames.EditPwd}` varchar(32) DEFAULT NULL COMMENT '编辑密码',")
builder.Append($"`{ColNames.ReleasePwd}` varchar(32) DEFAULT NULL COMMENT '发布密码',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,132 @@

Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
Public Class StationPacketReleaseLogTable
Enum ColNames
''' <summary>
''' 工艺站包索引
''' </summary>
ID
''' <summary>
''' 项目索引
''' </summary>
ProjectID
''' <summary>
''' 站位索引
''' </summary>
StationID
''' <summary>
''' 创建时间
''' </summary>
CreateTime
''' <summary>
''' 更新时间
''' </summary>
UpdateTime
''' <summary>
''' 当前包名
''' </summary>
PacketName
''' <summary>
''' 当前包MD5值
''' </summary>
PacketMd5
''' <summary>
''' 记录本版本更改内容
''' </summary>
Description
''' <summary>
''' 当前包是否有效
''' </summary>
IsValid
''' <summary>
''' 登录用户索引
''' </summary>
UserID
''' <summary>
''' 登录用户名称
''' </summary>
UserName
''' <summary>
''' 发布电脑的公网IP
''' </summary>
PublicIP
''' <summary>
''' 发布电脑用户名
''' </summary>
ComputerName
''' <summary>
''' 发布电脑的SID
''' </summary>
SID
''' <summary>
''' 备注
''' </summary>
Remark
End Enum
Public Shared Property TableName() As String = "TBL_TP_Release_Log"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT COMMENT '工艺站包索引',")
builder.Append($"`{ColNames.ProjectID}` int(11) NOT NULL COMMENT '项目ID',")
builder.Append($"`{ColNames.StationID}` int(11) NOT NULL COMMENT '站位索引',")
builder.Append($"`{ColNames.CreateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"`{ColNames.Description}` text NOT NULL COMMENT '版本说明',")
builder.Append($"`{ColNames.Remark}` varchar(128) DEFAULT NULL COMMENT ' 备注',")
builder.Append($"`{ColNames.PacketName}` varchar(128) NOT NULL COMMENT '工艺站包包名',")
builder.Append($"`{ColNames.PacketMd5}` varchar(32) NOT NULL COMMENT '工艺站包MD5值',")
builder.Append($"`{ColNames.IsValid}` tinyint(4) NOT NULL DEFAULT 1 COMMENT '是否有效',")
builder.Append($"`{ColNames.UserID}` int(11) NOT NULL COMMENT '登录用户索引',")
builder.Append($"`{ColNames.UserName}` varchar(254) NOT NULL COMMENT '登录用户名称',")
builder.Append($"`{ColNames.PublicIP}` varchar(64) NOT NULL COMMENT '发布电脑的公网IP',")
builder.Append($"`{ColNames.ComputerName}` varchar(254) NOT NULL COMMENT '发布电脑用户名',")
builder.Append($"`{ColNames.SID}` varchar(64) NOT NULL COMMENT '发布电脑的SID',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,212 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
''' <summary>
''' 用户数据库同步总表
''' </summary>
Public Class SyncListTable
Enum ColNamesEnum
ID
''' <summary>
''' 需要同步的数据表名
''' </summary>
TableName
''' <summary>
''' 数据表版本编号
''' </summary>
RevisionID
''' <summary>
''' 最近同步的本地时间
''' </summary>
SyncTime
''' <summary>
''' 同步类型,如全表下载(all),或是增量下载new
''' </summary>
SyncType
''' <summary>
''' 同步时需要更新的数据列
''' </summary>
SyncCols
End Enum
Public Shared Property TableName() As String = "TBL_SyncList"
''' <summary>
''' 根据数据库类型,返回建表语句
''' </summary>
''' <param name="dbType">数据库类型</param>
''' <returns></returns>
Public Shared Function CreateTableString(dbType As DbExecutor.DbTypeEnum) As String
Dim createStr As New StringBuilder
Select Case dbType
Case DbExecutor.DbTypeEnum.Sqlite
createStr.Append($"Create Table If Not Exists `{TableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNamesEnum.ID}` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,")
createStr.Append($"`{ColNamesEnum.TableName}` varchar(254) NOT NULL ,")
createStr.Append($"`{ColNamesEnum.RevisionID}` integer NOT NULL Default 0 ,")
createStr.Append($"`{ColNamesEnum.SyncTime}` dateTime NOT NULL DEFAULT '2000-01-01 00:00:00' ,")
createStr.Append($"`{ColNamesEnum.SyncType}` varchar(254) NOT NULL DEFAULT 'ALL' ,")
createStr.Append($"`{ColNamesEnum.SyncCols}` varchar(254) NOT NULL DEFAULT '*' ")
createStr.Append(" );")
Case DbExecutor.DbTypeEnum.Mysql
createStr.Append($"Create Table If Not Exists `{TableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNamesEnum.ID}` int(11) Not NULL AUTO_INCREMENT,")
createStr.Append($"`{ColNamesEnum.TableName}` varchar(254) Not NULL COMMENT '需同步的表名',")
createStr.Append($"`{ColNamesEnum.RevisionID}` int(11) Not NULL DEFAULT 0 COMMENT '表版本编号',")
createStr.Append($"`{ColNamesEnum.SyncType}` varchar(254) NOT NULL DEFAULT 'ALL' COMMENT '同步类型',")
createStr.Append($"`{ColNamesEnum.SyncCols}` varchar(254) NOT NULL DEFAULT '*' COMMENT '同步列名',")
createStr.Append($"PRIMARY KEY (`ID`)")
createStr.Append(" );")
Case Else
Throw New Exception($"Invalid db type:{dbType}")
End Select
Return createStr.ToString()
End Function
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim createStr As New StringBuilder
Select Case dbType
Case DbExecutor.DbTypeEnum.Sqlite
createStr.Append($"Create Table If Not Exists `{TableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNamesEnum.ID}` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,")
createStr.Append($"`{ColNamesEnum.TableName}` varchar(254) NOT NULL ,")
createStr.Append($"`{ColNamesEnum.RevisionID}` integer NOT NULL Default 0 ,")
createStr.Append($"`{ColNamesEnum.SyncTime}` dateTime NOT NULL DEFAULT '2000-01-01 00:00:00' ,")
createStr.Append($"`{ColNamesEnum.SyncType}` varchar(254) NOT NULL DEFAULT 'ALL' ,")
createStr.Append($"`{ColNamesEnum.SyncCols}` varchar(254) NOT NULL DEFAULT '*' ")
createStr.Append(" );")
Case DbExecutor.DbTypeEnum.Mysql
createStr.Append($"Create Table If Not Exists `{dbName}`.`{TableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNamesEnum.ID}` int(11) Not NULL AUTO_INCREMENT,")
createStr.Append($"`{ColNamesEnum.TableName}` varchar(254) Not NULL COMMENT '需同步的表名',")
createStr.Append($"`{ColNamesEnum.RevisionID}` int(11) Not NULL DEFAULT 0 COMMENT '表版本编号',")
createStr.Append($"`{ColNamesEnum.SyncType}` varchar(254) NOT NULL DEFAULT 'ALL' COMMENT '同步类型',")
createStr.Append($"`{ColNamesEnum.SyncCols}` varchar(254) NOT NULL DEFAULT '*' COMMENT '同步列名',")
createStr.Append($"PRIMARY KEY (`ID`)")
createStr.Append(" );")
Case Else
Throw New Exception($"Invalid db type:{dbType}")
End Select
Return createStr.ToString()
End Function
Public Shared Function SyncTrigger(dbName As String, tbName As String) As String
Dim builder As New StringBuilder
builder.Append(DbAfterDeleteDataTrigger(dbName, tbName))
builder.Append(DbAfterInsertDataTrigger(dbName, tbName))
' builder.Append(DbAfterUpdateDataTrigger(dbName, tbName))
builder.Append(DbBeforUpdateDataTrigger(dbName, tbName))
Return builder.ToString()
End Function
''' <summary>
''' 添加需要同步的数据表名至同步表中
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tbName">需要同步的数据表名</param>
''' <param name="syncType">同步类型,all为全表下载,new为增量下载</param>
''' <param name="syncCols">同步时下载的字段,默认为*全字段下载</param>
''' <returns></returns>
Public Shared Function AddSyncTableString(dbName As String, tbName As String,Optional syncType As String = "all",Optional syncCols As String = "*") As String
Dim builder As New StringBuilder
builder.Append($"Delete from `{dbName}`.`{TableName}` where `{ColNamesEnum.TableName}` = '{tbName}';")
builder.Append($"Insert Into `{dbName}`.`{TableName}` (`{ColNamesEnum.TableName}`,`{ColNamesEnum.SyncType}`,`{ColNamesEnum.SyncCols}`) values ('{tbName}','{syncType}','{syncCols}');")
Return builder.ToString()
End Function
''' <summary>
''' 数据库连接涉及多库操作时,新增数据后更新触发器
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tbName">数据表名</param>
''' <returns></returns>
Public Shared Function DbAfterInsertDataTrigger(dbName As String, tbName As String) As String
Dim triggerString As New StringBuilder
triggerString.Append($"Create Trigger If Not Exists `{dbName}`.`{tbName}_AfterInsert` ")
triggerString.Append($"After Insert On `{dbName}`.`{tbName}` ")
triggerString.Append($"For Each Row ")
triggerString.Append($"Begin ")
triggerString.Append($"UPDATE `{dbName}`.`{TableName}` SET `{ColNamesEnum.RevisionID}` = (`{ColNamesEnum.RevisionID}` + 1) where `{ColNamesEnum.TableName}` = '{tbName}';")
triggerString.Append($"End;")
Return triggerString.ToString()
End Function
''' <summary>
''' 数据库连接涉及多库操作时,更新数据后更新触发器
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tbName">数据表名</param>
''' <returns></returns>
Public Shared Function DbAfterUpdateDataTrigger(dbName As String, tbName As String) As String
Dim triggerString As New StringBuilder
triggerString.Append($"Create Trigger If Not Exists `{dbName}`.`{tbName}_AfterUpdate` ")
triggerString.Append($"After Update On `{dbName}`.`{tbName}` ")
triggerString.Append($"For Each Row ")
triggerString.Append($"Begin ")
triggerString.Append($"Set NEW.UpdateTime = NOW();")
triggerString.Append($"UPDATE `{dbName}`.`{TableName}` SET `{ColNamesEnum.RevisionID}` = (`{ColNamesEnum.RevisionID}` + 1) where `{ColNamesEnum.TableName}` = '{tbName}';")
triggerString.Append($"End;")
Return triggerString.ToString()
End Function
''' <summary>
''' 数据库连接涉及多库操作时,更新数据后更新触发器
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tbName">数据表名</param>
''' <returns></returns>
Public Shared Function DbBeforUpdateDataTrigger(dbName As String, tbName As String) As String
Dim triggerString As New StringBuilder
triggerString.Append($"Create Trigger If Not Exists `{dbName}`.`{tbName}_BeforeUpdate` ")
triggerString.Append($"Before Update On `{dbName}`.`{tbName}` ")
triggerString.Append($"For Each Row ")
triggerString.Append($"Begin ")
triggerString.Append($"Set NEW.UpdateTime = NOW();")
triggerString.Append($"UPDATE `{dbName}`.`{TableName}` SET `{ColNamesEnum.RevisionID}` = (`{ColNamesEnum.RevisionID}` + 1) where `{ColNamesEnum.TableName}` = '{tbName}';")
triggerString.Append($"End;")
Return triggerString.ToString()
End Function
''' <summary>
''' 数据库连接涉及多库操作时,删除后更新触发器
''' </summary>
''' <param name="dbName">数据库名</param>
''' <param name="tbName">数据表名</param>
''' <returns></returns>
Public Shared Function DbAfterDeleteDataTrigger(dbName As String, tbName As String) As String
Dim triggerString As New StringBuilder
triggerString.Append($"Create Trigger If Not Exists `{dbName}`.`{tbName}_AfterDelete` ")
triggerString.Append($"After Delete On `{dbName}`.`{tbName}` ")
triggerString.Append($"For Each Row ")
triggerString.Append($"Begin ")
triggerString.Append($"UPDATE `{dbName}`.`{TableName}` SET `{ColNamesEnum.RevisionID}` = (`{ColNamesEnum.RevisionID}` + 1) where `{ColNamesEnum.TableName}` = '{tbName}';")
triggerString.Append($"End;")
Return triggerString.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,146 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
''' <summary>
''' 测试记录表,不同项目不同站表名不同
''' </summary>
Public Class TestLogTable
Enum ColNames
ID
''' <summary>
''' 用户唯一标识
''' </summary>
UserID
''' <summary>
''' 设备唯一索引
''' </summary>
ServiceID
''' <summary>
''' 生产线索引
''' </summary>
ProductionLineID
''' <summary>
''' 内部订单索引
''' </summary>
OrderID
''' <summary>
''' 应用程序名
''' </summary>
AppName
''' <summary>
''' 测试流程名
''' </summary>
TestPlan
''' <summary>
''' 产品SN唯一索引
''' </summary>
DUT_SN
''' <summary>
''' 测试起始时间
''' </summary>
StartTime
''' <summary>
''' 测试耗时
''' </summary>
UsedTime
''' <summary>
''' 测试结果
''' </summary>
TestResult
''' <summary>
''' 错误代码
''' </summary>
ErrCode
''' <summary>
''' 失败步骤集合
''' </summary>
FailSteps
''' <summary>
''' 失败步骤集合
''' </summary>
FailMsg
''' <summary>
''' 自定义字段,由实际使用中添加字段
''' </summary>
CustomFiled
End Enum
''' <summary>
''' 数据表名
''' </summary>
''' <param name="projectIndex">项目索引</param>
''' <param name="stationIndex">工艺站索引</param>
''' <returns></returns>
Public Shared Function TableName(projectIndex As Integer, stationIndex As Integer) As String
Return $"TBL_{projectIndex}_{stationIndex}_TestLog"
End Function
Public Shared ReadOnly CustomFiledType As String = $"varchar(16)"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, tableName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim createStr As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Sqlite Then
createStr.Append($"Create Table If Not Exists `{tableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNames.ID}` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,")
createStr.Append($"`{ColNames.UserID}` INTEGER,")
createStr.Append($"`{ColNames.ServiceID}` INTEGER,")
createStr.Append($"`{ColNames.AppName}` varchar(64) DEFAULT NULL,")
createStr.Append($"`{ColNames.TestPlan}` varchar(128) DEFAULT NULL,")
createStr.Append($"`{ColNames.DUT_SN}` varchar(32) DEFAULT NULL,")
createStr.Append($"`{ColNames.StartTime}` datetime DEFAULT NULL,")
createStr.Append($"`{ColNames.UsedTime}` double DEFAULT NULL,")
createStr.Append($"`{ColNames.TestResult}` int DEFAULT NULL,")
createStr.Append($"`{ColNames.ErrCode}` varchar(16) DEFAULT NULL,")
createStr.Append($"`{ColNames.FailSteps}` varchar(128) DEFAULT NULL,")
createStr.Append($"`{ColNames.ProductionLineID}` int DEFAULT NULL,")
createStr.Append($"`{ColNames.OrderID}` int DEFAULT NULL,")
createStr.Append($"`{ColNames.FailMsg}` varchar(254) DEFAULT NULL")
createStr.Append(" );")
ElseIf dbType = DbExecutor.DbTypeEnum.Mysql Then
createStr.Append($"Create Table If Not Exists `{dbName}`.`{tableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT ,")
createStr.Append($"`{ColNames.UserID}` int,")
createStr.Append($"`{ColNames.ServiceID}` int,")
createStr.Append($"`{ColNames.AppName}` varchar(64) DEFAULT NULL,")
createStr.Append($"`{ColNames.TestPlan}` varchar(128) DEFAULT NULL,")
createStr.Append($"`{ColNames.DUT_SN}` varchar(32) DEFAULT NULL,")
createStr.Append($"`{ColNames.StartTime}` datetime DEFAULT NULL,")
createStr.Append($"`{ColNames.UsedTime}` double DEFAULT NULL,")
createStr.Append($"`{ColNames.TestResult}` tinyint(1) DEFAULT NULL,")
createStr.Append($"`{ColNames.ErrCode}` varchar(16) DEFAULT NULL,")
createStr.Append($"`{ColNames.FailSteps}` varchar(128) DEFAULT NULL,")
createStr.Append($"`{ColNames.ProductionLineID}` int DEFAULT NULL,")
createStr.Append($"`{ColNames.OrderID}` int DEFAULT NULL,")
createStr.Append($"`{ColNames.FailMsg}` varchar(254) DEFAULT NULL,")
createStr.Append($"PRIMARY KEY (`{ColNames.ID}`)")
createStr.Append(" );")
Else
Throw New Exception($"Unknown Type{dbType}!")
End If
Return createStr.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,54 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Customer
''' <summary>
''' 产商的客户总表
''' </summary>
Public Class VendorCustomerTable
Enum ColNames
ID
CustomerAbbr
CustomerName
CreateTime
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
End Enum
Public Shared Property TableName() As String = "TBL_Customer"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim builder As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
builder.Append($"CREATE TABLE If Not Exists `{dbName}`.`{TableName}` ")
builder.Append("(")
builder.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',")
builder.Append($"`{ColNames.CustomerAbbr}` varchar(64) NOT NULL COMMENT '客户缩写',")
builder.Append($"`{ColNames.CustomerName}` varchar(64) NOT NULL DEFAULT '' COMMENT '客户名称',")
builder.Append($"`{ColNames.CreateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',")
builder.Append($"`{ColNames.UpdateTime}` datetime NOT NULL DEFAULT current_timestamp() COMMENT '更新时间',")
builder.Append($"PRIMARY KEY (`{ColNames.ID}`) ")
builder.Append(")")
builder.Append("ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;")
Else
Throw New Exception($"{TableName}-Invalid db type :{dbType}")
End If
Return builder.ToString()
End Function
End Class
End NameSpace

View File

@@ -0,0 +1,59 @@
Imports System.Text
Namespace UTSModule.DbTableModel.LocalPrivate
''' <summary>
''' 本地未上传记录缓存表
''' </summary>
Public Class CacheTable
''' <summary>数据库操作记录表枚举值</summary>
Enum ColNamesEnum
''' <summary>序列号</summary>
ID
''' <summary>用户名</summary>
[Operator]
''' <summary>日期时间</summary>
DateTime
''' <summary>数据库语句</summary>
SqlCmd
''' <summary>是否已经同步到远程数据库</summary>
IsUpload
''' <summary>同步出错编码</summary>
ErrorCode
''' <summary>同步出错提示</summary>
ErrorMessage
''' <summary>备注</summary>
Remark
End Enum
Public Shared ReadOnly TableName As String = "TBL_Table_CaChe"
''' <summary>
''' Sqlite数据库建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString() As String
Dim createStr As New StringBuilder
createStr.Append($"Create Table If Not Exists `{TableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNamesEnum.ID}` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,")
createStr.Append($"`{ColNamesEnum.DateTime}` DateTime NOT NULL ,")
createStr.Append($"`{ColNamesEnum.Operator }` integer,")
createStr.Append($"`{ColNamesEnum.SqlCmd}` text NOT NULL ,")
createStr.Append($"`{ColNamesEnum.IsUpload }` bit NOT NULL ,")
createStr.Append($"`{ColNamesEnum.ErrorCode }` varchar(64) ,")
createStr.Append($"`{ColNamesEnum.ErrorMessage }` varchar(255) ,")
createStr.Append($"`{ColNamesEnum.Remark}` varchar(255)")
createStr.Append(" );")
Return createStr.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,85 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Manage
Public Class AppListTable
Enum ColNamesEnum
''' <summary>
'''索引
''' </summary>
ID
''' <summary>
''' 数据服务索引
''' </summary>
ServiceID
''' <summary>
''' 软件名
''' </summary>
AppName
''' <summary>
''' 软件版本
''' </summary>
AppVersion
''' <summary>
''' 注册日期与时间
''' </summary>
RegisterDateTime
''' <summary>
''' 最后活动日期与时间
''' </summary>
LastActiveDateTime
''' <summary>
''' 最后活动信息
''' </summary>
LastInfomation
''' <summary>
''' 备注
''' </summary>
Remark
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_AppList"
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim createStr As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Sqlite Then
createStr.Append($"Create Table If Not Exists `{TableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNamesEnum.ID}` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,")
createStr.Append($"`{ColNamesEnum.ServiceID}` int(11) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.AppName}` varchar(254) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.AppVersion}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.LastInfomation}` varchar(254) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.RegisterDateTime}` DateTime DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.LastActiveDateTime}` DateTime DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.Remark}` text DEFAULT NULL ")
createStr.Append(" );")
ElseIf dbType = DbExecutor.DbTypeEnum.Mysql Then
createStr.Append($"Create Table If Not Exists `{dbName}`.`{TableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNamesEnum.ID}` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,")
createStr.Append($"`{ColNamesEnum.ServiceID}` int(11) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.AppName}` varchar(254) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.AppVersion}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.LastInfomation}` varchar(254) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.RegisterDateTime}` DateTime DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.LastActiveDateTime}` DateTime DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.Remark}` text DEFAULT NULL ,")
createStr.Append($"PRIMARY KEY (`{ColNamesEnum.ID}`)")
createStr.Append(" );")
Else
Throw New Exception($"Unknown Type{dbType}!")
End If
Return createStr.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,106 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Manage
Public Class AppLogTable
Enum ColNamesEnum
''' <summary>
''' 索引
''' </summary>
ID
''' <summary>
''' 数据服务索引
''' </summary>
ServiceID
''' <summary>
''' 软件名称
''' </summary>
AppName
''' <summary>
''' App版本
''' </summary>
AppVersion
''' <summary>
''' 测试项目名
''' </summary>
ProjectName
''' <summary>
''' 测试站名
''' </summary>
StationName
''' <summary>
''' 测试流程名
''' </summary>
TestPlan
''' <summary>
''' 生成日期
''' </summary>
DateTime
''' <summary>
''' 日志类型
''' </summary>
LogType
''' <summary>
''' 日志内容
''' </summary>
LogText
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_AppLog"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim createStr As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Sqlite Then
createStr.Append($"Create Table If Not Exists `{TableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNamesEnum.ID}` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,")
createStr.Append($"`{ColNamesEnum.ServiceID}` int(11) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.AppName}` varchar(254) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.AppVersion}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.ProjectName}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.StationName}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.TestPlan}` varchar(254) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.DateTime}` DateTime DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.LogType}` varchar(32) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.LogText}` text DEFAULT NULL ")
createStr.Append(" );")
ElseIf dbType = DbExecutor.DbTypeEnum.Mysql Then
createStr.Append($"Create Table If Not Exists `{dbName}`.`{TableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNamesEnum.ID}` int(11) NOT NULL AUTO_INCREMENT ,")
createStr.Append($"`{ColNamesEnum.ServiceID}` int(11) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.AppName}` varchar(254) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.AppVersion}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.ProjectName}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.StationName}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.TestPlan}` varchar(254) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.DateTime}` DateTime DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.LogType}` varchar(32) DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.LogText}` text DEFAULT NULL ,")
createStr.Append($"`{ColNamesEnum.ID}` int(11) NOT NULL AUTO_INCREMENT ,")
createStr.Append($"PRIMARY KEY (`{ColNamesEnum.ID}`)")
createStr.Append(" );")
Else
Throw New Exception($"Unknown Type{dbType}!")
End If
Return createStr.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,32 @@
Namespace UTSModule.DbTableModel.Manage
''' <summary>
''' 客户总表
''' </summary>
Public Class CustomerListTable
Enum ColNamesEnum
''' <summary>
''' 客户唯一标识
''' </summary>
ID
''' <summary>
''' 客户公司名
''' </summary>
CustomerName
''' <summary>
''' 创建日期
''' </summary>
CreateTime
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_Company"
End Class
End NameSpace

View File

@@ -0,0 +1,133 @@
Namespace UTSModule.DbTableModel.Manage
Public Class DataServiceListTable
Enum ColNames
''' <summary>
''' 服务索引唯一值
''' </summary>
ID
''' <summary>
''' 鉴权文件索引
''' </summary>
LicenseID
''' <summary>
''' 鉴权文件有效日期
''' </summary>
LicenseValidDateTime
''' <summary>
''' 公司名
''' </summary>
CompanyName
''' <summary>
''' 服务终端内核
''' </summary>
TerminalOS
''' <summary>
''' 服务终端类型
''' </summary>
TerminalType
''' <summary>
''' 服务终端名称
''' </summary>
TerminalName
''' <summary>
''' 服务自定义标识名称
''' </summary>
TerminalAlias
''' <summary>
''' 服务MAC地址
''' </summary>
TerminalMAC
''' <summary>
''' CPU序列号
''' </summary>
ProcessorId
''' <summary>
''' 服务版本
''' </summary>
ServiceVersion
''' <summary>
''' 服务注册日期
''' </summary>
ServiceRegisterDateTime
''' <summary>
'''服务最后活动日期
''' </summary>
ServiceLastActiveDateTime
''' <summary>
''' 服务是否有效,注册默认有效
''' </summary>
ServiceValid
''' <summary>
''' 数据服务在线
''' </summary>
IsOnline
''' <summary>
''' 数据服务在线时间
''' </summary>
ServiceOnlineDateTime
''' <summary>
''' 数据服务需要人工处理错误信息
''' </summary>
ErrMsg
''' <summary>
''' 更新服务版本
''' </summary>
USVer
''' <summary>
''' 更新服务是否在线
''' </summary>
USIsOnline
''' <summary>
''' 更新服务需要人工处理错误信息
''' </summary>
USErrMsg
''' <summary>
''' 子网名称
''' </summary>
BarnchNet
''' <summary>
''' 设备角色
''' </summary>
Roles
''' <summary>
''' 与子网服务连接状态
''' </summary>
IsDBProxyConn
''' <summary>
''' 缓存表数量
''' </summary>
CacheCount
''' <summary>
''' 网上邻居
''' </summary>
NetworkNeiborhood
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_DataServiceList"
End Class
End NameSpace

View File

@@ -0,0 +1,112 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Manage
Public Class DataServiceLogTable
Enum ColNames
''' <summary>
''' 索引
''' </summary>
ID
''' <summary>
''' 数据服务索引
''' </summary>
ServiceID
''' <summary>
''' 数据服务版本
''' </summary>
ServiceVersion
''' <summary>
''' 更新服务版本
''' </summary>
UpdateServiceVersion
''' <summary>
''' 厂商名称
''' </summary>
VendorName
''' <summary>
''' 生成日期与时间
''' </summary>
DateTime
''' <summary>
''' 公网IP
''' </summary>
PublicIp
''' <summary>
''' 私网IP
''' </summary>
PrivateIp
''' <summary>
''' Mac地址
''' </summary>
Mac
''' <summary>
''' 日志类型
''' </summary>
LogType
''' <summary>
''' 日志内容
''' </summary>
LogText
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_DataServiceLog"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(dbName As String, Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim createStr As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Sqlite Then
createStr.Append($"Create Table If Not Exists `{TableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNames.ID}` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,")
createStr.Append($"`{ColNames.ServiceID}` int(11) DEFAULT NULL ,")
createStr.Append($"`{ColNames.ServiceVersion}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNames.UpdateServiceVersion}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNames.VendorName}` varchar(254) DEFAULT NULL ,")
createStr.Append($"`{ColNames.PrivateIp}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNames.PublicIp}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNames.DateTime}` DateTime DEFAULT NULL ,")
createStr.Append($"`{ColNames.LogType}` varchar(32) DEFAULT NULL ,")
createStr.Append($"`{ColNames.LogText}` text DEFAULT NULL ")
createStr.Append(" );")
ElseIf dbType = DbExecutor.DbTypeEnum.Mysql Then
createStr.Append($"Create Table If Not Exists `{dbName}`.`{TableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT ,")
createStr.Append($"`{ColNames.ServiceID}` int(11) DEFAULT NULL ,")
createStr.Append($"`{ColNames.ServiceVersion}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNames.UpdateServiceVersion}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNames.VendorName}` varchar(254) DEFAULT NULL ,")
createStr.Append($"`{ColNames.PrivateIp}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNames.PublicIp}` varchar(64) DEFAULT NULL ,")
createStr.Append($"`{ColNames.DateTime}` DateTime DEFAULT NULL ,")
createStr.Append($"`{ColNames.LogType}` varchar(32) DEFAULT NULL ,")
createStr.Append($"`{ColNames.LogText}` text DEFAULT NULL ,")
createStr.Append($"`{ColNames.ID}` int(11) NOT NULL AUTO_INCREMENT ,")
createStr.Append($"PRIMARY KEY (`{ColNames.ID}`)")
createStr.Append(" );")
Else
Throw New Exception($"Unknown Type{dbType}!")
End If
Return createStr.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,39 @@
Namespace UTSModule.DbTableModel.Manage
''' <summary>
''' 数据库总表
''' </summary>
Public Class DbListTable
Enum ColNamesEnum
''' <summary>
''' 数据库唯一标识
''' </summary>
ID
''' <summary>
''' 所属公司索引
''' </summary>
CompanyID
''' <summary>
''' 数据库名
''' </summary>
DatabaseName
''' <summary>
''' 数据库用户名
''' </summary>
DatabaseUser
''' <summary>
''' 数据库密码
''' </summary>
DatabasePassword
''' <summary>
''' 数据库说明
''' </summary>
DatabaseDesc
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_DBList"
End Class
End NameSpace

View File

@@ -0,0 +1,48 @@
Namespace UTSModule.DbTableModel.Manage
''' <summary>
''' 设备总表
''' </summary>
Public Class DevListTable
Enum ColNamesEnum
''' <summary>
''' 设备唯一索引
''' </summary>
ID
''' <summary>
''' 设备名称
''' </summary>
DevName
''' <summary>
''' 设备类型
''' </summary>
DevType
''' <summary>
''' 设备MAC地址
''' </summary>
MAC
''' <summary>
''' 首次登陆时间
''' </summary>
FirstLoginDate
''' <summary>
''' 末次在线时间
''' </summary>
LastOnlineDate
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
''' <summary>
''' 设备在线状态
''' </summary>
OnlineStatus
''' <summary>
''' 是被是否有效
''' </summary>
Valid
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_DevList"
End Class
End NameSpace

View File

@@ -0,0 +1,52 @@
Namespace UTSModule.DbTableModel.Manage
''' <summary>
''' 设备日志总表
''' </summary>
Public Class DevLogTable
Enum ColNamesEnum
ID
''' <summary>
''' 设备唯一标识
''' </summary>
DevID
''' <summary>
''' 操作时间
''' </summary>
DateTime
''' <summary>
''' 公网IP
''' </summary>
Public_IP
''' <summary>
''' 内网IP
''' </summary>
Private_IP
''' <summary>
''' License文件名
''' </summary>
LicFileName
''' <summary>
''' 产生日志的APP名
''' </summary>
AppName
''' <summary>
''' App版本号
''' </summary>
AppVersion
''' <summary>
''' 测试配置文件名称
''' </summary>
TestPlan
''' <summary>
''' 用户唯一标识
''' </summary>
UserID
''' <summary>
''' 操作内容
''' </summary>
Operation
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_DevLog"
End Class
End NameSpace

View File

@@ -0,0 +1,28 @@
Namespace UTSModule.DbTableModel.Manage
''' <summary>
''' 错误代码总表
''' </summary>
Public Class ErrCodeTable
Enum ColNamesEnum
''' <summary>
''' 错误代码唯一标识
''' </summary>
ErrCode
''' <summary>
''' 错误提示信息
''' </summary>
ErrMsg
''' <summary>
''' 统计图中提示颜色
''' </summary>
ErrColor
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_ErrCode"
End Class
End NameSpace

View File

@@ -0,0 +1,34 @@
Namespace UTSModule.DbTableModel.Manage
Public Class FtpUserTable
Enum ColNamesEnum
''' <summary>
'''索引
''' </summary>
ID
''' <summary>
''' 数据服务索引
''' </summary>
FtpService
''' <summary>
''' 软件名
''' </summary>
FtpPort
''' <summary>
''' 软件版本
''' </summary>
FtpUser
''' <summary>
''' 注册日期与时间
''' </summary>
FtpPassword
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_FtpList"
End Class
End NameSpace

View File

@@ -0,0 +1,33 @@
Namespace UTSModule.DbTableModel.Manage
Public Class LicenseListTable
Enum ColNamesEnum
''' <summary>
''' 索引
''' </summary>
ID
''' <summary>
''' 公司名称
''' </summary>
CompanyName
''' <summary>
''' 发布日期
''' </summary>
ReleaseDate
''' <summary>
''' 有效日期
''' </summary>
ValidDateTime
''' <summary>
''' 备注
''' </summary>
Remark
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_LicenseList"
End Class
End NameSpace

View File

@@ -0,0 +1,27 @@
Namespace UTSModule.DbTableModel.Manage
''' <summary>
''' 操作日志表,对公共库的操作记录
''' </summary>
Public Class LogTable
Enum ColNamesEnum
''' <summary>
''' 索引,无作用
''' </summary>
ID
''' <summary>
''' 用户唯一标识
''' </summary>
UserID
''' <summary>
''' 操作时间
''' </summary>
DateTime
''' <summary>
''' 具体操作内容
''' </summary>
Operation
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_Log"
End Class
End NameSpace

View File

@@ -0,0 +1,36 @@
Namespace UTSModule.DbTableModel.Manage
''' <summary>
''' 功能模块总表
''' </summary>
Public Class OperationListTable
Enum ColNamesEnum
''' <summary>
''' 功能模块唯一索引
''' </summary>
ID
''' <summary>
''' 功能模块名称
''' </summary>
OperationName
''' <summary>
''' 功能模块详细说明
''' </summary>
OperationDesc
''' <summary>
''' 操作级别,读为0,写为1
''' </summary>
OperationLevel
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_OperationList"
End Class
End Namespace

View File

@@ -0,0 +1,11 @@
Namespace UTSModule.DbTableModel.Manage
Public Class OrderStatusTable
Enum ColNames
ID
StatusName
Remark
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_OrderStatus"
End Class
End Namespace

View File

@@ -0,0 +1,107 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Manage
Public Class ServiceLogTable
''' <summary>数据库操作记录表枚举值</summary>
Enum ColNamesEnum
''' <summary>日志索引</summary>
ID
''' <summary>厂商名称</summary>
CompanyName
''' <summary>应用名称</summary>
AppName
''' <summary>应用版本</summary>
AppVersion
''' <summary>日志生成日期与时间</summary>
DateTime
''' <summary>设备公网IP</summary>
DevPublicIP
''' <summary>设备内网IP地址</summary>
DevPrivateIP
''' <summary>设备MAC</summary>
DevMac
''' <summary>设备系统版本</summary>
DevOS
''' <summary>设备名称</summary>
DevName
''' <summary>设备用户名</summary>
DevUserName
''' <summary>设备网络状态</summary>
DevOnline
''' <summary>日志类型</summary>
LogType
''' <summary>日志内容</summary>
LogText
End Enum
Public Shared ReadOnly TableName As String = "TBL_UTS_Manage_ServiceLog"
''' <summary>
''' Sqlite数据库建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString(Optional dbType As DbExecutor.DbTypeEnum = DbExecutor.DbTypeEnum.Mysql) As String
Dim createStr As New StringBuilder
If dbType = DbExecutor.DbTypeEnum.Mysql Then
createStr.Append($"Create Table If Not Exists `{TableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNamesEnum.ID}` NOT NULL AUTO_INCREMENT ,")
createStr.Append($"`{ColNamesEnum.CompanyName}` varchar(254),")
createStr.Append($"`{ColNamesEnum.AppName}` varchar(254),")
createStr.Append($"`{ColNamesEnum.AppVersion}` varchar(254),")
createStr.Append($"`{ColNamesEnum.DateTime}` DateTime NOT NULL ,")
createStr.Append($"`{ColNamesEnum.DevPublicIP}` varchar(254),")
createStr.Append($"`{ColNamesEnum.DevPrivateIP}` varchar(254),")
createStr.Append($"`{ColNamesEnum.DevMac}` varchar(254),")
createStr.Append($"`{ColNamesEnum.DevOS}` varchar(254),")
createStr.Append($"`{ColNamesEnum.DevName}` varchar(254),")
createStr.Append($"`{ColNamesEnum.DevUserName}` varchar(254),")
createStr.Append($"`{ColNamesEnum.DevOnline}` varchar(254),")
createStr.Append($"`{ColNamesEnum.LogType}` varchar(254),")
createStr.Append($"`{ColNamesEnum.LogText}` text,")
createStr.Append($"PRIMARY KEY (`ID`)")
createStr.Append(" );")
ElseIf dbType = DbExecutor.DbTypeEnum.Sqlite Then
createStr.Append($"Create Table If Not Exists `{TableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNamesEnum.ID}` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,")
createStr.Append($"`{ColNamesEnum.CompanyName}` varchar(254),")
createStr.Append($"`{ColNamesEnum.AppName}` varchar(254),")
createStr.Append($"`{ColNamesEnum.AppVersion}` varchar(254),")
createStr.Append($"`{ColNamesEnum.DateTime}` DateTime NOT NULL ,")
createStr.Append($"`{ColNamesEnum.DevPublicIP}` varchar(254),")
createStr.Append($"`{ColNamesEnum.DevPrivateIP}` varchar(254),")
createStr.Append($"`{ColNamesEnum.DevMac}` varchar(254),")
createStr.Append($"`{ColNamesEnum.DevOS}` varchar(254),")
createStr.Append($"`{ColNamesEnum.DevName}` varchar(254),")
createStr.Append($"`{ColNamesEnum.DevUserName}` varchar(254),")
createStr.Append($"`{ColNamesEnum.DevOnline}` varchar(254),")
createStr.Append($"`{ColNamesEnum.LogType}` varchar(254),")
createStr.Append($"`{ColNamesEnum.LogText}` text")
createStr.Append(" );")
End If
Return createStr.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,33 @@
Namespace UTSModule.DbTableModel.Manage
Public Class SwReleaseLogTable
Enum ColNamesEnum
''' <summary>
''' 应用程序索引
''' </summary>
ID
''' <summary>
''' 应用程序名
''' </summary>
SoftwareName
''' <summary>
''' 发布版本号
''' </summary>
ReleaseVersion
''' <summary>
''' 发布日期
''' </summary>
ReleaseDate
''' <summary>
''' 发布用户索引
''' </summary>
UserID
''' <summary>
''' 发布说明
''' </summary>
Remark
End Enum
End Class
End NameSpace

View File

@@ -0,0 +1,40 @@
Namespace UTSModule.DbTableModel.Manage
''' <summary>
''' 程序更新软件表
''' </summary>
Public Class SwUpdateTable
Enum ColNamesEnum
''' <summary>
''' 应用程序索引
''' </summary>
ID
''' <summary>
''' 应用程序名
''' </summary>
SoftwareName
''' <summary>
''' 最新版本号
''' </summary>
LastVersion
''' <summary>
''' 发布日期
''' </summary>
ReleaseDate
''' <summary>
''' 二进制文件
''' </summary>
BinPackage
''' <summary>
''' MD5校验码
''' </summary>
BinPackageMd5
''' <summary>
''' FTP包名
''' </summary>
PackageName
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_SwUpdate"
End Class
End Namespace

View File

@@ -0,0 +1,54 @@
Imports System.Text
Imports UTS_Core.Database
Namespace UTSModule.DbTableModel.Manage
''' <summary>
''' 需要同步下载表名总表
''' </summary>
Public Class SyncListTable
Enum ColNamesEnum
ID
''' <summary>
''' 表名
''' </summary>
TableName
''' <summary>
''' 表版本编号
''' </summary>
RevisionID
''' <summary>
''' 同步类型
''' </summary>
SyncType
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_SyncList"
''' <summary>
''' 根据数据库类型,返回建表语句
''' </summary>
''' <param name="type">数据库类型</param>
''' <returns></returns>
Public Shared Function CreateString(type As DbExecutor.DbTypeEnum) As String
Dim createStr As New StringBuilder
Select Case type
Case DbExecutor.DbTypeEnum.Sqlite
createStr.Append($"Create Table If Not Exists {TableName}")
createStr.Append(" (")
createStr.Append($"{Customer.SyncListTable.ColNamesEnum.ID} INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,")
createStr.Append($"{Customer.SyncListTable.ColNamesEnum.TableName} varchar(254) NOT NULL ,")
createStr.Append($"{Customer.SyncListTable.ColNamesEnum.RevisionID} integer NOT NULL ,")
createStr.Append($"{Customer.SyncListTable.ColNamesEnum.SyncType} varchar(254)")
createStr.Append(" );")
Case DbExecutor.DbTypeEnum.Mysql
Case Else
End Select
Return createStr.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,32 @@
Namespace UTSModule.DbTableModel.Manage
''' <summary>
''' 测试计划编辑信息提示
''' </summary>
Public Class TestPlanTipsTable
Enum ColNamesEnum
ID
''' <summary>
''' 列名
''' </summary>
ColName
''' <summary>
''' 列类型
''' </summary>
ColType
''' <summary>
''' 列描述
''' </summary>
ColDesc
''' <summary>
''' 列默认值
''' </summary>
ColValue
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_TestPlanTips"
End Class
End NameSpace

View File

@@ -0,0 +1,52 @@
Namespace UTSModule.DbTableModel.Manage
''' <summary>
''' 用户总表
''' </summary>
Public Class UserListTable
Enum ColNamesEnum
''' <summary>
''' 用户ID唯一索引
''' </summary>
ID
''' <summary>
''' 用户登陆账号
''' </summary>
UserName
''' <summary>
''' 用户密码
''' </summary>
Password
''' <summary>
''' 公司索引ID
''' </summary>
CompanyID
''' <summary>
''' 创建日期
''' </summary>
CreateTime
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
''' <summary>
''' 手机号码
''' </summary>
Mobile
''' <summary>
''' 微信号
''' </summary>
WeiXin
''' <summary>
''' 邮箱地址
''' </summary>
Email
''' <summary>
''' 是否有效
''' </summary>
IsValid
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_User"
End Class
End NameSpace

View File

@@ -0,0 +1,32 @@
Namespace UTSModule.DbTableModel.Manage
''' <summary>
''' 用户操作功能权限总表
''' </summary>
Public Class UserOperationAuthTable
Enum ColNamesEnum
ID
''' <summary>
''' 用户唯一标识
''' </summary>
UserID
''' <summary>
''' 数据库唯一标识
''' </summary>
DatabaseID
''' <summary>
''' 拥有完整权限的功能唯一标识,用,分割
''' </summary>
FullAccess
''' <summary>
''' 拥有读写权限的功能唯一标识,用,分割
''' </summary>
ReadWriteAccess
''' <summary>
''' 拥有只读权限的功能唯一标识,用,分割
''' </summary>
ReadOnlyAccess
End Enum
Public Shared Property TableName() As String = "TBL_UTS_Manage_UserAuth_Operation"
End Class
End NameSpace

View File

@@ -0,0 +1,122 @@
Imports System.Text
Namespace UTSModule.DbTableModel.Manage
''' <summary>
''' 用户测试命令总表
''' </summary>
Public Class UtsCmdListTable
Enum ColNamesEnum
ID
CmdType
CmdName
CmdDesc
''' <summary>
''' 修改日期
''' </summary>
UpdateTime
ParamCount
ParamDesc1
ParamType1
ParamLower1
ParamUpper1
ParamValue1
ParamDesc2
ParamType2
ParamLower2
ParamUpper2
ParamValue2
ParamDesc3
ParamType3
ParamLower3
ParamUpper3
ParamValue3
ParamDesc4
ParamType4
ParamLower4
ParamUpper4
ParamValue4
ParamDesc5
ParamType5
ParamLower5
ParamUpper5
ParamValue5
ParamDesc6
ParamType6
ParamLower6
ParamUpper6
ParamValue6
End Enum
Shared ReadOnly Property TableName() As String = "TBL_UTS_Manage_UtsCmdList"
''' <summary>
''' 建表语句
''' </summary>
''' <returns>建表语句</returns>
Public Shared Function CreateTableString() As String
Dim createStr As New StringBuilder
createStr.Append($"Create Table If Not Exists `{TableName}`")
createStr.Append(" (")
createStr.Append($"`{ColNamesEnum.ID}` int(11) NOT NULL AUTO_INCREMENT,")
createStr.Append($"`{ColNamesEnum.CmdType}` varchar(254) NOT NULL,")
createStr.Append($"`{ColNamesEnum.CmdName}` varchar(254) NOT NULL,")
createStr.Append($"`{ColNamesEnum.CmdDesc}` varchar(254) DEFAULT NULL,")
' createStr.Append($"{ColNamesEnum.ParamName1} varchar(64) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamDesc1}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamType1}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamLower1}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamUpper1}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamValue1}` varchar(254) DEFAULT NULL,")
' createStr.Append($"{ColNamesEnum.ParamName2} varchar(64) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamDesc2}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamType2}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamLower2}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamUpper2}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamValue2}` varchar(254) DEFAULT NULL,")
' createStr.Append($"{ColNamesEnum.ParamName3} varchar(64) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamDesc3}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamType3}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamLower3}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamUpper3}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamValue3}` varchar(254) DEFAULT NULL,")
' createStr.Append($"{ColNamesEnum.ParamName4} varchar(64) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamDesc4}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamType4}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamLower4}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamUpper4}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamValue4}` varchar(254) DEFAULT NULL,")
' createStr.Append($"{ColNamesEnum.ParamName5} varchar(64) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamDesc5}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamType5}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamLower5}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamUpper5}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamValue5}` varchar(254) DEFAULT NULL,")
' createStr.Append($"{ColNamesEnum.ParamName6} varchar(64) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamDesc6}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamType6}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamLower6}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamUpper6}` varchar(254) DEFAULT NULL,")
createStr.Append($"`{ColNamesEnum.ParamValue6}` varchar(254) DEFAULT NULL,")
createStr.Append($"PRIMARY KEY (`{ColNamesEnum.ID}`)")
createStr.Append(" );")
Return createStr.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,9 @@
Imports UTS_Core.Database.DbExecutor
Namespace UTSModule.DbTableModel
MustInherit Class UtsDataTable
Public Property TableName() As String
MustOverride Function CreateTableString(Optional dbName As String = "",Optional type As DbTypeEnum = DbTypeEnum.Mysql) As String
End Class
End Namespace

View File

@@ -0,0 +1,116 @@
Imports System.Text
Imports FluentFTP
Namespace UTSModule
Public Class FtpService
Private _ftpUser As String
Private _ftpPwd As String
Private _ftpPort As Integer
Private _ftpHost As String
Sub New(host As String, port As Integer, user As String, pwd As String)
_ftpHost = host
_ftpPort = port
_ftpUser = user
_ftpPwd = pwd
End Sub
''' <summary>
''' Ftp服务器地址
''' </summary>
''' <returns></returns>
Public Property FtpHost As String
Get
Return _ftpHost
End Get
Set(value As String)
_ftpHost = value
End Set
End Property
Private Sub OnValidateCertificate(control As FtpClient, e As FtpSslValidationEventArgs)
e.Accept = True
End Sub
''' <summary>
''' Ftp是否能正常连接连接正常返回True,连接失败则产生异常
''' </summary>
''' <returns></returns>
Public Function CanConnected() As Boolean
Dim result As Boolean
Using ftpClient As FtpClient = New FtpClient(_ftpHost, _ftpPort, _ftpUser, _ftpPwd)
AddHandler ftpClient.ValidateCertificate, AddressOf OnValidateCertificate
ftpClient.EncryptionMode = FtpEncryptionMode.None
ftpClient.DataConnectionType = FtpDataConnectionType.PASV
ftpClient.Encoding = Encoding.UTF8
ftpClient.Connect()
ftpClient.Disconnect()
End Using
result = True
Return result
End Function
''' <summary>
''' 文件是否存在
''' </summary>
''' <param name="path"></param>
''' <returns></returns>
Public Function FtpFileExists(path As String) As Boolean
Dim result As Boolean
Using ftpClient As FtpClient = New FtpClient(_ftpHost, _ftpPort, _ftpUser, _ftpPwd)
AddHandler ftpClient.ValidateCertificate, AddressOf OnValidateCertificate
ftpClient.EncryptionMode = FtpEncryptionMode.None
ftpClient.DataConnectionType = FtpDataConnectionType.PASV
ftpClient.Encoding = Encoding.UTF8
ftpClient.Connect()
result = ftpClient.FileExists(path)
ftpClient.Disconnect()
End Using
Return result
End Function
''' <summary>
''' 文件上传
''' 将本地指定路径压缩包上传到FTP服务器上manager文件夹下
''' </summary>
Public Sub FtpUpload(remotePath As String, loadPath As String)
Using ftpClient As FtpClient = New FtpClient(_ftpHost, _ftpPort, _ftpUser, _ftpPwd)
AddHandler ftpClient.ValidateCertificate, AddressOf OnValidateCertificate
ftpClient.EncryptionMode = FtpEncryptionMode.None
ftpClient.DataConnectionType = FtpDataConnectionType.PASV
ftpClient.Encoding = Encoding.UTF8
ftpClient.Connect()
ftpClient.UploadFile(loadPath, remotePath, FtpRemoteExists.Overwrite, True)
ftpClient.Disconnect()
End Using
End Sub
''' <summary>
''' 文件下载
''' 从FTP下载压缩包到本地指定路径
''' </summary>
Public Sub FtpDownload(remotePath As String, loadPath As String)
Using ftpClient As FtpClient = New FtpClient(_ftpHost, _ftpPort, _ftpUser, _ftpPwd)
AddHandler ftpClient.ValidateCertificate, AddressOf OnValidateCertificate
ftpClient.EncryptionMode = FtpEncryptionMode.None
ftpClient.DataConnectionType = FtpDataConnectionType.PASV
ftpClient.Encoding = Encoding.UTF8
ftpClient.Connect()
ftpClient.DownloadFile(loadPath, remotePath)
ftpClient.Disconnect()
End Using
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,5 @@
Namespace UTSModule
Public Interface IProcessStation
Sub StationChanged()
End Interface
End NameSpace

View File

@@ -0,0 +1,6 @@
Namespace UTSModule
Public Interface IProductionLine
Sub ProductionLineChanged()
End Interface
End NameSpace

View File

@@ -0,0 +1,9 @@
Imports System.Windows.Forms
Namespace UTSModule
Public Interface IUtsForm
Sub ShowForm(parentControl As Control)
Sub RemoveForm()
End Interface
End Namespace

View File

@@ -0,0 +1,35 @@
Imports UTS_Core.UTSModule.Test
Imports UTS_Core.UTSModule.Test.StatusMonitor
Namespace UTSModule
Public Interface IUtsTest
Sub TestStart(sender As Object, e As EventArgs)
Sub TestPass(sender As Object, e As EventArgs)
Sub TestFail(sender As Object, e As TestFailEventArgs)
Sub TestPause(sender As Object, e As TestPauseEventArgs)
Sub TestEnd(sender As Object, e As TestEndEventArgs)
Sub TestNodeChanged(sender As Object, e As TestNodeChangedEventArgs)
Sub TestNodeCompleted(sender As Object, e As TestNodeCompletedEventArgs)
Sub TestNodeResultChanged(sender As Object, e As TestNodeResultChangedEventArgs)
Sub TestCountChanged(sender As Object, e As TestCountChangedEventArgs)
Sub TestStatusChanged(sender As Object, e As TestStatusChangedEventArgs)
Sub TestTimeChanged(sender As Object, e As TestTimeEventArgs)
Sub TestProgressChanged(sender As Object, e As TestProgressChangedEventArgs)
Sub RetryProgressChanged(sender As Object, e As TestProgressChangedEventArgs)
End Interface
End Namespace

View File

@@ -0,0 +1,505 @@
Imports System.IO
Imports System.Text
Imports UTS_Core.DebugLog
Imports UTS_Core.Security
Namespace UTSModule.License
Public Class License
''' <summary> License文件字段枚举 </summary>
Private Enum LicenseKeyEnum
''' <summary>索引</summary>
ID
''' <summary>客户名</summary>
VendorName
''' <summary>注册日期</summary>
AuthorizationDate
''' <summary>截止日期</summary>
ExpirationDate
''' <summary>管理员账号</summary>
DefaultUser
''' <summary>管理员密码</summary>
DefaultPassword
''' <summary>远程数据库URL或IP</summary>
MysqlServer
''' <summary>远程数据库连接端口</summary>
MysqlPort
''' <summary>远程数据库账号</summary>
MysqlUserID
''' <summary>远程数据库密码</summary>
MysqlPassword
''' <summary>远程数据库私有操作库</summary>
MysqlDatabase
''' <summary>远程数据库共有操作库</summary>
PublicDb
''' <summary>本地数据库存放文件夹</summary>
SqliteDir
''' <summary>本地数据库文件名</summary>
SqliteName
''' <summary>本地数据库密码</summary>
SqlitePassword
''' <summary>Ftp服务器</summary>
FtpHost
''' <summary>Ftp通讯端口</summary>
FtpPort
''' <summary>Ftp通讯账号</summary>
FtpUser
''' <summary>Ftp通讯密码</summary>
FtpPwd
''' <summary>客户MAC地址,锁定|MAC时使用</summary>
MAC
''' <summary>备注</summary>
Remark
''' <summary>UTS版本号</summary>
UtsVersion
''' <summary>签名</summary>
Signature
End Enum
''' <summary> License文件校验返回枚举值</summary>
Public Enum LicenseCheckCodeEnum
''' <summary>未找到License</summary>
NoLicense
''' <summary>无法打开License</summary>
CantOpenLicense
''' <summary>无效的License</summary>
InvalidLicense
''' <summary>校验通过</summary>
CheckPass
End Enum
''' <summary>License校验结果</summary>
Public Enum EnLicenseCheckCode
''' <summary>校验通过</summary>
CheckPass
''' <summary>无效的客户</summary>
InvalidCustomer
''' <summary>无效的注册日期</summary>
InvalidAuthorizationDate
''' <summary>无效的截止日期</summary>
InvalidExpirationDate
''' <summary>无效的用户</summary>
InvalidDefaultUser
''' <summary>无效的用户密码</summary>
InvalidDefaultPassword
''' <summary>无效的MAC地址</summary>
InvalidMac
''' <summary>无效的UTS版本</summary>
InvalidUtsVersion
''' <summary>无效的签名</summary>
InvalidSignature
''' <summary>无效的数据库地址</summary>
InvalidDatabaseServer
''' <summary>无效的数据库名</summary>
InvalidDatabaseName
''' <summary>无效的数据库用户</summary>
InvalidDatabaseUserID
''' <summary>无效的数据库密码</summary>
InvalidDatabaseUserPassword
''' <summary>无效的数据库端口号</summary>
InvalidDatabaseUserPort
''' <summary>无效的数据库名(sqlite)</summary>
InvalidDatabaseFileName
''' <summary>无效的数据库文件夹名(sqlite)</summary>
InvalidDatabaseDirName
End Enum
''' <summary>存储License签名校验值</summary>
Private ReadOnly _standardSignature As String = "this is a valid license data"
''' <summary>License密钥</summary>
Private ReadOnly _licenseAesKey As String = "8h(*H&-987OygO8yg*yS$&G&aG9*&6g96*&7^RA65s76r*&&G(*(7(Gyg7#7Ff7F*&(*&&^5GHo96tr5ff&*Hphg7665^fyu&uOhj0j[0[(jOIhI&g77FgghO*hhHY"
Sub New()
End Sub
Sub New(licensePath As String)
ReadLicenseFile(licensePath)
End Sub
''' <summary>
''' 索引
''' </summary>
''' <returns>索引</returns>
Public Property ID() As String
''' <summary>
''' 获取客户名
''' </summary>
''' <returns>客户名</returns>
Public Property VendorName As String
''' <summary>
''' 获取注册日期
''' </summary>
''' <returns>注册日期</returns>
Public Property AuthorizationDate() As String
''' <summary>
''' 获取截止日期
''' </summary>
''' <returns>截止日期</returns>
Public Property ExpirationDate() As String
''' <summary>
''' 获取管理员账号
''' </summary>
''' <returns>管理员账号</returns>
Public Property DefaultUser() As String
''' <summary>
''' 获取管理员密码
''' </summary>
''' <returns>管理员密码</returns>
Public Property DefaultPassword() As String
''' <summary>
''' 远程数据库URL或IP(待删除字段)
''' </summary>
''' <returns>远程数据库URL或IP</returns>
Public Property MysqlServer() As String
''' <summary>
''' 远程数据库连接端口
''' </summary>
''' <returns>远程数据库连接端口</returns>
Public Property MysqlPort() As String
''' <summary>
''' 远程数据库账号
''' </summary>
''' <returns>远程数据库账号</returns>
Public Property MysqlUserID() As String
''' <summary>
''' 远程数据库密码
''' </summary>
''' <returns>远程数据库密码</returns>
Public Property MysqlPassword() As String
''' <summary>
''' 远程数据库操作库
''' </summary>
''' <returns>远程数据库操作库</returns>
Public Property MysqlDatabase() As String
''' <summary>
''' 远程数据库公开库
''' </summary>
''' <returns></returns>
Public Property PublicDb() As String
''' <summary>
''' 本地数据库存放文件夹
''' </summary>
''' <returns>本地数据库存放文件夹</returns>
Public Property SqliteDir() As String
''' <summary>
''' 本地数据库文件名
''' </summary>
''' <returns>本地数据库文件名</returns>
Public Property SqliteName() As String
''' <summary>
''' 本地数据库密码
''' </summary>
''' <returns>本地数据库密码</returns>
Public Property SqlitePassword() As String
''' <summary>
''' Ftp服务器地址(待删除字段)
''' </summary>
''' <returns>Ftp服务器地址</returns>
Public Property FtpHost() As String
''' <summary>
''' Ftp服务器端口
''' </summary>
''' <returns>Ftp服务器端口</returns>
Public Property FtpPort() As String
''' <summary>
''' Ftp服务器用户
''' </summary>
''' <returns>Ftp服务器用户</returns>
Public Property FtpUser() As String
''' <summary>
''' Ftp服务器密码
''' </summary>
''' <returns>Ftp服务器密码</returns>
Public Property FtpPwd() As String
''' <summary>
''' 获取客户MAC地址
''' </summary>
''' <returns>客户MAC地址</returns>
Public Property Mac() As String
''' <summary>
''' 获取备注
''' </summary>
''' <returns>备注</returns>
Public Property Remark() As String
''' <summary>
''' 获取UTS版本号
''' </summary>
''' <returns>UTS版本号</returns>
Public Property UtsVersion() As String
''' <summary>
''' 获取签名
''' </summary>
''' <returns>签名</returns>
Public Property Signature() As String
Public Function DealLicenseString(strLicense As String) As Boolean
strLicense = strLicense.Replace(vbLf, String.Empty)
Dim lines() As String = strLicense.Split(Chr(13))
For Each line As String In lines
If String.IsNullOrWhiteSpace(line) Then Continue For
Dim keyValues As String() = line.Split("="c)
If keyValues.Length = 2 Then
keyValues(0) = keyValues(0).Trim()
keyValues(1) = keyValues(1).Trim()
InitLicenseField(keyValues(0), keyValues(1))
Else
Throw New Exception($"ReadLicense Error:{LicenseCheckCodeEnum.InvalidLicense}")
End If
Next
Return True
End Function
Private Sub InitLicenseField(key As String, value As String)
Dim field As LicenseKeyEnum
If [Enum].TryParse(key, field) = False Then
ApplicationLog.WriteLog(ApplicationLog.LogTypes.Error, $"Error LicenseField,Key:{key},Value:{value}")
Return
End If
Select Case field
Case LicenseKeyEnum.ID
ID = value
Case LicenseKeyEnum.AuthorizationDate
AuthorizationDate = value
Case LicenseKeyEnum.DefaultPassword
DefaultPassword = value
Case LicenseKeyEnum.DefaultUser
DefaultUser = value
Case LicenseKeyEnum.ExpirationDate
ExpirationDate = value
Case LicenseKeyEnum.MAC
Mac = value
Case LicenseKeyEnum.Remark
Remark = value
Case LicenseKeyEnum.Signature
Signature = value
Case LicenseKeyEnum.UtsVersion
UtsVersion = value
Case LicenseKeyEnum.VendorName
VendorName = value
Case LicenseKeyEnum.MysqlServer
MysqlServer = value
Case LicenseKeyEnum.MysqlPort
MysqlPort = value
Case LicenseKeyEnum.MysqlUserID
MysqlUserID = value
Case LicenseKeyEnum.MysqlPassword
MysqlPassword = value
Case LicenseKeyEnum.MysqlDatabase
MysqlDatabase = value
Case LicenseKeyEnum.PublicDb
PublicDb = value
Case LicenseKeyEnum.SqliteDir
SqliteDir = value
Case LicenseKeyEnum.SqliteName
SqliteName = value
Case LicenseKeyEnum.SqlitePassword
SqlitePassword = value
Case LicenseKeyEnum.FtpHost
FtpHost = value
Case LicenseKeyEnum.FtpPort
FtpPort = value
Case LicenseKeyEnum.FtpUser
FtpUser = value
Case LicenseKeyEnum.FtpPwd
FtpPwd = value
Case Else
ApplicationLog.WriteLog(ApplicationLog.LogTypes.Warn, $"Untreated,Key:{key},Value:{value}")
End Select
End Sub
''' <summary>
''' 读取License文件所有内容并进行解密,将解密后的内容存入License字典中
''' </summary>
''' <param name="licensePath">License文件完整路径(含文件名)</param>
Public Sub ReadLicenseFile(licensePath As String)
If File.Exists(licensePath) = False Then
Throw New Exception($"ReadLicense Error:{LicenseCheckCodeEnum.NoLicense}")
End If
Dim strLicense As String = Aes128.DecryptStr(File.ReadAllText(licensePath), _licenseAesKey)
DealLicenseString(strLicense)
End Sub
Public Function CheckLicense() As Boolean
'检测ID字段
If String.IsNullOrWhiteSpace(ID) Then
Throw New Exception($"Not Found License ID.")
End If
'校验注册日期
Dim nowDate As String = Format(Now.Date, "yyyy-MM-dd") & " " & Format(TimeOfDay, "HH:mm:ss")
If String.Compare(nowDate, AuthorizationDate, StringComparison.OrdinalIgnoreCase) < 0 Then
Throw New Exception($"{EnLicenseCheckCode.InvalidAuthorizationDate}")
End If
'校验截止日期
If String.Compare(nowDate, ExpirationDate, StringComparison.OrdinalIgnoreCase) > 0 Then
Throw New Exception($"{EnLicenseCheckCode.InvalidExpirationDate}")
End If
'默认用户
If String.IsNullOrWhiteSpace(DefaultUser) Then
Throw New Exception($"{EnLicenseCheckCode.InvalidDefaultUser}")
End If
'默认用户密码
If String.IsNullOrWhiteSpace(DefaultPassword) Then
Throw New Exception($"{EnLicenseCheckCode.InvalidDefaultPassword}")
End If
'校验签名
If String.Compare(Signature, _standardSignature, True) <> 0 Then
Throw New Exception($"{EnLicenseCheckCode.InvalidSignature}")
End If
'校验数据库URL或IP
If String.IsNullOrEmpty(MysqlServer) Then
Throw New Exception($"{EnLicenseCheckCode.InvalidDatabaseServer}")
End If
If String.IsNullOrEmpty(MysqlDatabase) Then
Throw New Exception($"{EnLicenseCheckCode.InvalidDatabaseName}")
End If
If String.IsNullOrEmpty(MysqlPort) Then
Throw New Exception($"{EnLicenseCheckCode.InvalidDatabaseUserPort}")
End If
If String.IsNullOrEmpty(MysqlUserID) Then
Throw New Exception($"{EnLicenseCheckCode.InvalidDatabaseUserID}")
End If
If String.IsNullOrEmpty(MysqlPassword) Then
Throw New Exception($"{EnLicenseCheckCode.InvalidDatabaseUserPassword}")
End If
If String.IsNullOrEmpty(SqliteDir) Then
Throw New Exception($"{EnLicenseCheckCode.InvalidDatabaseDirName}")
End If
If String.IsNullOrEmpty(SqliteName) Then
Throw New Exception($"{EnLicenseCheckCode.InvalidDatabaseFileName}")
End If
Return True
End Function
Public Sub SaveLicenseFile(licensePath As String)
Dim builder As New StringBuilder
builder.Append($"{LicenseKeyEnum.ID} = {ID}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.VendorName} = {VendorName}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.AuthorizationDate} = {AuthorizationDate}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.ExpirationDate} = {ExpirationDate}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.DefaultUser} = {DefaultUser}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.DefaultPassword} = {DefaultPassword}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.MysqlServer} = {MysqlServer }{vbCrLf}")
builder.Append($"{LicenseKeyEnum.MysqlPort} = {MysqlPort}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.MysqlUserID} = {MysqlUserID}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.MysqlPassword} = {MysqlPassword}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.MysqlDatabase} = {MysqlDatabase}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.PublicDb} = {PublicDb}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.SqliteDir} = {SqliteDir}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.SqliteName} = {SqliteName}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.SqlitePassword} = {SqlitePassword}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.FtpHost} = {FtpHost}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.FtpPort} = {FtpPort}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.FtpUser} = {FtpUser}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.FtpPwd} = {FtpPwd}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.MAC} = {Mac}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.Remark} = {Remark}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.UtsVersion} = {UtsVersion}{vbCrLf}")
builder.Append($"{LicenseKeyEnum.Signature} = {Signature }{vbCrLf}")
Dim strLicense As String = Aes128.EncryptStr(builder.ToString(), _licenseAesKey)
File.WriteAllText(licensePath, strLicense)
'File.WriteAllText(licensePath, licenseString.ToString())
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,237 @@
Imports System.IO
Imports UTS_Core.Security
Namespace UTSModule.License
''' <summary>
''' 类的作用:获取服务器信息
''' 创建人员:ML
''' Log编号:1
''' 修改描述:创建
''' 修改日期:2019-10-15
''' 修改人员:ML
''' </summary>
Public Class Server
''' <summary> Server文件字段枚举 </summary>
Private Enum ServerKeyEnum
''' <summary>客户名</summary>
VendorName
''' <summary>数据库服务器地址</summary>
DataSource
''' <summary>数据库服务器端口</summary>
DbPort
''' <summary>数据库名</summary>
Database
''' <summary>数据库用户名</summary>
DbUser
''' <summary>数据库用户密码</summary>
DbPassword
''' <summary>Ftp地址</summary>
FtpHost
''' <summary>Ftp端口</summary>
FtpPort
''' <summary>Ftp用户名</summary>
FtpUser
''' <summary>Ftp用户密码</summary>
FtpPassword
End Enum
''' <summary> Server文件校验返回枚举值</summary>
Public Enum ServerCheckCodeEnum
''' <summary>未找到Server</summary>
NoServer
''' <summary>无法打开Server</summary>
CantOpenServer
''' <summary>无效的Server</summary>
InvalidServer
''' <summary>校验通过</summary>
CheckPass
End Enum
''' <summary>存储Server校验返回值</summary>
Private _checkCode As ServerCheckCodeEnum
''' <summary>存储Server所有信息</summary>
Private _server As Dictionary(Of String, String)
''' <summary>服务器密钥</summary>
Private ReadOnly _serverAesKey As String = "^5GHo96tr5ff&*Hphg7665^fyu&uOhj0j[0[(jOIhI&g77FgghO*hhHY8h(*H&-987OygO8yg*yS$&G&aG9*&6g96*&7^RA65s76r*&&G(*(7(Gyg7#7Ff7F*&(*&&^"
'''<summary>Server所有可用字段</summary>
Private ReadOnly _serverKey() As String = {"VendorName", "DataSource", "DataPort", "Database", "DbUser", "DbPassword", "FtpHost", "FtpPort", "FtpUser", "FtpPassword"}
''' <summary>
''' 获取客户名
''' </summary>
''' <returns>客户名</returns>
Public ReadOnly Property VendorName() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.VendorName))
End Get
End Property
''' <summary>
''' 获取服务器名
''' </summary>
''' <returns>服务器名</returns>
Public ReadOnly Property DataSource() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.DataSource))
End Get
End Property
''' <summary>
''' 获取服务器端口
''' </summary>
''' <returns>服务器端口</returns>
Public ReadOnly Property DatabasePort() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.DbPort))
End Get
End Property
''' <summary>
''' 获取数据库名
''' </summary>
''' <returns>数据库名</returns>
Public ReadOnly Property Database() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.Database))
End Get
End Property
''' <summary>
''' 获取数据库用户名
''' </summary>
''' <returns>数据库用户名</returns>
Public ReadOnly Property DatabaseUser() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.DbUser))
End Get
End Property
''' <summary>
''' 获取数据库用户密码
''' </summary>
''' <returns>数据库用户密码</returns>
Public ReadOnly Property DatabasePassword() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.DbPassword))
End Get
End Property
''' <summary>
''' 获取服务器端口
''' </summary>
''' <returns>服务器端口</returns>
Public ReadOnly Property FtpPort() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.FtpPort))
End Get
End Property
''' <summary>
''' 获取数据库名
''' </summary>
''' <returns>数据库名</returns>
Public ReadOnly Property FtpHost() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.FtpHost))
End Get
End Property
''' <summary>
''' 获取数据库用户名
''' </summary>
''' <returns>数据库用户名</returns>
Public ReadOnly Property FtpUser() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.FtpUser))
End Get
End Property
''' <summary>
''' 获取数据库用户密码
''' </summary>
''' <returns>数据库用户密码</returns>
Public ReadOnly Property FtpPassword() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.FtpPassword))
End Get
End Property
''' <summary>
''' 读取Server文件所有内容并进行解密,将解密后的内容存入Server字典中
''' </summary>
''' <param name="serverPath">Server文件完整路径(含文件名)</param>
''' <returns>读取Server文件的状态</returns>
Public Function ReadServerFile(ByVal serverPath As String) As ServerCheckCodeEnum
Dim tmp As String
Dim fm As FileStream
Dim sr As StreamReader
If File.Exists(serverPath) Then
fm = New FileStream(serverPath, FileMode.Open)
sr = New StreamReader(fm)
_checkCode = ServerCheckCodeEnum.CheckPass
_server = New Dictionary(Of String, String)
Try
tmp = Aes128.DecryptStr(sr.ReadToEnd, _serverAesKey) 'utf8解密字符串
' tmp = ClsAes128.DecryptStr(sr.ReadToEnd, _serverAesKey, Unicode) 'Unicode解密字符串
Dim lines() As String = tmp.Split(Chr(13))回车切割
For i As Integer = 0 To lines.Length - 1
tmp = lines(i).Trim(Chr(10))'去除换行
Dim str As String() = tmp.Split("="c)
If str.Length = 2 Then
_server.Add(Trim(str(0)), Trim(str(1)))
Debug.Print($"Keys : {_server.Keys.ElementAt(_server.Count - 1)} Value : {_server.Values.ElementAt(_server.Count - 1)}")
Else
_checkCode = ServerCheckCodeEnum.InvalidServer
End If
Next
Catch ex As Exception
_checkCode = ServerCheckCodeEnum.InvalidServer
Finally
fm.Dispose()
sr.Close()
End Try
Else
_checkCode = ServerCheckCodeEnum.NoServer
End If
Return _checkCode
End Function
''' <summary>
''' 校验Server
''' </summary>
''' <param name="serverPath">Server文件完整路径(含文件名)</param>
''' <returns>校验是否通过</returns>
Public Function CheckoutServer(ByVal serverPath As String) As ServerCheckCodeEnum
If ReadServerFile(serverPath) = ServerCheckCodeEnum.CheckPass Then
'校验厂商(根据是否存在厂商数据库校验)
If My.Computer.Network.Ping(_server.Item(_serverKey(ServerKeyEnum.DataSource))) Then
End If
End If
Return _checkCode
End Function
End Class
End Namespace

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,450 @@
Imports System.Windows.Forms
Imports UTS_Core.My
Imports UTS_Core.Security
Namespace UTSModule.Login
Public Class LoginForm
Inherits System.Windows.Forms.Form
#Region "初始化组件"
Friend WithEvents Label4 As System.Windows.Forms.Label
Friend WithEvents CboUserAccount As System.Windows.Forms.ComboBox
Friend WithEvents BtnLogin As System.Windows.Forms.Button
Friend WithEvents ChkAutoLogin As System.Windows.Forms.CheckBox
Friend WithEvents ChkRememb As System.Windows.Forms.CheckBox
Friend WithEvents TxtUserPassword As System.Windows.Forms.TextBox
Friend WithEvents Label2 As System.Windows.Forms.Label
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents PicLogin As System.Windows.Forms.PictureBox
Friend WithEvents TmrAutoLogin As System.Windows.Forms.Timer
Friend WithEvents PictureBox1 As PictureBox
Friend WithEvents PictureBox2 As PictureBox
'Form 重写 Dispose以清理组件列表。
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改它。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(LoginForm))
Me.Label4 = New System.Windows.Forms.Label()
Me.CboUserAccount = New System.Windows.Forms.ComboBox()
Me.BtnLogin = New System.Windows.Forms.Button()
Me.ChkAutoLogin = New System.Windows.Forms.CheckBox()
Me.ChkRememb = New System.Windows.Forms.CheckBox()
Me.TxtUserPassword = New System.Windows.Forms.TextBox()
Me.Label2 = New System.Windows.Forms.Label()
Me.Label1 = New System.Windows.Forms.Label()
Me.PicLogin = New System.Windows.Forms.PictureBox()
Me.TmrAutoLogin = New System.Windows.Forms.Timer(Me.components)
Me.PictureBox1 = New System.Windows.Forms.PictureBox()
Me.PictureBox2 = New System.Windows.Forms.PictureBox()
CType(Me.PicLogin, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'Label4
'
Me.Label4.Location = New System.Drawing.Point(518, 91)
Me.Label4.Name = "Label4"
Me.Label4.Size = New System.Drawing.Size(18, 21)
Me.Label4.TabIndex = 32
Me.Label4.Text = "*"
Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'CboUserAccount
'
Me.CboUserAccount.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.CboUserAccount.FormattingEnabled = True
Me.CboUserAccount.ImeMode = System.Windows.Forms.ImeMode.Disable
Me.CboUserAccount.Location = New System.Drawing.Point(338, 41)
Me.CboUserAccount.MaxLength = 20
Me.CboUserAccount.Name = "CboUserAccount"
Me.CboUserAccount.Size = New System.Drawing.Size(174, 23)
Me.CboUserAccount.TabIndex = 0
Me.CboUserAccount.Text = "Qizengbiao"
'
'BtnLogin
'
Me.BtnLogin.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.BtnLogin.Font = New System.Drawing.Font("Microsoft Sans Serif", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.BtnLogin.ForeColor = System.Drawing.Color.White
Me.BtnLogin.Location = New System.Drawing.Point(304, 162)
Me.BtnLogin.Name = "BtnLogin"
Me.BtnLogin.Size = New System.Drawing.Size(208, 49)
Me.BtnLogin.TabIndex = 2
Me.BtnLogin.Text = "登 录"
Me.BtnLogin.UseVisualStyleBackColor = True
'
'ChkAutoLogin
'
Me.ChkAutoLogin.AutoSize = True
Me.ChkAutoLogin.FlatStyle = System.Windows.Forms.FlatStyle.Popup
Me.ChkAutoLogin.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.ChkAutoLogin.ForeColor = System.Drawing.Color.White
Me.ChkAutoLogin.Location = New System.Drawing.Point(314, 134)
Me.ChkAutoLogin.Name = "ChkAutoLogin"
Me.ChkAutoLogin.Size = New System.Drawing.Size(72, 19)
Me.ChkAutoLogin.TabIndex = 28
Me.ChkAutoLogin.TabStop = False
Me.ChkAutoLogin.Text = "自动登录"
Me.ChkAutoLogin.UseVisualStyleBackColor = True
'
'ChkRememb
'
Me.ChkRememb.AutoSize = True
Me.ChkRememb.FlatStyle = System.Windows.Forms.FlatStyle.Popup
Me.ChkRememb.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.ChkRememb.ForeColor = System.Drawing.Color.White
Me.ChkRememb.Location = New System.Drawing.Point(440, 134)
Me.ChkRememb.Name = "ChkRememb"
Me.ChkRememb.Size = New System.Drawing.Size(72, 19)
Me.ChkRememb.TabIndex = 27
Me.ChkRememb.TabStop = False
Me.ChkRememb.Text = "记住密码"
Me.ChkRememb.UseVisualStyleBackColor = True
'
'TxtUserPassword
'
Me.TxtUserPassword.ImeMode = System.Windows.Forms.ImeMode.Disable
Me.TxtUserPassword.Location = New System.Drawing.Point(338, 88)
Me.TxtUserPassword.MaxLength = 20
Me.TxtUserPassword.Name = "TxtUserPassword"
Me.TxtUserPassword.PasswordChar = Global.Microsoft.VisualBasic.ChrW(42)
Me.TxtUserPassword.Size = New System.Drawing.Size(174, 21)
Me.TxtUserPassword.TabIndex = 1
Me.TxtUserPassword.Text = "Actop00803"
'
'Label2
'
Me.Label2.AutoSize = True
Me.Label2.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.Label2.ForeColor = System.Drawing.Color.White
Me.Label2.Location = New System.Drawing.Point(301, 94)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(31, 15)
Me.Label2.TabIndex = 25
Me.Label2.Text = "密码"
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.BackColor = System.Drawing.Color.Transparent
Me.Label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.Label1.ForeColor = System.Drawing.Color.White
Me.Label1.Location = New System.Drawing.Point(301, 49)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(31, 15)
Me.Label1.TabIndex = 24
Me.Label1.Text = "账号"
Me.Label1.TextAlign = System.Drawing.ContentAlignment.TopRight
'
'PicLogin
'
Me.PicLogin.Image = CType(resources.GetObject("PicLogin.Image"), System.Drawing.Image)
Me.PicLogin.Location = New System.Drawing.Point(3, 3)
Me.PicLogin.Name = "PicLogin"
Me.PicLogin.Size = New System.Drawing.Size(275, 242)
Me.PicLogin.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage
Me.PicLogin.TabIndex = 23
Me.PicLogin.TabStop = False
'
'TmrAutoLogin
'
Me.TmrAutoLogin.Interval = 3000
'
'PictureBox1
'
Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image)
Me.PictureBox1.Location = New System.Drawing.Point(304, 36)
Me.PictureBox1.Name = "PictureBox1"
Me.PictureBox1.Size = New System.Drawing.Size(28, 33)
Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom
Me.PictureBox1.TabIndex = 35
Me.PictureBox1.TabStop = False
'
'PictureBox2
'
Me.PictureBox2.Image = CType(resources.GetObject("PictureBox2.Image"), System.Drawing.Image)
Me.PictureBox2.Location = New System.Drawing.Point(304, 79)
Me.PictureBox2.Name = "PictureBox2"
Me.PictureBox2.Size = New System.Drawing.Size(28, 33)
Me.PictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom
Me.PictureBox2.TabIndex = 36
Me.PictureBox2.TabStop = False
'
'LoginForm
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 15.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.DodgerBlue
Me.ClientSize = New System.Drawing.Size(544, 249)
Me.Controls.Add(Me.PictureBox2)
Me.Controls.Add(Me.PictureBox1)
Me.Controls.Add(Me.Label4)
Me.Controls.Add(Me.CboUserAccount)
Me.Controls.Add(Me.BtnLogin)
Me.Controls.Add(Me.ChkAutoLogin)
Me.Controls.Add(Me.ChkRememb)
Me.Controls.Add(Me.TxtUserPassword)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.PicLogin)
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 9!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134,Byte))
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow
Me.Icon = CType(resources.GetObject("$this.Icon"),System.Drawing.Icon)
Me.MaximizeBox = false
Me.MinimizeBox = false
Me.Name = "LoginForm"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Form1"
CType(Me.PicLogin,System.ComponentModel.ISupportInitialize).EndInit
CType(Me.PictureBox1,System.ComponentModel.ISupportInitialize).EndInit
CType(Me.PictureBox2,System.ComponentModel.ISupportInitialize).EndInit
Me.ResumeLayout(false)
Me.PerformLayout
End Sub
Sub New()
InitializeComponent()
End Sub
#End Region
''' <summary>是否记住密码</summary>
Private _isRecordPassWord As Boolean
''' <summary>是否自动登录</summary>
Private _isAutoLogin As Boolean
''' <summary>是否正在登录中</summary>
Private _isLogging As Boolean
''' <summary>校验文件信息</summary>
Public Property UserLicense As License.License
''' <summary>用户登录信息</summary>
Public Property UserLoginInfo As UserInfo
''' <summary>修改窗体标题</summary>
Private Sub ShowFormTitle()
Text = $"{My.Application.Info.ProductName} Login"
End Sub
''' <summary>读取Setting中的缓存量</summary>
Private Sub LoadSettings()
My.Settings.Reload() '读取Setting中的内容
_isAutoLogin = My.Settings.IsAutoLogin
_isRecordPassWord = My.Settings.IsRecordPassWord
End Sub
''' <summary>保存Setting中的缓存量</summary>
Private Sub SaveSettings()
My.Settings.IsAutoLogin = _isAutoLogin
My.Settings.IsRecordPassWord = _isRecordPassWord
If _isRecordPassWord Then
Settings.UserAccount = Aes128.EncryptStr(CboUserAccount.Text, Aes128.ServerAesKey)
Settings.UserPassword = Aes128.EncryptStr(TxtUserPassword.Text, Aes128.ServerAesKey)
Else
Settings.UserAccount = String.Empty
Settings.UserPassword = String.Empty
End If
Settings.Save()
End Sub
Private Sub InitChkAutoLogin()
ChkAutoLogin.Checked = _isAutoLogin
End Sub
Private Sub InitChkRememb()
ChkRememb.Checked = _isRecordPassWord
End Sub
''' <summary>
''' 初始化账号控件显示
''' </summary>
Private Sub InitCboUserAccount()
Try
CboUserAccount.Text = Aes128.DecryptStr(Settings.UserAccount, Aes128.ServerAesKey)
Catch ex As Exception
CboUserAccount.Text = String.Empty
End Try
End Sub
''' <summary>
''' 密码获取与保存机制以后会修改,或加密
''' </summary>
Private Sub InitTxtUserPassword()
Try
TxtUserPassword.Text = Aes128.DecryptStr(Settings.UserPassword, Aes128.ServerAesKey)
Catch ex As Exception
TxtUserPassword.Text = String.Empty
End Try
End Sub
Private Sub InitForm()
ShowFormTitle()
InitChkAutoLogin()
InitChkRememb()
InitCboUserAccount()
InitTxtUserPassword()
End Sub
Private Sub CloseTipMessage(tipString As String)
MessageBox.Show(tipString, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
DialogResult = DialogResult.Abort
Close()
End Sub
Private Sub CheckLicense()
Try
UserLicense = New License.License(UtsRegistry.LicenseFilePath)
UserLicense.CheckLicense()
Catch ex As Exception
CloseTipMessage($"Open And Check License Error:{ex.Message}")
End Try
End Sub
Private Sub InitConnectParams()
If UserLicense Is Nothing Then
Throw New Exception($"License Error:Uninitialized License!")
End If
UtsPath.VendorName = UserLicense.VendorName
UtsFtp.InitConnectParams(CInt(UserLicense.FtpPort), UserLicense.FtpUser, UserLicense.FtpPwd)
UtsDb.InitConnectParams(UserLicense) '根据License信息,初始化数据库连接信息
End Sub
Private Sub LoginForm_Load(sender As Object, e As EventArgs) Handles Me.Load
LoadSettings()
InitForm()
CheckLicense()
InitConnectParams()
End Sub
''' <summary>记住密码复选框状态修改触发事件</summary>
Private Sub ChkKeepPwd_CheckedChanged(sender As Object, e As EventArgs) Handles ChkRememb.CheckedChanged
_isRecordPassWord = ChkRememb.Checked
End Sub
''' <summary>自动登录复选框状态修改触发事件</summary>
Private Sub Chk_AutoLogin_CheckedChanged(sender As Object, e As EventArgs) Handles ChkAutoLogin.CheckedChanged
_isAutoLogin = ChkAutoLogin.Checked
End Sub
Private Sub LoginForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
SaveSettings()
End Sub
Private Sub CheckUserAccount(userAccount As String)
If String.IsNullOrWhiteSpace(userAccount) Then
Throw New Exception($"请输入用户账号!")
End If
End Sub
Private Sub CheckUserPassword(userPassword As String)
If String.IsNullOrWhiteSpace(userPassword) Then
Throw New Exception($"请输入密码!")
End If
End Sub
Private Function AdminLogin(userAccount As String, userPassword As String) As Boolean
Return userAccount = UserLicense.DefaultUser AndAlso userPassword = UserLicense.DefaultPassword
End Function
''' <summary>
''' 使用账号密码登录
''' </summary>
Private Sub AccountLogin()
Dim userAccount As String = CboUserAccount.Text
Dim userPassword As String = TxtUserPassword.Text
CheckUserAccount(userAccount)
CheckUserPassword(userPassword)
Dim dtUser As DataTable = DbConnect.DbConnector.UtsGetUserInfo(userAccount, userPassword)
UserLoginInfo = New UserInfo(dtUser)
End Sub
Private Sub BtnLogin_Click(sender As Object, e As EventArgs) Handles BtnLogin.Click
CloseAutoLogin()
If _isLogging Then Return
_isLogging = True
Text = $"{My.Application.Info.ProductName} Login [Logining]"
Try
AccountLogin() '从云端获取用户信息
DialogResult = DialogResult.OK
Close() '登录完成关闭登录页面
Catch ex As Exception
Text = $"{My.Application.Info.ProductName} Login [Login failed]"
MsgBox(ex.Message, MsgBoxStyle.OkOnly, "登录失败")
End Try
_isLogging = False
End Sub
Private Sub TmrAutoLogin_Tick(sender As Object, e As EventArgs) Handles TmrAutoLogin.Tick
BtnLogin.PerformClick()
End Sub
Private Sub LoginForm_Shown(sender As Object, e As EventArgs) Handles Me.Shown
If _isAutoLogin Then
TmrAutoLogin.Start()
End If
End Sub
Private Sub LoginForm_Activated(sender As Object, e As EventArgs) Handles Me.Activated
'设置默认焦点控件
BtnLogin.Focus()
End Sub
Private Sub TxtUserPassword_TextChanged(sender As Object, e As EventArgs) Handles TxtUserPassword.TextChanged
CloseAutoLogin()
End Sub
Private Sub CboUserAccount_TextChanged(sender As Object, e As EventArgs) Handles CboUserAccount.TextChanged
CloseAutoLogin()
End Sub
Private Sub CloseAutoLogin()
If TmrAutoLogin.Enabled Then
TmrAutoLogin.Stop()
Text = $"{My.Application.Info.ProductName} Login [Auto Login Cancelled...]"
End If
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,13 @@
Namespace UTSModule.Login
Public Class LoginParams
''' <summary>是否需要显示登陆页面,方便以后编译时,生成不登陆工具</summary>
Public Shared IsShowLoginForm As Boolean = True
''' <summary>是否记住密码</summary>
Public Shared IsRecordPassWord As Boolean
''' <summary>是否自动登录</summary>
Public Shared IsAutoLogin As Boolean
End Class
End Namespace

View File

@@ -0,0 +1,59 @@
Imports UTS_Core.UTSModule.DbTableModel.Manage
Namespace UTSModule.Login
''' <summary>
''' 用户信息类
''' </summary>
Public Class UserInfo
Sub New(dataTable As DataTable)
If dataTable Is Nothing Then Throw New Exception($"错误的登录信息!")
If dataTable.Rows.Count = 0 Then Throw New Exception($"未查询到匹配的账号与密码!")
InitializeFormDataTable(dataTable)
If IsValid = False Then Throw New Exception($"账户已冻结!")
End Sub
Private Sub InitializeFormDataTable(dataTable As DataTable)
UserId = CInt(dataTable.Rows(0).Item($"{UserListTable.ColNamesEnum.ID}"))
CompanyId = CInt(dataTable.Rows(0).Item($"{UserListTable.ColNamesEnum.CompanyID}"))
UserName = dataTable.Rows(0).Item($"{UserListTable.ColNamesEnum.UserName}").ToString
PassWord = dataTable.Rows(0).Item($"{UserListTable.ColNamesEnum.Password}").ToString
IsValid = CBool(dataTable.Rows(0).Item($"{UserListTable.ColNamesEnum.IsValid}"))
Email = dataTable.Rows(0).Item($"{UserListTable.ColNamesEnum.Email}").ToString
Mobile = dataTable.Rows(0).Item($"{UserListTable.ColNamesEnum.Mobile}").ToString
CreateTime = dataTable.Rows(0).Item($"{UserListTable.ColNamesEnum.CreateTime}").ToString
WeChat = dataTable.Rows(0).Item($"{UserListTable.ColNamesEnum.WeiXin}").ToString
End Sub
''' <summary>账号索引</summary>
Public Property UserId() As Integer
''' <summary>公司索引</summary>
Public Property CompanyId() As Integer
''' <summary>获取或设置用户账号</summary>
Public Property UserName As String
''' <summary>获取或设置用户密码</summary>
Public Property PassWord As String
''' <summary>获取或设置用户注册日期</summary>
Public Property CreateTime As String
''' <summary>获取或设置用户电话号码</summary>
Public Property Mobile As String
''' <summary>获取或设置用户微信号</summary>
Public Property WeChat As String
''' <summary>获取或设置用户电子邮箱</summary>
Public Property Email As String
''' <summary>获取或设置用户是否有效</summary>
Public Property IsValid As Boolean
End Class
End Namespace

View File

@@ -0,0 +1,133 @@
Imports System.ComponentModel
Namespace UTSModule.Production
Public Enum OrderStatusEnum
''' <summary>
''' 已下单待转内部单
''' </summary>
<Description("已下单待转M/O")>
PlaceOrder = 1
''' <summary>
''' 已转M/O待制条码
''' </summary>
<Description("已转M/O待制条码")>
MOrder = 2
''' <summary>
''' 已制SN待制计划
''' </summary>
<Description("已制SN待制计划")>
SnRules = 3
''' <summary>
''' 已制计划待生产
''' </summary>
<Description("已制计划待生产")>
ProductionPlan = 4
''' <summary>
''' 生产中
''' </summary>
<Description("生产中")>
InProduction = 5
''' <summary>
''' 完成生产
''' </summary>
<Description("完成生产")>
CompleteProduction = 6
''' <summary>
''' 已完成
''' </summary>
<Description("已完成")>
Completed = 7
''' <summary>
''' 取消
''' </summary>
<Description("取消")>
Cancel = -1
''' <summary>
''' 暂停中
''' </summary>
<Description("暂停中")>
Suspend = -2
End Enum
''' <summary>
''' 客户订单信息
''' </summary>
Public Class CustomerOrderManager
Sub New()
OrderID = -1
OrderStatus = OrderStatusEnum.Suspend
End Sub
''' <summary>
''' 订单索引
''' </summary>
Public OrderID As Integer
''' <summary>
''' 订单条码序号字符串
''' </summary>
Public OrderNo As String
''' <summary>
''' 订单状态
''' </summary>
Public OrderStatus As OrderStatusEnum
''' <summary>
''' 订单总量
''' </summary>
Public OrderCount As Integer
''' <summary>
''' 订单产品
''' </summary>
Public ProductID As Integer
''' <summary>
''' 订单所属客户索引
''' </summary>
Public CompanyID As Integer
''' <summary>
''' 订单交期
''' </summary>
Public DeliveryTime As Date
''' <summary>
''' 订单创建时间
''' </summary>
Public CreateTime As Date
''' <summary>
''' 成本单价
''' </summary>
Public CostPrice As Double
''' <summary>
''' 销售单价
''' </summary>
Public TransactPrice As Double
Public Function IsInitialized() As Boolean
If OrderID = -1 Then Return False
Return True
End Function
End Class
End Namespace

View File

@@ -0,0 +1,30 @@
Imports System.Drawing
Namespace UTSModule.Production
Public Class ErrCode
Sub New ()
Code = ""
Msg =""
Color = Color.White
End Sub
Sub New(code As String, msg As String, color As Color)
Me.Code = code
Me.Msg = msg
Me.Color = color
End Sub
Public Property Code() As String
Public Property Msg() As String
Public Property Color() As Color
Public Function CodeEqual(srcCode As String) As Boolean
If String.Compare(Code, srcCode, True) = 0 Then Return True
Return False
End Function
End Class
End NameSpace

View File

@@ -0,0 +1,111 @@
Imports System.Drawing
Imports UTS_Core.UTSModule.DbTableModel.Manage.ErrCodeTable
Namespace UTSModule.Production
Public Class ErrCodeManager
''' <summary>错误代码管理器,全局唯一</summary>
Private Shared _manager As ErrCodeManager
''' <summary>初始化测试器线程锁</summary>
Private Shared ReadOnly InitLock As New Object()
Private ReadOnly _errCodeList As List(Of ErrCode)
Private ReadOnly _defaultErrCode As ErrCode
''' <summary>
''' 创建单例管理器,并初始化管理器内容
''' </summary>
''' <returns></returns>
Public Shared Function CreateManager() As ErrCodeManager
If _manager Is Nothing Then
SyncLock InitLock
Threading.Thread.MemoryBarrier()
If _manager Is Nothing Then
_manager = New ErrCodeManager
_manager.InitializeErrCode()
End If
End SyncLock
End If
Return _manager
End Function
Private Sub New()
_errCodeList = New List(Of ErrCode)()
_defaultErrCode = New ErrCode()
End Sub
Public Sub InitializeErrCode()
Dim dtTable As DataTable = DbConnect.DbConnector.GetAllErrCode()
_errCodeList.Clear()
For Each row As DataRow In dtTable.Rows
Dim code As String = row($"{ColNamesEnum.ErrCode}").ToString()
Dim msg As String = row($"{ColNamesEnum.ErrMsg}").ToString()
Dim color As Color = HexStringToColor(row($"{ColNamesEnum.ErrColor}").ToString())
_errCodeList.Add(New ErrCode(code, msg, color))
Next
End Sub
Public Function IndexOf(code As String) As Integer
For i As Integer = 0 To _errCodeList.Count - 1
If _errCodeList(i).CodeEqual(code) Then Return i
Next
Return -1
End Function
Default Public ReadOnly Property Item(index As Integer) As ErrCode
Get
If index = -1 OrElse index >= _errCodeList.Count Then
Return _defaultErrCode
End If
Return _errCodeList(index)
End Get
End Property
Default Public ReadOnly Property Item(code As String) As ErrCode
Get
Return Item(IndexOf(code))
End Get
End Property
Private Function HexStringToColor(hexString As String) As Color
Dim val As Integer = Convert.ToInt32(hexString, 16)
Return Color.FromArgb(val >> 16 And &HFF, val >> 8 And &HFF, val And &HFF)
End Function
''' <summary>
''' 提取错误代码与错误消息字符串中的错误代码
''' </summary>
''' <returns></returns>
Public Shared Function CodeMsgToCode(codeMsg As String) As String
Dim length As Integer = codeMsg.IndexOf(":"c)
If length > 0 Then Return Mid(codeMsg, 1, codeMsg.IndexOf(":"c))
Return codeMsg
End Function
Private Function Count() As Integer
Return _errCodeList.Count
End Function
Public Function GetAllCodes() As String()
Dim arr(_errCodeList.Count - 1) As String
For i As Integer = 0 To _errCodeList.Count - 1
arr(i) = _errCodeList(i).Code
Next
Return arr
End Function
Public Function GetAllCodeAndMsg() As String()
Dim arr(_errCodeList.Count - 1) As String
For i As Integer = 0 To _errCodeList.Count - 1
arr(i) = $"{_errCodeList(i).Code}:{_errCodeList(i).Msg}"
Next
Return arr
End Function
End Class
End Namespace

View File

@@ -0,0 +1,156 @@
Imports System.Threading
Imports UTS_Core.UTSModule.DbTableModel.Customer
Namespace UTSModule.Production
''' <summary>
''' 内部订单信息
''' </summary>
Public Class InternalOrderManager
Private Sub New()
ID = -1
OrderID = -1
End Sub
''' <summary>
''' 内部订单索引
''' </summary>
Public Property ID As Integer
''' <summary>
''' 客户订单索引
''' </summary>
Public Property OrderID As Integer
''' <summary>
''' 内部订单号字符串
''' </summary>
Public Property InternalNo As String
''' <summary>
''' 公司索引
''' </summary>
Public Property CompanyID As Integer
''' <summary>
''' 产品索引
''' </summary>
Public Property ProductID As Integer
''' <summary>
''' 产品类型索引
''' </summary>
Public Property ProductTypeID As Integer
''' <summary>
''' 内部订单创建时间
''' </summary>
Public Property CreateTime As Date
''' <summary>
''' 订单交期
''' </summary>
Public Property DeliveryTime As Date
''' <summary>
''' 目标产能
''' </summary>
Public Property ObjectiveYield As Integer
''' <summary>
''' 当前总产能
''' </summary>
Public Property ObjectiveYieldTotal As Integer
''' <summary>
''' 内部订单状态
''' </summary>
Public Property OrderStatus As Integer
''' <summary>内部订单管理器</summary>
Private Shared _manager As InternalOrderManager
''' <summary>初始化测试器线程锁</summary>
Private Shared ReadOnly InitLock As New Object()
''' <summary>
''' 创建内部订单管理器单例
''' </summary>
''' <returns></returns>
Public Shared Function CreateManager() As InternalOrderManager
If _manager Is Nothing Then
SyncLock InitLock
Thread.MemoryBarrier()
If _manager Is Nothing Then
_manager = New InternalOrderManager()
End If
End SyncLock
End If
Return _manager
End Function
''' <summary>
''' 初始化指定内部订单索引的订单详情
''' </summary>
''' <param name="internalOrderID"></param>
Public Sub Initialize(internalOrderID As Integer)
Dim dtTable As DataTable = DbConnect.DbConnector.GetInternalOrder(internalOrderID)
If dtTable.Rows.Count = 0 Then Return
ID = internalOrderID
If Integer.TryParse(dtTable(0)($"{OrderInternalTable.ColNames.OrderID}").ToString, OrderID) = False Then
OrderID = -1
End If
' OrderID = CInt(dtTable(0)($"{OrderInternalTable.ColNames.OrderID}"))
If Integer.TryParse(dtTable(0)($"{OrderInternalTable.ColNames.OrderStatus}").ToString, OrderStatus) = False Then
OrderStatus = 4
End If
'OrderStatus = CInt(dtTable(0)($"{OrderInternalTable.ColNames.OrderStatus}"))
If Integer.TryParse(dtTable(0)($"{OrderInternalTable.ColNames.CompanyID}").ToString, CompanyID) = False Then
CompanyID = -1
End If
' CompanyID = CInt(dtTable(0)($"{OrderInternalTable.ColNames.CompanyID}"))
If Integer.TryParse(dtTable(0)($"{OrderInternalTable.ColNames.ProductID}").ToString, ProductID) = False Then
ProductID = -1
End If
' ProductID = CInt(dtTable(0)($"{OrderInternalTable.ColNames.ProductID}"))
If Integer.TryParse(dtTable(0)($"{OrderInternalTable.ColNames.ProductTypeID}").ToString, ProductTypeID) = False Then
ProductTypeID = -1
End If
'ProductTypeID = CInt(dtTable(0)($"{OrderInternalTable.ColNames.ProductTypeID}"))
If Integer.TryParse(dtTable(0)($"{OrderInternalTable.ColNames.ObjectiveYield}").ToString, ObjectiveYield) = False Then
ObjectiveYield = -1
End If
'ObjectiveYield = CInt(dtTable(0)($"{OrderInternalTable.ColNames.ObjectiveYield}"))
If Integer.TryParse(dtTable(0)($"{OrderInternalTable.ColNames.ObjectiveYieldTotal}").ToString, ObjectiveYieldTotal) = False Then
ObjectiveYieldTotal = -1
End If
'ObjectiveYieldTotal = CInt(dtTable(0)($"{OrderInternalTable.ColNames.ObjectiveYieldTotal}"))
If Date.TryParse(dtTable(0)($"{OrderInternalTable.ColNames.CreateTime}").ToString, CreateTime) = False Then
CreateTime = Now
End If
'CreateTime = CDate(dtTable(0)($"{OrderInternalTable.ColNames.CreateTime}"))
If Date.TryParse(dtTable(0)($"{OrderInternalTable.ColNames.DeliveryTime}").ToString, DeliveryTime) = False Then
DeliveryTime = Now
End If
' DeliveryTime = CDate(dtTable(0)($"{OrderInternalTable.ColNames.DeliveryTime}"))
InternalNo = CStr(dtTable(0)($"{OrderInternalTable.ColNames.InternalNo}"))
End Sub
End Class
End Namespace

Some files were not shown because too many files have changed in this diff Show More