Imports UTS_Core.Database Imports UTS_Core.UTSModule.DbTableModel.Customer Imports UTS_Core.UTSModule.Test Imports UTS_Core.UTSModule.Test.TestResult Public Class AttributeTest Enum ColNames No Content DataSource SendData PassResult RetryCount RetryInterval ReadInterval OperatingMode Lower Upper TestVal TestResult IsRecord RecordName Max End Enum Public Val_mac As String Public Val_version As String Public Val_voltage As String Public Val_tempre As String Public Val_humiture As String Public Val_keyleft As String Public Val_keyright As String Public Val_pir As String Public Userkeyval_Key As IO.Ports.SerialPort Public Userkeyval_Rictext As RichTextBox Public cmdcolor As Color Public txtcolor As Color Public Userkeyval_ComboBox As ComboBox Public Userkeyval_ProgressBar As ProgressBar Public Userkeyval_Station As Label Public Userkeyval_PASS As Label Public Userkeyval_StepTip As Label Public Userkeyval_Tip As Label Public Userkeyval_check As CheckBox Public Userkeyval_grid As FlexCell.Grid Public Userkeyval_TestTable As TestResult Sub New(ByRef grid As FlexCell.Grid) Userkeyval_grid = grid UpdateStepTestRecord1() DefaultData() Userkeyval_TestTable = New TestResult End Sub #Region "初始化表格" Public Sub UpdateStepTestRecord1() With Userkeyval_grid .AutoRedraw = False '.AutoSize = True .Cols = ColNames.Max .Rows = 1 .ExtendLastCol = True '最后一列自动扩充 .DisplayRowNumber = True '首列显示数字 For col As Integer = 0 To ColNames.Max - 1 .Cell(0, col).Text = [Enum].GetName(GetType(ColNames), col) '设置列名 .Column(col).CellType = FlexCell.CellTypeEnum.TextBox '设置列型 If col = ColNames.Content OrElse col = ColNames.SendData Then .Column(col).Width = 140 '设置列宽 Else .Column(col).Width = 70 '设置列宽 End If .Column(col).Alignment = FlexCell.AlignmentEnum.RightCenter '设置对齐位置 Next .ForeColorComment = Color.Blue ' .FrozenCols = ColNames.Description '冻结列 .AutoRedraw = True .Refresh() End With End Sub #End Region #Region "加載表格數據" Public Sub DefaultData() Dim SendDatalist As New List(Of List(Of String)) UartSendDataList(SendDatalist, "确认设备MAC地址", "设备", "mac", "", "5", "100", "", "len", "", "", "", "", "Y", "DUT_SN") UartSendDataList(SendDatalist, "确认设备固件版本", "设备", "version", "", "5", "100", "", "comparison", "0.1.1.1", "0.1.1.1", "", "", "Y", "FW_Ver") UartSendDataList(SendDatalist, "确认设备电压", "设备", "voltage", "", "5", "100", "", "scope", "1.8", "2.3", "", "", "Y", "Volt") UartSendDataList(SendDatalist, "确认设备温度", "设备", "tempre", "", "5", "100", "", "null", "", "", "", "", "Y", "DUT_Temp") UartSendDataList(SendDatalist, "确认设备湿度", "设备", "humiture", "", "5", "100", "", "null", "", "", "", "", "Y", "DUT_Humid") UartSendDataList(SendDatalist, "确认环境温度", "uts", "tempre", "", "", "", "", "null", "", "", "", "", "Y", "Enov_Temp") UartSendDataList(SendDatalist, "确认环境湿度", "uts", "humiture", "", "", "", "", "null", "", "", "", "", "Y", "Enov_Humdi") UartSendDataList(SendDatalist, "确认温度误差", "设备-uts", "4", "6", "", "", "", "null", "", "", "", "", "Y", "Diff_Temp") UartSendDataList(SendDatalist, "确认湿度误差", "设备-uts", "5", "7", "", "", "", "null", "", "", "", "", "Y", "Diff_Humidi") UartSendDataList(SendDatalist, "确认PIR数值", "设备", "pir", "", "5", "100", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "提示:请打开PIR窗口", "设备", "tip", "", "", "", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "确认PIR数值", "设备", "pir", "", "5", "100", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "提示:请关闭PIR窗口", "设备", "tip", "", "", "", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "确认PIR数值", "设备", "pir", "", "5", "100", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "确认左键键值", "设备", "keyleft", "", "5", "100", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "确认右键键值", "设备", "keyright", "", "5", "100", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "提示:请按下左键", "设备", "tip", "", "", "", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "确认左键键值", "设备", "keyleft", "", "5", "100", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "确认右键键值", "设备", "keyright", "", "5", "100", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "提示:请按下右键", "设备", "tip", "", "5", "100", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "确认左键键值", "设备", "keyleft", "", "5", "100", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "确认右键键值", "设备", "keyright", "", "5", "100", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "提示:请松开按键", "设备", "tip", "", "", "", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "确认左键键值", "设备", "keyleft", "", "5", "100", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "确认右键键值", "设备", "keyright", "", "5", "100", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "读取平均电流", "uts", "run", "", "", "", "", "null", "", "", "", "", "", "") UartSendDataList(SendDatalist, "读取峰值电流", "uts", "current", "", "", "", "", "null", "", "", "", "", "", "") Grid5AddRow(SendDatalist) End Sub Public Function GetDeviceData(rowid As Integer, attri As String) As Boolean If attri.ToLower.Equals("mac") Then Return checkoutRusli(Val_mac, rowid) ElseIf attri.ToLower.Equals("version") Then 'SetAttriGridt(Userkeyval_grid, rowid, ColNames.TestVal, ) Return checkoutRusli(Val_version, rowid) ElseIf attri.ToLower.Equals("voltage") Then Return checkoutRusli(Val_voltage, rowid) ElseIf attri.ToLower.Equals("tempre") Then Return checkoutRusli(Val_tempre, rowid) ElseIf attri.ToLower.Equals("humiture") Then Return checkoutRusli(Val_humiture, rowid) ElseIf attri.ToLower.Equals("pir") Then Return checkoutRusli(Val_pir, rowid) ElseIf attri.ToLower.Equals("keyleft") Then Return checkoutRusli(Val_keyleft, rowid) ElseIf attri.ToLower.Equals("keyright") Then Return checkoutRusli(Val_keyright, rowid) ElseIf attri.ToLower.Equals("tip") Then Settiptext(Userkeyval_Tip, Userkeyval_grid.Cell(rowid, ColNames.Content).Text.Trim) Return True End If End Function Public Function checkoutRusli(Attri As String, rowid As Integer) As Boolean Dim celltxt As String = Userkeyval_grid.Cell(rowid, ColNames.OperatingMode).Text.Trim SetAttriGridt(Userkeyval_grid, rowid, ColNames.TestVal, Attri) If celltxt.Equals("len") Then If Attri.Length = 6 Then Return True Else Return False End If ElseIf celltxt.Equals("comparison") Then Dim Lower As String = Userkeyval_grid.Cell(rowid, ColNames.Lower).Text.Trim Dim Upper As String = Userkeyval_grid.Cell(rowid, ColNames.Upper).Text.Trim If Attri.Contains(Lower) OrElse Attri.Contains(Upper) Then Return True Else Return False End If ElseIf celltxt.Equals("scope") Then Dim Attriint As Double = 0 Dim Lowerint As Double = 0 Dim Upperint As Double = 0 If Not Double.TryParse(Attri, Attriint) OrElse Not Double.TryParse(Attri, Lowerint) OrElse Not Double.TryParse(Attri, Lowerint) Then Return False End If If Attriint > Lowerint OrElse Attriint < Upperint Then Return False Else Return True End If ElseIf celltxt.Equals("Null") Then Return True End If End Function Public Function UartSendDataList(ByRef SendDatalist As List(Of List(Of String)), ParamArray ptr() As String) As List(Of String) Dim Datalist As New List(Of String) Datalist.AddRange(ptr) SendDatalist.Add(Datalist) End Function Public Sub Grid5AddRow(SendDatalist As List(Of List(Of String))) If SendDatalist.Count < 1 Then Return For rowindex As Integer = 0 To SendDatalist.Count - 1 Dim Datalist As List(Of String) = SendDatalist.Item(rowindex) AddRowToTable(Userkeyval_grid, Datalist) Next End Sub Public Sub AddRowToTable(tablegrid As FlexCell.Grid, Datalist As List(Of String)) tablegrid.AddItem("") For colid As Integer = 1 To ColNames.Max - 1 tablegrid.Cell(tablegrid.Rows - 1, colid).Text = Datalist.Item(colid - 1) Next End Sub #End Region #Region "流程动作" Delegate Sub IPSettiptext(tablegrid As Label, txt As String) Public Sub Settiptext(tablegrid As Label, txt As String) If tablegrid.InvokeRequired Then tablegrid.Invoke(New IPSettiptext(AddressOf Settiptext), New Object() {tablegrid, txt}) Else tablegrid.Text = txt End If End Sub Delegate Sub IPSetAttriGridt(tablegrid As FlexCell.Grid, trowel As Integer, tcol As Integer, txt As String) Public Sub SetAttriGridt(tablegrid As FlexCell.Grid, trowel As Integer, tcol As Integer, txt As String) If tablegrid.InvokeRequired Then tablegrid.Invoke(New IPSetAttriGridt(AddressOf SetAttriGridt), New Object() {tablegrid, trowel, tcol, txt}) Else tablegrid.Cell(trowel, tcol).Text = txt If trowel = ColNames.TestResult Then Userkeyval_PASS.Text = txt If txt.ToLower.Equals("pass") Then Userkeyval_PASS.BackColor = Color.Green ElseIf txt.ToLower.Equals("false") Then Userkeyval_PASS.BackColor = Color.Red End If End If Userkeyval_ProgressBar.Value =trowel End If End Sub Public Sub clearGridResult(tablegrid As FlexCell.Grid) For rowid As Integer = 1 To tablegrid.Rows - 1 SetAttriGridt(tablegrid, rowid, ColNames.TestResult, "") SetAttriGridt(tablegrid, rowid, ColNames.TestVal, "") Next End Sub Public Function ADDTestRecordVal(testattribute As TestTableAttribute) As Dictionary(Of String, String) Dim dic As New Dictionary(Of String, String) From { {$"{TestLogTable.ColNames.UserID}", testattribute.UserID.ToString()}, {$"{TestLogTable.ColNames.ServiceID}", testattribute.ServiceID.ToString()}, {$"{TestLogTable.ColNames.DUT_SN}", testattribute._dutSn}, {$"{TestLogTable.ColNames.AppName}", testattribute.AppName}, {$"{TestLogTable.ColNames.TestPlan}", testattribute.TestPlan}, {$"{TestLogTable.ColNames.StartTime}", testattribute.StartTime.ToString("yyyy-MM-dd HH:mm:ss")}, {$"{TestLogTable.ColNames.UsedTime}", testattribute.TotalSeconds.ToString("F2")}, {$"{TestLogTable.ColNames.TestResult}", IIf(testattribute.TestResult = TestResultEnum.Fail, 0, 1).ToString()}, {$"{TestLogTable.ColNames.ErrCode}", testattribute.ErrCode}, {$"{TestLogTable.ColNames.ProductionLineID}", testattribute.ProductionLineID.ToString()}, {$"{TestLogTable.ColNames.OrderID}", testattribute.OrderID.ToString()} } dic.Add($"{TestLogTable.ColNames.FailSteps}", testattribute.rownum.ToString()) dic.Add($"{TestLogTable.ColNames.FailMsg}", testattribute.TertResult & testattribute.UpVal & testattribute.loadVal) For Each keyValue As KeyValuePair(Of String, String) In testattribute.AddSelf If dic.ContainsKey(keyValue.Key) Then dic(keyValue.Key) = keyValue.Value Else dic.Add(keyValue.Key, keyValue.Value) End If Next Return dic End Function Public Sub UpdateTestLogToRemote(db As DbExecutor, dbName As String, tbName As String, result As TestTableAttribute) Dim field As Dictionary(Of String, String) = ADDTestRecordVal(result) '新增不存在的字段 CheckTestLogFiledToRemote(db, dbName, tbName, field) '添加测试记录 Dim cmdText As String = db.CmdHelper.DbInsert(dbName, tbName, field) db.ExecuteNonQuery(cmdText) End Sub #End Region ''' ''' 检测测试记录字段名是否存在远端数据库,如果不存在则新增,存在则检测字段长度是否需要加长 ''' ''' 数据库执行器 ''' 数据库名 ''' 数据表名 ''' 测试记录字段集合 Public Shared Sub CheckTestLogFiledToRemote(db As DbExecutor, dbName As String, tbName As String, field As Dictionary(Of String, String)) Dim dtCol As DataTable = db.ExecuteDataTable(db.CmdHelper.DbSearchAll(dbName, tbName, "1 = 0")) Dim fieldName As List(Of String) = field.Keys.ToList Dim typeString As String Dim length As Integer For Each colName As String In fieldName If String.IsNullOrWhiteSpace(colName) Then Continue For '剔除无效数据库字段名 If dtCol.Columns.Contains(colName) Then '当前数据表是否已经存在对应列信息 Select Case dtCol.Columns(colName).DataType.Name Case "String" '仅处理VarChar类型 If field(colName).Length > dtCol.Columns(colName).MaxLength Then length = GetFiledLength(field(colName).Length) If length = -1 Then Throw New Exception($"字段[{colName}] 超过最大长度2048的限制,无法入库!") Else typeString = $"varchar({length})" End If '修改列字段长度 db.ExecuteNonQuery($"Call `{dbName}`.`AlterTestLogFiled`('{dbName}','{tbName}','{colName}','{length}')") End If Case Else Console.WriteLine(colName & ":" & dtCol.Columns(colName).DataType.Name) End Select Else length = GetFiledLength(field(colName).Length) If length = -1 Then Throw New Exception($"字段[{colName}] 超过最大长度4096的限制,无法入库!") Else typeString = $"varchar({length})" End If '插入字段语句 db.ExecuteNonQuery($"Call `{dbName}`.`AlterTestLogFiled`('{dbName}','{tbName}','{colName}','{length}')") End If Next End Sub Private Shared Function GetFiledLength(len As Integer) As Integer Dim result As Integer If len = 0 Then result = 8 ElseIf len <= 2048 Then If len Mod 8 = 0 Then result = len Else result = ((len \ 8) + 1) * 8 End If Else result = -1 End If Return result End Function End Class Public Class TestTableAttribute Public UserID As String Public ServiceID As String Public _dutSn As String Public AppName As String Public TestPlan As String Public StartTime As Date Public TotalSeconds As Double Public TestResult As TestResultEnum Public ErrCode As String Public ProductionLineID As Integer Public OrderID As Integer Public rownum As Integer Public TertResult As String Public UpVal As String Public loadVal As String Public AddSelf As Dictionary(Of String, String) Public Sub New() AddSelf = New Dictionary(Of String, String) End Sub Public Sub AddSelfAttribute(clunm As String, val As String) AddSelf.Add(clunm, val) End Sub Public Sub AddSelfClear() AddSelf.Clear() End Sub End Class