Nav apraksta
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

考勤位置異常清單.vb 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. Imports System.Math
  2. Imports CefSharp.WinForms
  3. Public Class 考勤位置異常清單
  4. Private Sub Set_驗證清單()
  5. Dim ds1 As New DataSet
  6. 清單1_dgv.DataSource = Nothing : ds1.Clear()
  7. 清單1_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  8. 清單1_dgv.ColumnHeadersHeight = 40 : 清單1_dgv.AllowUserToAddRows = False : 清單1_dgv.RowTemplate.Height = 25
  9. If 正常_ch.Checked = False Then : SQL2 = " WHERE (手機打卡考勤表.狀態 LIKE N'') OR (手機打卡考勤表.狀態 LIKE N'異常')"
  10. ElseIf 正常_ch.Checked = True Then : SQL2 = " WHERE (手機打卡考勤表.狀態 LIKE N'正常')" : End If
  11. SQL_考勤位置異常清單()
  12. da.Fill(ds1) : 清單1_dgv.DataSource = ds1.Tables(0) : conn.Close()
  13. 清單1_dgv.Columns(0).FillWeight = 110 : 清單1_dgv.Columns(6).FillWeight = 70 : 清單1_dgv.Columns(7).FillWeight = 70
  14. 清單1_dgv.Columns(3).FillWeight = 70 : 清單1_dgv.Columns(5).Visible = False : 清單1_dgv.Columns(6).Visible = False
  15. For i As Integer = 0 To 清單1_dgv.Rows.Count - 1
  16. If 清單1_dgv.Rows(i).Cells("設備認證").Value.ToString = "" Then
  17. 清單1_dgv.Rows(i).Cells("設備認證").Value = "自動核准"
  18. End If
  19. Next
  20. End Sub
  21. Private Sub Set_位置清單()
  22. Dim ds1 As New DataSet
  23. 清單_dgv.DataSource = Nothing : ds1.Clear()
  24. 清單_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  25. 清單_dgv.ColumnHeadersHeight = 40 : 清單_dgv.AllowUserToAddRows = False : 清單_dgv.RowTemplate.Height = 25
  26. SQL_考勤位置清單()
  27. da.Fill(ds1) : 清單_dgv.DataSource = ds1.Tables(0) : conn.Close()
  28. 清單_dgv.Columns(3).DefaultCellStyle.Format = "#,##0"
  29. 清單_dgv.Columns(1).FillWeight = 70 : 清單_dgv.Columns(2).FillWeight = 70 : 清單_dgv.Columns(3).FillWeight = 50
  30. 清單_dgv.Columns(4).FillWeight = 110 : 清單_dgv.Columns(5).FillWeight = 90
  31. For i As Integer = 0 To 清單_dgv.Rows.Count - 1 : 清單_dgv.Rows(i).Cells(5).Value = "" : 清單_dgv.Rows(i).Cells(4).Value = "" : Next
  32. End Sub
  33. Private Sub 考勤位置異常清單_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  34. 清單1_dgv.RowsDefaultCellStyle.Font = New System.Drawing.Font("微軟正黑體", 7.6)
  35. 清單_dgv.RowsDefaultCellStyle.Font = New System.Drawing.Font("微軟正黑體", 7.6)
  36. End Sub
  37. Private Sub 考勤位置異常清單_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
  38. 計算分流.Enabled = True
  39. End Sub
  40. Private Sub 計算分流_Tick(sender As Object, e As EventArgs) Handles 計算分流.Tick
  41. 計算分流.Enabled = False : Set_驗證清單() : Set_位置清單() : 查詢_bt.PerformClick() : 首次開啟 = False
  42. End Sub
  43. Private Sub 清單1_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 清單1_dgv.CellClick
  44. If e.RowIndex = -1 Then : Else
  45. Dim lat1 As Double = 清單1_dgv.Rows(e.RowIndex).Cells("緯度").Value.ToString
  46. Dim lon1 As Double = 清單1_dgv.Rows(e.RowIndex).Cells("經度").Value.ToString : Dim 狀態異常 As Boolean = True
  47. For I As Integer = 0 To 清單_dgv.Rows.Count - 1
  48. Dim lat2 As Double = 清單_dgv.Rows(I).Cells("緯度").Value.ToString
  49. Dim lon2 As Double = 清單_dgv.Rows(I).Cells("經度").Value.ToString
  50. Dim distance As Double = CalculateDistance(lat1, lon1, lat2, lon2)
  51. 清單_dgv.Rows(I).Cells("考勤距離").Value = "地點" & ": " & Strings.Format(distance, "#,##0.00") & " " & "米"
  52. If CDbl(清單_dgv.Rows(I).Cells("容許誤差").Value) >= distance Then
  53. 清單_dgv.Rows(I).Cells("判斷狀態").Value = "正常" : 狀態異常 = False
  54. Else
  55. 清單_dgv.Rows(I).Cells("判斷狀態").Value = "異常"
  56. End If
  57. Next
  58. If 狀態異常 = False Then
  59. 清單1_dgv.Rows(e.RowIndex).Cells("狀態").Value = "正常" : 清單1_dgv.Rows(e.RowIndex).Cells("狀態.").Value = "正常"
  60. Else
  61. 清單1_dgv.Rows(e.RowIndex).Cells("狀態").Value = "異常" : 清單1_dgv.Rows(e.RowIndex).Cells("狀態.").Value = "異常"
  62. End If
  63. MyBrowser.Controls.Clear()
  64. PA50 = "https://www.google.com/maps/@" & lat1 & "," & lon1 & ",20z?" & "hl=zh-TW" & "&basemap=satellite"
  65. Dim browser As New ChromiumWebBrowser(PA50) : browser.Dock = DockStyle.Fill : MyBrowser.Controls.Add(browser)
  66. End If
  67. End Sub
  68. Public Function CalculateDistance(ByVal lat1 As Double, ByVal lon1 As Double, ByVal lat2 As Double, ByVal lon2 As Double) As Double
  69. Dim R As Double = 6371000 ' 地球半徑(單位:米)
  70. Dim radLat1 As Double = lat1 * (PI / 180) : Dim radLon1 As Double = lon1 * (PI / 180) ' 將經緯度從度轉換為弧度
  71. Dim radLat2 As Double = lat2 * (PI / 180) : Dim radLon2 As Double = lon2 * (PI / 180)
  72. Dim dLat As Double = radLat2 - radLat1 : Dim dLon As Double = radLon2 - radLon1 ' Haversine 公式
  73. Dim a As Double = Sin(dLat / 2) * Sin(dLat / 2) + Cos(radLat1) * Cos(radLat2) * Sin(dLon / 2) * Sin(dLon / 2)
  74. Dim c As Double = 2 * Atan2(Sqrt(a), Sqrt(1 - a))
  75. Dim distance As Double = R * c
  76. Return distance ' 返回距離(單位:米)
  77. End Function
  78. Private Sub 查詢_bt_Click(sender As Object, e As EventArgs) Handles 查詢_bt.Click
  79. Set_驗證清單() : Set_位置清單()
  80. End Sub
  81. Private Sub 判斷_bt_Click(sender As Object, e As EventArgs) Handles 判斷_bt.Click
  82. For i As Integer = 0 To 清單1_dgv.Rows.Count - 1
  83. Dim lat1 As Double = 清單1_dgv.Rows(i).Cells("緯度").Value.ToString
  84. Dim lon1 As Double = 清單1_dgv.Rows(i).Cells("經度").Value.ToString : Dim 狀態異常 As Boolean = True
  85. For J As Integer = 0 To 清單_dgv.Rows.Count - 1
  86. Dim lat2 As Double = 清單_dgv.Rows(J).Cells("緯度").Value.ToString
  87. Dim lon2 As Double = 清單_dgv.Rows(J).Cells("經度").Value.ToString
  88. Dim distance As Double = CalculateDistance(lat1, lon1, lat2, lon2)
  89. 清單_dgv.Rows(J).Cells("考勤距離").Value = "地點" & ": " & Strings.Format(distance, "#,##0.00") & " " & "米"
  90. If CDbl(清單_dgv.Rows(J).Cells("容許誤差").Value) >= distance Then
  91. 清單_dgv.Rows(J).Cells("判斷狀態").Value = "正常" : 狀態異常 = False
  92. Else
  93. 清單_dgv.Rows(J).Cells("判斷狀態").Value = "異常"
  94. End If
  95. Next
  96. If 狀態異常 = False Then
  97. 清單1_dgv.Rows(i).Cells("狀態").Value = "正常" : 清單1_dgv.Rows(i).Cells("狀態.").Value = "正常"
  98. Else
  99. 清單1_dgv.Rows(i).Cells("狀態").Value = "異常" : 清單1_dgv.Rows(i).Cells("狀態.").Value = "異常"
  100. End If
  101. PA1 = 清單1_dgv.Rows(i).Cells("機碼").Value.ToString : PA2 = 清單1_dgv.Rows(i).Cells("打卡時間").Value.ToString
  102. PA3 = 清單1_dgv.Rows(i).Cells("狀態").Value.ToString : SQL_考勤地點異常修改()
  103. Next : Set_驗證清單() : Set_位置清單()
  104. End Sub
  105. Private Sub 異常_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 異常_ch.Click
  106. 異常_ch.Checked = True : 正常_ch.Checked = False : Set_驗證清單()
  107. End Sub
  108. Private Sub 正常_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 正常_ch.Click
  109. 異常_ch.Checked = False : 正常_ch.Checked = True : Set_驗證清單()
  110. End Sub
  111. End Class