Imports System.IO Imports System.Security.Cryptography Public Class FrmReleaseFirmware2 Public FileName As String Public SafeFileName As String Public FileNameV4 As String Public SafeFileNameV4 As String Public InsertFirmwareV4 As New Dictionary(Of String, String) Public InsertFirmware As New Dictionary(Of String, String) Private Sub FrmReleaseFirmware2_Load(sender As Object, e As EventArgs) Handles MyBase.Load SetAPP_FOR_Codev(False) 'SetLauncher_cbointem(Launcher_cbo, "tbl_luncher_list", "Luncher_Name") 'SetLauncher_cbointem(Launcher_cbo, "tbl_luncher_list", "Luncher_Name") End Sub Public Sub SetAPP_FOR_Codev(flag As Boolean) Label6.Enabled = flag hotel_chk.Enabled = flag Roon_chk.Enabled = flag ApplicableModels_cbo.Enabled = flag End Sub Public Function GetfilePathtext(filePathTextBox As TextBox, filelv As String) As String Dim openFileDialog As New OpenFileDialog openFileDialog.InitialDirectory = Application.StartupPath openFileDialog.RestoreDirectory = True openFileDialog.Title = "选择上传固件" openFileDialog.Filter = $"配置文件(*.hex)|*.hex" If openFileDialog.ShowDialog() = DialogResult.OK Then If CuttingFilePath(openFileDialog.SafeFileName, filelv) Then filePathTextBox.Text = openFileDialog.FileName Else filePathTextBox.Text = "" End If Return openFileDialog.SafeFileName End If Return "" End Function Public Function CuttingFilePath(filepath As String, filelv As String) As Boolean If Not IsNothing(Firmware_cbo.SelectedItem) Then Dim filename As String = FileNamingFormat(filepath, Firmware_cbo.SelectedItem.ToString, filelv) Dim buff() As String If String.IsNullOrEmpty(filename) Then Roon_chk.Tag = "" hotel_chk.Tag = "" Roon_chk.Text = "房型:" hotel_chk.Text = "酒店:" MsgBox("文件格式不匹配") Return False Else buff = filename.Split("_") FirmwareVer_txt.Text = buff(3) If Firmware_cbo.SelectedItem.ToString.Equals("Hex_Code") Then Gethotleandroon(buff(5)) End If Return True End If End If Return False End Function Public Function FileNamingFormat(filename As String, format As String, filelv As String) As String Dim buff() As String = filename.Split(".") If buff.Length = 2 Then If buff(1).ToLower.Equals("hex") Then Dim buff1() As String = buff(0).Split("_") If format.Equals("Hex_Code") Then '2022=11-13 czh 适配C1机型主机(已询问符合固件命名规则) If buff1.Length = 6 AndAlso buff1(1).ToLower.Equals("fw") AndAlso buff1(0).ToLower.Contains("c") Then 'AndAlso buff1(0).ToLower.Equals("c1f") If buff1(2).ToLower.Equals(filelv.ToLower) Then If IsNumeric(StrToHex(buff1(3).ToString)) AndAlso IsNumeric(buff1(4)) AndAlso IsNumeric(buff1(5)) Then Return buff(0) Else Return "" End If Else Return "" End If Else Return "" End If ElseIf format.Equals("App_Cfg") Then If buff1.Length = 6 AndAlso buff1(1).ToLower.Equals("a") AndAlso buff1(0).ToLower.Equals("c1f") Then If buff1(5).ToLower.Equals("m") Or buff1(5).ToLower.Equals("nm") Then If buff1(2).ToLower.Equals(filelv.ToLower) Then If IsNumeric(StrToHex(buff1(3).ToString)) AndAlso IsNumeric(buff1(4)) Then Return buff(0) Else Return "" End If Else Return "" End If Else Return "" End If Else Return "" End If Else Return "" End If Else Return "" End If Else Return "" End If End Function Private Function StrToHex(pbSrc As String) As Integer Dim pBufDest(1) As Byte Dim h1 As Byte Dim h2 As Byte Dim s1 As Byte Dim s2 As Byte Dim t1 As Integer Dim T2 As Integer Dim i As UInt16 If Not pbSrc.Length = 2 Then Return -1 h1 = pbSrc.Chars(0).ToString.ToLower h2 = Asc(pbSrc.Chars(1).ToString.ToLower) t1 = toupper(h1) T2 = toupper(h2) If t1 = -1 AndAlso T2 = -1 Then Return -1 Return t1 * 16 + T2 End Function Private Function toupper(val As Byte) As Integer If val < 0 OrElse val > 9 Then If val < Asc("a") OrElse val > Asc("f") Then Return -1 Else Return val - Asc("a") + 10 End If Else Return val End If End Function Public Sub Gethotleandroon(hotleid As String) Roon_chk.Tag = "" hotel_chk.Tag = "" Roon_chk.Text = "房型:" hotel_chk.Text = "酒店:" Dim sqlstr As String = $"SELECT a.ROOM_TYPE_NAME,b.IDOLD,b.HOTEL_NAME_CN FROM tbl_room_type_list a left JOIN tbl_hotel_basic_info b on b.IDOLD = a.HOTEL_OLD_ID where a.ROOM_TYPE_OLD_ID='{hotleid}';" Dim udt As DataTable Using db As New DbExecutor(DbExecutor.DbTypeEnum.Mysql, FrmMain.DbConnString) db.Open() udt = db.ExecuteDataTable(sqlstr) db.Close() End Using If IsNothing(udt) Then Return Else For Each dtrow As DataRow In udt.Rows For i As Integer = 0 To udt.Columns.Count - 1 If i = 0 Then Roon_chk.Text = "房型:" & dtrow.Item(i).ToString Roon_chk.Tag = hotleid End If If i = 2 Then hotel_chk.Text = "酒店:" & dtrow.Item(i).ToString hotel_chk.Tag = dtrow.Item(1).ToString End If Next Next End If End Sub Private Sub Firmware_cbo_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles Firmware_cbo.SelectionChangeCommitted If Firmware_cbo.SelectedItem.Equals("Hex_Code") Then SetAPP_FOR_Codev(True) SetLauncher_cbointem(ApplicableModels_cbo, "tbl_rcu_model_list", "RCU_Model_Name") Else SetAPP_FOR_Codev(False) Roon_chk.Tag = "" hotel_chk.Tag = "" Roon_chk.Text = "房型:" hotel_chk.Text = "酒店:" End If End Sub Public Function SetLauncher_cbointem(cbo As ComboBox, tabname As String, clunm As String, Optional col As String = "", Optional hotel As Integer = 0) As Dictionary(Of String, String) cbo.Items.Clear() Dim udt As DataTable Dim dickey As String = "" Dim dicval As String = "" Dim dic As New Dictionary(Of String, String) Using db As New DbExecutor(DbExecutor.DbTypeEnum.Mysql, FrmMain.DbConnString) db.Open() If hotel <> 0 Then udt = db.ExecuteDataTable(db.CmdHelper.SearchAll(tabname, $"`HOTEL_OLD_ID`='{hotel}'")) Else udt = db.ExecuteDataTable(db.CmdHelper.SearchAll(tabname)) End If db.Close() End Using If IsNothing(udt) Then Return Nothing Else For Each dtrow As DataRow In udt.Rows For i As Integer = 0 To udt.Columns.Count - 1 If udt.Columns(i).ColumnName.Equals(clunm) Then dickey = dtrow.Item(i).ToString ElseIf udt.Columns(i).ColumnName.Equals(col) Then dicval = dtrow.Item(i).ToString Else Continue For End If Next If String.IsNullOrWhiteSpace(dicval) Then dickey = dickey Else dickey = dicval & "_" & dickey End If If dic.ContainsKey(dickey) Then Continue For End If dic.Add(dickey, dicval) Next cbo.Items.AddRange(dic.Keys.ToArray) End If Return dic End Function Private Sub SelectFile_btn_Click(sender As Object, e As EventArgs) Handles SelectFile_btn.Click SafeFileName = GetfilePathtext(FirmwarePath_txt, "L2") FileName = FirmwarePath_txt.Text End Sub Private Sub SelectFileV4_btn_Click(sender As Object, e As EventArgs) Handles SelectFileV4_btn.Click SafeFileNameV4 = GetfilePathtext(FirmwarePathV4_txt, "L4") FileNameV4 = FirmwarePathV4_txt.Text End Sub Public Function GetStringMd5(filePath As String) As String Dim dataFile() As Byte = File.ReadAllBytes(filePath) Dim databuff As Byte() = MD5.Create().ComputeHash(dataFile) Dim MD5str As String = BitConverter.ToString(databuff) ' Console.WriteLine($"md5-1:{MD5str}") Return MD5str.Replace("-", "") End Function Private Sub Ok_btn_Click(sender As Object, e As EventArgs) Handles Ok_btn.Click InsertFirmware.Clear() If Not Firmware_cbo.Text.Length > 0 Then MsgBox("未选择上传固件类型") Return End If If Not FirmwarePath_txt.Text.Length > 0 AndAlso Not FirmwarePathV4_txt.Text.Length > 0 Then MsgBox("未选择上传LV2固件") Return End If If Not FirmwareVer_txt.Text.Length > 0 Then MsgBox("未添加上传固件版本") Return End If 'If Not Launcher_cbo.Text.Length > 0 Then ' MsgBox("上传固件Launcher") ' Return 'End If If Firmware_cbo.SelectedItem.Equals("Hex_Code") Then If Not ApplicableModels_cbo.Text.Length > 0 Then MsgBox("未添加固件适用机型") Return Else InsertFirmware.Add("AppForModel", ApplicableModels_cbo.Text) End If Dim tag As String = hotel_chk.Tag If hotel_chk.Checked AndAlso tag.Length > 0 Then InsertFirmware.Add("HOTEL_ID", hotel_chk.Tag) Else MsgBox("未确认酒店") Return End If tag = Roon_chk.Tag If Roon_chk.Checked AndAlso tag.Length > 0 Then InsertFirmware.Add("ROOM_TYPE_ID", Roon_chk.Tag) Else MsgBox("未确认房型") Return End If End If If Not Remark_txt.Text.Length > 0 Then MsgBox("未添加备注") Return End If Dim filepath As String = FirmwarePath_txt.Text Dim filepathV4 As String = FirmwarePathV4_txt.Text Dim md5 As String = "" Dim v4md5 As String = "" InsertFirmware.Add("AppType", Firmware_cbo.Text) If Not String.IsNullOrEmpty(FileName) Then InsertFirmware.Add("FileName", SafeFileName) md5 = GetStringMd5(filepath) End If InsertFirmware.Add("MD5Val", md5) InsertFirmware.Add("Ver", FirmwareVer_txt.Text) InsertFirmware.Add("Luncher_Ver", "C1_L2") InsertFirmware.Add("Remark", Remark_txt.Text) InsertFirmware.Add("DateTime", Now.ToString("yyyy-MM-dd HH:mm:ss.fff")) InsertFirmware.Add("FilePath", "\Data\Firmware\".Replace("\", "\\")) InsertFirmware.Add("IsValid", "1") For Each index In InsertFirmware InsertFirmwareV4.Add(index.Key, index.Value) Next If InsertFirmwareV4.ContainsKey("FileName") Then If Not String.IsNullOrEmpty(filepathV4) Then InsertFirmwareV4.Item("FileName") = SafeFileNameV4 v4md5 = GetStringMd5(filepathV4) Else InsertFirmwareV4.Remove("FileName") End If Else If Not String.IsNullOrEmpty(filepathV4) Then InsertFirmwareV4.Add("FileName", SafeFileNameV4) v4md5 = GetStringMd5(filepathV4) End If End If InsertFirmwareV4.Item("MD5Val") = v4md5 InsertFirmwareV4.Item("Luncher_Ver") = "C1_L4" 'InsertFirmwarev4.Item("Ver")= FirmwareV4_txt.Text Me.DialogResult = System.Windows.Forms.DialogResult.OK Return End Sub Private Sub No_btn_Click(sender As Object, e As EventArgs) Handles No_btn.Click Me.DialogResult = System.Windows.Forms.DialogResult.Cancel Return End Sub Private Sub Firmware_cbo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Firmware_cbo.SelectedIndexChanged FirmwarePath_txt.Text = "" FirmwarePathV4_txt.Text = "" End Sub End Class