Imports System.Data.Common
Imports System.Drawing.Drawing2D
Imports System.IO
Imports System.Net
Imports System.Text
Imports Newtonsoft.Json
Public Class FrmLogin
#Region "多语种"
''' 语言名称和版本信息
Public dicNC As New Dictionary(Of String, Integer)
'''
''' 初始化多语种
'''
Private Sub InitmultiLanguage()
Dim lag As DataTable = GetCloudVersionInfo()
For index = 0 To lag.Rows.Count - 1
dicNC.Add(lag(index)(0), lag(index)(1))
Next
ComboBox1.Items.AddRange(dicNC.Keys.ToArray)
If ComboBox1.Items.Count > 0 Then ComboBox1.SelectedIndex = 0
End Sub
'''
''' 获取云端数据版本
'''
'''
Private Function GetCloudVersionInfo() As DataTable
Dim dtVer As DataTable = _SqlLogin.GetCloudVersionInfo()
Return dtVer
End Function
'''
''' 获取云端数据
'''
'''
Private Function GetCloudDataInfo(languageName As String) As DataTable
Dim dtData As DataTable = _SqlLogin.GetCloudDataInfo(languageName)
Return dtData
End Function
'''
''' 初始化界面控件文本
'''
Private Sub InitMultiLanguageInfo()
'If IsNothing(LanguageData) Then Return
Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Login) & $" v{Application.ProductVersion}"
UsernameLabel.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.UserName)
PasswordLabel.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.PassWord)
CheckBox1.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.AutomaticLogin)
LblLanguage.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.Language)
CheckBox2.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.RememberPassWord)
OK.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.LoginDetermine)
Cancel.Text = LanguageData.StringList(MultiLanguageDAL.StringEnum.LoginCancel)
End Sub
#End Region
#Region "登录接口"
Public _countIndex As Integer = 0
'''
''' 处理登录信息
'''
Private Function DealLoginInfo() As Boolean
Dim user As String = UsernameTextBox.Text
Dim pwd As String = PasswordTextBox.Text
user = user.Trim()
pwd = pwd.Trim()
' MsgBox("1.1")
Dim jsonString As String = String.Empty
Try
jsonString = PostData("http://auth.blv-oa.com/OTApi/Login", $"Uid={user}&Pwd={pwd}&appid=1")
'jsonString = PostData("http://47.119.147.104:90/OTApi/Login", $"Uid={user}&Pwd={pwd}&appid=1")
' MsgBox("1.2")
Catch ex As Exception
MsgBox($"{ex.Message}!请联系管理员")
' MsgBox("1.3")
End Try
Console.WriteLine(jsonString)
If jsonString = Nothing Then
Return False
End If
'MsgBox("1.4")
Dim login As LoginBLL = JsonConvert.DeserializeObject(Of LoginBLL)(jsonString)
If login Is Nothing Then
MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.LoginFailed)}:{LanguageData.StringList(MultiLanguageDAL.StringEnum.NoLoginInformationIsDisplayed)}!")
Return False
End If
'MsgBox("1.5")
Console.WriteLine($"解析登录数据:{login.Status} {login.Message}")
If login.Status <> 200 Then
MsgBox($"登陆错误:{login.Status}-" & login.Message)
Return False
End If
' MsgBox("1.6")
'取数据
Dim index As Integer = 0
_loginData.Clear()
_countIndex = 0
'MsgBox("1.7")
For i = 0 To login.Data.HotelData.Count - 1
'组ID, 组名
For j = 0 To login.Data.HotelData.Item(i).Hotels.Count - 1
'酒店ID, 酒店编码, 酒店名称
For k = 0 To login.Data.HotelData.Item(i).Hotels.Item(j).Auth.Count - 1
'权限状态,权限ID, 权限名称
index += 1
Dim data As New LoginReturnDataBLL
data.HotelGroupsId = login.Data.HotelData.Item(i).HotelGroupsId
data.HotelGroupsName = login.Data.HotelData.Item(i).HotelGroupsName
data.HotelId = login.Data.HotelData.Item(i).Hotels.Item(j).HotelId
data.Code = login.Data.HotelData.Item(i).Hotels.Item(j).Code
data.HotelName = login.Data.HotelData.Item(i).Hotels.Item(j).HotelName
data.AuthotypeId = login.Data.HotelData.Item(i).Hotels.Item(j).Auth(k).AuthotypeId
data.AuthorityId = login.Data.HotelData.Item(i).Hotels.Item(j).Auth(k).AuthorityId
data.AuthorityName = login.Data.HotelData.Item(i).Hotels.Item(j).Auth(k).AuthorityName
_countIndex += 1
Dim key As String = $"{login.Data.HotelData.Item(i).Hotels.Item(j).HotelName}{login.Data.HotelData.Item(i).Hotels.Item(j).Code}-{_countIndex}"
_loginData.Add(key, data)
Next
Next
' MsgBox("1.8")
Next
'MsgBox("1.9")
Return True
End Function
'''
''' Post请求
'''
'''
'''
'''
Public Shared Function PostData(ByVal url As String, ByVal data As String) As String
ServicePointManager.Expect100Continue = False
Dim request As HttpWebRequest = WebRequest.Create(url)
'//Post请求方式
request.Method = "POST"
'内容类型
request.ContentType = "application/x-www-form-urlencoded"
'将URL编码后的字符串转化为字节
Dim encoding As New UTF8Encoding()
Dim bys As Byte() = encoding.GetBytes(data)
'设置请求的 ContentLength
request.ContentLength = bys.Length
'获得请 求流
Dim newStream As Stream = request.GetRequestStream()
newStream.Write(bys, 0, bys.Length)
newStream.Close()
'获得响应流
Dim sr As StreamReader = New StreamReader(request.GetResponse().GetResponseStream)
Return sr.ReadToEnd
End Function
'Public Shared Function GetData(url As String) As String
' Dim str As String = $"http://47.119.147.104:90/OTApi/Login?Uid=AdminBlv&Pwd=123456&appid=1"
' Dim request As HttpWebRequest = CType(WebRequest.Create(str), HttpWebRequest)
' request.Accept = "text/html,application/xhtml+xml,*/*"
' request.ContentType = "application/json"
' request.Method = "Post"
' Dim sr As StreamReader = New StreamReader(request.GetResponse().GetResponseStream)
' Return sr.ReadToEnd
'End Function
'Public Shared Function GetData(ByVal url As String, ByVal data As String) As String
' Dim request As HttpWebRequest = WebRequest.Create(url + "?" + data)
' request.Method = "GET"
' Dim sr As StreamReader = New StreamReader(request.GetResponse().GetResponseStream)
' Return sr.ReadToEnd
'End Function
#End Region
#Region "登录"
''' 是否正在登录
Private _isLogging As Boolean
'''
''' 登录界面加载事件
'''
'''
'''
Private Sub FrmLogin_Load(sender As Object, e As EventArgs) Handles Me.Load
If ConnLoginDataSourse() = False Then
MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.DatabaseConnectionFailed)}!{LanguageData.StringList(MultiLanguageDAL.StringEnum.CheckWhetherTheNetworkConnectionIsSuccessful)}!")
Return
End If
'连接登录数据库
InitmultiLanguage() '多语种初始化
InitMultiLanguageInfo()
UsernameTextBox.Text = My.Settings.User
PasswordTextBox.Text = My.Settings.PassWord
'asdfghjkl()
End Sub
'''
''' 点击登录
'''
'''
'''
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
'MsgBox("0")
DealHotelListInterfaceInfo()
'DealHostListInterfaceInfo()
'DealSetHostMACInterfaceInfo()
'MsgBox("1")
Static time As Date = Now
While True
If DealLoginInfo() = False Then
Return
Else
Exit While
End If
If (Now - time).TotalMilliseconds > 2000 Then
MsgBox($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.LoginTimeout)}!")
Return
End If
Threading.Thread.Sleep(100)
End While
'MsgBox("2")
Try
_userNames = UsernameTextBox.Text
'If AccountLogin() = False Then '从云端获取用户信息
' Exit Sub
'End If
DialogResult = DialogResult.OK
FrmCSeriesConfig.Show()
Me.Close() '登录完成关闭登录页面
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly, $"{LanguageData.StringList(MultiLanguageDAL.StringEnum.LoginFailed)}") ''登录失败
End Try
'MsgBox("3")
_isLogging = False
End Sub
''''
'''' 使用账号密码登录
''''
'Private Function AccountLogin() As Boolean
' Dim userAccount As String = UsernameTextBox.Text
' Dim userPassword As String = PasswordTextBox.Text
' CheckUserAccount(userAccount)
' CheckUserPassword(userPassword)
' Dim dtUser As DataTable = _SqlLogin.GetUserInfo(userAccount, userPassword)
' If dtUser.Rows.Count = 0 Then
' MessageBox.Show($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.NoSuchUser)}!") ''用户不存在
' Return False
' ElseIf dtUser.Rows.Count > 0 Then
' Dim createTime As String = dtUser(0)(3)
' createTime = createTime.Replace("/", "-")
' Dim userPass As String = $"{userAccount.ToUpper()}{userPassword}{createTime}"
' Dim pwd As String = GetStringMd5(userPass)
' Dim pwdcloud As String = dtUser(0)(2) '获取查询密码
' _userNames = dtUser(0)(1) '获取用户名
' 'Console.WriteLine($"用户:{_userNames}")
' 'Console.WriteLine($"输入密码:{pwd}")
' 'Console.WriteLine($"查询密码:{pwdcloud}")
' _userData = dtUser
' If GetPassWordCheck(pwd, pwdcloud) = True Then
' MessageBox.Show($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.IncorrectPasswordPleaseTryAgain)}!") '’密码错误,请重试
' Return False
' End If
' End If
' Return True
'End Function
''''
'''' 用户校验
''''
''''
'Private Sub CheckUserAccount(userAccount As String)
' If String.IsNullOrWhiteSpace(userAccount) Then
' Throw New Exception($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseEnterYourUserAccount)}!") '’请输入用户账号!
' End If
'End Sub
''''
'''' 密码校验
''''
''''
'Private Sub CheckUserPassword(userPassword As String)
' If String.IsNullOrWhiteSpace(userPassword) Then
' Throw New Exception($"{LanguageData.StringList(MultiLanguageDAL.StringEnum.PleaseEnterYourPassword)}!") '’请输入密码!
' End If
'End Sub
''''
'''' 获取密码校验
''''
'''' 本地密码
'''' 云端密码
''''
'Private Function GetPassWordCheck(pwd As String, pwdcloud As String) As Boolean
' If String.IsNullOrWhiteSpace(pwd) OrElse String.IsNullOrWhiteSpace(pwdcloud) Then Return False
' If String.Compare(pwd, pwdcloud) = 0 Then Return False
' Return True
'End Function
'''
''' 取消登录
'''
'''
'''
Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
Me.Close()
End Sub
'''
''' 窗体关闭事件
'''
'''
'''
Private Sub FrmLogin_Closed(sender As Object, e As EventArgs) Handles Me.Closed
If CheckBox2.Checked = True Then
My.Settings.User = UsernameTextBox.Text
My.Settings.PassWord = PasswordTextBox.Text
My.Settings.Save()
End If
End Sub
'''
''' 下拉选择语言
'''
'''
'''
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
Dim SName As String = ComboBox1.Text
Dim path As String = $"{ComboBox1.Text}.xml"
If String.IsNullOrEmpty(SName) Then Return
If IO.File.Exists(path) Then
LanguageData = MultiLanguageDAL.DeserializeFormXml(Of MultiLanguageDAL)(path)
If LanguageData.Version <> dicNC(SName) Then
LanguageData.Version = dicNC(SName)
LanguageData.InitializeByDataTable(GetCloudDataInfo(SName))
MultiLanguageDAL.SerializeToXml(Of MultiLanguageDAL)($"{SName}.xml", LanguageData)
End If
Else
LanguageData = New MultiLanguageDAL
LanguageData.Name = SName
LanguageData.Version = dicNC(SName)
LanguageData.InitializeByDataTable(GetCloudDataInfo(SName))
MultiLanguageDAL.SerializeToXml(Of MultiLanguageDAL)($"{SName}.xml", LanguageData)
End If
'设置到控件上
InitMultiLanguageInfo()
End Sub
#End Region
Private Sub asdfghjkl()
''剪贴板
'Dim picture As Image
'If My.Computer.Clipboard.ContainsImage() Then
' picture = My.Computer.Clipboard.GetImage
'End If
''播放声音
'My.Computer.Audio.Play("SoundFile.wav", AudioPlayMode.BackgroundLoop)
''创建字体
'Dim italicFont As New Font("Courier New", 12, FontStyle.Italic)
''控件&组件
'' For more information on the rich text format characters, see: http://www.microsoft.com/downloads/details.aspx?FamilyID=e5b8ebc2-6ad6-49f0-8c90-e4f763e3f04f&DisplayLang=en
'RichTextBox1.Rtf = "{\rtf1\ansi This is in \b bold\b0.}"
''窗体控件添加提示
'Dim tooltip As New ToolTip()
'tooltip.SetToolTip(OK, "你好")
'With ProgressBar1
' .Minimum = 1
' .Maximum = 100000
' .Value = 1
' .Step = 1
' For i As Integer = .Minimum To .Maximum
' ' Perform one step of the action being tracked.
' .PerformStep()
' Next i
'End With
''绘图
'Dim path As New GraphicsPath()
'Dim points() As Point = {
' New Point(0, 0),
' New Point(100, 0),
' New Point(100, 100),
' New Point(0, 0)}
'path.AddLines(points)
'Dim surface As Graphics = PictureBox1.CreateGraphics
'surface.DrawPath(Pens.Black, path)
End Sub
End Class