maohu 2 月之前
当前提交
d172c03dc0
共有 100 个文件被更改,包括 12862 次插入0 次删除
  1. 二进制
      1.ico
  2. 二进制
      5.ico
  3. 40 0
      DisplayWindow.py
  4. 972 0
      Functions/DisplayQTMain.py
  5. 3078 0
      Functions/QTMain.py
  6. 5383 0
      Functions/QTMain_old.py
  7. 51 0
      Functions/QtFunctions/AddPGWidget.py
  8. 110 0
      Functions/QtFunctions/LogerinTxt.py
  9. 64 0
      Functions/QtFunctions/LoginWidget.py
  10. 64 0
      Functions/QtFunctions/LoginWidget_display.py
  11. 317 0
      Functions/QtFunctions/SaveFile.py
  12. 33 0
      Functions/QtFunctions/Worker2.py
  13. 1 0
      Functions/QtFunctions/__init__.py
  14. 83 0
      Functions/QtFunctions/addFlightWidget.py
  15. 90 0
      Functions/QtFunctions/addUserWidget.py
  16. 33 0
      Functions/QtFunctions/amroLoginWidget.py
  17. 33 0
      Functions/QtFunctions/amroLoginWidget2.py
  18. 0 0
      Functions/QtFunctions/baseFunctions.py
  19. 101 0
      Functions/QtFunctions/changeAuth.py
  20. 64 0
      Functions/QtFunctions/changePassword.py
  21. 91 0
      Functions/QtFunctions/checkCalllist.py
  22. 63 0
      Functions/QtFunctions/checkLoadSingal.py
  23. 94 0
      Functions/QtFunctions/checkLogs.py
  24. 147 0
      Functions/QtFunctions/findServerWidget.py
  25. 152 0
      Functions/QtFunctions/handoverFlightWidget.py
  26. 57 0
      Functions/QtFunctions/ipcall.py
  27. 31 0
      Functions/QtFunctions/localipset.py
  28. 64 0
      Functions/QtFunctions/searchpeople_get.py
  29. 0 0
      Functions/QtFunctions/setPhone.py
  30. 33 0
      Functions/QtFunctions/setlocalip.py
  31. 404 0
      Functions/QtFunctions/sortdisplaySever.py
  32. 521 0
      Functions/QtFunctions/workloadinfos.py
  33. 0 0
      Functions/__init__.py
  34. 176 0
      Functions/ipFind.py
  35. 19 0
      Functions/openPdf.py
  36. 57 0
      Functions/serverFind.py
  37. 415 0
      Functions/utils.py
  38. 8 0
      Google/Chrome/Application/73.0.3683.86/73.0.3683.86.manifest
  39. 5 0
      Google/Chrome/Application/73.0.3683.86/Extensions/external_extensions.json
  40. 二进制
      Google/Chrome/Application/73.0.3683.86/Installer/chrmstp.exe
  41. 二进制
      Google/Chrome/Application/73.0.3683.86/Installer/setup.exe
  42. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/am.pak
  43. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/ar.pak
  44. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/bg.pak
  45. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/bn.pak
  46. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/ca.pak
  47. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/cs.pak
  48. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/da.pak
  49. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/de.pak
  50. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/el.pak
  51. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/en-GB.pak
  52. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/en-US.pak
  53. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/es-419.pak
  54. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/es.pak
  55. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/et.pak
  56. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/fa.pak
  57. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/fi.pak
  58. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/fil.pak
  59. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/fr.pak
  60. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/gu.pak
  61. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/he.pak
  62. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/hi.pak
  63. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/hr.pak
  64. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/hu.pak
  65. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/id.pak
  66. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/it.pak
  67. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/ja.pak
  68. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/kn.pak
  69. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/ko.pak
  70. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/lt.pak
  71. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/lv.pak
  72. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/ml.pak
  73. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/mr.pak
  74. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/ms.pak
  75. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/nb.pak
  76. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/nl.pak
  77. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/pl.pak
  78. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/pt-BR.pak
  79. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/pt-PT.pak
  80. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/ro.pak
  81. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/ru.pak
  82. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/sk.pak
  83. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/sl.pak
  84. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/sr.pak
  85. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/sv.pak
  86. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/sw.pak
  87. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/ta.pak
  88. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/te.pak
  89. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/th.pak
  90. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/tr.pak
  91. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/uk.pak
  92. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/vi.pak
  93. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/zh-CN.pak
  94. 二进制
      Google/Chrome/Application/73.0.3683.86/Locales/zh-TW.pak
  95. 8 0
      Google/Chrome/Application/73.0.3683.86/MEIPreload/manifest.json
  96. 二进制
      Google/Chrome/Application/73.0.3683.86/MEIPreload/preloaded_data.pb
  97. 二进制
      Google/Chrome/Application/73.0.3683.86/VisualElements/logo.png
  98. 二进制
      Google/Chrome/Application/73.0.3683.86/VisualElements/logobeta.png
  99. 二进制
      Google/Chrome/Application/73.0.3683.86/VisualElements/logocanary.png
  100. 二进制
      Google/Chrome/Application/73.0.3683.86/VisualElements/logodev.png

二进制
1.ico


二进制
5.ico


+ 40 - 0
DisplayWindow.py

@@ -0,0 +1,40 @@
+import sys
+from PyQt6.QtCore import QTimer
+from PyQt6.QtGui import QIcon
+from PyQt6.QtWidgets import *
+from Functions.DisplayQTMain import MainWidget
+import requests
+import ctypes
+ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("myappid")
+class MenuDemo(QMainWindow):
+    def __init__(self, parent=None):
+        super(MenuDemo, self).__init__(parent)
+        self.setWindowTitle('天府机务分部航班电子化平台')
+        self.resize(1400, 900)  # 宽×高
+        self.setMinimumSize(1400, 900)
+        self.setWindowIcon(QIcon(':/icon/1.ico'))
+        # 最小窗口尺寸
+        # self.setMaximumSize(2000, 1000)  # 最大窗口尺寸
+        self.child = MainWidget()
+        self.setCentralWidget(self.child)
+        #print(self.child.loginSts)
+        self.child.loginWidget.pushButton.clicked.connect(self.showChild)
+    def remoteCheck(self):
+        ip = "http://" + str(self.child.ipinfo) + "/static/remoteCheck2/"+self.child.version
+        res = requests.get(url=ip, timeout=180).json()
+        if res["返回值"] != "ok":
+            QMessageBox.warning(self, "提示", "有新版更新!请获取最新版本【最新版版本号:%s】!!"%res["返回值"])
+            self.close()
+
+    def showChild(self):
+        if self.child.loginSts == True:
+            self.show()
+            self.serchTimer = QTimer()
+            self.serchTimer.start(3600 * 1000)
+            self.serchTimer.timeout.connect(self.remoteCheck)
+
+if __name__ == '__main__':
+    app = QApplication(sys.argv)
+    demo = MenuDemo()
+    #demo.show()
+    sys.exit(app.exec())

+ 972 - 0
Functions/DisplayQTMain.py

@@ -0,0 +1,972 @@
+import datetime
+import sys
+from PyQt6 import QtCore
+from PyQt6.QtCore import Qt, QThread,QObject,QThreadPool, QTimer
+from PyQt6.QtGui import QColor, QFont
+from PyQt6.QtTextToSpeech import QTextToSpeech
+from PyQt6.QtWidgets import QApplication, QWidget, QMessageBox, QTableWidgetItem, QAbstractItemView
+import requests
+from UI.main22 import Ui_Form
+from Functions.QtFunctions.LogerinTxt import app_logger
+from Functions.QtFunctions import findServerWidget as FindServerWidget
+from Functions.QtFunctions import LoginWidget_display as loginWidget
+
+
+headerlabel0= ["序号","数据序号","备","机号","航班信息","机型","机型信息","发动机","机位","航班号","备","计达","备","预达",
+     "备","计飞","备","备","机位","类型","备","放行","备","工1","备","工2","备","工3","备","工4",
+     "备","班组长","备","到位","备","放行","备","销夹","电签","随机","备","随机","备","保留","备","工作包",
+     "备","进出港城市","备","维修人员","交班人员","放行","备","航班编号","备","任务编号","备","TATD","备","类型",
+     "备","附加消息","备","备","备","备"]
+headerlabel_B=["序号", "机号", "机型", "发动机", "航班号", "计达", "预达", "计飞", "机位", "类型", "工作单", "飞单", "客舱单",
+             "临工单","AMRO记录", "电签复查", "接机电签", "任务电签", "二送电签", "备", "备", "备", "备", "备", "进出港城市",
+             "维修人员", "二送人员","放行", "航班编号", "电签工卡", "备", "类型", "附加消息"]
+
+versionNumb= "20.0.0"
+
+class sortdisplaySever(QObject):
+    sortupdate = QtCore.pyqtSignal(str, dict, list, str, str)
+    def __init__(self, name, ip, selectedtime, text, displayMode, selectedbc, displayselect, thread):
+        super().__init__()
+        self.funcName = name
+        self.ipinfo = ip
+        self.selectedtime = selectedtime
+        self.text = text
+        self.displayMode = displayMode
+        self.selectedbc = selectedbc
+        self.displayselect_mode = displayselect
+        self.thread = thread
+        nowDay = datetime.datetime.now().strftime("%Y%m%d")
+        tomorr =(datetime.date.today() + datetime.timedelta(days=1)).strftime("%Y%m%d")
+        yester =(datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y%m%d")
+        if self.selectedtime == nowDay:
+            self.date = "2"
+        elif self.selectedtime == tomorr:
+            self.date = "3"
+        elif self.selectedtime == yester:
+            self.date = "1"
+        else:
+            self.date = "4"
+
+    def run(self):
+        try:
+            list = []
+            if self.funcName == "sortTableWidgetDispaly":
+                #print("1")
+                self.sortTableWidgetDispaly()
+                self.sortupdate.emit("sortTableWidgetDispaly", self.sorttableWidgetDispalydata, list, self.seversts,self.displayMode)
+                self.sortupdate.emit("sortTableWidgetDispalyALL", self.DispalydataAll, list, self.seversts,self.displayMode)
+            if self.funcName == "sortTableWidgetDispalyALL":
+                #print("2")
+                self.sortTableWidgetDispalyALL()
+                self.sortupdate.emit("sortTableWidgetDispalyALL", self.sorttableWidgetDispalydata, list, self.seversts,self.displayMode)
+            elif self.funcName == "SearchsortTableWidgetDispaly":
+                #print("3")
+                self.SearchsortTableWidgetDispaly()
+                self.sortupdate.emit("SearchsortTableWidgetDispaly", self.sorttableWidgetDispalydata, list,self.seversts,self.displayMode)
+            elif self.funcName == "sorttableWidgetDisplayChange":
+                #print("4")
+                self.sorttableWidgetDisplayChange()
+                self.sortupdate.emit("sorttableWidgetDisplayChange", self.sortlogchange, list, self.seversts,self.displayMode)
+            elif self.funcName == "sorttableWidgetPeopleDisplay":
+                self.sorttableWidgetPeopleDisplay()
+                self.sortupdate.emit("sorttableWidgetPeopleDisplay", self.sortdiplaylist, self.peopleOnJob,self.seversts, self.displayMode)
+            elif self.funcName == "sorttableWidgetLOGDispaly":
+                self.sorttableWidgetLOGDispaly()
+                self.sortupdate.emit("sorttableWidgetLOGDispaly", self.sortlog, list, self.seversts, self.displayMode)
+            elif self.funcName == "sorttableWidgetPHONEDispaly":
+                self.sorttableWidgetPHONEDispaly()
+                self.sortupdate.emit("sorttableWidgetPHONEDispaly", self.sorttableWidgetPHONEDispalydata, list,self.seversts, "")
+            self.thread.quit()
+        except Exception as e:
+            app_logger.log_error(e)
+            self.thread.quit()
+
+    def severpost_nomeassge(self, postname, postdata, postdata2, postdata3):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2) + str(postdata3)
+            try:
+                res = requests.get(url=ip, timeout=30).json()
+                self.seversts = "1"
+                return res
+            except Exception as e:
+                app_logger.log_error(e)
+                app_logger.log_error("重大bug")
+                app_logger.log_error(ip)
+                self.seversts = "0"
+                return []
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sorttableWidgetPHONEDispaly(self):
+        try:
+            sorttableWidgetPHONEDispalydataall = self.severpost_nomeassge("getphonelist", "", "", "")
+            self.sorttableWidgetPHONEDispalydata = {}
+            num = 0
+            if sorttableWidgetPHONEDispalydataall != None:
+                if self.text != "":
+                    for i in sorttableWidgetPHONEDispalydataall.keys():
+                        if str.lower(str(self.text)) in str(sorttableWidgetPHONEDispalydataall[i]):
+                            self.sorttableWidgetPHONEDispalydata[str(num)] = sorttableWidgetPHONEDispalydataall[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetPHONEDispalydata = sorttableWidgetPHONEDispalydataall
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def checkall(self, datas, text):
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if datas[i]["109"] != text:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+
+    def checkStrsingle(self,datas, text, text2): #单一条件筛选
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(text) in str(datas[i]) and datas[i]["109"] != text2:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] != text1:
+                    if str(datas[i]["8"])[0] == text2 and str(datas[i]["8"])[0] == text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll2(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] != text1:
+                    if str(datas[i]["8"])[0] != text2 and str(datas[i]["8"])[0] != text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll3(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] == text1:
+                    if str(datas[i]["8"])[0] == text2 and str(datas[i]["8"])[0] == text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll4(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] == text1:
+                    if str(datas[i]["8"])[0] != text2 and str(datas[i]["8"])[0] != text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+
+    def sortTableWidgetDispaly(self):
+        try:
+            text = self.text
+            Partdisplay = self.displayselect_mode  # 不显示起飞航班
+            # print(Partdisplay)
+            tableWidgetDispalydataAll = {}
+            if self.displayMode == "A" and (self.selectedbc == "0" or self.date=="4"):
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispaly", "/%s" % self.selectedtime,"/%s"%self.date,"")
+            elif self.displayMode == "B"and (self.selectedbc == "0" or self.date=="4"):
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispaly2", "/%s" % self.selectedtime,"/%s"%self.date,"")
+            elif self.displayMode == "A" and self.selectedbc == "1":
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispalyRead","/%s"%self.date,"","")
+            elif self.displayMode == "B"and self.selectedbc == "1":
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispalyRead2","/%s"%self.date,"","")
+            self.DispalydataAll=tableWidgetDispalydataAll
+            self.sorttableWidgetDispalydata = {}
+            num = 0
+            if tableWidgetDispalydataAll != None:
+                if text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata=self.checkStrsingle(tableWidgetDispalydataAll, text, "")
+                elif text == "T1" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "2", "2", "2")
+                elif text == "T2T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "2", "1")
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6"  and text != "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "4")
+                elif text == "T1" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "2", "1")
+                elif text == "" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkall(tableWidgetDispalydataAll, "4")
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "1")
+                elif text == "T1" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "2", "1")
+                elif text == "" and Partdisplay == "3":
+                    for i in tableWidgetDispalydataAll.keys():
+                        if tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetDispalydata = tableWidgetDispalydataAll
+
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sortTableWidgetDispalyALL(self):
+        try:
+            if self.displayMode == "A" and (self.selectedbc == "0" or self.date=="4"):
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispaly", "/%s" % self.selectedtime,"/%s"%self.date,"")
+            elif self.displayMode == "B"and (self.selectedbc == "0" or self.date=="4"):
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispaly2", "/%s" % self.selectedtime,"/%s"%self.date,"")
+            elif self.displayMode == "A" and self.selectedbc == "1":
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispalyRead","/%s"%self.date,"","")
+            elif self.displayMode == "B"and self.selectedbc == "1":
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispalyRead2","/%s"%self.date,"","")
+        except Exception as e:
+            app_logger.log_error(e)
+
+
+
+    def SearchsortTableWidgetDispaly(self):
+        try:
+            text = self.text
+            self.seversts = "1"
+            Partdisplay = self.displayselect_mode  # 不显示起飞航班
+            # print(Partdisplay)
+            tableWidgetDispalydataAll = self.selectedbc
+
+            self.sorttableWidgetDispalydata = {}
+            num = 0
+            if tableWidgetDispalydataAll != None:
+                if text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6"and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "")
+                elif text == "T1" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "2", "1")
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "4")
+                elif text == "T1" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "2", "1")
+                elif text == "" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkall(tableWidgetDispalydataAll,  "4")
+
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "3":
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]) and tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "2", "1")
+                elif text == "" and Partdisplay == "3":
+                    for i in tableWidgetDispalydataAll.keys():
+                        if tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetDispalydata = tableWidgetDispalydataAll
+        except Exception as e:
+            app_logger.log_error(e)
+
+
+    def sorttableWidgetDisplayChange(self):
+        try:
+            text = self.text
+            logall = self.severpost_nomeassge("tableWidgetDisplayChange", "/%s" % self.selectedtime, "", "")
+            self.sortlogchange = {}
+            num = 0
+            if text != "":
+                for i in logall.keys():
+                    if str(text) in str(logall[i]):
+                        self.sortlogchange[str(num)] = logall[i]
+                        num += 1
+            else:
+                self.sortlogchange = logall
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sorttableWidgetPeopleDisplay(self):
+        try:
+            if self.displayselect_mode == "" or self.displayselect_mode == []:
+                text = self.text
+                self.peopleOnJob = [""]
+                bc = self.selectedbc
+                nowDaystr = self.selectedtime  # 选择的日期
+                diplaylistall = self.severpost_nomeassge("qtPeopleLoad", "/%s" % nowDaystr, "/%s" % bc, "")
+                self.sortdiplaylist = {}
+                num = 0
+                if text != "":
+                    for i in diplaylistall.keys():
+                        if str(text) in str(diplaylistall[i]):
+                            self.sortdiplaylist[str(num)] = diplaylistall[i]
+                            num += 1
+                else:
+                    self.sortdiplaylist = diplaylistall
+                for i in self.sortdiplaylist.keys():
+                    self.peopleOnJob.append(self.sortdiplaylist[i]["姓名"])
+            else:
+                names = self.displayselect_mode
+                text = self.text
+                self.peopleOnJob = [""]
+                bc = self.selectedbc
+                nowDaystr = self.selectedtime  # 选择的日期
+                diplaylistall = self.severpost_nomeassge("qtPeopleLoad", "/%s" % nowDaystr, "/%s" % bc, "")
+                self.sortdiplaylist = {}
+                num = 0
+                if text != "":
+                    for i in diplaylistall.keys():
+                        if str(text) in str(diplaylistall[i]):
+                            for name in names:
+                                if str(name) in str(diplaylistall[i]):
+                                    self.sortdiplaylist[str(num)] = diplaylistall[i]
+                                    num += 1
+                else:
+                    for i in diplaylistall.keys():
+                        for name in names:
+                            if str(name) in str(diplaylistall[i]):
+                                self.sortdiplaylist[str(num)] = diplaylistall[i]
+                                num += 1
+                for i in self.sortdiplaylist.keys():
+                    self.peopleOnJob.append(self.sortdiplaylist[i]["姓名"])
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sorttableWidgetLOGDispaly(self):
+        try:
+            text = self.text
+            logall = self.severpost_nomeassge("tableWidgetLOGDispaly", "/%s" % self.selectedtime, "", "")
+            self.sortlog = {}
+            num = 0
+            if text != "":
+                for i in logall.keys():
+                    if str(text) in str(logall[i]):
+                        self.sortlog[str(num)] = logall[i]
+                        num += 1
+            else:
+                self.sortlog = logall
+        except Exception as e:
+            app_logger.log_error(e)
+
+
+class MainWidget(QWidget, Ui_Form):
+    LoginWidget_signal = QtCore.pyqtSignal(str)
+
+    def __init__(self):
+        super().__init__()
+        try:
+            self.displaySelectstr3 = "0"
+            self.displaySelect_mode = "1"
+            self.localip = None
+            self.severupdatests = "0"
+            self.localtoken = None
+            self.searchpeoplestr = []
+            self.sorttableWidgetDispalydata = {}
+            self.sorttableWidgetDispalydataALL = {}
+            self.sortdiplaylist = {}
+            self.peopleOnJob = [""]
+            self.loginSts = False
+            self.amroLoginSts = False
+            self.findSever = False
+            self.FLIGHTonChange_text = ""
+            self.threadpool = QThreadPool()
+            self.setupUi(self)
+            # self.show()
+            self.loginWidget = loginWidget.LoginWidget()
+            self.findServerWidget = FindServerWidget.findServerWidget()
+
+            # self.amroLoginWidget = amroLoginWidget()
+            if self.findSever:
+                pass
+                # if self.loginSts:
+                #     self.show()
+                # else:
+                #     self.loginWidget.show()
+            else:
+                self.findServerWidget.show()
+
+            self.findServerWidget.selectServer_signal.connect(self.setServer)
+
+            # self.amroLoginWidget.amroLogin_signal.connect(self.displayMain)
+            # data
+        except Exception:
+            pass
+
+    def setServer(self, *args):
+        try:
+            self.ipinfo = args[0] + ':7162'
+            self.clickrow = ""
+            self.clickcolumn = ""
+            # print(self.ipinfo)
+            self.version = versionNumb
+            self.findServerWidget.close()
+            self.loginWidget.ipinfo = self.ipinfo
+            self.loginWidget.login_signal.connect(self.displayMain)
+            self.loginWidget.login_user.connect(self.setUser)
+            checksts = 0
+            ip = "http://" + str(self.ipinfo) + "/static/remoteCheck2/"+self.version
+            res = requests.get(url=ip, timeout=180).json()
+            if res["返回值"] == "ok":
+                checksts = 1
+            if checksts == 1:
+                if self.loginSts:
+                    self.initDisplay()
+                    self.show()
+                else:
+                    self.loginWidget.show()
+            else:
+                QMessageBox.warning(self, "提示", "有新版更新!请前往NAS共享平台[机务一队/天府机务分部/31准备组无纸化办公/1航班助手]获取电子白板最新版本!!")
+                self.close()
+        except Exception:
+            pass
+
+    def judge_bc(self):
+        try:
+            nowDay = datetime.date.today().strftime("%Y%m%d")
+            nowDay_1 = (datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y%m%d")
+            nowDay_str2 = datetime.date.today().strftime("%Y-%m-%d")
+            a_str = nowDay_str2 + " 04:30:00"
+            b_str = nowDay_str2 + " 20:30:00"
+            a = datetime.datetime.strptime(a_str, "%Y-%m-%d %H:%M:%S")
+            b = datetime.datetime.strptime(b_str, "%Y-%m-%d %H:%M:%S")
+            nowtime = datetime.datetime.now()
+            if a < nowtime < b:
+                self.selectedtime = nowDay
+                self.selectedtime_bc = "A"
+            elif b < nowtime:
+                self.selectedtime = nowDay
+                self.selectedtime_bc = "B"
+            elif nowtime < a:
+                self.selectedtime = nowDay_1
+                self.selectedtime_bc = "B"
+        except Exception:
+            pass
+
+    def initDisplay(self):
+        try:
+            self.oldjsondata = None
+            self.cookie = None
+            self.fl = None
+            self.tts = QTextToSpeech()
+            self.tts.setEngine('sapi')
+            self.judge_bc()
+            self.displayMode = "A"
+            self.displayLabel = headerlabel0
+            self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+            self.tableWidgetFlight.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
+            self.tableWidgetFlight.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
+            # self.lineEdit_phonenum.setText("")
+            #self.checkBox.stateChanged.connect(self.displayChange)
+            self.checkBox.setChecked(True)
+            self.checkBox_2.stateChanged.connect(self.displaySelect2)
+            self.checkBox_2.setChecked(True)
+            self.checkBox_3.stateChanged.connect(self.displaySelect3)
+            self.checkBox_3.setChecked(False)
+            self.pushbutton_searchflight.clicked.connect(self.FLIGHTonChangeman)
+            self.lineEdit_flight.textEdited[str].connect(lambda: self.changebackground())
+            self.lineEdit_flight.textChanged.connect(self.FLIGHTonChange)
+            self.serchTimer = QTimer()
+            self.serchTimer.start(150 * 1000)
+            self.serchTimer.timeout.connect(self.QThreadSortTimer)
+            self.updatecheck()
+        except Exception:
+            pass
+
+    def changebackground(self):
+        try:
+            FLIGHTonChange_text = self.lineEdit_flight.text()
+            if FLIGHTonChange_text != "":
+                self.lineEdit_flight.setStyleSheet("background-color:yellow;color:red;font-weight:bold")
+            else:
+                self.lineEdit_flight.setStyleSheet("background-color:white")
+        except Exception:
+            pass
+    def FLIGHTonChange(self):
+        try:
+            self.FLIGHTonChange_text = self.lineEdit_flight.text()
+            # print(self.FLIGHTonChange_text)
+            self.QThreadSortNow("search")
+        except Exception:
+            pass
+    def FLIGHTonChangeman(self):
+        try:
+            self.FLIGHTonChange_text = self.lineEdit_flight.text()
+            # print(self.FLIGHTonChange_text)
+            self.QThreadSortNow("main")
+        except Exception:
+            pass
+
+    def updatecheck(self):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/updatecheck"
+            res = requests.get(url=ip, timeout=30).json()
+            if res["返回值"] == "1":
+                self.label_11.setText("正 常")
+                self.label_11.setStyleSheet(
+                    "background-color:green;color:white;border-radius:5px;padding:2px;font-weight:bold")
+                if self.severupdatests != "1":
+                    self.severupdatests = "1"
+
+            elif res["返回值"] == "0":
+                self.label_11.setText("未更新")
+                self.label_11.setStyleSheet("background-color:yellow;red:white;border-radius:5px;padding:2px;font-weight:bold")
+
+        except Exception:
+            self.label_11.setText("已断开")
+            self.label_11.setStyleSheet("background-color:red;color:white;border-radius:5px;padding:2px;font-weight:bold")
+
+    def AddPG_widget(self):
+        try:
+            self.AddPG.show()
+            self.AddPG_signal.emit(self.user, self.selectedtime, self.ipinfo)
+        except Exception:
+            pass
+
+
+    def displaySelect2(self):
+        try:
+            displaySelect = self.sender()
+            if displaySelect.isChecked():
+                self.displaySelectstr2 = "1"
+                if self.loginSts == True:
+                    if self.displaySelectstr3 == "1":
+                        self.displaySelect_mode = "3"
+                    else:
+                        self.displaySelect_mode = "1"
+                    self.QThreadSortNow("main")
+            else:
+                self.displaySelectstr2 = "0"
+                self.displaySelect_mode = "0"
+                if self.loginSts == True:
+                    if self.displaySelectstr3 == "1":
+                        self.checkBox_3.setChecked(False)
+                    else:
+                        self.QThreadSortNow("main")
+        except Exception:
+            pass
+
+    def displaySelect3(self):
+        try:
+            displaySelect = self.sender()
+            if displaySelect.isChecked():
+                self.displaySelectstr3 = "1"
+                self.displaySelect_mode = "3"
+                if self.loginSts == True:
+                    if self.displaySelectstr2 == "0":
+                        self.checkBox_2.setChecked(True)
+                    else:
+                        self.QThreadSortNow("main")
+            else:
+                self.displaySelectstr3 = "0"
+                if self.loginSts == True:
+                    if self.displaySelectstr2 == "0":
+                        self.displaySelect_mode = "0"
+                    else:
+                        self.displaySelect_mode = "1"
+                    self.QThreadSortNow("main")
+        except Exception:
+            pass
+
+
+    def displayMain(self, *args):
+        try:
+            if args[0]:
+                self.initDisplay()
+                self.loginSts = True
+                self.loginWidget.close()
+                self.show()
+                self.QThreadSortNow("main")
+        except Exception:
+            pass
+
+    def setUser(self, args):
+        try:
+            self.user = args[1]
+            self.authority = args[3]
+            self.label_username.setText(self.user)
+        except Exception:
+            pass
+
+
+    def QThreadSortDispalyTimer(self, name, dict, dict2, seversts, displayMode):
+        try:
+            if name == "sortTableWidgetDispaly":
+                if displayMode == "A":
+                    self.displayLabel = headerlabel0
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+
+                elif displayMode == "B":
+                    self.displayLabel = headerlabel_B
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+                self.sorttableWidgetDispalydata = {}
+                self.sorttableWidgetDispalydata = dict
+                self.sorttableWidgetDispalydataALL={}
+                self.sorttableWidgetDispalydataALL = dict
+                self.tableWidgetDispaly()
+                # print(self.sorttableWidgetDispalydata)
+
+            if seversts == "0":
+                self.severupdatests = "-"
+                self.label_11.setText("已断开")
+                self.label_11.setStyleSheet(
+                    "background-color:red;color:white;border-radius:5px;padding:2px;font-weight:bold")
+            elif seversts == "1" and self.severupdatests == "1":
+                self.label_11.setText("正 常")
+                self.label_11.setStyleSheet(
+                    "background-color:green;color:white;border-radius:5px;padding:2px;font-weight:bold")
+            elif seversts == "1" and self.severupdatests == "0":
+                self.label_11.setText("未更新")
+                self.label_11.setStyleSheet(
+                    "background-color:yellow;color:red;border-radius:5px;padding:2px;font-weight:bold")
+        except Exception:
+            pass
+
+    def QThreadSortDispalyNow(self, name, dict, dict2, seversts, displayMode):
+        try:
+            if name == "sortTableWidgetDispaly":
+                if displayMode == "A":
+                    self.displayLabel = headerlabel0
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+
+                else:
+                    self.displayLabel = headerlabel_B
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+                self.sorttableWidgetDispalydata = {}
+                self.sorttableWidgetDispalydata = dict
+                self.sorttableWidgetDispalydataALL = {}
+                self.sorttableWidgetDispalydataALL = dict
+                # print(self.sorttableWidgetDispalydata)
+                self.tableWidgetDispaly()
+            elif name == "SearchsortTableWidgetDispaly":
+                if displayMode == "A":
+                    self.displayLabel = headerlabel0
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+
+                elif displayMode == "B":
+                    self.displayLabel = headerlabel_B
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+                self.sorttableWidgetDispalydata = {}
+                self.sorttableWidgetDispalydata = dict
+                self.tableWidgetDispaly()
+                # print(self.sorttableWidgetDispalydata)
+
+            if seversts == "0":
+                self.severupdatests = "-"
+                self.label_11.setText("已断开")
+                self.label_11.setStyleSheet(
+                    "background-color:red;color:white;border-radius:5px;padding:2px;font-weight:bold")
+            elif seversts == "1" and self.severupdatests == "1":
+                self.label_11.setText("正 常")
+                self.label_11.setStyleSheet(
+                    "background-color:green;color:white;border-radius:5px;padding:2px;font-weight:bold")
+            elif seversts == "1" and self.severupdatests == "0":
+                self.label_11.setText("未更新")
+                self.label_11.setStyleSheet(
+                    "background-color:yellow;color:red;border-radius:5px;padding:2px;font-weight:bold")
+        except Exception:
+            pass
+
+
+    def QThreadSortTimer(self):
+        try:
+
+            if self.loginSts == True:
+                # print("多线程刷新1")
+                self.judge_bc()
+                self.FLIGHTonChange_text = self.lineEdit_flight.text()
+                th1 = QThread()
+                self.sortTableWidgetDispalyThread1 = sortdisplaySever("sortTableWidgetDispaly", self.ipinfo,
+                                                                      self.selectedtime, self.FLIGHTonChange_text,
+                                                                      self.displayMode, "1", self.displaySelect_mode,
+                                                                      th1)
+                self.sortTableWidgetDispalyThread1.sortupdate.connect(self.QThreadSortDispalyTimer)
+                self.sortTableWidgetDispalyThread1.moveToThread(th1)
+                th1.started.connect(self.sortTableWidgetDispalyThread1.run)
+                th1.start()
+                self.updatecheck()
+        except Exception:
+            pass
+
+    def QThreadSortNow(self, name):
+        try:
+            if "main" in str(name):
+                # print(datetime.datetime.now())
+                th11 = QThread()
+                self.sortTableWidgetDispalyThread11 = sortdisplaySever("sortTableWidgetDispaly", self.ipinfo,
+                                                                       self.selectedtime, self.FLIGHTonChange_text,
+                                                                       self.displayMode, "1", self.displaySelect_mode,
+                                                                       th11)
+                self.sortTableWidgetDispalyThread11.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sortTableWidgetDispalyThread11.moveToThread(th11)
+                th11.started.connect(self.sortTableWidgetDispalyThread11.run)
+                th11.start()
+            elif "search" in str(name):
+                # print(datetime.datetime.now())
+                th111 = QThread()
+                self.sortTableWidgetDispalyThread111 = sortdisplaySever("SearchsortTableWidgetDispaly", self.ipinfo,
+                                                                        self.selectedtime, self.FLIGHTonChange_text,
+                                                                        self.displayMode, self.sorttableWidgetDispalydataALL, self.displaySelect_mode,
+                                                                        th111)
+                self.sortTableWidgetDispalyThread111.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sortTableWidgetDispalyThread111.moveToThread(th111)
+                th111.started.connect(self.sortTableWidgetDispalyThread111.run)
+                th111.start()
+
+        except Exception:
+            pass
+
+    def enter_item_slot(self, item):
+        try:
+            self.tool_tip = item.text()
+            # print("self.tool_tip:", self.tool_tip)
+        except Exception:
+            pass
+
+    def tableWidgetDispaly(self):
+        try:
+            selftaxi = ["166", "166L", "166R", "167", "167L", "167R", "168", "169", "170", "171", "172", "173", "174",
+                        "269", "270", "271", "272", "273", "274", "275", "287", "288", "601", "602", "603", "604",
+                        "605", "606", "607", "607L", "607R"]  # 自滑位
+            if self.sorttableWidgetDispalydata != "":
+                # print("刷新开始")
+                # dateNow=datetime.datetime.now()
+                tableWidgetDispalydata = self.sorttableWidgetDispalydata
+                col = len(self.displayLabel)
+                self.tableWidgetFlight.setRowCount(len(tableWidgetDispalydata.keys()))
+                for row in tableWidgetDispalydata.keys():
+                    for colNum in range(0, col):
+                        if colNum == 13:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                        elif colNum == 15:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                        elif colNum == 18:
+                            if tableWidgetDispalydata[row][str(colNum)] in selftaxi and tableWidgetDispalydata[row][str(colNum)] != "":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("lightgreen"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("black"))
+
+                            elif tableWidgetDispalydata[row][str(colNum)] not in selftaxi or tableWidgetDispalydata[row][str(colNum)] == "":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                            font = QFont()
+                            # font.setFamily("SimHei")
+                            font.setFamily("Microsoft YaHei")
+                            font.setBold(True)
+
+                            self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+                        elif colNum == 19:
+                            if tableWidgetDispalydata[row][str(colNum)] == "短停送" or tableWidgetDispalydata[row][str(colNum)] == "特后前送":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str("blue")))
+                                font = QFont()
+                                font.setFamily("Microsoft YaHei")
+                                font.setBold(True)
+                                self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+
+                            else:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+
+                        elif 19 < colNum < 31:
+                            if "√" in tableWidgetDispalydata[row][str(colNum)] or tableWidgetDispalydata[row][str(colNum)] == "":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)]).replace("*","")))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                            if tableWidgetDispalydata[row][str(colNum)] != "" and "√" not in tableWidgetDispalydata[row][str(colNum)]:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)]).replace("*","")))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("black"))
+                        elif colNum == 61:
+                            if str(tableWidgetDispalydata[row][str(colNum)]) != "" and str(tableWidgetDispalydata[row][str(colNum)]) != None:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("red"))
+                                font = QFont()
+                                font.setFamily("Microsoft YaHei")
+                                font.setBold(True)
+                                self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+                            else:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                                font = QFont()
+                                font.setFamily("Microsoft YaHei")
+                                font.setBold(True)
+                                self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+                        elif colNum == 49:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                            if tableWidgetDispalydata[row][str(colNum)] != "":
+                                for i in tableWidgetDispalydata[row][str(colNum)].split(","):
+                                    if "√" not in i:
+                                        self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("yellow"))
+                                        self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("black"))
+                                        break
+                                    else:
+                                        self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                        self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                            else:
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                        elif colNum == 51:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                            if tableWidgetDispalydata[row][str(colNum)] != "" and "√" not in tableWidgetDispalydata[row][str(colNum)]:
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("black"))
+                            else:
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+
+
+                        elif 0 < colNum < 11:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+
+                        elif colNum == 0:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(int(row)+1)))
+
+                        else:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem( str(tableWidgetDispalydata[row][str(colNum)])))
+
+                        if colNum not in [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,49,51, 61]:
+                            self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+
+                        if colNum not in [4 , 6]:
+                            self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        else:
+                            self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignCenter)
+                            self.tableWidgetFlight.setRowHeight(int(row), 35)
+
+                        if self.displayMode == "A":
+                            settips={0:"53",4:"62",49:"50",19:"47",11:"57",13:"57",15:"57",45:"45",61:"61",6:"17",38:"40",}
+                            for key,value in settips.items():
+                                if self.tableWidgetFlight.item(int(row), key):
+                                    self.tableWidgetFlight.item(int(row), key).setToolTip("%s" % (str(tableWidgetDispalydata[row][str(value)])))
+                        else:
+                            self.tableWidgetFlight.item(int(row), 0).setToolTip("[%s,%s]" % ( str(tableWidgetDispalydata[row][str(col - 5)]),str(tableWidgetDispalydata[row][str(col - 4)])))
+                            for ii in range (1,4):
+                                self.tableWidgetFlight.item(int(row), ii).setToolTip("%s" % str(tableWidgetDispalydata[row][str(24)]))
+
+                if self.displayMode == "A":
+                    self.tableWidgetFlight.resizeColumnsToContents()
+                    self.tableWidgetFlight.setWordWrap(True)
+                    for i in range(col):
+                        if i in [1,2,3,5,7,8,9,10,12,14,16,17,20,22,24,26,28,30,32,34,36,39,40,42,43,44,46,47,48,50,52,53,54,55,56,57,58,59,60,62,63,64,65]:
+                            self.tableWidgetFlight.setColumnHidden(i, True)
+                        else:
+                            self.tableWidgetFlight.setColumnHidden(i, False)
+                        if i in [21, 23, 25, 27, 29, 31]:
+                            self.tableWidgetFlight.setColumnWidth(i, 70)
+                        elif i in [45]:
+                            self.tableWidgetFlight.setColumnWidth(i, 45)
+                else:
+                    for i in range(col):
+                        if i in [col - 9, col - 11, col - 12,19,20,21,22,23,28,29,30,31]:
+                            self.tableWidgetFlight.setColumnHidden(i, True)
+                        else:
+                            self.tableWidgetFlight.setColumnHidden(i, False)
+                    self.tableWidgetFlight.resizeColumnsToContents()
+                    self.tableWidgetFlight.setColumnWidth(10, 70)
+                    self.tableWidgetFlight.setColumnWidth(11, 70)
+                    self.tableWidgetFlight.setColumnWidth(12, 70)
+                    self.tableWidgetFlight.setColumnWidth(13, 70)
+                    self.tableWidgetFlight.setColumnWidth(14, 70)
+                    self.tableWidgetFlight.setColumnWidth(15, 70)
+                    self.tableWidgetFlight.setColumnWidth(22, 45)
+        except Exception as e:
+            app_logger.log_error(e)
+
+if __name__ == '__main__':
+    app = QApplication(sys.argv)
+    mw = MainWidget()
+
+    sys.exit(app.exec())

+ 3078 - 0
Functions/QTMain.py

@@ -0,0 +1,3078 @@
+import datetime
+import socket
+import sys
+from PyQt6 import QtCore
+from PyQt6.QtCore import Qt, QThread, QThreadPool, QTimer
+from PyQt6.QtGui import QColor, QFont,QPalette
+from PyQt6.QtTextToSpeech import QTextToSpeech
+from PyQt6.QtWidgets import QApplication, QWidget, QMessageBox, QPushButton, QTableWidgetItem, QFileDialog, QMenu
+import requests
+import os
+import json
+from openpyxl import Workbook
+from UI.main2 import Ui_Form
+from .openPdf import open_with_system_viewer
+
+#####################
+from Functions.QtFunctions.LogerinTxt import app_logger
+from Functions.QtFunctions import findServerWidget as FindServerWidget
+from Functions.QtFunctions import addUserWidget as AddUserWidget
+from Functions.QtFunctions import handoverFlightWidget as HandoverFlightWidget
+from Functions.QtFunctions import addFlightWidget as AddFlightWidget
+from Functions.QtFunctions import AddPGWidget as addPGWidget
+from Functions.QtFunctions import changePassword as ChangePassword
+from Functions.QtFunctions import changeAuth as ChangeAuth
+from Functions.QtFunctions import checkLogs as CheckLogs
+from Functions.QtFunctions import localipset as Localipset
+from Functions.QtFunctions import searchpeople_get as Searchpeople_get
+from Functions.QtFunctions import checkCalllist as CheckCalllist
+from Functions.QtFunctions import amroLoginWidget2 as AmroLoginWidget2
+from Functions.QtFunctions import amroLoginWidget as AmroLoginWidget
+from Functions.QtFunctions import LoginWidget as loginWidget
+from Functions.QtFunctions import setlocalip as Setlocalip
+from Functions.QtFunctions import sortdisplaySever as SortdisplaySever
+from Functions.QtFunctions import workloadinfos
+
+
+headerlabel0= ["序号","数据序号","备","机号","航班信息","机型","机型信息","发动机","机位","航班号","备","计达","备","预达",
+     "备","计飞","备","备","机位","类型","备","放行","备","工1","备","工2","备","工3","备","工4",
+     "备","班组长","备","到位","备","放行","备","销夹","电签","随机","备","随机","备","保留","备","工作包",
+     "备","进出港城市","备","维修人员","交班人员","放行","备","航班编号","备","任务编号","备","TATD","备","类型",
+     "备","附加消息","备","备","备","备"]
+headerlabel_B=["序号", "机号", "机型", "发动机", "航班号", "计达", "预达", "计飞", "机位", "类型", "工作单", "飞单", "客舱单",
+             "临工单","AMRO记录", "电签复查", "接机电签", "任务电签", "二送电签", "备", "备", "备", "备", "备", "进出港城市",
+             "维修人员", "二送人员","放行", "航班编号", "电签工卡", "备", "类型", "附加消息"]
+
+versionNumber = "20.0.0"
+
+
+class MainWidget(QWidget, Ui_Form):
+    AddPG_signal = QtCore.pyqtSignal(str, str, str)
+    LoginWidget_signal = QtCore.pyqtSignal(str)
+    addUserWidget_signal = QtCore.pyqtSignal(str)
+
+    def __init__(self):
+        super().__init__()
+        try:
+            self.displaySelectstr3 = "0"
+            self.displaySelect_mode = "1"
+            self.sum = 0
+            self.flightsum = 0
+            self.localip = None
+            self.severupdatests = "0"
+            self.localtoken = None
+            self.searchpeoplestr = []
+            self.sorttableWidgetDispalydata = {}
+            self.sorttableWidgetDispalydataALL = {}
+            self.sortlogchange = {}
+            self.sortlog = {}
+            self.sortdiplaylist = {}
+            self.peopleOnJob = [""]
+            self.loginSts = False
+            self.amroLoginSts = False
+            self.findSever = False
+            self.FLIGHTonChange_text = ""
+            self.changeonChange_text = ""
+            self.logonChange_text = ""
+            self.threadpool = QThreadPool()
+            self.doubleclickLock = 0
+            self.vin="328"
+            self.timelock=datetime.datetime.now()
+            self.doubleclickLockUpdate = 0
+            self.maintainAuthCheckSts = 1
+            self.peolpleonChange_text = ""
+            self.changeupdatetime=datetime.datetime.now()
+            self.setupUi(self)
+            # self.show()
+            self.loginWidget = loginWidget.LoginWidget()
+            self.findServerWidget = FindServerWidget.findServerWidget()
+            self.mapWebPage = FindServerWidget.mapWebWidget()
+            self.checkCalllist = CheckCalllist.checkCalllist()
+            self.checkCalllist.checkCalllist_signal.connect(self.checkCalllistclose)
+            if self.findSever:
+                pass
+            else:
+                self.findServerWidget.show()
+            self.findServerWidget.selectServer_signal.connect(self.setServer)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def setServer(self, *args):
+        try:
+            #self.ipinfo = args[0] + ':9527'
+            self.ipinfo = args[0] + ':7162'
+            self.clickrow = ""
+            self.clickcolumn = ""
+            self.version= versionNumber
+            # print(self.ipinfo)
+            self.findServerWidget.close()
+            self.loginWidget.ipinfo = self.ipinfo
+            self.loginWidget.login_signal.connect(self.displayMain)
+            self.loginWidget.login_user.connect(self.setUser)
+            checksts="ok"
+            ip = "http://" + str(self.ipinfo) + "/static/remoteCheck/"+self.version
+            res=requests.get(url=ip, timeout=180).json()
+            if res["返回值"] != "ok":
+                checksts = res["返回值"]
+            if checksts == "ok":
+                if self.loginSts:
+                    self.initDisplay()
+                    self.show()
+                else:
+                    self.loginWidget.show()
+            else:
+                QMessageBox.warning(self, "提示", "有新版更新!请前往NAS共享平台[机务一队/天府机务分部/31准备组无纸化办公/1航班助手]获取综合平台最新版本【最新版版本号:%s】!!"%checksts)
+                self.close()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def remotelogin(self):
+        self.amrologin = AmroLoginWidget.amroLoginWidget()
+        self.amrologin.ipinfo = self.ipinfo
+        self.amrologin.show()
+
+    def remoteCookielogin(self):
+        self.amrologin = AmroLoginWidget2.amroLoginWidget2()
+        self.amrologin.ipinfo = self.ipinfo
+        self.amrologin.show()
+
+    def setIpPhone(self):
+        try:
+            res=""
+            if os.path.exists("ipPhoneIp.code") is True:
+                read_path = os.getcwd() + "\\ipPhoneIp.code"
+                with open(read_path, "r", encoding="utf-8") as f2:
+                    rember_2 = f2.read()
+                try:
+                    ip = "http://" + str(self.ipinfo) + "/static/setIpPhone/%s" % rember_2
+                    res=requests.get(url=ip, timeout=180).json()["返回值"]
+                except Exception as e:
+                    app_logger.log_error(e)
+                    QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员!")
+                if res =="ok":
+                    QMessageBox.warning(self, "提示", "服务器IP电话配置成功,请测试后启用自动拨号!")
+                else:
+                    QMessageBox.warning(self, "警告", "服务器IP电话配置失败,建议重启自动拨号电话后再次配置!")
+            else:
+                QMessageBox.warning(self, "警告", "程序下未找到指定配置文件!")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def setLocalIpPhone(self):
+        try:
+            self.localipset = Localipset.localipset()
+            self.localipset.localipset_signal.connect(self.setLocalIpPhoneip)
+            self.localipset.localip = self.localip
+            self.localipset.start()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def setLocalIpPhoneip(self, *args):
+        try:
+            self.localip = args[0]
+            self.QThreadSortNow("setlocalip")
+            self.localipset.close()
+            # print(self.localip)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def checkCalllistupdate(self):
+        try:
+            self.checkCalllist.ipinfo = self.ipinfo
+            self.checkCalllist.selectedtime = self.selectedtime
+            self.checkCalllist.start()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def checkCalllistclose(self, *args):
+        try:
+            reply = args[0]
+            # print(reply)
+            if reply == "StandardButton.Yes":
+                self.checkCalllist.hide()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def showcheckLogs(self):
+        try:
+            self.checkLogs = CheckLogs.checkLogs()
+            self.checkLogs.ipinfo = self.ipinfo
+            self.checkLogs.start()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def showWorkloadinfos(self):
+        try:
+            self.Workloadinfos = workloadinfos.Workloadinfos()
+            self.Workloadinfos.ipinfo = self.ipinfo
+            self.Workloadinfos.user = self.user
+            self.Workloadinfos.selectedbc =self.selectedbc
+            self.Workloadinfos.selectedtime=self.selectedtime
+            self.Workloadinfos.start()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def initDisplay(self):
+        try:
+            self.oldjsondata = None
+            self.cookie = None
+            self.fl = None
+            self.Auth=9999
+            self.tts = QTextToSpeech()
+            self.tts.setEngine('sapi')
+
+            nowDay = datetime.datetime.now()
+            nowDayStr = nowDay.strftime("%Y%m%d")
+            self.dateEdit.setDateTime(nowDay)
+            self.selectedtime = self.dateEdit.date().toString('yyyyMMdd')
+
+            # self.setipinfo()
+            self.initFlightDatabase()
+            # self.radioButtonDay.
+
+            phoneLabel = ["序号", "姓名", "部门", "电话","name"]
+            self.tableWidget_3.setColumnCount(len(phoneLabel))
+            self.tableWidget_3.verticalHeader().setVisible(False)
+            self.tableWidget_3.setHorizontalHeaderLabels(phoneLabel)
+            self.lineEdit_phonenum.textChanged.connect(self.changeonPhone)
+            self.tableWidget_3.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
+            self.tableWidget_3.customContextMenuRequested.connect(self.generateMenu3)
+
+            peopleLabel = ["序号", "姓名", "角色", "授权"]
+            self.tableWidgetPerson.setColumnCount(len(peopleLabel))
+            self.tableWidgetPerson.verticalHeader().setVisible(False)
+            self.tableWidgetPerson.setHorizontalHeaderLabels(peopleLabel)
+            self.tableWidgetPerson.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
+            self.tableWidgetPerson.customContextMenuRequested.connect(self.generateMenu2)
+
+            self.pushButton.clicked.connect(self.selectedtime_bc)
+            self.radioButtonDay.toggled.connect(self.selected_bc_A)
+            self.radioButtonNight.toggled.connect(self.selected_bc_B)
+            judge_bc = self.severpost_nomeassge("judge_bc", "", "", "", "")["bc"]
+            if judge_bc == "A":
+                self.radioButtonDay.setChecked(True)
+            elif judge_bc == "B":
+                self.radioButtonNight.setChecked(True)
+
+            self.AddPG = addPGWidget.AddPGWidget()
+            self.AddPG_signal.connect(self.AddPG.getname)
+            self.pushButtonAddPG.clicked.connect(self.AddPG_widget)
+
+            self.displayMode = "A"
+            self.displayLabel = headerlabel0
+
+            # self.lineEdit_phonenum.setText("")
+            self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+            self.tableWidgetFlight.cellDoubleClicked.connect(self.itemclick2)
+            self.tableWidgetFlight.cellClicked.connect(self.itemclick)
+
+            # 允许单机右键响应
+            self.tableWidgetFlight.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
+            # 构建右键的点击事件
+            self.tableWidgetFlight.customContextMenuRequested.connect(self.generateMenu)
+
+            loglabel = ["序号", "待办信息", "操作", "编号", "航班编号", "提示内容"]
+            self.tableWidget.setColumnCount(len(loglabel))
+            self.tableWidget.verticalHeader().setVisible(False)
+            self.tableWidget.setHorizontalHeaderLabels(loglabel)
+
+
+            self.tableWidgetLOG.setColumnCount(2)
+            self.tableWidgetLOG.verticalHeader().setVisible(False)
+            self.tableWidgetLOG.setHorizontalHeaderLabels(["序号", '日志信息'])
+
+            self.checkBox.stateChanged.connect(self.displayChange)
+            self.checkBox.setChecked(True)
+
+            self.checkBox_2.stateChanged.connect(self.displaySelect2)
+            self.checkBox_2.setChecked(True)
+
+            self.checkBox_3.stateChanged.connect(self.displaySelect3)
+            self.checkBox_3.setChecked(False)
+
+            self.severpost_nomeassge("createWorkloadtablesFromPg", "/%s" % self.selectedtime, "", "", "")
+
+            self.pushbutton_searchflight.clicked.connect(self.FLIGHTonChangeman)
+            self.pushButton_searchpeople.clicked.connect(self.searchpeople)
+            self.pushButton_5.clicked.connect(self.disearchpeople)
+            self.pushButton_2.clicked.connect(self.call)
+            self.pushButton_3.clicked.connect(self.calldown)
+            self.pushButton_4.clicked.connect(self.relogin)
+            self.pushButton_searchchange.clicked.connect(self.changeonChange)
+            self.pushButton_searchlog.clicked.connect(self.logonChange)
+
+            self.lineEdit_flight.textEdited[str].connect(lambda: self.changebackground())
+            self.lineEdit_people.textEdited[str].connect(lambda: self.changebackground())
+            self.lineEdit_change.textEdited[str].connect(lambda: self.changebackground())
+            self.lineEdit_log.textEdited[str].connect(lambda: self.changebackground())
+
+            self.lineEdit_flight.textChanged.connect(self.FLIGHTonChange)
+            self.lineEdit_flight.returnPressed.connect(self.on_enter_pressed)
+            self.lineEdit_log.textChanged.connect(self.logonChange)
+            self.lineEdit_people.textChanged.connect(self.peolpleonChange)
+            self.lineEdit_change.textChanged.connect(self.changeonChange)
+
+            self.serchTimer = QTimer()
+            self.serchTimer.start(3 * 1000)
+            self.serchTimer.timeout.connect(self.QThreadSortTimer)
+            self.updatecheck()
+            self.taskAtuoCheck("1")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def searchpeople(self):
+        try:
+            self.searchpeoplelist = Searchpeople_get.searchpeople_get()
+            self.searchpeoplelist.searchpeoplelist_signal.connect(self.searchpeople_get)
+            self.searchpeoplelist.ipinfo = self.ipinfo
+            self.searchpeoplelist.selectedtime = self.selectedtime
+            self.searchpeoplelist.selectedbc = self.selectedbc
+            self.searchpeoplelist.Allpeoplelist = self.sortdiplaylist
+            # self.searchpeoplelist.show()
+            self.searchpeoplelist.start()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def searchpeople_get(self, *args):
+        try:
+            # print(args)
+            self.searchpeoplestr = args[0]
+            self.QThreadSortNow("people")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def disearchpeople(self):
+        try:
+            self.searchpeoplestr = []
+            self.QThreadSortNow("people")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def call(self):
+        try:
+            if self.localtoken != None and self.localip != None:
+                callnum = self.lineEdit_phonenum.text()
+                try:
+                    data = {"PHB_AutoDialNumber": callnum,
+                            "ReturnPage": "/contacts.htm",
+                            "AutoDialSubmit": "submit",
+                            "PHB_AutoDialLine": "1"
+                            }
+                    header = {
+                        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+                        "Connection": "keep-alive",
+                        "Cookie": self.localtoken
+                    }
+                    requests.post(url="http://%s/contacts.htm" % self.localip, data=data, headers=header)
+                except Exception as e:
+                    app_logger.log_error(e)
+                    QMessageBox.warning(self, "提示", "IP电话连接失败,请重新配置或再登陆!")
+
+            else:
+                QMessageBox.warning(self, "提示", "未配置本地IP电话,请先配置!")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def calldown(self):
+        try:
+            if self.localtoken != None and self.localip != None:
+                try:
+                    data1 = {"HangupSubmit": "submit"}
+                    header1 = {
+                        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+                        "Connection": "keep-alive",
+                        "Cookie": self.localtoken,
+                    }
+                    requests.post(url="http://%s/contacts.htm" % self.localip, data=data1, headers=header1)
+                except Exception as e:
+                    app_logger.log_error(e)
+                    QMessageBox.warning(self, "提示", "IP电话连接失败,请重新配置或再登陆!")
+            else:
+                QMessageBox.warning(self, "提示", "未配置本地IP电话,请先配置!")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def relogin(self):
+        try:
+            if self.localip != None:
+                self.QThreadSortNow("setlocalip")
+            else:
+                QMessageBox.warning(self, "提示", "未配置本地IP电话,请先配置!")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def changebackground(self):
+        try:
+            FLIGHTonChange_text = self.lineEdit_flight.text()
+            peolpleonChange_text = self.lineEdit_people.text()
+            changeonChange_text = self.lineEdit_change.text()
+            logonChange_text = self.lineEdit_log.text()
+            if FLIGHTonChange_text != "":
+                self.lineEdit_flight.setStyleSheet("background-color:yellow;color:red;font-weight:bold")
+            else:
+                self.lineEdit_flight.setStyleSheet("background-color:white")
+            if peolpleonChange_text != "":
+                self.lineEdit_people.setStyleSheet("background-color:yellow;color:red;font-weight:bold")
+            else:
+                self.lineEdit_people.setStyleSheet("background-color:white")
+            if changeonChange_text != "":
+                self.lineEdit_change.setStyleSheet("background-color:yellow;color:red;font-weight:bold")
+            else:
+                self.lineEdit_change.setStyleSheet("background-color:white")
+            if logonChange_text != "":
+                self.lineEdit_log.setStyleSheet("background-color:yellow;color:red;font-weight:bold")
+            else:
+                self.lineEdit_log.setStyleSheet("background-color:white")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def changeonPhone(self):
+        try:
+            self.changeonPhone_text = self.lineEdit_phonenum.text()
+            self.QThreadSortNow("phone")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def FLIGHTonChange(self):
+        try:
+            if self.lineEdit_flight.text() == "":
+                self.FLIGHTonChange_text = self.lineEdit_flight.text()
+                self.QThreadSortNow("search")
+        except Exception as e:
+            app_logger.log_error(e)
+    def on_enter_pressed(self):
+
+        try:
+            self.FLIGHTonChange_text = self.lineEdit_flight.text()
+            # print(self.FLIGHTonChange_text)
+            self.QThreadSortNow("search")
+        except Exception as e:
+            app_logger.log_error(e)
+    def FLIGHTonChangeman(self):
+        try:
+            now=datetime.datetime.now()- datetime.timedelta(seconds=5)
+            if now > self.timelock:
+                #print("点击")
+                self.timelock=now + datetime.timedelta(seconds=5)
+                self.FLIGHTonChange_text = self.lineEdit_flight.text()
+                # print(self.FLIGHTonChange_text)
+                #self.QThreadSortNow("ALL")
+                self.QThreadSortNow("main")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def peolpleonChange(self):
+        try:
+            self.peolpleonChange_text = self.lineEdit_people.text()
+            self.QThreadSortNow("people")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def changeonChange(self):
+        try:
+            self.changeonChange_text = self.lineEdit_change.text()
+            self.QThreadSortNow("change")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def logonChange(self):
+        try:
+            self.logonChange_text = self.lineEdit_log.text()
+            self.QThreadSortNow("log")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def taskAtuoCheck(self, time):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/taskAtuoCheck/%s" % time
+            requests.get(url=ip, timeout=30).json()
+            # print("准备组任务自动更新") #客户端连接监测一次,12H监测一次
+            # logging.info("准备组任务自动更新")
+        except Exception as e:
+            app_logger.log_error(e)
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+
+    def updatecheck(self):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/updatecheck"
+            res = requests.get(url=ip, timeout=30).json()
+            if res["返回值"] == "1":
+                self.label_11.setText("正 常")
+                self.label_11.setStyleSheet(
+                    "background-color:green;color:white;border-radius:5px;padding:2px;font-weight:bold")
+                if self.severupdatests != "1":
+                    self.severupdatests = "1"
+                    try:
+                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "服务器状态变更为正常/" + "%s/" % str("系统上报") + "%s" % str(datetime.datetime.now())
+                        requests.get(url=ip, timeout=30).json()
+                    except Exception as e:
+                        app_logger.log_error(e)
+                        QMessageBox.warning(self,"日志功能失效", "操作日志功能失效请联系管理员!")
+
+            elif res["返回值"] == "0":
+                self.label_11.setText("未更新")
+                self.label_11.setStyleSheet("background-color:yellow;red:white;border-radius:5px;padding:2px;font-weight:bold")
+                if self.severupdatests != "0":
+                    self.severupdatests = "0"
+                    try:
+                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "服务器状态变更为未更新,航班数据暂停刷新/" + "%s/" % str("系统上报") + "%s" % str(datetime.datetime.now())
+                        requests.get(url=ip, timeout=30).json()
+                    except Exception as e:
+                        app_logger.log_error(e)
+                        QMessageBox.warning(self,"日志功能失效", "操作日志功能失效请联系管理员!")
+                    QMessageBox.warning(self, "警告", "服务器状态变更为未更新,航班数据暂停刷新,请检查服务器端AMRO登录情况或联系管理员!")
+        except Exception as e:
+            app_logger.log_error(e)
+            self.label_11.setText("已断开")
+            self.label_11.setStyleSheet("background-color:red;color:white;border-radius:5px;padding:2px;font-weight:bold")
+            if self.severupdatests != "-":
+                self.severupdatests = "-"
+                try:
+                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "服务器状态变更为断开,航班数据暂停刷新/" + "%s/" % str("系统上报") + "%s" % str(datetime.datetime.now())
+                    requests.get(url=ip, timeout=30).json()
+                except Exception as e:
+                    app_logger.log_error(e)
+                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                self.restartServer(self.ipinfo.split(':')[0],9935)
+
+    def initFlightDatabase(self):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/initFlightDatabase/" + str(self.selectedtime)
+            requests.get(url=ip, timeout=30).json()
+        except Exception as e:
+            app_logger.log_error(e)
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+
+    def severpost_nomeassge(self, postname, postdata, postdata2, postdata3, postdata4):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2) + str(postdata3) + str(postdata4)
+            res = requests.get(url=ip, timeout=30).json()
+            return res
+        except Exception as e:
+            app_logger.log_error(e)
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+
+    def severpostData_nomeassge(self, postname, data: dict):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname)
+            data = json.dumps(data)
+            res = requests.post(url=ip, data=data, timeout=120).json()
+            return res
+        except Exception as e:
+            app_logger.log_error(e)
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+
+    def AddPG_widget(self):
+        if int(self.authority) != 3:
+            try:
+                self.AddPG.show()
+                self.AddPG_signal.emit(self.user, self.selectedtime, self.ipinfo)
+            except Exception as e:
+                app_logger.log_error(e)
+        else:
+            self.show_message2("提示", "权限不够,请联系管理员!")
+
+    def selected_bc_A(self):
+        try:
+            bc = self.sender()
+            if bc.isChecked():
+                self.selectedbc = "A"
+                # print("白班")
+                self.severpost_nomeassge("createWorkloadtablesFromPg", "/%s" % self.selectedtime, "", "", "")
+                if self.loginSts == True:
+                    self.QThreadSortNow("people")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def selected_bc_B(self):
+        try:
+            bc = self.sender()
+            if bc.isChecked():
+                self.selectedbc = "B"
+                # print("夜班")
+                self.severpost_nomeassge("createWorkloadtablesFromPg", "/%s" % self.selectedtime, "", "", "")
+                if self.loginSts == True:
+                    self.QThreadSortNow("people")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def displaySelect2(self):
+        try:
+            displaySelect = self.sender()
+            if displaySelect.isChecked():
+                self.displaySelectstr2 = "1"
+                if self.loginSts == True:
+                    if self.displaySelectstr3 == "1":
+                        self.displaySelect_mode = "3"
+                    else:
+                        self.displaySelect_mode = "1"
+                    #self.QThreadSortNow("main")
+                    self.QThreadSortNow("search")
+
+            else:
+                self.displaySelectstr2 = "0"
+                self.displaySelect_mode = "0"
+                if self.loginSts == True:
+                    if self.displaySelectstr3 == "1":
+                        self.checkBox_3.setChecked(False)
+                    else:
+                        # self.QThreadSortNow("main")
+                        self.QThreadSortNow("search")
+
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def displaySelect3(self):
+        try:
+            displaySelect = self.sender()
+            if displaySelect.isChecked():
+                self.displaySelectstr3 = "1"
+                self.displaySelect_mode = "3"
+                if self.loginSts == True:
+                    if self.displaySelectstr2 == "0":
+                        self.checkBox_2.setChecked(True)
+                    else:
+                        # self.QThreadSortNow("main")
+                        self.QThreadSortNow("search")
+            else:
+                self.displaySelectstr3 = "0"
+                if self.loginSts == True:
+                    if self.displaySelectstr2 == "0":
+                        self.displaySelect_mode = "0"
+                    else:
+                        self.displaySelect_mode = "1"
+                    # self.QThreadSortNow("main")
+                    self.QThreadSortNow("search")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def displayChange(self):
+        try:
+            bc = self.sender()
+            if bc.isChecked():
+                if self.loginSts == True:
+                    self.displayMode = "A"
+                    self.QThreadSortNow("main")
+                # print("A模式")
+            else:
+                if self.loginSts == True:
+                    self.displayMode = "B"
+                    self.QThreadSortNow("main")
+                # print("B模式")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def selectedtime_bc(self):
+        try:
+            self.selectedtime = self.dateEdit.date().toString('yyyyMMdd')
+            judgedate = (datetime.date.today() + datetime.timedelta(days=1)).strftime("%Y%m%d")
+            if self.selectedtime == judgedate:
+                QMessageBox.warning(self, "重要提示","明日航班20:30后提供查询功能!由于第二日航班波动较大,22:00前仅提供查询功能,22:00以后提供第二日航班的航班变更以及节点监控功能!")
+            self.initFlightDatabase()
+            ip = "http://" + str(self.ipinfo) + "/map/" + str(self.selectedtime)
+            self.QThreadSortNow("main")
+            self.QThreadSortNow("people")
+            # print(self.selectedtime)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def show_info(self, title, text):
+        try:
+            reply = QMessageBox.question(self, title, text,QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.Cancel,QMessageBox.StandardButton.Cancel)
+            if reply == QMessageBox.StandardButton.Yes:
+                return 1
+            else:
+                return 0
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def displayMain(self, *args):
+        try:
+            if args[0]:
+                self.initDisplay()
+                self.loginSts = True
+                self.loginWidget.close()
+                self.show()
+                self.QThreadSortNow("main")
+                self.QThreadSortNow("change")
+                self.QThreadSortNow("people")
+                self.QThreadSortNow("log")
+                self.initlocalipback()
+
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def setUser(self, args):
+        try:
+            self.user = args[1]
+            self.authority = args[3]
+            self.label_username.setText(self.user)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def AddFlight(self):
+        try:
+            self.addFlight = AddFlightWidget.addFlightWidget()
+            self.addFlight.ipinfo = self.ipinfo
+            self.addFlight.user = self.user
+            self.addFlight.show()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def HandoverFlight(self):
+        try:
+            self.handoverFlight = HandoverFlightWidget.handoverFlightWidget()
+            self.handoverFlight.ipinfo = self.ipinfo
+            self.handoverFlight.user = self.user
+            self.handoverFlight.Allflight = self.sorttableWidgetDispalydataALL
+            self.handoverFlight.selectedtime=self.selectedtime
+            self.handoverFlight.handoverFlight_signal.connect(self.handoverFlight_update)
+            self.handoverFlight.show()
+            self.handoverFlight.start()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def handoverFlight_update(self, *args):
+        try:
+            # print(args)
+            self.QThreadSortNow("main")
+        except Exception as e:
+            app_logger.log_error(e)
+    def showAdduser(self):
+        try:
+            self.addUser = AddUserWidget.addUserWidget()
+            self.addUser.ipinfo = self.ipinfo
+            self.addUser.user = self.user
+            self.addUser.authority=self.authority
+            self.addUser.show()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def showChangePassword(self):
+        try:
+            self.changePassword = ChangePassword.changePassword()
+            self.changePassword.ipinfo = self.ipinfo
+            self.changePassword.user = self.user
+            self.changePassword.show()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def showchangeAuth(self):
+        try:
+            self.changeAuth = ChangeAuth.changeAuth()
+            self.changeAuth.ipinfo = self.ipinfo
+            self.changeAuth.user = self.user
+            self.changeAuth.start()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    '''
+    def showchangeFlight(self):
+        try:
+            self.changeFlight = changeFlight()
+            self.changeFlight.ipinfo = self.ipinfo
+            self.changeFlight.user = self.user
+            self.changeFlight.start()
+        except Exception as e:
+            app_logger.log_error(e)
+    '''
+    def openFile(self):
+        try:
+            fileName, _ = QFileDialog.getOpenFileName(self, '打开文件', '/')
+            # print(fileName)
+            data = {"fileName": fileName}
+            res = self.severpostData_nomeassge("get_dic", data)["返回值"]
+            if res != "ok":
+                self.show_message2("警告", "文件错误")
+            elif res == "ok":
+                self.show_message2("提示", "人员信息添加成功!")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def saveCase(self):
+        try:
+            fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/停场航班导入模板.xlsx", "xlsx(*.xlsx)")
+            if fileName:
+                wb = Workbook()
+                wb.create_sheet(title="停场航班导入模板", index=0)
+                ws = wb.active
+                ws.title = '航班数据'
+                ws = wb['航班数据']
+                for row in range(1, 50):
+                    for cloumn in range(1, 7):
+                        ws.cell(row, cloumn).number_format = '@'
+                ws.cell(1, 1).value = "序号"
+                ws.cell(1, 2).value = "日期"
+                ws.cell(1, 3).value = "机号"
+                ws.cell(1, 4).value = "机位"
+                ws.cell(1, 5).value = "机型"
+                ws.cell(1, 6).value = "发动机"
+                ws.cell(1, 7).value = "录入数据请从第三行开始录入,切勿覆盖第一二行数据!!!"
+                ws.cell(2, 1).value = "1"
+                ws.cell(2, 2).value = "2024/03/21"
+                ws.cell(2, 3).value = "1663"
+                ws.cell(2, 4).value = "722"
+                ws.cell(2, 5).value = "A321"
+                ws.cell(2, 6).value = "V2500"
+                ws.cell(2, 7).value = "录入数据请从第三行开始录入,切勿覆盖第一二行数据!!!"
+                wb.save(fileName)
+                self.show_message2("提示", "导出成功!文件已保存至%s" % fileName)
+        except Exception as e:
+            app_logger.log_error(e)
+            self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!")
+
+    def saveRisktable(self):
+        try:
+            fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/风险数据库.xlsx","xlsx(*.xlsx)")
+            if fileName:
+                ip = "http://" + str(self.ipinfo) + "/static/saveRisktable"
+                res = requests.get(url=ip, timeout=30).json()["返回值"]
+                wb = Workbook()
+                wb.create_sheet(title="风险数据库.xlsx", index=0)
+                ws = wb.active
+                ws.title = '风险数据库'
+                ws = wb['风险数据库']
+                for row in range(1, len(res)+1):
+                    for cloumn in range(1, 8):
+                        ws.cell(row, cloumn).number_format = '@'
+                ws.cell(1, 1).value = "风险编号"
+                ws.cell(1, 2).value = "状态"
+                ws.cell(1, 3).value = "提示内容"
+                ws.cell(1, 4).value = "机位"
+                ws.cell(1, 5).value = "进出港触发"
+                ws.cell(1, 6).value = "机号"
+                ws.cell(1, 7).value = "触发条件4"
+                ws.cell(1, 8).value = "触发条件5"
+                if len(res) != 0:
+                    ii=1
+                    for i in res:
+                        for j in range(0, 8):
+                            #print(ii,j)
+                            ws.cell(int(ii) + 1, j+1).value = i[j]
+                        ii+=1
+                wb.save(fileName)
+        except Exception as e:
+            app_logger.log_error(e)
+    def saveAllflight(self):
+        try:
+            index = {"序号": "0", "类型": "9", "航班号": "4", "机型": "2", "发动机": "3", "机号": "1", "计达": "5", "预达": "6","计飞": "7", "机位": "8"}
+            index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位"}
+            fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/%s全天航班导出(未含保障结束).xlsx" % self.selectedtime,"xlsx(*.xlsx)")
+            # print(fileName)
+            if fileName:
+                ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly22/" + "%s" % self.selectedtime
+                res = requests.get(url=ip, timeout=30).json()
+                # print(res)
+                wb = Workbook()
+                wb.create_sheet(title="%s全天航班导出(未含保障结束).xlsx" % self.selectedtime, index=0)
+                ws = wb.active
+                ws.title = '航班数据'
+                ws = wb['航班数据']
+                for row in range(1, 400):
+                    for cloumn in range(1, 10):
+                        ws.cell(row, cloumn).number_format = '@'
+                ws.cell(1, 1).value = "序号"
+                ws.cell(1, 2).value = "类型"
+                ws.cell(1, 3).value = "航班号"
+                ws.cell(1, 4).value = "机型"
+                ws.cell(1, 5).value = "发动机"
+                ws.cell(1, 6).value = "机号"
+                ws.cell(1, 7).value = "计达"
+                ws.cell(1, 8).value = "预达"
+                ws.cell(1, 9).value = "计飞"
+                ws.cell(1, 10).value = "机位"
+                if len(res) != 0:
+                    for i in res.keys():
+                        if res[i]["109"] != "4":
+                            for j in range(1, 11):
+                                if j == 2 and "3U" in res[i]["4"] and "CSC" in res[i]["4"]:
+                                    ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                                elif j == 7 or j == 8:
+                                    text = str(res[i][index[index2[j]]]).replace(":","") if str(res[i][index[index2[j]]]) != "" else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                elif j == 9:
+                                    text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":","") if "]" in str(res[i][index[index2[j]]]) else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                else:
+                                    ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                wb.save(fileName)
+            self.show_message2("提示", "%s全天航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+        except Exception as e:
+            app_logger.log_error(e)
+            self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+
+    def saveAllflight2(self):
+        try:
+            time2 = datetime.datetime.strptime(self.selectedtime, "%Y%m%d")
+            time1 = str((time2 - datetime.timedelta(days=1)).strftime("%Y%m%d"))
+            index = {"序号": "1", "类型": "19", "航班号": "9", "机型": "5", "发动机": "7", "机号": "3", "计达": "11", "预达": "13","计飞": "15", "机位": "8","放行":"21","工1":"23","工2":"25","工3":"27","工4":"29","备注":"61","班组长":"31"}
+            index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位",11: "放行",12: "工1",13: "工2",14: "工3",15: "工4",16: "备注",17: "班组长"}
+            fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/%s航班安排备份导出.xlsx" %(str(time1)+"-"+str(self.selectedtime)[-2:]),"xlsx(*.xlsx)")
+            # print(fileName)
+            wb = Workbook()
+            if fileName:
+                for selectedtime in [self.selectedtime,time1]:
+                    ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly11/" + "%s" %selectedtime
+                    res = requests.get(url=ip, timeout=30).json()
+                    # print(res)
+                    wb.create_sheet(title="%s" % selectedtime, index=0)
+                    ws = wb.active
+                    ws.title = "%s" % selectedtime
+                    ws = wb["%s" % selectedtime]
+                    for row in range(1, 400):
+                        for cloumn in range(1, 18):
+                            ws.cell(row, cloumn).number_format = '@'
+                    ws.cell(1, 1).value = "序号"
+                    ws.cell(1, 2).value = "类型"
+                    ws.cell(1, 3).value = "航班号"
+                    ws.cell(1, 4).value = "机型"
+                    ws.cell(1, 5).value = "发动机"
+                    ws.cell(1, 6).value = "机号"
+                    ws.cell(1, 7).value = "计达"
+                    ws.cell(1, 8).value = "预达"
+                    ws.cell(1, 9).value = "计飞"
+                    ws.cell(1, 10).value = "机位"
+                    ws.cell(1, 11).value = "放行"
+                    ws.cell(1, 12).value = "工1"
+                    ws.cell(1, 13).value = "工2"
+                    ws.cell(1, 14).value = "工3"
+                    ws.cell(1, 15).value = "工4"
+                    ws.cell(1, 16).value = "备注"
+                    ws.cell(1, 17).value = "班组长"
+
+                    if len(res) != 0:
+                        for i in res.keys():
+                            for j in range(1, 18):
+                                if j == 2:
+                                    if "3U" not in res[i]["4"] and "CSC" not in res[i]["4"]:
+                                        ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                                    else:
+                                        ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                                elif j == 7 or j == 8:
+                                    text = str(res[i][index[index2[j]]]).replace(":","") if str(res[i][index[index2[j]]]) != "" else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                elif j == 9:
+                                    text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":","") if "]" in str(res[i][index[index2[j]]]) else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                else:
+                                    ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+            wb.save(fileName)
+            self.show_message2("提示", "%s全天航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+        except Exception as e:
+            app_logger.log_error(e)
+            self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+
+    def saveAllflight3(self):
+        try:
+            time2 = datetime.datetime.strptime(self.selectedtime, "%Y%m%d")
+            time1 = str((time2 - datetime.timedelta(days=1)).strftime("%Y%m%d"))
+            index = {"序号": "0", "类型": "9", "航班号": "4", "机型": "2", "发动机": "3", "机号": "1", "计达": "5", "预达": "6","计飞": "7", "机位": "8","工作单":"10","飞单":"11","客舱单":"12","临工单":"13","AMRO记录":"14","备注":"32","电签":"15"}
+            index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位",11: "工作单",12: "飞单",13: "客舱单",14: "临工单",15: "AMRO记录",16: "备注",17: "电签"}
+            fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/%s维修记录备份导出.xlsx" %(str(time1)+"-"+str(self.selectedtime)[-2:]),"xlsx(*.xlsx)")
+            # print(fileName)
+            wb = Workbook()
+            if fileName:
+                for selectedtime in [self.selectedtime,time1]:
+                    ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly22/" + "%s" %selectedtime
+                    res = requests.get(url=ip, timeout=30).json()
+                    # print(res)
+                    wb.create_sheet(title="%s" % selectedtime, index=0)
+                    ws = wb.active
+                    ws.title = "%s" % selectedtime
+                    ws = wb["%s" % selectedtime]
+                    for row in range(1, 400):
+                        for cloumn in range(1, 18):
+                            ws.cell(row, cloumn).number_format = '@'
+                    ws.cell(1, 1).value = "序号"
+                    ws.cell(1, 2).value = "类型"
+                    ws.cell(1, 3).value = "航班号"
+                    ws.cell(1, 4).value = "机型"
+                    ws.cell(1, 5).value = "发动机"
+                    ws.cell(1, 6).value = "机号"
+                    ws.cell(1, 7).value = "计达"
+                    ws.cell(1, 8).value = "预达"
+                    ws.cell(1, 9).value = "计飞"
+                    ws.cell(1, 10).value = "机位"
+                    ws.cell(1, 11).value = "工作单"
+                    ws.cell(1, 12).value = "飞单"
+                    ws.cell(1, 13).value = "客舱单"
+                    ws.cell(1, 14).value = "临工单"
+                    ws.cell(1, 15).value = "AMRO记录"
+                    ws.cell(1, 16).value = "备注"
+                    ws.cell(1, 17).value = "电签"
+
+                    if len(res) != 0:
+                        for i in res.keys():
+                            for j in range(1, 18):
+                                if j == 2:
+                                    if "3U" not in res[i]["4"] and "CSC" not in res[i]["4"]:
+                                        ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                                    else:
+                                        ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                                elif j == 6:
+                                    text = "B-"+str(res[i][index[index2[j]]])
+                                    ws.cell(int(i) + 2, j).value = text
+                                elif j == 7 or j == 8:
+                                    text = str(res[i][index[index2[j]]]).replace(":","") if str(res[i][index[index2[j]]]) != "" else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                elif j == 9:
+                                    text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":","") if "]" in str(res[i][index[index2[j]]]) else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                else:
+                                    ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+            wb.save(fileName)
+            self.show_message2("提示", "%s全天航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+        except Exception as e:
+            app_logger.log_error(e)
+            self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+    def saveDealflight(self):
+
+        try:
+            index = {"序号": "0", "类型": "9", "航班号": "4", "机型": "2", "发动机": "3", "机号": "1", "计达": "5", "预达": "6","计飞": "7", "机位": "8"}
+            index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位"}
+            fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/%s交班航班导出.xlsx" % self.selectedtime,"xlsx(*.xlsx)")
+            # print(fileName)
+            if fileName:
+                ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly22/" + "%s" % self.selectedtime
+                res = requests.get(url=ip, timeout=30).json()
+                # print(res)
+                wb = Workbook()
+                wb.create_sheet(title="%s交班航班导出.xlsx" % self.selectedtime, index=0)
+                ws = wb.active
+                ws.title = '航班数据'
+                ws = wb['航班数据']
+                for row in range(1, 400):
+                    for cloumn in range(1, 10):
+                        ws.cell(row, cloumn).number_format = '@'
+                ws.cell(1, 1).value = "序号"
+                ws.cell(1, 2).value = "类型"
+                ws.cell(1, 3).value = "航班号"
+                ws.cell(1, 4).value = "机型"
+                ws.cell(1, 5).value = "发动机"
+                ws.cell(1, 6).value = "机号"
+                ws.cell(1, 7).value = "计达"
+                ws.cell(1, 8).value = "预达"
+                ws.cell(1, 9).value = "计飞"
+                ws.cell(1, 10).value = "机位"
+                if len(res) != 0:
+                    for i in res.keys():
+                        if res[i]["109"] == "1" or res[i]["109"] == "3":
+                            for j in range(1, 11):
+                                if j == 2:
+                                    if "3U" not in res[i]["4"] and "CSC" not in res[i]["4"]:
+                                        ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                                    else:
+                                        ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                                elif j == 7 or j == 8:
+                                    text = str(res[i][index[index2[j]]]).replace(":","") if str(res[i][index[index2[j]]]) != "" else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                elif j == 9:
+                                    text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":","") if "]" in str(res[i][index[index2[j]]]) else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                else:
+                                    ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                wb.save(fileName)
+            self.show_message2("提示", "%s交班航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+        except Exception as e:
+            app_logger.log_error(e)
+            self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+################################################################################################################################################
+    def updateStopFlight(self):
+        try:
+            fileName, _ = QFileDialog.getOpenFileName(self, '打开文件', '/')
+            # print(fileName)
+            data = {"fileName": fileName}
+            res = self.severpostData_nomeassge("updateStopFlight", data)["返回值"]
+            if res != "ok":
+                self.show_message2("警告", "停场航班添加失败!")
+            elif res == "ok":
+                self.show_message2("提示", "停场航班添加成功!")
+                self.QThreadSortNow("main")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def updateTaskAuto(self):
+        try:
+            if int(self.authority) <= 1:
+                fileName, _ = QFileDialog.getOpenFileName(self, '打开文件', '/')
+                # print(fileName)
+                data = {"fileName": fileName}
+                res = self.severpostData_nomeassge("updateTaskAuto", data)["返回值"]
+                if res != "ok":
+                    self.show_message2("警告", "文件错误")
+                elif res == "ok":
+                    self.taskAtuoCheck("3")
+                    self.show_message2("提示", "准备组任务更新成功!")
+
+            else:
+                self.show_message2("提示", "权限不够,请联系管理员!")
+        except Exception as e:
+            app_logger.log_error(e)
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+    def updateRiskdb(self):
+        try:
+            if int(self.authority) <= 1:
+                fileName, _ = QFileDialog.getOpenFileName(self, '打开文件', '/')
+                # print(fileName)
+                data = {"fileName": fileName}
+                res = self.severpostData_nomeassge("updateRiskdb", data)["返回值"]
+                if res != "ok":
+                    self.show_message2("警告", "文件错误")
+                elif res == "ok":
+                    self.show_message2("提示", "风险数据库更新成功!")
+
+            else:
+                self.show_message2("提示", "权限不够,请联系管理员!")
+        except Exception as e:
+            app_logger.log_error(e)
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+
+    def show_message2(self, type, str):
+        try:
+            QMessageBox.warning(self, "%s" % type, "%s" % str)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def QThreadSortDispalyTimer(self, name, dict, dict2, seversts, displayMode):
+        try:
+            if name == "sortTableWidgetDispaly":
+                if displayMode == "A":
+                    self.displayLabel = headerlabel0
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+
+                elif displayMode == "B":
+                    self.displayLabel = headerlabel_B
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+                self.sorttableWidgetDispalydata = {}
+                self.sorttableWidgetDispalydata = dict
+                if self.doubleclickLockUpdate == 0:
+                    self.tableWidgetDispaly()
+                # print(self.sorttableWidgetDispalydata)
+            elif name == "sortTableWidgetDispalyALL":
+                self.sorttableWidgetDispalydataALL = {}
+                self.sorttableWidgetDispalydataALL = dict
+
+            elif name == "sorttableWidgetDisplayChange":
+                self.sortlogchange = {}
+                self.sortlogchange = dict
+                self.tableWidgetDisplayChange()
+                # print(self.sortlogchange)
+            elif name == "sorttableWidgetPeopleDisplay":
+                self.sortdiplaylist = {}
+                self.sortdiplaylist = dict
+                self.peopleOnJob = [""]
+                self.peopleOnJob = dict2
+                self.tableWidgetPeopleDisplay()
+                # print(self.peopleOnJob)
+                # print(self.sortdiplaylist)
+            elif name == "sorttableWidgetLOGDispaly":
+                self.sortlog = {}
+                self.sortlog = dict
+                self.tableWidgetLOGDispaly()
+                # print(self.sortlog)
+
+            if seversts == "0":
+                self.severupdatests = "-"
+                self.label_11.setText("已断开")
+                self.label_11.setStyleSheet(
+                    "background-color:red;color:white;border-radius:5px;padding:2px;font-weight:bold")
+                self.restartServer(self.ipinfo.split(':')[0],9935)
+            elif seversts == "1" and self.severupdatests == "1":
+                self.label_11.setText("正 常")
+                self.label_11.setStyleSheet(
+                    "background-color:green;color:white;border-radius:5px;padding:2px;font-weight:bold")
+            elif seversts == "1" and self.severupdatests == "0":
+                self.label_11.setText("未更新")
+                self.label_11.setStyleSheet(
+                    "background-color:yellow;color:red;border-radius:5px;padding:2px;font-weight:bold")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def QThreadSortDispalyNow(self, name, dict, dict2, seversts, displayMode):
+        try:
+            if name == "sortTableWidgetDispaly":
+                if displayMode == "A":
+                    self.displayLabel=headerlabel0
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+
+                else:
+                    self.displayLabel = headerlabel_B
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+                self.sorttableWidgetDispalydata = {}
+                self.sorttableWidgetDispalydata = dict
+                # print(self.sorttableWidgetDispalydata)
+                if  self.doubleclickLockUpdate == 0:
+                    self.tableWidgetDispaly()
+            elif name == "SearchsortTableWidgetDispaly":
+                if displayMode == "A":
+                    self.displayLabel = headerlabel0
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+
+                elif displayMode == "B":
+                    self.displayLabel =headerlabel_B
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+                self.sorttableWidgetDispalydata = {}
+                self.sorttableWidgetDispalydata = dict
+                if self.doubleclickLockUpdate == 0:
+                    self.tableWidgetDispaly()
+                # print(self.sorttableWidgetDispalydata)
+            elif name == "sortTableWidgetDispalyALL":
+                self.sorttableWidgetDispalydataALL = {}
+                self.sorttableWidgetDispalydataALL = dict
+            elif name == "sorttableWidgetDisplayChange":
+                self.sortlogchange = {}
+                self.sortlogchange = dict
+                self.tableWidgetDisplayChange()
+                # print(self.sortlogchange)
+            elif name == "sorttableWidgetPeopleDisplay":
+                self.sortdiplaylist = {}
+                self.sortdiplaylist = dict
+                self.peopleOnJob = [""]
+                self.peopleOnJob = dict2
+                self.tableWidgetPeopleDisplay()
+                # print(self.peopleOnJob)
+                # print(self.sortdiplaylist)
+            elif name == "sorttableWidgetLOGDispaly":
+                self.sortlog = {}
+                self.sortlog = dict
+                self.tableWidgetLOGDispaly()
+                # print(self.sortlog)
+            elif name == "sorttableWidgetPHONEDispaly":
+                self.sorttableWidgetPHONEDispalydata = {}
+                self.sorttableWidgetPHONEDispalydata = dict
+                self.tableWidgetPhoneDispaly()
+            if seversts == "0":
+                self.severupdatests = "-"
+                self.label_11.setText("已断开")
+                self.label_11.setStyleSheet(
+                    "background-color:red;color:white;border-radius:5px;padding:2px;font-weight:bold")
+                self.restartServer(self.ipinfo.split(':')[0],9935)
+            elif seversts == "1" and self.severupdatests == "1":
+                self.label_11.setText("正 常")
+                self.label_11.setStyleSheet(
+                    "background-color:green;color:white;border-radius:5px;padding:2px;font-weight:bold")
+            elif seversts == "1" and self.severupdatests == "0":
+                self.label_11.setText("未更新")
+                self.label_11.setStyleSheet(
+                    "background-color:yellow;color:red;border-radius:5px;padding:2px;font-weight:bold")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def restartServer(self,serverIP,serverPort):
+        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        client.settimeout(120)
+        client.connect((serverIP, serverPort))
+        client.send("restart".encode())
+        client.close()
+        QMessageBox.warning(self, "提示", "服务器端正在尝试自动重启服务器,请等待30S后刷新查看显示状态!若仍然断开,请联系管理员!")
+
+    def initlocalipback(self):
+        try:
+            if os.path.exists("D:/flightinfo/logs/localip.code") is True:
+                read_path = "D:/flightinfo/logs/localip.code"
+                with open(read_path, "r", encoding="utf-8") as f2:
+                    rember_2 = f2.read()
+                    if ';;' in rember_2:
+                        self.localip = rember_2.split(';;')[0]
+                        self.localtoken = rember_2.split(';;')[-1]
+                        QMessageBox.warning(self, "提示", "本地网络电话获取缓存成功,可拨号尝试,如拨号失败则需重新配置!")
+        except Exception as e:
+            app_logger.log_error(e)
+    def openmaintainAuthCheck(self):
+        self.maintainAuthCheckSts=1
+        QMessageBox.warning(self, "提示", "授权检查已开启,将核对人员发动机授权情况!")
+
+    def closemaintainAuthCheck(self):
+        self.maintainAuthCheckSts=0
+        QMessageBox.warning(self, "提示", "授权检查已关闭,将无法核对人员发动机授权情况!")
+
+    def setlocalipback(self, token):
+        try:
+            self.localtoken = None
+            self.localtoken = token
+            if "auth=" in token:
+                QMessageBox.warning(self, "提示", "本地网络电话配置成功!")
+                save_path = "D:/flightinfo/logs/localip.code"
+                with open(save_path, "w", encoding="utf-8") as f1:
+                    f1.write(str(self.localip) + ";;" + str(self.localtoken))
+                self.lineEdit_phonenum.setText("")
+            else:
+                QMessageBox.warning(self, "提示", "本地网络电话配置失败,本地呼叫无法使用,请确认IP正确,可尝试重启IP电话后再试!")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def QThreadSortTimer(self):
+        try:
+            nowDay = datetime.datetime.now().strftime("%Y%m%d")
+            tomorr = (datetime.date.today() + datetime.timedelta(days=1)).strftime("%Y%m%d")
+            yester = (datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y%m%d")
+            if self.selectedtime == nowDay:
+                datestr = "2"
+            elif self.selectedtime == tomorr:
+                datestr = "3"
+            elif self.selectedtime == yester:
+                datestr = "1"
+            else:
+                datestr = "4"
+            ip = "http://"+self.ipinfo+"/static/VinCheck/"+self.vin+"/"+self.displayMode+"/%s"%datestr
+            res = requests.get(url=ip, timeout=30).json()["返回值"]
+            self.sum += 1
+            self.flightsum += 1
+            #print(self.doubleclickLockUpdate)
+            if self.loginSts == True:
+                # print("多线程刷新1")
+
+                self.FLIGHTonChange_text = self.lineEdit_flight.text()
+                self.peolpleonChange_text = self.lineEdit_people.text()
+                self.changeonChange_text = self.lineEdit_change.text()
+                self.logonChange_text = self.lineEdit_log.text()
+                if (self.doubleclickLockUpdate==0 and res =="ok" and self.flightsum % 20 == 0) or\
+                        (self.doubleclickLockUpdate==0 and datestr =="4" and self.flightsum % 20 == 0):
+                    #print(datetime.datetime.now(),"开始数据库刷新", self.vin)
+                    th1 = QThread()
+                    self.sortTableWidgetDispalyThread1 = SortdisplaySever.sortdisplaySever("sortTableWidgetDispaly", self.ipinfo,
+                                                                          self.selectedtime, self.FLIGHTonChange_text,
+                                                                          self.displayMode, "0", self.displaySelect_mode,
+                                                                          th1)
+                    self.sortTableWidgetDispalyThread1.sortupdate.connect(self.QThreadSortDispalyTimer)
+                    self.sortTableWidgetDispalyThread1.moveToThread(th1)
+                    th1.started.connect(self.sortTableWidgetDispalyThread1.run)
+                    th1.start()
+                    if datestr !="4":
+                        ip = "http://"+self.ipinfo+"/static/updateVin/" + self.displayMode + "/%s" % datestr
+                        self.vin = requests.get(url=ip, timeout=30).json()["返回值"]
+                        #print(datetime.datetime.now(),"更新刷新",self.vin)
+                elif self.doubleclickLockUpdate==0 and res !="ok":
+                    #print(datetime.datetime.now(),"开始读取刷新", self.vin)
+                    th1234 = QThread()
+                    self.sortTableWidgetDispalyThread1234 = SortdisplaySever.sortdisplaySever("sortTableWidgetDispaly", self.ipinfo,
+                                                                          self.selectedtime, self.FLIGHTonChange_text,
+                                                                          self.displayMode, "1", self.displaySelect_mode,
+                                                                          th1234)
+                    self.sortTableWidgetDispalyThread1234.sortupdate.connect(self.QThreadSortDispalyTimer)
+                    self.sortTableWidgetDispalyThread1234.moveToThread(th1234)
+                    th1234.started.connect(self.sortTableWidgetDispalyThread1234.run)
+                    th1234.start()
+                    self.flightsum = 0
+                    ip = "http://"+self.ipinfo+"/static/getVin/"+ self.displayMode + "/%s" % datestr
+                    self.vin = requests.get(url=ip, timeout=30).json()["返回值"]
+                    #print(datetime.datetime.now(),"仅仅读取",self.vin)
+                '''
+                else:
+                    th11111 = QThread()
+                    self.sortTableWidgetDispalyThread11111 = sortdisplaySever("sortTableWidgetDispalyALL", self.ipinfo,
+                                                                          self.selectedtime, self.FLIGHTonChange_text,
+                                                                          self.displayMode, "1", self.displaySelect_mode,
+                                                                          th11111)
+                    self.sortTableWidgetDispalyThread11111.sortupdate.connect(self.QThreadSortDispalyTimer)
+                    self.sortTableWidgetDispalyThread11111.moveToThread(th11111)
+                    th11111.started.connect(self.sortTableWidgetDispalyThread11111.run)
+                    th11111.start()
+                '''
+            if self.loginSts == True and self.sum % 20 == 0:
+                th2 = QThread()
+                self.sorttableWidgetDisplayChangeThread2 = SortdisplaySever.sortdisplaySever("sorttableWidgetDisplayChange", self.ipinfo,
+                                                                            self.selectedtime, self.changeonChange_text,
+                                                                            "", "", "", th2)
+                self.sorttableWidgetDisplayChangeThread2.sortupdate.connect(self.QThreadSortDispalyTimer)
+                self.sorttableWidgetDisplayChangeThread2.moveToThread(th2)
+                th2.started.connect(self.sorttableWidgetDisplayChangeThread2.run)
+                th2.start()
+
+                th3 = QThread()
+                self.sorttableWidgetPeopleDisplayThread3 = SortdisplaySever.sortdisplaySever("sorttableWidgetPeopleDisplay", self.ipinfo,
+                                                                            self.selectedtime,
+                                                                            self.peolpleonChange_text, "",
+                                                                            self.selectedbc, "", th3)
+                self.sorttableWidgetPeopleDisplayThread3.sortupdate.connect(self.QThreadSortDispalyTimer)
+                self.sorttableWidgetPeopleDisplayThread3.moveToThread(th3)
+                th3.started.connect(self.sorttableWidgetPeopleDisplayThread3.run)
+                th3.start()
+
+                th4 = QThread()
+                self.sorttableWidgetLOGDispalyThread4 = SortdisplaySever.sortdisplaySever("sorttableWidgetLOGDispaly", self.ipinfo,
+                                                                         self.selectedtime, self.logonChange_text, "",
+                                                                         "", "", th4)
+                self.sorttableWidgetLOGDispalyThread4.sortupdate.connect(self.QThreadSortDispalyTimer)
+                self.sorttableWidgetLOGDispalyThread4.moveToThread(th4)
+                th4.started.connect(self.sorttableWidgetLOGDispalyThread4.run)
+                th4.start()
+                self.updatecheck()
+            if self.loginSts == True and self.sum % 2400 == 0:
+                self.taskAtuoCheck("2")
+                self.sum=0
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def QThreadSortNow(self, name):
+        try:
+            if "main" in str(name) and self.doubleclickLockUpdate == 0:
+                # print(datetime.datetime.now())
+                th11 = QThread()
+                self.sortTableWidgetDispalyThread11 = SortdisplaySever.sortdisplaySever("sortTableWidgetDispaly", self.ipinfo,
+                                                                       self.selectedtime, self.FLIGHTonChange_text,
+                                                                       self.displayMode, "0", self.displaySelect_mode,
+                                                                       th11)
+                self.sortTableWidgetDispalyThread11.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sortTableWidgetDispalyThread11.moveToThread(th11)
+                th11.started.connect(self.sortTableWidgetDispalyThread11.run)
+                th11.start()
+                nowDay = datetime.datetime.now().strftime("%Y%m%d")
+                tomorr = (datetime.date.today() + datetime.timedelta(days=1)).strftime("%Y%m%d")
+                yester = (datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y%m%d")
+                if self.selectedtime == nowDay:
+                    datestr = "2"
+                elif self.selectedtime == tomorr:
+                    datestr = "3"
+                elif self.selectedtime == yester:
+                    datestr = "1"
+                else:
+                    datestr = "4"
+                if datestr != "4":
+                    ip = "http://" + self.ipinfo + "/static/updateVin/" + self.displayMode + "/%s" % datestr
+                    self.vin = requests.get(url=ip, timeout=30).json()["返回值"]
+                    #print(datetime.datetime.now(), "人工更新刷新", self.vin)
+            elif "ALL" in str(name) and self.doubleclickLockUpdate == 0:
+                th111111 = QThread()
+                self.sortTableWidgetDispalyThread111111 = SortdisplaySever.sortdisplaySever("sortTableWidgetDispalyALL", self.ipinfo,
+                                                                          self.selectedtime, self.FLIGHTonChange_text,
+                                                                          self.displayMode, "1", self.displaySelect_mode,
+                                                                          th111111)
+                self.sortTableWidgetDispalyThread111111.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sortTableWidgetDispalyThread111111.moveToThread(th111111)
+                th111111.started.connect(self.sortTableWidgetDispalyThread111111.run)
+                th111111.start()
+            elif "search" in str(name) and self.doubleclickLockUpdate == 0:
+                # print(datetime.datetime.now())
+                th111 = QThread()
+                self.sortTableWidgetDispalyThread111 = SortdisplaySever.sortdisplaySever("SearchsortTableWidgetDispaly", self.ipinfo,
+                                                                        self.selectedtime, self.FLIGHTonChange_text,
+                                                                        self.displayMode, self.sorttableWidgetDispalydataALL, self.displaySelect_mode,
+                                                                        th111)
+                self.sortTableWidgetDispalyThread111.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sortTableWidgetDispalyThread111.moveToThread(th111)
+                th111.started.connect(self.sortTableWidgetDispalyThread111.run)
+                th111.start()
+            elif "change" in str(name):
+                # print(datetime.datetime.now())
+                th12 = QThread()
+                self.sorttableWidgetDisplayChangeThread12 = SortdisplaySever.sortdisplaySever("sorttableWidgetDisplayChange",
+                                                                             self.ipinfo, self.selectedtime,
+                                                                             self.changeonChange_text, "", "", "", th12)
+                self.sorttableWidgetDisplayChangeThread12.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sorttableWidgetDisplayChangeThread12.moveToThread(th12)
+                th12.started.connect(self.sorttableWidgetDisplayChangeThread12.run)
+                th12.start()
+            elif "people" in str(name):
+                # print(datetime.datetime.now())
+                th13 = QThread()
+                self.sorttableWidgetPeopleDisplayThread13 = SortdisplaySever.sortdisplaySever("sorttableWidgetPeopleDisplay",
+                                                                             self.ipinfo, self.selectedtime,
+                                                                             self.peolpleonChange_text, "",
+                                                                             self.selectedbc, self.searchpeoplestr,
+                                                                             th13)
+                self.sorttableWidgetPeopleDisplayThread13.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sorttableWidgetPeopleDisplayThread13.moveToThread(th13)
+                th13.started.connect(self.sorttableWidgetPeopleDisplayThread13.run)
+                th13.start()
+            elif "log" in str(name):
+                # print(datetime.datetime.now())
+                th14 = QThread()
+                self.sorttableWidgetLOGDispalyThread14 = SortdisplaySever.sortdisplaySever("sorttableWidgetLOGDispaly", self.ipinfo,
+                                                                          self.selectedtime, self.logonChange_text, "",
+                                                                          "", "", th14)
+                self.sorttableWidgetLOGDispalyThread14.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sorttableWidgetLOGDispalyThread14.moveToThread(th14)
+                th14.started.connect(self.sorttableWidgetLOGDispalyThread14.run)
+                th14.start()
+            elif "setlocalip" in str(name):
+                th99 = QThread()
+                self.setlocalipThread = Setlocalip.setlocalip(self.localip, th99)
+                self.setlocalipThread.localipupdate.connect(self.setlocalipback)
+                self.setlocalipThread.moveToThread(th99)
+                th99.started.connect(self.setlocalipThread.run)
+                th99.start()
+            elif "phone" in str(name):
+                th15 = QThread()
+                self.sorttableWidgetPHONEDispaly15 = SortdisplaySever.sortdisplaySever("sorttableWidgetPHONEDispaly", self.ipinfo, "",
+                                                                      self.changeonPhone_text, "", "", "", th15)
+                self.sorttableWidgetPHONEDispaly15.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sorttableWidgetPHONEDispaly15.moveToThread(th15)
+                th15.started.connect(self.sorttableWidgetPHONEDispaly15.run)
+                th15.start()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def tableWidgetLOGDispaly(self):
+        try:
+            log = self.sortlog
+            self.tableWidgetLOG.setRowCount(len(log.keys()))
+            if log != "":
+                for i in log.keys():
+                    self.tableWidgetLOG.setItem(int(i), 0, QTableWidgetItem(str(int(i)+1)))
+                    self.tableWidgetLOG.setItem(int(i), 1, QTableWidgetItem(str(log[i])))
+                    self.tableWidgetLOG.item(int(i), 0).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+            self.tableWidgetLOG.resizeColumnToContents(0)
+            self.tableWidgetLOG.setColumnWidth(1, 240)
+            self.tableWidgetLOG.resizeRowsToContents()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def itemclick(self, row, column):
+        if self.doubleclickLockUpdate == 1 and self.doubleclickLock == 0:
+            self.doubleclickLockUpdate = 0
+            #self.QThreadSortNow("ALL")
+            #self.QThreadSortNow("main")
+            try:
+                self.tableWidgetFlight.cellChanged.disconnect(self.cellchanged)
+            except:
+                pass
+
+    def itemclick2(self, row, column):
+        try:
+            # print(self.doubleclickLock)
+            if (((int(column) - self.tableWidgetFlight.columnCount() == -1 or 9 < column < 16) and self.displayMode == "B" ) or( (column == 61 or  19 < column < 33) ) and self.displayMode == "A") and self.doubleclickLock == 0:
+                self.doubleclickLockUpdate=1
+                self.clickrow = row
+                self.clickcolumn = column
+                self.olditem = self.tableWidgetFlight.item(row, column).text()
+                item = self.tableWidgetFlight.item(row, column)
+                # 如果单元格对象不存在,则返回默认的背景色
+                if not item:
+                    self.color=self.tableWidgetFlight.palette().color(QPalette.Base)
+                else:
+                    # 获取并返回单元格的背景色
+                    self.color=item.background()
+                self.tableWidgetFlight.cellChanged.connect(self.cellchanged)
+            else:
+                self.doubleclickLockUpdate = 0
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def cellchanged(self, row, column):
+        if self.clickrow == row and self.clickcolumn == column and self.displayMode =="A":
+            self.clickrow = None
+            self.clickcolumn = None
+            try:
+                #t1 = datetime.datetime.now()
+                self.doubleclickLock = 1
+                self.newitem = self.tableWidgetFlight.item(row, column).text().replace("\"","*").replace("\\",";").replace("\'","*").replace("/","、").replace("#","*")
+                flightid = self.tableWidgetFlight.item(row, 53).text()
+                flighttype = self.tableWidgetFlight.item(row, 19).text()
+                acno = self.tableWidgetFlight.item(row, 5).text()
+                flightno = self.tableWidgetFlight.item(row, 9).text()
+                bgtype = str(self.displayLabel[column]).replace("/","")
+                if column == 61 and self.olditem != self.newitem:
+                    item = self.tableWidgetFlight.item(row, column)
+                    if item.text() != "":
+                        text = item.text().replace("\"","*").replace("\\",";").replace("\'","*").replace("/","、").replace("#","*")
+                    else:
+                        text = "清空项目12345678987654321"
+                    ip = "http://" + str(self.ipinfo) + "/static/updateEidteItem/" + "%s/" % str(text) + "%s/" % str(flightid) + "%s/" % str(self.displayMode) + "%s/" % str(flighttype) + "%s" % str(self.selectedtime)
+                    # print(ip)
+                    ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "航班显示模块:%s,%s%s由%s变更为%s%s/" % (acno, flightno, bgtype, self.olditem, self.newitem,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                    try:
+                        requests.get(url=ip, timeout=30).json()
+                        requests.get(url=ip2, timeout=30).json()
+                    except Exception as e:
+                        app_logger.log_error(e)
+                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                elif 19 < column < 33 and self.olditem != self.newitem:
+                    item = self.tableWidgetFlight.item(row, column)
+                    if item.text() != "":
+                        text = item.text().replace("\"","*").replace("\\",";").replace("\'","*").replace("/","、").replace("#","*")
+                        if "!" in str(text):
+                            text = text.replace("!", "")
+                        if "√" in str(text):
+                            text = text.replace("√", "")
+                    else:
+                        text = "清空项目12345678987654321"
+                    ip = "http://" + str(self.ipinfo) + "/static/checkPglist/%s/%s/%s" % (text, self.selectedtime, self.selectedbc)
+                    # print(ip)
+                    try:
+                        res = requests.get(url=ip, timeout=30).json()
+                        if res["返回值"] == "fail":
+                            self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                            self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                            self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                            QMessageBox.warning(self, "警告", "%sAMRO未考勤,请核实考勤名单或者检查人员字母!" % text)
+                        elif res["返回值"] == "OK" and self.maintainAuthCheckSts == 1 and text != "清空项目12345678987654321" and column == 21 and "3U" not in str(flightno) and "CSC" not in str(flightno):
+                            ####需要加一把锁,有功能开关调用
+                            airplanetype=self.tableWidgetFlight.item(row, 5).text()
+                            engtype=self.tableWidgetFlight.item(row, 7).text()
+                            if "A3" in airplanetype and engtype[0:3] =="LEA":
+                                auttype="ALEAP"
+                            elif "A3" in airplanetype and engtype[0:3] !="LEA":
+                                auttype = "ACSC"
+                            elif "737NG" in airplanetype:
+                                auttype = "737NG"
+                            elif "737MAX" in airplanetype:
+                                auttype = "737MAX"
+                            else:
+                                auttype = "ALL"
+                            ipp = "http://" + str(self.ipinfo) + "/static/maintainAuthCheck/%s/%s" % (text, auttype)
+                            try:
+                                res = requests.get(url=ipp, timeout=30).json()
+                                if res["返回值"] == "fail":
+                                    self.tableWidgetFlight.setItem(int(row), column,QTableWidgetItem(str(self.olditem)))
+                                    self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                                    self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                    QMessageBox.warning(self, "警告", "%s不满足发动机授权条件!请核对信息或者更新授权信息!" % text)
+                                elif res["返回值"] == "ok":
+                                    self.tableWidgetFlight.setItem(int(row), column,QTableWidgetItem(str(self.newitem)))
+                                    self.tableWidgetFlight.item(int(row), column).setBackground(QColor("yellow"))
+                                    self.tableWidgetFlight.item(int(row), column).setForeground(QColor("black"))
+                                    self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                    ip = "http://" + str(self.ipinfo) + "/static/updateDragDropItem/%s/%s/%s/%s/%s/%s" % (column, text, flightid, self.displayMode, flighttype, self.selectedtime)
+                                    # print(ip)
+                                    ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "航班显示模块:%s,%s%s由%s变更为%s%s/" % (acno, flightno, bgtype, self.olditem, self.newitem,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    try:
+                                        requests.get(url=ip, timeout=30).json()
+                                        requests.get(url=ip2, timeout=30).json()
+                                    except Exception as e:
+                                        app_logger.log_error(e)
+                                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                            except Exception as e:
+                                app_logger.log_error(e)
+                                self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                                self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                                self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                        elif res["返回值"] == "OK" and self.maintainAuthCheckSts == 1 and text != "清空项目12345678987654321" and column != 21 and "3U" not in str(flightno) and "CSC" not in str(flightno):
+                            ipp = "http://" + str(self.ipinfo) + "/static/maintainAuthCheck/%s/%s" % (text, "CZQW")
+                            try:
+                                res = requests.get(url=ipp, timeout=30).json()
+                                if res["返回值"] == "fail":
+                                    self.tableWidgetFlight.setItem(int(row), column,QTableWidgetItem(str(self.olditem)))
+                                    self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                                    self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                    QMessageBox.warning(self, "警告", "%s不满足外委勤务授权条件!请核对信息或者更新授权信息!" % text)
+                                elif res["返回值"] == "ok":
+                                    self.tableWidgetFlight.setItem(int(row), column,QTableWidgetItem(str(self.newitem)))
+                                    self.tableWidgetFlight.item(int(row), column).setBackground(QColor("yellow"))
+                                    self.tableWidgetFlight.item(int(row), column).setForeground(QColor("black"))
+                                    self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                    ip = "http://" + str(self.ipinfo) + "/static/updateDragDropItem/%s/%s/%s/%s/%s/%s" % (column, text, flightid, self.displayMode, flighttype, self.selectedtime)
+                                    # print(ip)
+                                    ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "航班显示模块:%s,%s%s由%s变更为%s%s/" % (acno, flightno, bgtype, self.olditem, self.newitem,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    try:
+                                        requests.get(url=ip, timeout=30).json()
+                                        requests.get(url=ip2, timeout=30).json()
+                                    except Exception as e:
+                                        app_logger.log_error(e)
+                                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                            except Exception as e:
+                                self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                                self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                                self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                app_logger.log_error(e)
+
+                        elif (res["返回值"] == "OK" and (self.maintainAuthCheckSts == 0 or "3U" in str(flightno) or "CSC" in str(flightno))) or text == "清空项目12345678987654321":
+                            self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.newitem)))
+                            self.tableWidgetFlight.item(int(row), column).setBackground(QColor("yellow"))
+                            self.tableWidgetFlight.item(int(row), column).setForeground(QColor("black"))
+                            self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                            ip = "http://" + str(self.ipinfo) + "/static/updateDragDropItem/%s/%s/%s/%s/%s/%s" % (column, text, flightid, self.displayMode, flighttype, self.selectedtime)
+                            # print(ip)
+                            ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "航班显示模块:%s,%s%s由%s变更为%s%s/" % (acno, flightno, bgtype, self.olditem, self.newitem,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            try:
+                                requests.get(url=ip, timeout=30).json()
+                                requests.get(url=ip2, timeout=30).json()
+                            except Exception as e:
+                                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                app_logger.log_error(e)
+                        else:
+                            self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                            self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                            self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    except Exception as e:
+                        self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                        self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                        self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                        app_logger.log_error(e)
+                self.doubleclickLockUpdate = 0
+                self.doubleclickLock = 0
+                self.tableWidgetFlight.cellChanged.disconnect(self.cellchanged)
+                self.QThreadSortNow("main")
+                #t2 = datetime.datetime.now()
+                #print(f'【编辑操作】【客户端计时】:{t2 - t1}')
+            except Exception as e:
+                self.doubleclickLockUpdate = 0
+                self.clickrow = None
+                self.clickcolumn = None
+                try:
+                    self.tableWidgetFlight.cellChanged.disconnect(self.cellchanged)
+                except:
+                    pass
+                self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                app_logger.log_error(e)
+                self.doubleclickLock = 0
+                self.QThreadSortNow("main")
+        elif self.clickrow == row and self.clickcolumn == column and self.displayMode == "B":
+            self.clickrow = None
+            self.clickcolumn = None
+            try:
+                self.doubleclickLock = 1
+                self.newitem = self.tableWidgetFlight.item(row, column).text()
+                flightid = self.tableWidgetFlight.item(row , self.tableWidgetFlight.columnCount() - 5).text()
+                flighttype = self.tableWidgetFlight.item(row, 9).text()
+                acno = self.tableWidgetFlight.item(row, 1).text()
+                flightno = self.tableWidgetFlight.item(row, 4).text()
+                bgtype = str(self.displayLabel[column]).replace("/","")
+                if int(column) - self.tableWidgetFlight.columnCount() == -1:
+                    item = self.tableWidgetFlight.item(row, column)
+                    if item.text() != "":
+                        text = item.text().replace("\"","#").replace("\\",";").replace("\'","#")
+                    else:
+                        text = "清空项目12345678987654321"
+                    ip = "http://" + str(self.ipinfo) + "/static/updateEidteItem/" + "%s/" % str(text) + "%s/" % str(flightid) + "%s/" % str(self.displayMode) + "%s/" % str(flighttype) + "%s" % str(self.selectedtime)
+                    # print(ip)
+                    ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "维修记录模块:%s,%s%s由%s变更为%s%s/" % (acno, flightno, bgtype, self.olditem, self.newitem,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                    try:
+                        requests.get(url=ip, timeout=30).json()
+                        requests.get(url=ip2, timeout=30).json()
+                    except  Exception as e:
+                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                        app_logger.log_error(e)
+                elif 9 < column < 16 and self.olditem != self.newitem:
+                    item = self.tableWidgetFlight.item(row, column)
+                    if item.text() != "":
+                        text = item.text().replace("\"","#").replace("\\",";").replace("\'","#")
+                        if "!" in str(text):
+                            text = text.replace("!", "")
+                        if "√" in str(text):
+                            text = text.replace("√", "")
+                    else:
+                        text = "清空项目12345678987654321"
+                    # print(ip)
+                    try:
+                        if text != "清空项目12345678987654321":
+                            ####需要加一把锁,有功能开关调用
+                            ip = "http://" + str(self.ipinfo) + "/static/updateDragDropItem/%s/%s/%s/%s/%s/%s" % (column, text, flightid, self.displayMode, flighttype, self.selectedtime)
+                            # print(ip)
+                            ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "维修记录模块:%s,%s%s由%s变更为%s%s/" % (acno, flightno, bgtype, self.olditem, self.newitem,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            try:
+                                requests.get(url=ip, timeout=30).json()
+                                self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.newitem)))
+                                self.tableWidgetFlight.item(int(row), column).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), column).setForeground(QColor("black"))
+                                self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                requests.get(url=ip2, timeout=30).json()
+                            except  Exception as e:
+                                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                app_logger.log_error(e)
+                        elif text == "清空项目12345678987654321":
+                            ip = "http://" + str(self.ipinfo) + "/static/updateDragDropItem/%s/%s/%s/%s/%s/%s" % (column, text, flightid, self.displayMode, flighttype, self.selectedtime)
+                            # print(ip)
+                            ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "维修记录模块:%s,%s%s由%s变更为%s%s/" % (acno, flightno, bgtype, self.olditem, self.newitem,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            try:
+                                requests.get(url=ip, timeout=300).json()
+                                self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.newitem)))
+                                self.tableWidgetFlight.item(int(row), column).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), column).setForeground(QColor("black"))
+                                self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                requests.get(url=ip2, timeout=30).json()
+                            except Exception as e:
+                                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                app_logger.log_error(e)
+                        else:
+                            self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                            self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                            self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    except Exception as e:
+                        self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                        self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                        self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                        app_logger.log_error(e)
+                self.doubleclickLockUpdate = 0
+                self.doubleclickLock = 0
+                self.tableWidgetFlight.cellChanged.disconnect(self.cellchanged)
+                self.QThreadSortNow("main")
+            except Exception as e:
+                self.doubleclickLockUpdate = 0
+                self.clickrow = None
+                self.clickcolumn = None
+                try:
+                    self.tableWidgetFlight.cellChanged.disconnect(self.cellchanged)
+                except:
+                    pass
+                self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                app_logger.log_error(e)
+                self.doubleclickLock = 0
+                self.QThreadSortNow("main")
+
+    def btnClick(self, item):
+        if int(self.authority) != 3:
+            try:
+                btn = self.sender()
+                now_2=datetime.datetime.now()- datetime.timedelta(seconds=2)
+                #print(self.changeupdatetime,now_2)
+                if btn:
+                    row = self.tableWidget.indexAt(btn.pos()).row()
+                    a = self.tableWidget.item(row, 3).text()
+                    self.severpost_nomeassge("dealLogs", "/%s" % self.user, "/%s" % a, "", "")
+                    self.QThreadSortNow("change")
+                    if self.changeupdatetime < now_2:
+                        self.changeupdatetime = datetime.datetime.now()
+                        self.QThreadSortNow("main")
+
+            except Exception as e:
+                app_logger.log_error(e)
+        else:
+            QMessageBox.warning(self, "提示", "权限不够,请联系管理员!")
+
+    def tableWidgetDisplayChange(self):
+        try:
+            log = self.sortlogchange
+            self.tableWidget.setRowCount(len(log.keys()))
+            if log != "":
+                for i in log.keys():
+
+                    btnList = [QPushButton('处理')]
+                    self.tableWidget.setItem(int(i), 0, QTableWidgetItem(str(int(i)+1)))
+                    self.tableWidget.setItem(int(i), 1, QTableWidgetItem(str(log[i][2])))
+                    self.tableWidget.setItem(int(i), 3, QTableWidgetItem(str(log[i][0])))
+                    self.tableWidget.setItem(int(i), 4, QTableWidgetItem(str(log[i][1])))
+                    self.tableWidget.setItem(int(i), 5, QTableWidgetItem(str(log[i][10])))
+                    self.tableWidget.setCellWidget(int(i), 2, btnList[0])
+                    self.tableWidget.item(int(i), 0).setForeground(QColor('red'))
+                    self.tableWidget.item(int(i), 1).setForeground(QColor('red'))
+                    self.tableWidget.item(int(i), 0).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    self.tableWidget.item(int(i), 1).setToolTip("%s" % str(log[i][10]))
+                    for btn in btnList:
+                        btn.clicked.connect(self.btnClick)
+            self.tableWidget.setColumnHidden(5, True)
+            self.tableWidget.setColumnHidden(4, True)
+            self.tableWidget.setColumnHidden(3, True)
+            self.tableWidget.resizeColumnToContents(0)
+            self.tableWidget.setColumnWidth(2, 40)
+            self.tableWidget.setColumnWidth(1, 210)
+            self.tableWidget.resizeRowsToContents()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def generateMenu3(self, pos):
+        try:
+            for i in self.tableWidget_3.selectionModel().selection().indexes():
+                menu = QMenu()
+                item2 = menu.addAction('拨打IP电话')
+                screenPos = self.tableWidget_3.mapToGlobal(pos)
+                action = menu.exec(screenPos)
+                rowIndex = i.row()
+                phonenum = self.tableWidget_3.item(rowIndex, 3).text()
+                if action == item2:
+                    if self.localip != None and self.localtoken != None:
+                        try:
+                            data = {"PHB_AutoDialNumber": phonenum,
+                                    "ReturnPage": "/contacts.htm",
+                                    "AutoDialSubmit": "submit",
+                                    "PHB_AutoDialLine": "1"
+                                    }
+                            header = {
+                                "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+                                "Connection": "keep-alive",
+                                "Cookie": self.localtoken
+                            }
+                            requests.post(url="http://%s/contacts.htm" % self.localip, data=data, headers=header)
+                        except Exception as e:
+                            self.show_info("警告", "拨号失败,请检查IP后重新配置或联系管理员!")
+                            app_logger.log_error(e)
+
+                    else:
+                        self.show_info("警告", "使用前请配置IP电话!")
+                    return
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def generateMenu2(self, pos):
+        try:
+            for i in self.tableWidgetPerson.selectionModel().selection().indexes():
+                menu = QMenu()
+                item2 = menu.addAction('拨打IP电话')
+                screenPos = self.tableWidgetPerson.mapToGlobal(pos)
+                action = menu.exec(screenPos)
+                rowIndex = i.row()
+                colnum = self.tableWidgetPerson.columnCount()
+                name = self.tableWidgetPerson.item(rowIndex, 1).text()
+                # print(name)
+                if action == item2:
+                    ip = "http://" + str(self.ipinfo) + "/static/get_empNos_phoone/%s" % name
+                    infos = requests.get(url=ip, timeout=30).json()
+
+                    # print(self.localtoken)
+                    # '''
+                    if infos == {}:
+                        self.show_info("警告", "无法查询到%s个人信息,请更新后尝试!!" % name)
+                    else:
+                        try:
+                            # print(infos["电话"])
+                            data = {"PHB_AutoDialNumber": infos["电话"],
+                                    "ReturnPage": "/contacts.htm",
+                                    "AutoDialSubmit": "submit",
+                                    "PHB_AutoDialLine": "1"
+                                    }
+                            header = {
+                                "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+                                "Connection": "keep-alive",
+                                "Cookie": self.localtoken
+                            }
+                            requests.post(url="http://%s/contacts.htm" % self.localip, data=data, headers=header)
+                        except Exception as e:
+                            app_logger.log_error(e)
+
+                    # '''
+                    return
+                else:
+                    return
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def LM_TSK_SURE_PG_NOW(self, id, empNos, type, shiftDate, shift):
+        dict = {"taskid": id,
+                "empNos": empNos,
+                "type": type,
+                "shiftDate": shiftDate,
+                "shift": shift
+                }
+        res = self.severpostData_nomeassge("LM_TSK_SURE_PG", data=dict)["返回值"]
+        return res
+
+    def send_dingdong(self, a, b, c, d, e, f, g, h, i, j, k, l):
+        dict_dingdong = {"acno": a,
+                         "actype": b,
+                         "tasktype": c,
+                         "tatd": d,
+                         "bay": e,
+                         "taskid": f,
+                         "wxemp": g,
+                         "fxemp": h,
+                         "wx": i,
+                         "fx": j,
+                         "ecsj":k,
+                         "msgInfo": l
+                         }
+        res = self.severpostData_nomeassge("dingdong", data=dict_dingdong)["返回值"]
+        return res
+
+    def getRiskData(self,bay,flighttype,acno):
+        if "送" in flighttype or flighttype == "航前":
+            type="出港提示"
+        else:
+            type = "进港提示"
+        res=""
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/getRiskData/" + "%s/" % bay + "%s/" % type + "%s" % acno
+            res=requests.get(url=ip, timeout=30).json()["返回值"]
+        except Exception as e:
+            app_logger.log_error(e)
+            QMessageBox.warning(self, "风险提示失效", "风险提示推送功能失效请联系管理员!")
+        return res
+
+    def generateMenu(self, pos):
+        if int(self.authority) < 3 and self.displayMode =="A":
+            try:
+                zydy = {"短停": "TR", "航后": "AF", "航前": "AP", "特后前": "TAF", "未显示": ""}
+                for i in self.tableWidgetFlight.selectionModel().selection().indexes():
+                    menu = QMenu()
+                    item1 = menu.addAction('维修人员派工')
+                    item2 = menu.addAction('放行人员派工')
+                    item3 = menu.addAction('二送人员派工')
+                    item4 = menu.addAction('推送维修人员')
+                    item5 = menu.addAction('推送放行人员')
+                    item6 = menu.addAction('推送二送人员')
+                    item7 = menu.addAction('确认通知')
+                    item8 = menu.addAction('人工接机到位')
+                    item9 = menu.addAction('人工确认放行')
+                    item10 = menu.addAction('人工确认随机到位')
+                    item11 = menu.addAction('人工确认二送到位')
+                    item12 = menu.addAction('人工确认销夹取下')
+                    item13 = menu.addAction('一键派工&通知')
+                    item15 = menu.addAction('电话通知')
+                    item16 = menu.addAction('查看工作包')
+                    item17 = menu.addAction('删除航班')
+                    item18 = menu.addAction('工作交接')
+
+                    screenPos = self.tableWidgetFlight.mapToGlobal(pos)
+                    action = menu.exec(screenPos)
+                    rowIndex = i.row()
+                    colnum = self.tableWidgetFlight.columnCount()
+                    # print(colnum)
+
+                    acno = self.tableWidgetFlight.item(rowIndex, 3).text()
+                    flightno = self.tableWidgetFlight.item(rowIndex, 9).text()
+                    qw1 = self.tableWidgetFlight.item(rowIndex, 23).text().replace("!", "") if "!" in self.tableWidgetFlight.item(rowIndex, 23).text() else self.tableWidgetFlight.item(rowIndex, 23).text()
+                    qw2 = self.tableWidgetFlight.item(rowIndex, 25).text().replace("!", "") if "!" in self.tableWidgetFlight.item(rowIndex, 25).text() else self.tableWidgetFlight.item(rowIndex, 25).text()
+                    g1 = self.tableWidgetFlight.item(rowIndex, 27).text().replace("!", "") if "!" in self.tableWidgetFlight.item(rowIndex, 27).text() else self.tableWidgetFlight.item(rowIndex, 27).text()
+                    g2 = self.tableWidgetFlight.item(rowIndex, 29).text().replace("!", "") if "!" in self.tableWidgetFlight.item(rowIndex, 29).text() else self.tableWidgetFlight.item(rowIndex, 29).text()
+                    fx = self.tableWidgetFlight.item(rowIndex, 21).text().replace("!", "") if "!" in self.tableWidgetFlight.item(rowIndex, 21).text() else self.tableWidgetFlight.item(rowIndex, 21).text()
+
+                    qw1_1 = "" if "√" in qw1 else qw1
+                    qw2_1 = "" if "√" in qw2 else qw2
+                    g1_1 = "" if "√" in g1 else g1
+                    g2_1 = "" if "√" in g2 else g2
+                    fx_1 = "" if "√" in fx else fx
+
+                    qw1 = qw1.replace("√", "") if "√" in qw1 else qw1
+                    qw2 = qw2.replace("√", "") if "√" in qw2 else qw2
+                    g1 = g1.replace("√", "") if "√" in g1 else g1
+                    g2 = g2.replace("√", "") if "√" in g2 else g2
+                    fx = fx.replace("√", "") if "√" in fx else fx
+                    fj = str(self.tableWidgetFlight.item(rowIndex, 61).text())
+                    dict_people = {"工1": qw1,
+                                   "工2": qw2,
+                                   "工3": g1,
+                                   "工4": g2,
+                                   "放行": fx
+                                   }
+                    dict_people_noCall = {"工1": qw1_1,
+                                   "工2": qw2_1,
+                                   "工3": g1_1,
+                                   "工4": g2_1,
+                                   "放行": fx_1
+                                   }
+                    # print(dict_people)
+                    if action == item1:
+                        if str(self.tableWidgetFlight.item(rowIndex, 53).text()) != "" and "MAN" not in str(self.tableWidgetFlight.item(rowIndex, 53).text())  and str(self.tableWidgetFlight.item(rowIndex, 55).text()) != "" :
+                            empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                            # print(empNos)
+                            if empNos["code"] != "fail":
+                                res=self.LM_TSK_SURE_PG_NOW(self.tableWidgetFlight.item(rowIndex, 55).text(),empNos["WXempNos"],"WX",empNos["date"],empNos["bc"])
+                                if res == "ok":
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工成功%s/" % (acno, flightno, str(qw1 + "-" + qw2 + "-" + g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception as e:
+                                        app_logger.log_error(e)
+                                        QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    self.show_info("成功提示", "派工成功!")
+                            if empNos["faillist"] != []:
+                                try:
+                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    requests.get(url=ip, timeout=30).json()
+                                except Exception as e:
+                                    app_logger.log_error(e)
+                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                self.show_info("派工错误", "以下人员派工失败:%s,请确认考勤打卡情况!" % empNos["faillist"])
+                        else:
+                            self.show_info("警告", "该航班非AMRO航班或者无任务编号,请确认是否为AMRO航班,如确认请使用AMRO人工派工!!")
+                        return
+                    elif action == item18:
+                        if int(self.authority) <= 2:
+                            if self.tableWidgetFlight.item(rowIndex, 49).text() !="" and "【交班航班】" not in fj and \
+                                    ("3U" in self.tableWidgetFlight.item(rowIndex, 9).text() or "CSC" in self.tableWidgetFlight.item(rowIndex, 9).text()):
+                                relay = QMessageBox.warning(self, "警告", "是否确定要对B-%s,%s进行工作交接?"%(acno,self.tableWidgetFlight.item(rowIndex, 9).text()),
+                                    QMessageBox.StandardButton.Yes,
+                                    QMessageBox.StandardButton.Close)
+                                if relay == QMessageBox.StandardButton.Yes:
+                                    data = {"taskid": self.tableWidgetFlight.item(rowIndex, 53).text(),"sts": "1"}
+                                    res = self.severpostData_nomeassge("handoverflight", data=data)["返回值"]
+                                    if res == "ok":
+                                        flightid = self.tableWidgetFlight.item(rowIndex, 53).text()
+                                        flighttype = self.tableWidgetFlight.item(rowIndex, 19).text()
+                                        fjxx = "【交班航班】" + fj
+                                        ip = "http://" + str(self.ipinfo) + "/static/updateEidteItem/" + "%s/" % str(fjxx) + "%s/" % str(flightid) + "A/%s/" % str(flighttype) + "%s" % str(self.selectedtime)
+                                        try:
+                                            requests.get(url=ip, timeout=30).json()
+                                        except Exception as e:
+                                            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                            app_logger.log_error(e)
+                                        self.QThreadSortNow("main")
+                                        QMessageBox.warning(self, "提示", "B-%s,%s工作交接推送成功"%(acno,self.tableWidgetFlight.item(rowIndex, 9).text()))
+
+                                    else:
+                                        QMessageBox.warning(self, "警告", "航班交接失败,请重新尝试")
+                            elif "【交班航班】" in fj:
+                                QMessageBox.warning(self, "提示", "该航班已交接,请勿重复交接!")
+                            elif "3U" not in self.tableWidgetFlight.item(rowIndex, 9).text() and "CSC" not in self.tableWidgetFlight.item(rowIndex, 9).text():
+                                QMessageBox.warning(self, "提示", "该航班为非川航航班,无需交接!!!")
+                            else:
+                                QMessageBox.warning(self, "提示", "无法对未安排人员的的航班无法进行交接班,请先进行派工后交班!")
+
+
+
+                        else:
+                            self.show_info("警告", "权限不够,请联系管理员!!!")
+                        return
+                    elif action == item17:
+                        if int(self.authority) <= 1:
+                            if "MAN" in str(self.tableWidgetFlight.item(rowIndex, 53).text()):
+                                ip = "http://" + str(self.ipinfo) + "/static/" + "deleteFlight/" + "%s/%s/%s" % (
+                                    self.tableWidgetFlight.item(rowIndex, 53).text(), self.user, self.selectedtime)
+                                res = requests.get(url=ip, timeout=30).json()
+                                if res["返回值"] == "ok":
+                                    self.show_info("成功提示", "航班删除成功!")
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s航班被删除%s/" % (acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception as e:
+                                        app_logger.log_error(e)
+                                        QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    self.QThreadSortNow("main")
+                                else:
+                                    self.show_info("提示", "航班删除失败,如需请联系管理员!")
+                            else:
+                                self.show_info("警告", "删除航班功能仅限于人工添加的航班,AMRO航班无法删除!!!")
+                        else:
+                            self.show_info("警告", "权限不够,请联系管理员!!!")
+                        return
+                    elif action == item16:
+                        if str(self.tableWidgetFlight.item(rowIndex, 53).text()) != "" and "MAN" not in str(self.tableWidgetFlight.item(rowIndex, 53).text()) and str(self.tableWidgetFlight.item(rowIndex, 55).text()) != "":
+                            taskid = self.tableWidgetFlight.item(rowIndex, 55).text()
+                            ip = "http://" + str(self.ipinfo) + "/static/checkWorkjob/%s" % taskid
+                            infos = requests.get(url=ip, timeout=30).json()
+                            if infos["返回值"] == "ok":
+                                self.show_info("成功提示", "工作包查询成功!")
+                                self.QThreadSortNow("main")
+                        else:
+                            self.show_info("警告", "该航班非AMRO航班或者无任务编号,无法查询工作包!!")
+                        return
+                    elif action == item15:
+                        # {"工号":"0","电话":"1","姓名":"2","航班编号":"3","航班号":"9","附加消息":"5","拨号次数":"6","":"8","":"9","":"10"}
+                        if "人工" not in str(fj):
+                            for i in dict_people_noCall.keys():
+                                if dict_people_noCall[i] != "":
+                                    name = str(dict_people_noCall[i])
+                                    if "!" in name:
+                                        name = name.replace("!", "")
+                                    if "√" in name:
+                                        name = name.replace("√", "")
+                                    ip = "http://" + str(self.ipinfo) + "/static/get_empNos_phoone/%s" % name
+                                    infos = requests.get(url=ip, timeout=30).json()
+                                    # print(infos)
+                                    flightnumber = self.tableWidgetFlight.item(rowIndex, 9).text()
+                                    flighttype = self.tableWidgetFlight.item(rowIndex, 19).text()
+                                    flightids = str(self.tableWidgetFlight.item(rowIndex, 55).text()) + str(
+                                        flighttype) + str(name) + str(datetime.datetime.now().strftime("%H:%M:%S"))
+                                    if infos == {}:
+                                        self.show_info("警告", "无法查询到%s个人信息,请人工联系或更新后尝试!!" % name)
+                                        ip = "http://" + str(
+                                            self.ipinfo) + "/static/insertLogs/" + "%s%s%s未在通讯录,无法完成自动拨号,请人工联系或更新信息后尝试" % (
+                                                 flightnumber, flighttype, name) + "/system/" + str(
+                                            datetime.datetime.now().strftime("%Y-%m-%d %H:%M"))
+                                        requests.get(url=ip, timeout=30).json()
+                                    else:
+                                        callnumber = 0
+                                        data = {"工号": "%s" % infos["工号"], "电话": "%s" % infos["电话"], "姓名": "%s" % name,
+                                                "航班编号": "%s" % flightids, "航班号": "%s" % flightnumber, "附加消息": "%s" % fj,
+                                                "拨号次数": callnumber}
+                                        self.severpostData_nomeassge("insertCalllist", data)
+                            ip = "http://" + str(self.ipinfo) + "/static/calltry"
+                            requests.get(url=ip, timeout=30).json()
+                            self.severpost_nomeassge("infoConfirm", "/%s" % self.tableWidgetFlight.item(rowIndex, 19).text(),
+                                                     "/%s" % self.tableWidgetFlight.item(rowIndex, 53).text(),
+                                                     "/%s" % self.displayMode, "/%s" % self.selectedtime)
+                            try:
+                                ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s电话通知%s/" % (
+                                acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                requests.get(url=ip, timeout=30).json()
+                            except Exception as e:
+                                app_logger.log_error(e)
+                                QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                            self.QThreadSortNow("main")
+                            # 需要一次拨号请求
+                        else:
+                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs/" + "%s,%s附加消息有需要人工通知的内容,请人工介入,请通知到位后点击确认通知!!" % (acno, flightno) + "/system/" + str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M"))
+                            requests.get(url=ip, timeout=30).json()
+                            QMessageBox.warning(self, "人工提醒", "%s,%s附加消息有需要人工通知的内容,将推送航班监控席位由人工通知!" % (acno, flightno) )
+                        return
+                    elif action == item2:
+                        if str(self.tableWidgetFlight.item(rowIndex, 53).text()) != "" and "MAN" not in str(
+                                self.tableWidgetFlight.item(rowIndex, 53).text()) and str(self.tableWidgetFlight.item(rowIndex, 55).text()) != "":
+                            empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                            if empNos["code"] != "fail":
+
+                                res = self.LM_TSK_SURE_PG_NOW(self.tableWidgetFlight.item(rowIndex, 55).text(),empNos["FXempNos"], "FX", empNos["date"], empNos["bc"])
+
+                                if res == "ok":
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工成功%s/" % (acno, flightno, str(fx),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except:
+                                        self.show_info("日志功能失效", "操作日志功能失效请联系管理员")
+                                    self.show_info("成功提示", "派工成功!")
+                            if empNos["faillist"] != []:
+                                try:
+                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    requests.get(url=ip, timeout=30).json()
+                                except Exception as e:
+                                    app_logger.log_error(e)
+                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                self.show_info("派工错误", "以下人员派工失败:%s,请确认考勤打卡情况!" % empNos["faillist"])
+                        else:
+                            self.show_info("警告", "该航班非AMRO航班或者无任务编号,请确认是否为AMRO航班,如确认请使用AMRO人工派工!!")
+                        return
+                    elif action == item3:
+                        if str(self.tableWidgetFlight.item(rowIndex, 53).text()) != "" and "MAN" not in str(self.tableWidgetFlight.item(rowIndex, 53).text()) and str(self.tableWidgetFlight.item(rowIndex, 55).text()) != "":
+                            empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                            if empNos["code"] != "fail":
+                                res = self.LM_TSK_SURE_PG_NOW(self.tableWidgetFlight.item(rowIndex, 55).text(),empNos["ESempNos"], "ECSJ", empNos["date"], empNos["bc"])
+
+                                if res == "ok":
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工成功%s/" % (acno, flightno, str(g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception as e:
+                                        app_logger.log_error(e)
+                                        QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    self.show_info("成功提示", "派工成功!")
+                            if empNos["faillist"] != []:
+                                try:
+                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    requests.get(url=ip, timeout=30).json()
+                                except Exception as e:
+                                    app_logger.log_error(e)
+                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                self.show_info("派工错误", "以下人员派工失败:%s,请确认考勤打卡情况!" % empNos["faillist"])
+                        else:
+                            self.show_info("警告", "该航班非AMRO航班或者无任务编号,请确认是否为AMRO航班,如确认请使用AMRO人工派工!!")
+                        return
+                    elif action == item4:
+                        if str(self.tableWidgetFlight.item(rowIndex, 53).text()) != "" and "MAN" not in str(
+                                self.tableWidgetFlight.item(rowIndex, 53).text()) and str(self.tableWidgetFlight.item(rowIndex, 55).text()) != "":
+                            empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                            if empNos["code"] != "fail":
+                                risktips=""
+                                if self.tableWidgetFlight.item(rowIndex, 8).text() !="":
+                                    res=self.getRiskData(self.tableWidgetFlight.item(rowIndex, 8).text(), self.tableWidgetFlight.item(rowIndex, 19).text(), acno)
+                                    risktips=f"【风险提示】{res}" if res != "" else ""
+                                msgInfo="进港维修任务保障推送!%s%s" % (fj,risktips)
+                                res= self.send_dingdong(acno,self.tableWidgetFlight.item(rowIndex, 5).text(),
+                                                        self.tableWidgetFlight.item(rowIndex, 59).text(),
+                                                        "进" +self.tableWidgetFlight.item(rowIndex, 57).text().split("</br>")[0] + ",出" +self.tableWidgetFlight.item(rowIndex, 57).text().split("</br>")[1],
+                                                        self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 55).text(),
+                                                        empNos["WXempNos"],"",empNos["WX"],empNos["FX"],"",msgInfo)
+                                if res != "ok":
+                                    self.show_info("失败提示", "%s维修人员%s派工信息推送失败!" % (acno, empNos["WX"]))
+                                else:
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送成功%s/" % (acno, flightno, str(qw1 + "-" + qw2 + "-" + g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception as e:
+                                        app_logger.log_error(e)
+                                        QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    self.severpost_nomeassge("infoConfirm2", "/%s" % self.tableWidgetFlight.item(rowIndex, 19).text(),"/%s" % self.tableWidgetFlight.item(rowIndex,53).text(),"/%s" % self.displayMode, "/%s" % self.selectedtime)
+                                    self.show_info("成功提示", "%s维修人员%s派工信息推送成功!!!" % (acno, empNos["WX"]))
+                                    self.QThreadSortNow("main")
+
+                            if empNos["faillist"] != []:
+                                try:
+                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    requests.get(url=ip, timeout=30).json()
+                                except Exception as e:
+                                    app_logger.log_error(e)
+                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                self.show_info("通知错误", "以下人员通知失败:%s,请确认考勤打卡情况!" % empNos["faillist"])
+                        else:
+                            self.show_info("警告", "该航班非AMRO航班或者无任务编号,请确认是否为AMRO航班,如确认请使用AMRO人工叮咚消息通知!!")
+                        return
+
+                    elif action == item5:
+                        if str(self.tableWidgetFlight.item(rowIndex, 53).text()) != "" and "MAN" not in str(
+                                self.tableWidgetFlight.item(rowIndex, 53).text())and str(self.tableWidgetFlight.item(rowIndex, 55).text()) != "":
+                            empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                            if empNos["code"] != "fail":
+                                risktips=""
+                                if self.tableWidgetFlight.item(rowIndex, 8).text() !="":
+                                    res=self.getRiskData(self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 19).text(), acno)
+                                    risktips=f"\n    【风险提示】:{res}" if res !="" else ""
+                                msgInfo="放行人员保障推送!%s%s" % (fj,risktips)
+                                res= self.send_dingdong(acno,self.tableWidgetFlight.item(rowIndex, 5).text(),
+                                                        self.tableWidgetFlight.item(rowIndex, 59).text(),
+                                                        "进" +self.tableWidgetFlight.item(rowIndex, 57).text().split("</br>")[0] + ",出" +self.tableWidgetFlight.item(rowIndex, 57).text().split("</br>")[1],
+                                                        self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 55).text(),
+                                                        "", empNos["FXempNos"],empNos["WX"],empNos["FX"],"",msgInfo)
+
+                                if res != "ok":
+                                    self.show_info("失败提示", "%s放行人员%s派工信息推送失败!" % (
+                                        acno, empNos["FX"]))
+                                else:
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送成功%s/" % (acno, flightno, str(fx),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception as e:
+                                        app_logger.log_error(e)
+                                        QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    self.show_info("成功提示", "%s放行人员%s派工信息推成功!!!" % (
+                                        acno, empNos["FX"]))
+                                    self.severpost_nomeassge("infoConfirm2","/%s" % self.tableWidgetFlight.item(rowIndex, 19).text(),
+                                                             "/%s" % self.tableWidgetFlight.item(rowIndex,53).text(),
+                                                             "/%s" % self.displayMode, "/%s" % self.selectedtime)
+                                    self.QThreadSortNow("main")
+                            if empNos["faillist"] != []:
+                                try:
+                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    requests.get(url=ip, timeout=30).json()
+                                except Exception as e:
+                                    app_logger.log_error(e)
+                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                self.show_info("通知错误", "以下人员通知失败:%s,请确认考勤打卡情况!" % empNos["faillist"])
+                        else:
+                            self.show_info("警告","该航班非AMRO航班或者无任务编号,请确认是否为AMRO航班,如确认请使用AMRO人工叮咚消息通知!!")
+                        return
+
+                    elif action == item6:
+                        if str(self.tableWidgetFlight.item(rowIndex, 53).text()) != "" and "MAN" not in str(
+                                self.tableWidgetFlight.item(rowIndex, 53).text())and str(self.tableWidgetFlight.item(rowIndex, 55).text()) != "":
+                            empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                            if empNos["code"] != "fail":
+                                risktips = ""
+                                if self.tableWidgetFlight.item(rowIndex, 8).text() != "":
+                                    res = self.getRiskData(self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 19).text(), acno)
+                                    risktips = f"\n    【风险提示】:{res}" if res != "" else ""
+                                msgInfo = "二次送机任务推送!%s%s" % (fj, risktips)
+                                res= self.send_dingdong(acno,self.tableWidgetFlight.item(rowIndex, 5).text(),
+                                                        self.tableWidgetFlight.item(rowIndex, 59).text(),
+                                                        "进" +self.tableWidgetFlight.item(rowIndex, 57).text().split("</br>")[0] + ",出" +self.tableWidgetFlight.item(rowIndex, 57).text().split("</br>")[1],
+                                                        self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 55).text(),
+                                                        empNos["ESempNos"], "",empNos["WX"],empNos["FX"],empNos["ES"],msgInfo)
+
+                                if res != "ok":
+                                    self.show_info("失败提示", "%s二次送机人员%s派工信息推送失败!" % (
+                                        acno, empNos["ES"]))
+                                else:
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送成功%s/" % (acno, flightno, str(g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception as e:
+                                        app_logger.log_error(e)
+                                        QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    self.show_info("成功提示", "%s二次送机人员%s派工信息推送成功!!!" % (
+                                        acno, empNos["ES"]))
+                                    self.severpost_nomeassge("infoConfirm2","/%s" % self.tableWidgetFlight.item(rowIndex, 19).text(),
+                                                             "/%s" % self.tableWidgetFlight.item(rowIndex,53).text(),
+                                                             "/%s" % self.displayMode, "/%s" % self.selectedtime)
+                                    self.QThreadSortNow("main")
+                            if empNos["faillist"] != []:
+                                try:
+                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    requests.get(url=ip, timeout=30).json()
+                                except Exception as e:
+                                    app_logger.log_error(e)
+                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                self.show_info("通知错误", "以下人员通知失败:%s,请确认考勤打卡情况!" % empNos["faillist"])
+                        else:
+                            self.show_info("警告","该航班非AMRO航班或者无任务编号,请确认是否为AMRO航班,如确认请使用AMRO人工叮咚消息通知!!")
+                        return
+                    elif action == item7:
+                        self.severpost_nomeassge("infoConfirm", "/%s" % self.tableWidgetFlight.item(rowIndex, 19).text(),
+                                                 "/%s" % self.tableWidgetFlight.item(rowIndex, 53).text(),
+                                                 "/%s" % self.displayMode, "/%s" % self.selectedtime)
+                        try:
+                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s点击确认通知%s/" % (acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            requests.get(url=ip, timeout=30).json()
+                        except Exception as e:
+                            app_logger.log_error(e)
+                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                        self.QThreadSortNow("main")
+                        return
+                    elif action == item8:
+                        self.severpost_nomeassge("manChangests",
+                                                 "/%s" % self.tableWidgetFlight.item(rowIndex, 53).text(), "/接机到位",
+                                                 "/%s" % self.selectedtime, "/%s" % self.user)
+                        try:
+                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s人工点击接机到位%s/" % (acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            requests.get(url=ip, timeout=30).json()
+                        except Exception as e:
+                            app_logger.log_error(e)
+                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                        self.QThreadSortNow("main")
+                        self.QThreadSortNow("change")
+                        self.QThreadSortNow("log")
+                        return
+                    elif action == item9:
+                        self.severpost_nomeassge("manChangests","/%s" % self.tableWidgetFlight.item(rowIndex, 53).text(), "/放行","/%s" % self.selectedtime, "/%s" % self.user)
+                        # print("人工确认放行")
+                        try:
+                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s人工点击放行%s/" % (acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            requests.get(url=ip, timeout=30).json()
+                        except Exception as e:
+                            app_logger.log_error(e)
+                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                        self.QThreadSortNow("main")
+                        self.QThreadSortNow("change")
+                        self.QThreadSortNow("log")
+                        return
+                    elif action == item10:
+                        self.severpost_nomeassge("manChangests","/%s" % self.tableWidgetFlight.item(rowIndex, 53).text(), "/随机到位","/%s" % self.selectedtime, "/%s" % self.user)
+                        # print("人工确认随机到位")
+                        try:
+                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s人工点击随机到位%s/" % (acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            requests.get(url=ip, timeout=30).json()
+                        except Exception as e:
+                            app_logger.log_error(e)
+                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                        self.QThreadSortNow("main")
+                        self.QThreadSortNow("change")
+                        self.QThreadSortNow("log")
+                        return
+                    elif action == item11:
+                        self.severpost_nomeassge("manChangests",
+                                                 "/%s" % self.tableWidgetFlight.item(rowIndex, 53).text(), "/二送到位",
+                                                 "/%s" % self.selectedtime, "/%s" % self.user)
+                        # print("人工确认二送到位")
+                        try:
+                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s人工点击二送到位%s/" % (acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            requests.get(url=ip, timeout=30).json()
+                        except Exception as e:
+                            app_logger.log_error(e)
+                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                        self.QThreadSortNow("main")
+                        self.QThreadSortNow("change")
+                        self.QThreadSortNow("log")
+                        return
+                    elif action == item12:
+                        self.severpost_nomeassge("manChangests",
+                                                 "/%s" % self.tableWidgetFlight.item(rowIndex, 53).text(), "/销子夹板",
+                                                 "/%s" % self.selectedtime, "/%s" % self.user)
+                        try:
+                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s人工点击销子夹板%s/" % (acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            requests.get(url=ip, timeout=30).json()
+                        except Exception as e:
+                            app_logger.log_error(e)
+                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                        self.QThreadSortNow("main")
+                        self.QThreadSortNow("change")
+                        self.QThreadSortNow("log")
+                        return
+                    elif action == item13:
+                        msg = {}
+                        if str(self.tableWidgetFlight.item(rowIndex, 53).text()) != "" and "MAN" not in str(self.tableWidgetFlight.item(rowIndex, 53).text())and str(self.tableWidgetFlight.item(rowIndex, 55).text()) != "":
+                            if self.tableWidgetFlight.item(rowIndex, 19).text() != "短停送" and self.tableWidgetFlight.item(rowIndex, 19).text() != "特后前送":
+                                empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                                # print(empNos)
+                                try:
+                                    if empNos["code"] != "fail":
+                                        res=self.LM_TSK_SURE_PG_NOW(self.tableWidgetFlight.item(rowIndex, 55).text(),empNos["WXempNos"],"WX",empNos["date"],empNos["bc"])
+
+                                        if res == "ok":
+                                            msg["aa"] = "%s维修人员派工成功!"% str(qw1 + "-" + qw2 + "-" + g1 + "-" + g2)
+                                            try:
+                                                ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工成功%s/" % (acno, flightno, str(qw1 + "-" + qw2 + "-" + g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                requests.get(url=ip, timeout=30).json()
+                                            except Exception as e:
+                                                app_logger.log_error(e)
+                                                QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+
+                                    if empNos["faillist"] != []:
+                                        msg["a"] = "以下维修人员派工失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                        try:
+                                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]", ""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                            requests.get(url=ip, timeout=30).json()
+                                        except Exception as e:
+                                            app_logger.log_error(e)
+                                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                except:
+                                    pass
+                                try:
+                                    if empNos["code"] != "fail":
+                                        res = self.LM_TSK_SURE_PG_NOW(self.tableWidgetFlight.item(rowIndex, 55).text(),empNos["FXempNos"], "FX", empNos["date"], empNos["bc"])
+                                        if res == "ok":
+                                            msg["bb"] = "放行人员%s派工成功!"%str(fx)
+                                            try:
+                                                ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工成功%s/" % (acno, flightno, str(fx),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                requests.get(url=ip, timeout=30).json()
+                                            except Exception as e:
+                                                app_logger.log_error(e)
+                                                QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    if empNos["faillist"] != []:
+                                        msg["b"] = "以下放行人员派工失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                        try:
+                                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                            requests.get(url=ip, timeout=30).json()
+                                        except Exception as e:
+                                            app_logger.log_error(e)
+                                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                except:
+                                    pass
+                                try:
+                                    if empNos["code"] != "fail":
+                                        risktips = ""
+                                        if self.tableWidgetFlight.item(rowIndex, 8).text() != "":
+                                            res = self.getRiskData(self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 19).text(), acno)
+                                            risktips = f"\n    【风险提示】:{res}" if res != "" else ""
+                                        msgInfo = "进港维修任务保障推送!%s%s" % (fj, risktips)
+                                        res= self.send_dingdong(acno,self.tableWidgetFlight.item(rowIndex, 5).text(),
+                                                                self.tableWidgetFlight.item(rowIndex, 59).text(),
+                                                                "进" +self.tableWidgetFlight.item(rowIndex, 57).text().split("</br>")[0] + ",出" +self.tableWidgetFlight.item(rowIndex, 57).text().split("</br>")[1],
+                                                                self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 55).text(),empNos["WXempNos"],"",empNos["WX"],empNos["FX"],"",msgInfo)
+
+                                        if res == "ok":
+                                            msg["cc"] = "%s维修人员%s派工信息推送成功!!!" % (acno, empNos["WX"])
+                                            self.severpost_nomeassge("infoConfirm2","/%s" % self.tableWidgetFlight.item(rowIndex, 19).text(),"/%s" % self.tableWidgetFlight.item(rowIndex,53).text(),"/%s" % self.displayMode, "/%s" % self.selectedtime)
+                                            try:
+                                                ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送成功%s/" % (acno, flightno, str(qw1 + "-" + qw2 + "-" + g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                requests.get(url=ip, timeout=30).json()
+                                            except Exception as e:
+                                                app_logger.log_error(e)
+                                                QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    if empNos["faillist"] != []:
+                                        msg["c"] = "以下人员通知失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                        try:
+                                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                            requests.get(url=ip, timeout=30).json()
+                                        except Exception as e:
+                                            app_logger.log_error(e)
+                                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                except Exception as e:
+                                    app_logger.log_error(e)
+                                try:
+                                    if empNos["code"] != "fail":
+                                        risktips = ""
+                                        if self.tableWidgetFlight.item(rowIndex, 8).text() != "":
+                                            res = self.getRiskData(self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 19).text(), acno)
+                                            risktips = f"\n    【风险提示】:{res}" if res != "" else ""
+                                        msgInfo = "放行任务保障信息!%s%s" % (fj, risktips)
+                                        res= self.send_dingdong(acno,self.tableWidgetFlight.item(rowIndex, 5).text(),
+                                                                self.tableWidgetFlight.item(rowIndex, 59).text(),
+                                                                "进" +self.tableWidgetFlight.item(rowIndex, 57).text().split("</br>")[0] + ",出" +self.tableWidgetFlight.item(rowIndex, 57).text().split("</br>")[1],
+                                                                self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 55).text(),
+                                                                "", empNos["FXempNos"],empNos["WX"],empNos["FX"],"",msgInfo)
+
+                                        if res == "ok":
+                                            msg["dd"] = "%s放行人员%s派工信息推成功!!!" % (
+                                                acno, empNos["FX"])
+                                            self.severpost_nomeassge("infoConfirm2","/%s" % self.tableWidgetFlight.item(rowIndex, 19).text(),"/%s" % self.tableWidgetFlight.item(rowIndex,53).text(),"/%s" % self.displayMode, "/%s" % self.selectedtime)
+                                            try:
+                                                ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送成功%s/" % (acno, flightno, str(fx),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                requests.get(url=ip, timeout=30).json()
+                                            except Exception as e:
+                                                app_logger.log_error(e)
+                                                QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    if empNos["faillist"] != []:
+                                        msg["d"] = "以下人员通知失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                        try:
+                                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                            requests.get(url=ip, timeout=30).json()
+                                        except Exception as e:
+                                            app_logger.log_error(e)
+                                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                except:
+                                    pass
+
+                            else:
+                                empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                                if "【交班航班】" in fj:
+                                    try:
+                                        if empNos["code"] != "fail":
+                                            res = self.LM_TSK_SURE_PG_NOW(self.tableWidgetFlight.item(rowIndex, 55).text(),empNos["FXempNos"], "FX", empNos["date"], empNos["bc"])
+                                            if res == "ok":
+                                                msg["bb"] = "放行人员%s派工成功!"%str(fx)
+                                                try:
+                                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工成功%s/" % (acno, flightno, str(fx),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                    requests.get(url=ip, timeout=30).json()
+                                                except Exception as e:
+                                                    app_logger.log_error(e)
+                                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                        if empNos["faillist"] != []:
+                                            msg["b"] = "以下放行人员派工失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                            try:
+                                                ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                requests.get(url=ip, timeout=30).json()
+                                            except Exception as e:
+                                                app_logger.log_error(e)
+                                                QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    except:
+                                        pass
+
+                                    try:
+                                        if empNos["code"] != "fail":
+                                            risktips = ""
+                                            if self.tableWidgetFlight.item(rowIndex, 8).text() != "":
+                                                res = self.getRiskData(self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 19).text(),acno)
+                                                risktips = f"\n    【风险提示】:{res}" if res != "" else ""
+                                            msgInfo = "放行任务保障信息!%s%s" % (fj, risktips)
+                                            res= self.send_dingdong(acno,self.tableWidgetFlight.item(rowIndex, 5).text(),
+                                                                    self.tableWidgetFlight.item(rowIndex, 59).text(),
+                                                                    "进" +self.tableWidgetFlight.item(rowIndex, 57).text().split("</br>")[0] + ",出" +self.tableWidgetFlight.item(rowIndex, 57).text().split("</br>")[1],
+                                                                    self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 55).text(),
+                                                                    "", empNos["FXempNos"],empNos["WX"],empNos["FX"],"",msgInfo)
+
+                                            if res == "ok":
+                                                msg["dd"] = "%s放行人员%s派工信息推成功!!!" % (
+                                                    acno, empNos["FX"])
+                                                self.severpost_nomeassge("infoConfirm2","/%s" % self.tableWidgetFlight.item(rowIndex, 19).text(),"/%s" % self.tableWidgetFlight.item(rowIndex,53).text(),"/%s" % self.displayMode, "/%s" % self.selectedtime)
+                                                try:
+                                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送成功%s/" % (acno, flightno, str(fx),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                    requests.get(url=ip, timeout=30).json()
+                                                except Exception as e:
+                                                    app_logger.log_error(e)
+                                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                        if empNos["faillist"] != []:
+                                            msg["d"] = "以下人员通知失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                            try:
+                                                ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                requests.get(url=ip, timeout=30).json()
+                                            except Exception as e:
+                                                app_logger.log_error(e)
+                                                QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    except:
+                                        pass
+
+                                # print(empNos)
+                                if empNos["code"] != "fail":
+                                    res = self.LM_TSK_SURE_PG_NOW(self.tableWidgetFlight.item(rowIndex, 55).text(),empNos["ESempNos"], "ECSJ", empNos["date"], empNos["bc"])
+                                    if res == "ok":
+                                        msg["ee"] = "%s二次送机派工成功!"%str(g1 + "-" + g2)
+                                        try:
+                                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工成功%s/" % (acno, flightno, str(g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                            requests.get(url=ip, timeout=30).json()
+                                        except Exception as e:
+                                            app_logger.log_error(e)
+                                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                if empNos["faillist"] != []:
+                                    msg["e"] = "以下人员派工失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                if empNos["code"] != "fail":
+                                    risktips = ""
+                                    if self.tableWidgetFlight.item(rowIndex, 8).text() != "":
+                                        res = self.getRiskData(self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 19).text(),acno)
+                                        risktips = f"\n    【风险提示】:{res}" if res != "" else ""
+                                    msgInfo = "二次送机任务推送!%s%s" % (fj, risktips)
+                                    res= self.send_dingdong(acno,self.tableWidgetFlight.item(rowIndex, 5).text(),
+                                                            self.tableWidgetFlight.item(rowIndex, 59).text(),
+                                                            "进" +self.tableWidgetFlight.item(rowIndex, 57).text().split("</br>")[0] + ",出" +self.tableWidgetFlight.item(rowIndex, 57).text().split("</br>")[1],
+                                                            self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 55).text(),
+                                                            empNos["ESempNos"], "",empNos["WX"],empNos["FX"],empNos["ES"],msgInfo)
+                                    if res == "ok":
+                                        msg["ff"] = "%s二次送机人员%s派工信息推送成功!!!" % (
+                                            acno, empNos["ES"])
+                                        self.severpost_nomeassge("infoConfirm2","/%s" % self.tableWidgetFlight.item(rowIndex, 19).text(),
+                                                                 "/%s" % self.tableWidgetFlight.item(rowIndex,53).text(),
+                                                                 "/%s" % self.displayMode, "/%s" % self.selectedtime)
+                                        try:
+                                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送成功%s/" % (acno, flightno, str(g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                            requests.get(url=ip, timeout=30).json()
+                                        except Exception as e:
+                                            app_logger.log_error(e)
+                                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                if empNos["faillist"] != []:
+                                    msg["f"] = "以下人员通知失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception as e:
+                                        app_logger.log_error(e)
+                                        QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                            msgs = ""
+                            for j in ["aa", "bb", "cc", "dd", "ee", "ff", "a", "b", "c", "d", "e", "f"]:
+                                if j in msg.keys():
+                                    if msgs == "":
+                                        msgs = msg[j]
+                                    else:
+                                        msgs = msgs + "\n" + msg[j]
+                            self.show_info("一键派工提示信息", msgs)
+                            self.QThreadSortNow("main")
+
+                        else:
+                            self.show_info("警告", "该航班非AMRO航班或者无任务编号,请确认是否为AMRO航班,如确认请使用AMRO人工派工和叮咚消息通知!!")
+                        return
+                    else:
+                        return
+            except Exception as e:
+                app_logger.log_error(e)
+        elif self.displayMode=="B":
+            for i in self.tableWidgetFlight.selectionModel().selection().indexes():
+                rowIndex = i.row()
+                colnum = self.tableWidgetFlight.columnCount()
+                flightids = self.tableWidgetFlight.item(rowIndex, colnum - 5).text()
+                flighttype = self.tableWidgetFlight.item(rowIndex, 9).text()
+                jjdq = self.tableWidgetFlight.item(rowIndex, 16).text()
+                hbdq = self.tableWidgetFlight.item(rowIndex, 17).text()
+                esdq=  self.tableWidgetFlight.item(rowIndex, 18).text()
+                dqfile=  self.tableWidgetFlight.item(rowIndex, 29).text()
+                menu = QMenu()
+                item1 = menu.addAction("工作单确认检查")
+                if "√"  in jjdq:
+                    item2 = menu.addAction("查看接机电签")
+                if "√"  in hbdq:
+                    item3 = menu.addAction("查看航班电签")
+                if "√"  in esdq:
+                    item4 = menu.addAction("查看送机电签")
+                screenPos = self.tableWidgetFlight.mapToGlobal(pos)
+                action = menu.exec(screenPos)
+
+                if action == item1:
+                    nowstr=self.user+str(datetime.datetime.now().timestamp()).split(".")[0]
+                    ip = "http://" + str(self.ipinfo) + "/static/updateDragDropItem/%s/%s/%s/%s/%s/%s" % ("10", nowstr, flightids, self.displayMode, flighttype, self.selectedtime)
+                    # print(ip)
+                    #self.tableWidgetFlight.setItem(int(rowIndex), column, QTableWidgetItem(str(nowstr)))
+                    try:
+                        requests.get(url=ip, timeout=30).json()
+                    except Exception as e:
+                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                        app_logger.log_error(e)
+                    self.QThreadSortNow("main")
+                    return
+                elif action == item2:
+                    dqlist=dqfile.split(",")
+                    result = [str(num) for num in dqlist if 'ARRIVAL-SERVICE' in str(num)]
+                    # 构建请求参数
+                    params = {"path": result}
+                    # 发送GET请求
+                    response = requests.get("http://" + str(self.ipinfo) + "/static/checkjobcard", params=params).content
+                    open_with_system_viewer(response)
+                    return
+                elif action == item3:
+                    dqlist=dqfile.split(",")
+                    result = [str(num) for num in dqlist if 'ARRIVAL-SERVICE' not in str(num) and 'DEPARTURE-SERVICE'  not in str(num)]
+                    # 构建请求参数
+                    params = {"path": result}
+                    # 发送GET请求
+                    response = requests.get("http://" + str(self.ipinfo) + "/static/checkjobcard", params=params).content
+                    open_with_system_viewer(response)
+                    return
+                elif action == item4:
+                    dqlist=dqfile.split(",")
+                    result = [str(num) for num in dqlist if 'DEPARTURE-SERVICE'  not in str(num)]
+                    # 构建请求参数
+                    params = {"path": result}
+                    # 发送GET请求
+                    response = requests.get("http://" + str(self.ipinfo) + "/static/checkjobcard", params=params).content
+                    open_with_system_viewer(response)
+                    return
+
+        else:
+            QMessageBox.warning(self, "提示", "权限不够,请联系管理员!")
+
+    def tableWidgetPhoneDispaly(self):
+        try:
+            phoneLabel = ["序号", "姓名", "部门", "电话","name"]
+            col = len(phoneLabel)
+            diplaylist = self.sorttableWidgetPHONEDispalydata
+            self.tableWidget_3.setRowCount(len(diplaylist.keys()))
+            for row in diplaylist.keys():
+                for colNum in range(0, col):
+                    if colNum == 0:
+                        self.tableWidget_3.setItem(int(row), colNum, QTableWidgetItem(str(int(row)+1)))
+                        self.tableWidget_3.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    else:
+                        self.tableWidget_3.setItem(int(row), colNum, QTableWidgetItem(diplaylist[row][phoneLabel[colNum]]))
+                        self.tableWidget_3.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+            self.tableWidget_3.resizeColumnsToContents()
+            self.tableWidget_3.setColumnHidden(4, True)
+
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def tableWidgetPeopleDisplay(self):
+        try:
+            peopleLabel = ["序号", "姓名", "角色", "授权"]
+            col = len(peopleLabel)
+            diplaylist = self.sortdiplaylist
+            self.tableWidgetPerson.setRowCount(len(diplaylist.keys()))
+            for row in diplaylist.keys():
+                for colNum in range(0, col):
+                    if colNum == 0:
+                        self.tableWidgetPerson.setItem(int(row), colNum, QTableWidgetItem(str(int(row)+1)))
+                    else:
+                        self.tableWidgetPerson.setItem(int(row), colNum,QTableWidgetItem(diplaylist[row][peopleLabel[colNum]]))
+                    self.tableWidgetPerson.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    if colNum == 3:
+                        self.tableWidgetPerson.item(int(row), 3).setToolTip("%s" % (str(diplaylist[row][peopleLabel[colNum]])))
+            self.tableWidgetPerson.resizeColumnsToContents()
+            self.tableWidgetPerson.setWordWrap(True)
+            self.tableWidgetPerson.setColumnWidth(3, 125)
+
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def enter_item_slot(self, item):
+        try:
+            self.tool_tip = item.text()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def tableWidgetDispaly(self):
+        try:
+            selftaxi = ["166", "166L", "166R", "167", "167L", "167R", "168", "169", "170", "171", "172", "173", "174",
+                        "269", "270", "271", "272", "273", "274", "275", "287", "288", "601", "602", "603", "604",
+                        "605", "606", "607", "607L", "607R"]  # 自滑位
+            if self.sorttableWidgetDispalydata != "":
+                # print("刷新开始")
+                # dateNow=datetime.datetime.now()
+                tableWidgetDispalydata = self.sorttableWidgetDispalydata
+                col = len(self.displayLabel)
+                self.tableWidgetFlight.setRowCount(len(tableWidgetDispalydata.keys()))
+                for row in tableWidgetDispalydata.keys():
+                    for colNum in range(0, col):
+                        if colNum == 13:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                        elif colNum == 15:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                        elif colNum == 18:
+                            if tableWidgetDispalydata[row][str(colNum)] in selftaxi and tableWidgetDispalydata[row][str(colNum)] != "":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("lightgreen"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("black"))
+                                if "自滑机位" not in tableWidgetDispalydata[row][str(61)]:
+                                    flightid = tableWidgetDispalydata[row][str(53)]
+                                    # print(flightid)
+                                    flighttype = tableWidgetDispalydata[row]["19"]
+                                    fjxx = "自滑机位;" + str(tableWidgetDispalydata[row][str(61)])
+                                    ip = "http://" + str(self.ipinfo) + "/static/updateEidteItem/" + "%s/" % str(
+                                        fjxx) + "%s/" % str(flightid) + "%s/" % str(self.displayMode) + "%s/" % str(
+                                        flighttype) + "%s" % str(self.selectedtime)
+                                    try:
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception as e:
+                                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                        app_logger.log_error(e)
+                                if self.displayMode =="A":
+                                    for colNum2 in (21, 23, 25, 27, 29):
+                                        if tableWidgetDispalydata[row][str(colNum2)] != "" and "*" not in str(tableWidgetDispalydata[row][str(colNum2)]):
+                                            self.severpost_nomeassge("selftaxiLogs", "/%s请通知%s,%s为自滑位,注意特殊机位保障要求!" % (tableWidgetDispalydata[row]["5"], tableWidgetDispalydata[row][str(colNum2)],
+                                                tableWidgetDispalydata[row]["8"]),"/%s" % tableWidgetDispalydata[row][str(53)], "","")
+                                            self.severpost_nomeassge("infoConfirm3","/%s" % tableWidgetDispalydata[row][str(19)],"/%s" % tableWidgetDispalydata[row][str(53)],
+                                                                     "/%s" % self.displayMode, "/%s" % self.selectedtime)
+
+                            elif tableWidgetDispalydata[row][str(colNum)] not in selftaxi or tableWidgetDispalydata[row][str(colNum)] == "":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground( QColor(str(tableWidgetDispalydata[row]["101"])))
+                            font = QFont()
+                            # font.setFamily("SimHei")
+                            font.setFamily("Microsoft YaHei")
+                            font.setBold(True)
+
+                            self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+                        elif colNum == 19:
+                            if tableWidgetDispalydata[row][str(colNum)] == "短停送" or tableWidgetDispalydata[row][str(colNum)] == "特后前送":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str("blue")))
+                                font = QFont()
+                                font.setFamily("Microsoft YaHei")
+                                font.setBold(True)
+                                self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+
+                            else:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+
+                        elif 19 < colNum < 31:
+                            if "√" in tableWidgetDispalydata[row][str(colNum)] or tableWidgetDispalydata[row][str(colNum)] == "":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)]).replace("*","")))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                            if tableWidgetDispalydata[row][str(colNum)] != "" and "√" not in tableWidgetDispalydata[row][str(colNum)]:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)]).replace("*","")))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("black"))
+                        elif colNum == 61:
+                            if str(tableWidgetDispalydata[row][str(colNum)]) != "" and str(tableWidgetDispalydata[row][str(colNum)]) != None:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("red"))
+                                font = QFont()
+                                font.setFamily("Microsoft YaHei")
+                                font.setBold(True)
+                                self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+                            else:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                                font = QFont()
+                                font.setFamily("Microsoft YaHei")
+                                font.setBold(True)
+                                self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+
+                            if "二拖" in tableWidgetDispalydata[row][str(colNum)]:
+                                for selftaxiPostion in selftaxi:
+                                    if selftaxiPostion in tableWidgetDispalydata[row][str(colNum)]:
+                                        for colNum2 in (21, 23, 25, 27, 29):
+                                            if tableWidgetDispalydata[row][str(colNum2)] != "":
+                                                self.severpost_nomeassge("selftaxiLogs","/%s请通知%s,%s二拖机位目的机位为自滑位,注意特殊机位保障要求!" % (
+                                                     tableWidgetDispalydata[row]["5"],tableWidgetDispalydata[row][str(colNum2)],
+                                                     tableWidgetDispalydata[row]["8"]),"/%s" % tableWidgetDispalydata[row][str(53)], "", "")
+                        elif colNum == 49:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                            if tableWidgetDispalydata[row][str(colNum)] != "":
+                                for i in tableWidgetDispalydata[row][str(colNum)].split(","):
+                                    if "√" not in i:
+                                        self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("yellow"))
+                                        self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("black"))
+                                        break
+                                    else:
+                                        self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                        self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                            else:
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                        elif colNum == 51:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                            if tableWidgetDispalydata[row][str(colNum)] != "" and "√" not in tableWidgetDispalydata[row][str(colNum)]:
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("black"))
+                            else:
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+
+
+                        elif 0 < colNum < 11:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+
+                            if colNum == 5 and tableWidgetDispalydata[row][str(colNum)] in ["8182","8185","8186"] and tableWidgetDispalydata[row][str(19)] =="航前":
+
+                                if "【工具提示】无TPIS,带胎压表" not in tableWidgetDispalydata[row][str(61)] and self.displayMode == "A":
+                                    flightid = tableWidgetDispalydata[row][str(53)]
+                                    # print(flightid)
+                                    flighttype = tableWidgetDispalydata[row]["19"]
+                                    fjxx = "【工具提示】无TPIS,带胎压表;" + str(tableWidgetDispalydata[row][str(61)])
+                                    ip = "http://" + str(self.ipinfo) + "/static/updateEidteItem/" + "%s/" % str(fjxx) + "%s/" % str(flightid) + "%s/" % str(self.displayMode) + "%s/" % str(flighttype) + "%s" % str(self.selectedtime)
+                                    try:
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception as e:
+                                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                        app_logger.log_error(e)
+
+                        elif colNum == 0:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(int(row)+1)))
+
+                        else:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem( str(tableWidgetDispalydata[row][str(colNum)])))
+
+                        if colNum not in [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,49,51, 61]:
+                            self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+
+                        if colNum not in [4 , 6]:
+                            self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        else:
+                            self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignCenter)
+                            self.tableWidgetFlight.setRowHeight(int(row), 35)
+
+                        if self.displayMode == "A":
+                            settips={0:"53",4:"62",49:"50",19:"47",11:"57",13:"57",15:"57",45:"45",61:"61",6:"17",38:"40",}
+                            for key,value in settips.items():
+                                if self.tableWidgetFlight.item(int(row), key):
+                                    if key not in [11,13,15]:
+                                        self.tableWidgetFlight.item(int(row), key).setToolTip("%s" % (str(tableWidgetDispalydata[row][str(value)])))
+                                    else:
+                                        self.tableWidgetFlight.item(int(row), key).setToolTip("%s" % (str(tableWidgetDispalydata[row][str(value)].replace("</br>", "\n"))))
+                        else:
+                            self.tableWidgetFlight.item(int(row), 0).setToolTip("[%s,%s]" % ( str(tableWidgetDispalydata[row][str(col - 5)]),str(tableWidgetDispalydata[row][str(col - 4)])))
+                            for ii in range (1,4):
+                                try:
+                                    self.tableWidgetFlight.item(int(row), ii).setToolTip("%s" % str(tableWidgetDispalydata[row][str(24)]))
+                                except Exception:
+                                    pass
+
+                if self.displayMode == "A":
+                    self.tableWidgetFlight.resizeColumnsToContents()
+                    self.tableWidgetFlight.setWordWrap(True)
+                    for i in range(col):
+                        if i in [1,2,3,5,7,8,9,10,12,14,16,17,20,22,24,26,28,30,32,34,36,39,40,42,43,44,46,47,48,50,52,53,54,55,56,57,58,59,60,62,63,64,65]:
+                            self.tableWidgetFlight.setColumnHidden(i, True)
+                        else:
+                            self.tableWidgetFlight.setColumnHidden(i, False)
+                        if i in [21, 23, 25, 27, 29, 31]:
+                            self.tableWidgetFlight.setColumnWidth(i, 70)
+                        elif i in [45]:
+                            self.tableWidgetFlight.setColumnWidth(i, 45)
+                else:
+                    for i in range(col):
+                        if i in [col - 9, col - 11, col - 12, 19, 20, 21, 22, 23, 28, 29, 30, 31]:
+                            self.tableWidgetFlight.setColumnHidden(i, True)
+                        else:
+                            self.tableWidgetFlight.setColumnHidden(i, False)
+                    self.tableWidgetFlight.resizeColumnsToContents()
+                    self.tableWidgetFlight.setColumnWidth(10, 70)
+                    self.tableWidgetFlight.setColumnWidth(11, 70)
+                    self.tableWidgetFlight.setColumnWidth(12, 70)
+                    self.tableWidgetFlight.setColumnWidth(13, 70)
+                    self.tableWidgetFlight.setColumnWidth(14, 70)
+                    self.tableWidgetFlight.setColumnWidth(15, 70)
+                    self.tableWidgetFlight.setColumnWidth(22, 45)
+                #self.tableWidgetFlight.resizeRowsToContents()
+                # print("刷新结束")
+                # print(datetime.datetime.now() - dateNow)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def on_completer_activated(self, text):
+        try:
+            if text:
+                index = self.comboBox.findText(text)
+                self.comboBox.setCurrentIndex(index)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def LM_TSK_SURE_PG(self):
+        try:
+            data = {
+                "empNos": dict["empNos"],  # 员工号
+                "taskid": dict["taskid"],  # taskid
+                "type": dict["type"],  # 类型
+                "shiftDate": dict["shiftDate"],  # 上班日期
+                "shift": dict["shift"],  # 班次
+            }
+            self.severpostData_nomeassge("LM_TSK_SURE_PG", data)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def dingdong(self):
+        try:
+            data = {
+                "acno": dict["empNos"],  # 机号
+                "actype": dict["taskid"],  # 机型
+                "tasktype": dict["type"],  # 任务类型
+                "tatd": dict["shiftDate"],  # 起飞/落地时间
+                "msgInfo": dict["shift"],  # 消息
+                "bay": dict["empNos"],  # 机位
+                "wxemp": dict["taskid"],  # 维修人员员工号
+                "fxemp": dict["type"],  # 放行人员员工号
+                "wx": dict["shiftDate"],  # 维修人员
+                "fx": dict["shift"],  # 放行人员
+                "ecsj": dict["shift"],  # 二次送机人员
+
+            }
+            self.severpostData_nomeassge("dingdong", data)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def update_pglistA(self, text):
+        try:
+            self.severpost_nomeassge("getPglist", "A", "", "", "")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def update_pglistB(self, text):
+        try:
+            self.severpost_nomeassge("getPglist", "B", "", "", "")
+        except Exception as e:
+            app_logger.log_error(e)
+
+
+
+
+
+
+
+
+
+if __name__ == '__main__':
+    app = QApplication(sys.argv)
+    mw = MainWidget()
+
+    sys.exit(app.exec())

+ 5383 - 0
Functions/QTMain_old.py

@@ -0,0 +1,5383 @@
+import datetime
+import socket
+import sys
+import time
+import traceback
+from PyQt6 import QtCore
+from PyQt6.QtCore import Qt, QThread, pyqtSignal, QRunnable, QObject, pyqtSlot, QThreadPool, QTimer, \
+    QSortFilterProxyModel
+from PyQt6.QtGui import QColor, QFont,QPalette
+from PyQt6.QtTextToSpeech import QTextToSpeech
+from PyQt6.QtWidgets import QApplication, QWidget, QMessageBox, QPushButton, QTableWidgetItem, QFileDialog, \
+    QAbstractItemView, \
+    QCompleter, QMenu
+import requests
+import os
+import json
+from openpyxl import Workbook
+from UI.main2 import Ui_Form
+from Functions import utils
+from UI.checkCalllist import Ui_checkCalllist
+from UI.login import Ui_login
+from UI.addloaclip import Ui_Addloacalip
+from UI.checkLoadSingal import Ui_checkLoadSingal
+from UI.searchpeople_get import Ui_searchpeople_get
+from UI.amroLogin import Ui_amroLogin
+from UI.amroLogin2 import Ui_amroLogin2
+from UI.adduser import Ui_FormAdduser
+from UI.handoverFlight import Ui_handoverFlight
+from UI.AddPG import Ui_FormAddPG
+from UI.addFlight import Ui_FormAddFlight
+from UI.findserver import Ui_FormLink
+from UI.changePassword import Ui_FormChangePssword
+from UI.checkLogs import Ui_checkLogs
+from UI.changeAuth import Ui_changeAuth
+
+from UI.mapWeb import Ui_FormMapWeb
+from Functions import serverFind
+from Functions.QtFunctions import ipcall
+import logging
+import logging.handlers
+from logging.handlers import RotatingFileHandler
+
+logger = logging.getLogger()
+logger.setLevel(logging.INFO)  # Log等级总开关
+# 第二步,创建一个handler,用于写入日志文件
+rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
+log_name = 'D:/flightinfo/logs/BUGLOGS_qtmain.log'
+logfile = log_name
+fh = RotatingFileHandler(logfile, mode='a', maxBytes=10485760, backupCount=1, encoding='utf-8')
+fh.setLevel(logging.DEBUG)  # 输出到file的log等级的开关
+# 第三步,定义handler的输出格式
+formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
+fh.setFormatter(formatter)
+# 第四步,将logger添加到handler里面
+logger.addHandler(fh)
+
+
+
+
+class setlocalip(QObject):
+    localipupdate = pyqtSignal(str)
+
+    def __init__(self, ip, thread):
+        super().__init__()
+        self.ip = ip
+        self.thread = thread
+
+    def run(self):
+        # print("jjingruy1")
+        try:
+            if self.ip != None:
+                try:
+                    localcalltry = ipcall.searchinfo()
+                    self.localtoken = localcalltry.start(self.ip)
+                    # print("本地测试print(self.localtoken)")
+                    # print(self.localtoken)
+                except Exception:
+                    self.localtoken = None
+                    self.localtoken = None
+                    logger.error(traceback.format_exc())
+            else:
+                self.localtoken = None
+            self.localipupdate.emit(self.localtoken)
+            self.thread.quit()
+        except Exception:
+            logger.error(traceback.format_exc())
+            self.thread.quit()
+
+
+class sortdisplaySever(QObject):
+    sortupdate = pyqtSignal(str, dict, list, str, str)
+
+    def __init__(self, name, ip, selectedtime, text, displayMode, selectedbc, displayselect, thread):
+        super().__init__()
+        self.funcName = name
+        self.ipinfo = ip
+        self.selectedtime = selectedtime
+        self.text = text
+        self.displayMode = displayMode
+        self.selectedbc = selectedbc
+        self.displayselect_mode = displayselect
+        self.thread = thread
+        nowDay = datetime.datetime.now().strftime("%Y%m%d")
+        tomorr =(datetime.date.today() + datetime.timedelta(days=1)).strftime("%Y%m%d")
+        yester =(datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y%m%d")
+        if self.selectedtime == nowDay:
+            self.date="2"
+        elif self.selectedtime == tomorr:
+            self.date = "3"
+        elif self.selectedtime == yester:
+            self.date = "1"
+        else:
+            self.date = "4"
+
+    def run(self):
+        try:
+            list = []
+            if self.funcName == "sortTableWidgetDispaly":
+                #print("1")
+                self.sortTableWidgetDispaly()
+                self.sortupdate.emit("sortTableWidgetDispaly", self.sorttableWidgetDispalydata, list, self.seversts,self.displayMode)
+                self.sortupdate.emit("sortTableWidgetDispalyALL", self.DispalydataAll, list, self.seversts,self.displayMode)
+            if self.funcName == "sortTableWidgetDispalyALL":
+                #print("2")
+                self.sortTableWidgetDispalyALL()
+                self.sortupdate.emit("sortTableWidgetDispalyALL", self.sorttableWidgetDispalydata, list, self.seversts,self.displayMode)
+            elif self.funcName == "SearchsortTableWidgetDispaly":
+                #print("3")
+                self.SearchsortTableWidgetDispaly()
+                self.sortupdate.emit("SearchsortTableWidgetDispaly", self.sorttableWidgetDispalydata, list,self.seversts,self.displayMode)
+            elif self.funcName == "sorttableWidgetDisplayChange":
+                #print("4")
+                self.sorttableWidgetDisplayChange()
+                self.sortupdate.emit("sorttableWidgetDisplayChange", self.sortlogchange, list, self.seversts,self.displayMode)
+            elif self.funcName == "sorttableWidgetPeopleDisplay":
+                self.sorttableWidgetPeopleDisplay()
+                self.sortupdate.emit("sorttableWidgetPeopleDisplay", self.sortdiplaylist, self.peopleOnJob,self.seversts, self.displayMode)
+            elif self.funcName == "sorttableWidgetLOGDispaly":
+                self.sorttableWidgetLOGDispaly()
+                self.sortupdate.emit("sorttableWidgetLOGDispaly", self.sortlog, list, self.seversts, self.displayMode)
+            elif self.funcName == "sorttableWidgetPHONEDispaly":
+                self.sorttableWidgetPHONEDispaly()
+                self.sortupdate.emit("sorttableWidgetPHONEDispaly", self.sorttableWidgetPHONEDispalydata, list,self.seversts, "")
+            self.thread.quit()
+        except Exception:
+            logger.error(traceback.format_exc())
+            self.thread.quit()
+
+    def severpost_nomeassge(self, postname, postdata, postdata2, postdata3):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2) + str(postdata3)
+            try:
+                res = requests.get(url=ip, timeout=30).json()
+                self.seversts = "1"
+                return res
+            except Exception:
+                logger.error(traceback.format_exc())
+                logger.error("重大bug")
+                logger.error(ip)
+                self.seversts = "0"
+                return []
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def sorttableWidgetPHONEDispaly(self):
+        try:
+            sorttableWidgetPHONEDispalydataall = self.severpost_nomeassge("getphonelist", "", "", "")
+            self.sorttableWidgetPHONEDispalydata = {}
+            num = 0
+            if sorttableWidgetPHONEDispalydataall != None:
+                if self.text != "":
+                    for i in sorttableWidgetPHONEDispalydataall.keys():
+                        if str.lower(str(self.text)) in str(sorttableWidgetPHONEDispalydataall[i]):
+                            self.sorttableWidgetPHONEDispalydata[str(num)] = sorttableWidgetPHONEDispalydataall[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetPHONEDispalydata = sorttableWidgetPHONEDispalydataall
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def sortTableWidgetDispaly(self):
+        try:
+            text = self.text
+            Partdisplay = self.displayselect_mode  # 不显示起飞航班
+            # print(Partdisplay)
+            tableWidgetDispalydataAll = {}
+            if self.displayMode == "A" and (self.selectedbc == "0" or self.date=="4"):
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispaly", "/%s" % self.selectedtime,"/%s"%self.date,"")
+            elif self.displayMode == "B"and (self.selectedbc == "0" or self.date=="4"):
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispaly2", "/%s" % self.selectedtime,"/%s"%self.date,"")
+            elif self.displayMode == "A" and self.selectedbc == "1":
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispalyRead","/%s"%self.date,"","")
+            elif self.displayMode == "B"and self.selectedbc == "1":
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispalyRead2","/%s"%self.date,"","")
+            self.DispalydataAll=tableWidgetDispalydataAll
+            self.sorttableWidgetDispalydata = {}
+            num = 0
+            if tableWidgetDispalydataAll != None:
+                if text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]):
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "1":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1" and \
+                                    str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6"  and text != "T1T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]) and tableWidgetDispalydataAll[i]["109"] != '4':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "1":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1" and \
+                                    str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(tableWidgetDispalydataAll[i]["109"])
+                        if tableWidgetDispalydataAll[i]["109"] != '4':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]) and tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "1":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1" and \
+                                    str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(tableWidgetDispalydataAll[i]["109"])
+                        if tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetDispalydata = tableWidgetDispalydataAll
+            else:
+                self.sorttableWidgetDispalydata = self.sortTableWidgetDispaly_bak()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def sortTableWidgetDispaly_bak(self):
+        try:
+            text = self.text
+            Partdisplay = self.displayselect_mode  # 不显示起飞航班
+            # print(Partdisplay)
+            tableWidgetDispalydataAll = {}
+            if self.displayMode == "A" and (self.selectedbc == "0" or self.date == "4"):
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispaly", "/%s" % self.selectedtime,
+                                                                     "/%s" % self.date, "")
+            elif self.displayMode == "B" and (self.selectedbc == "0" or self.date == "4"):
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispaly2", "/%s" % self.selectedtime,
+                                                                     "/%s" % self.date, "")
+            elif self.displayMode == "A" and self.selectedbc == "1":
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispalyRead", "/%s" % self.date, "",
+                                                                     "")
+            elif self.displayMode == "B" and self.selectedbc == "1":
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispalyRead2", "/%s" % self.date, "", "")
+            self.DispalydataAll=tableWidgetDispalydataAll
+            sorttableWidgetDispalydata = {}
+            num = 0
+            if tableWidgetDispalydataAll != None:
+                if text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]):
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "1":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1" and \
+                                    str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6"  and text != "T1T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]) and tableWidgetDispalydataAll[i]["109"] != '4':
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "1":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1" and \
+                                    str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(tableWidgetDispalydataAll[i]["109"])
+                        if tableWidgetDispalydataAll[i]["109"] != '4':
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]) and tableWidgetDispalydataAll[i]["109"] == '1':
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "1":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1" and \
+                                    str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(tableWidgetDispalydataAll[i]["109"])
+                        if tableWidgetDispalydataAll[i]["109"] == '1':
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                else:
+                    sorttableWidgetDispalydata = tableWidgetDispalydataAll
+            return sorttableWidgetDispalydata
+        except Exception:
+            logger.error(traceback.format_exc())
+    def sortTableWidgetDispalyALL(self):
+        try:
+            if self.displayMode == "A" and (self.selectedbc == "0" or self.date=="4"):
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispaly", "/%s" % self.selectedtime,"/%s"%self.date,"")
+            elif self.displayMode == "B"and (self.selectedbc == "0" or self.date=="4"):
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispaly2", "/%s" % self.selectedtime,"/%s"%self.date,"")
+            elif self.displayMode == "A" and self.selectedbc == "1":
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispalyRead","/%s"%self.date,"","")
+            elif self.displayMode == "B"and self.selectedbc == "1":
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispalyRead2","/%s"%self.date,"","")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+
+    def SearchsortTableWidgetDispaly(self):
+        try:
+            text = self.text
+            self.seversts = "1"
+            Partdisplay = self.displayselect_mode  # 不显示起飞航班
+            # print(Partdisplay)
+            tableWidgetDispalydataAll = self.selectedbc
+
+            self.sorttableWidgetDispalydata = {}
+            num = 0
+            if tableWidgetDispalydataAll != None:
+                if text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6"and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]):
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "1":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1" and \
+                                    str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]) and tableWidgetDispalydataAll[i]["109"] != '4':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "1":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1" and \
+                                    str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(tableWidgetDispalydataAll[i]["109"])
+                        if tableWidgetDispalydataAll[i]["109"] != '4':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]) and tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "1":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1" and \
+                                    str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(tableWidgetDispalydataAll[i]["109"])
+                        if tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetDispalydata = tableWidgetDispalydataAll
+            else:
+                self.sorttableWidgetDispalydata = self.SearchsortTableWidgetDispaly_bak()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def SearchsortTableWidgetDispaly_bak(self):
+        try:
+            text = self.text
+            self.seversts = "1"
+            Partdisplay = self.displayselect_mode  # 不显示起飞航班
+            # print(Partdisplay)
+            tableWidgetDispalydataAll = self.selectedbc
+
+            sorttableWidgetDispalydata = {}
+            num = 0
+            if tableWidgetDispalydataAll != None:
+                if text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6"  and text != "T1T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]):
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "1":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T6" and Partdisplay == "0":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "":
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1" and \
+                                    str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]) and tableWidgetDispalydataAll[i]["109"] != '4':
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "1":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T6" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] != '4':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1" and \
+                                    str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "" and Partdisplay == "1":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(tableWidgetDispalydataAll[i]["109"])
+                        if tableWidgetDispalydataAll[i]["109"] != '4':
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6"and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]) and tableWidgetDispalydataAll[i]["109"] == '1':
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "1":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] == "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T2T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T6" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(str(tableWidgetDispalydataAll[i]["8"]))
+                        if str(tableWidgetDispalydataAll[i]["8"]) != "" and tableWidgetDispalydataAll[i]["109"] == '1':
+                            if str(tableWidgetDispalydataAll[i]["8"])[0] != "1" and \
+                                    str(tableWidgetDispalydataAll[i]["8"])[0] != "2":
+                                sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                                num += 1
+                        elif str(tableWidgetDispalydataAll[i]["8"]) == "" and str(tableWidgetDispalydataAll[i]["109"]) == "1":
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "" and Partdisplay == "3":
+                    # print(tableWidgetDispalydataAll)
+                    for i in tableWidgetDispalydataAll.keys():
+                        # print(tableWidgetDispalydataAll[i]["109"])
+                        if tableWidgetDispalydataAll[i]["109"] == '1':
+                            sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                else:
+                    sorttableWidgetDispalydata = tableWidgetDispalydataAll
+            return sorttableWidgetDispalydata
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def sorttableWidgetDisplayChange(self):
+        try:
+            text = self.text
+            logall = self.severpost_nomeassge("tableWidgetDisplayChange", "/%s" % self.selectedtime, "", "")
+            self.sortlogchange = {}
+            num = 0
+            if text != "":
+                for i in logall.keys():
+                    if str(text) in str(logall[i]):
+                        self.sortlogchange[str(num)] = logall[i]
+                        num += 1
+            else:
+                self.sortlogchange = logall
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def sorttableWidgetPeopleDisplay(self):
+        try:
+            if self.displayselect_mode == "" or self.displayselect_mode == []:
+                text = self.text
+                self.peopleOnJob = [""]
+                bc = self.selectedbc
+                nowDaystr = self.selectedtime  # 选择的日期
+                diplaylistall = self.severpost_nomeassge("qtPeopleLoad", "/%s" % nowDaystr, "/%s" % bc, "")
+                self.sortdiplaylist = {}
+                num = 0
+                if text != "":
+                    for i in diplaylistall.keys():
+                        if str(text) in str(diplaylistall[i]):
+                            self.sortdiplaylist[str(num)] = diplaylistall[i]
+                            num += 1
+                else:
+                    self.sortdiplaylist = diplaylistall
+                for i in self.sortdiplaylist.keys():
+                    self.peopleOnJob.append(self.sortdiplaylist[i]["姓名"])
+            else:
+                names = self.displayselect_mode
+                text = self.text
+                self.peopleOnJob = [""]
+                bc = self.selectedbc
+                nowDaystr = self.selectedtime  # 选择的日期
+                diplaylistall = self.severpost_nomeassge("qtPeopleLoad", "/%s" % nowDaystr, "/%s" % bc, "")
+                self.sortdiplaylist = {}
+                num = 0
+                if text != "":
+                    for i in diplaylistall.keys():
+                        if str(text) in str(diplaylistall[i]):
+                            for name in names:
+                                if str(name) in str(diplaylistall[i]):
+                                    self.sortdiplaylist[str(num)] = diplaylistall[i]
+                                    num += 1
+                else:
+                    for i in diplaylistall.keys():
+                        for name in names:
+                            if str(name) in str(diplaylistall[i]):
+                                self.sortdiplaylist[str(num)] = diplaylistall[i]
+                                num += 1
+                for i in self.sortdiplaylist.keys():
+                    self.peopleOnJob.append(self.sortdiplaylist[i]["姓名"])
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def sorttableWidgetLOGDispaly(self):
+        try:
+            text = self.text
+            logall = self.severpost_nomeassge("tableWidgetLOGDispaly", "/%s" % self.selectedtime, "", "")
+            self.sortlog = {}
+            num = 0
+            if text != "":
+                for i in logall.keys():
+                    if str(text) in str(logall[i]):
+                        self.sortlog[str(num)] = logall[i]
+                        num += 1
+            else:
+                self.sortlog = logall
+        except Exception:
+            logger.error(traceback.format_exc())
+
+
+class MainWidget(QWidget, Ui_Form):
+    AddPG_signal = QtCore.pyqtSignal(str, str, str)
+    LoginWidget_signal = QtCore.pyqtSignal(str)
+    addUserWidget_signal = QtCore.pyqtSignal(str)
+
+    def __init__(self):
+        super().__init__()
+        try:
+            self.displaySelectstr3 = "0"
+            self.displaySelect_mode = "1"
+            self.sum = 0
+            self.flightsum = 0
+            self.localip = None
+            self.severupdatests = "0"
+            self.localtoken = None
+            self.searchpeoplestr = []
+            self.sorttableWidgetDispalydata = {}
+            self.sorttableWidgetDispalydataALL = {}
+            self.sortlogchange = {}
+            self.sortlog = {}
+            self.sortdiplaylist = {}
+            self.peopleOnJob = [""]
+            self.loginSts = False
+            self.amroLoginSts = False
+            self.findSever = False
+            self.FLIGHTonChange_text = ""
+            self.changeonChange_text = ""
+            self.logonChange_text = ""
+            self.threadpool = QThreadPool()
+            self.doubleclickLock = 0
+            self.vin="328"
+            self.timelock=datetime.datetime.now()
+            self.doubleclickLockUpdate = 0
+            self.maintainAuthCheckSts = 1
+            self.peolpleonChange_text = ""
+            self.changeupdatetime=datetime.datetime.now()
+            self.setupUi(self)
+            # self.show()
+            self.loginWidget = LoginWidget()
+            self.findServerWidget = findServerWidget()
+            self.mapWebPage = mapWebWidget()
+            self.checkCalllist = checkCalllist()
+            self.checkCalllist.checkCalllist_signal.connect(self.checkCalllistclose)
+
+            # self.amroLoginWidget = amroLoginWidget()
+            if self.findSever:
+                pass
+                # if self.loginSts:
+                #     self.show()
+                # else:
+                #     self.loginWidget.show()
+            else:
+                self.findServerWidget.show()
+
+            self.findServerWidget.selectServer_signal.connect(self.setServer)
+
+            # self.amroLoginWidget.amroLogin_signal.connect(self.displayMain)
+            # data
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def setServer(self, *args):
+        try:
+            #self.ipinfo = args[0] + ':9527'
+            self.ipinfo = args[0] + ':7162'
+            self.clickrow = ""
+            self.clickcolumn = ""
+            # print(self.ipinfo)
+            self.findServerWidget.close()
+            self.loginWidget.ipinfo = self.ipinfo
+            self.loginWidget.login_signal.connect(self.displayMain)
+            self.loginWidget.login_user.connect(self.setUser)
+            checksts="ok"
+            ip = "http://" + str(self.ipinfo) + "/static/remoteCheck/16"
+            res=requests.get(url=ip, timeout=180).json()
+            if res["返回值"] != "ok":
+                checksts = res["返回值"]
+
+            if checksts == "ok":
+                if self.loginSts:
+                    self.initDisplay()
+                    self.show()
+                else:
+                    self.loginWidget.show()
+            else:
+                QMessageBox.warning(self, "提示", "有新版更新!请前往NAS共享平台[机务一队/天府机务分部/31准备组无纸化办公/1航班助手]获取综合平台最新版本【最新版版本号:%s】!!"%checksts)
+                self.close()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def remotelogin(self):
+        self.amrologin = amroLoginWidget()
+        self.amrologin.ipinfo = self.ipinfo
+        self.amrologin.show()
+
+    def remoteCookielogin(self):
+        self.amrologin = amroLoginWidget2()
+        self.amrologin.ipinfo = self.ipinfo
+        self.amrologin.show()
+
+    def setIpPhone(self):
+        try:
+            res=""
+            if os.path.exists("ipPhoneIp.code") is True:
+                read_path = os.getcwd() + "\\ipPhoneIp.code"
+                with open(read_path, "r", encoding="utf-8") as f2:
+                    rember_2 = f2.read()
+                try:
+                    ip = "http://" + str(self.ipinfo) + "/static/setIpPhone/%s" % rember_2
+                    res=requests.get(url=ip, timeout=180).json()["返回值"]
+                except Exception:
+                    QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员!")
+                    logger.error(traceback.format_exc())
+                if res =="ok":
+                    QMessageBox.warning(self, "提示", "服务器IP电话配置成功,请测试后启用自动拨号!")
+                else:
+                    QMessageBox.warning(self, "警告", "服务器IP电话配置失败,建议重启自动拨号电话后再次配置!")
+            else:
+                QMessageBox.warning(self, "警告", "程序下未找到指定配置文件!")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def setLocalIpPhone(self):
+        try:
+            self.localipset = localipset()
+            self.localipset.localipset_signal.connect(self.setLocalIpPhoneip)
+            self.localipset.localip = self.localip
+            self.localipset.start()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def setLocalIpPhoneip(self, *args):
+        try:
+            self.localip = args[0]
+            self.QThreadSortNow("setlocalip")
+            self.localipset.close()
+            # print(self.localip)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def checkCalllistupdate(self):
+        try:
+            self.checkCalllist.ipinfo = self.ipinfo
+            self.checkCalllist.selectedtime = self.selectedtime
+            self.checkCalllist.start()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def checkCalllistclose(self, *args):
+        try:
+            reply = args[0]
+            # print(reply)
+            if reply == "StandardButton.Yes":
+                self.checkCalllist.hide()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def showcheckLogs(self):
+        try:
+            self.checkLogs = checkLogs()
+            self.checkLogs.ipinfo = self.ipinfo
+            self.checkLogs.start()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def initDisplay(self):
+        try:
+            self.oldjsondata = None
+            self.cookie = None
+            self.fl = None
+            self.Auth=9999
+            self.tts = QTextToSpeech()
+            self.tts.setEngine('sapi')
+
+            nowDay = datetime.datetime.now()
+            nowDayStr = nowDay.strftime("%Y%m%d")
+            self.dateEdit.setDateTime(nowDay)
+            self.selectedtime = self.dateEdit.date().toString('yyyyMMdd')
+
+            # self.setipinfo()
+            self.initFlightDatabase()
+            # self.radioButtonDay.
+
+            phoneLabel = ["序号", "姓名", "部门", "电话","name"]
+            self.tableWidget_3.setColumnCount(len(phoneLabel))
+            self.tableWidget_3.verticalHeader().setVisible(False)
+            self.tableWidget_3.setHorizontalHeaderLabels(phoneLabel)
+            self.lineEdit_phonenum.textChanged.connect(self.changeonPhone)
+            self.tableWidget_3.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
+            self.tableWidget_3.customContextMenuRequested.connect(self.generateMenu3)
+
+            peopleLabel = ["序号", "姓名", "角色", "总量", "当前", "最后时间"]
+            self.tableWidgetPerson.setColumnCount(len(peopleLabel))
+            self.tableWidgetPerson.verticalHeader().setVisible(False)
+            self.tableWidgetPerson.setHorizontalHeaderLabels(peopleLabel)
+            self.tableWidgetPerson.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
+            self.tableWidgetPerson.customContextMenuRequested.connect(self.generateMenu2)
+
+            self.pushButton.clicked.connect(self.selectedtime_bc)
+            self.radioButtonDay.toggled.connect(self.selected_bc_A)
+            self.radioButtonNight.toggled.connect(self.selected_bc_B)
+            judge_bc = self.severpost_nomeassge("judge_bc", "", "", "", "")["bc"]
+            if judge_bc == "A":
+                self.radioButtonDay.setChecked(True)
+            elif judge_bc == "B":
+                self.radioButtonNight.setChecked(True)
+
+            self.AddPG = AddPGWidget()
+            self.AddPG_signal.connect(self.AddPG.getname)
+            self.pushButtonAddPG.clicked.connect(self.AddPG_widget)
+
+            self.displayMode = "A"
+            self.displayLabel = ["备","序号","备","机号","航班信息","机型","机型信息","发动机","备","航班号","备","计达","备","预达",
+                                 "备","计飞","备","机位","备","类型","备","放行","备","工1","备","工2","备","工3","备","工4",
+                                 "备","班组长","备","到位","备","放行","备","销夹","备","随机","备","随机","备","保留","备","工作包",
+                                 "备","进出港城市","备","维修人员","备","放行","备","航班编号","备","任务编号","备","TATD","备","类型",
+                                 "备","附加消息","备","备","备","备"]
+
+
+            '''
+            self.displayLabel = ["序号", "机号", "机型", "发动机", "航班号", "计达", "预达", "计飞", "机位", "类型", "放行", "工1", "工2",
+                                 "工3", "工4", "班组长", "到位", "放行", "销夹", "随机", "随机", "保留", "工作包", "进出港城市", "维修人员",
+                                 "放行", "航班编号", "任务编号", "TATD", "类型", "附加消息"]
+            '''
+            self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+            self.tableWidgetFlight.cellDoubleClicked.connect(self.itemclick2)
+            self.tableWidgetFlight.cellClicked.connect(self.itemclick)
+            # self.lineEdit_phonenum.setText("")
+
+            # 允许单机右键响应
+            self.tableWidgetFlight.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
+            # 构建右键的点击事件
+            self.tableWidgetFlight.customContextMenuRequested.connect(self.generateMenu)
+
+            loglabel = ["序号", "待办信息", "操作", "编号", "航班编号", "提示内容"]
+            self.tableWidget.setColumnCount(len(loglabel))
+            self.tableWidget.verticalHeader().setVisible(False)
+            self.tableWidget.setHorizontalHeaderLabels(loglabel)
+
+
+            self.tableWidgetLOG.setColumnCount(2)
+            self.tableWidgetLOG.verticalHeader().setVisible(False)
+            self.tableWidgetLOG.setHorizontalHeaderLabels(["序号", '日志信息'])
+
+            self.checkBox.stateChanged.connect(self.displayChange)
+            self.checkBox.setChecked(True)
+
+            self.checkBox_2.stateChanged.connect(self.displaySelect2)
+            self.checkBox_2.setChecked(True)
+
+            self.checkBox_3.stateChanged.connect(self.displaySelect3)
+            self.checkBox_3.setChecked(False)
+
+            self.severpost_nomeassge("createWorkloadtablesFromPg", "/%s" % self.selectedtime, "", "", "")
+
+            self.pushbutton_searchflight.clicked.connect(self.FLIGHTonChangeman)
+            self.pushButton_searchpeople.clicked.connect(self.searchpeople)
+            self.pushButton_5.clicked.connect(self.disearchpeople)
+            self.pushButton_2.clicked.connect(self.call)
+            self.pushButton_3.clicked.connect(self.calldown)
+            self.pushButton_4.clicked.connect(self.relogin)
+            self.pushButton_searchchange.clicked.connect(self.changeonChange)
+            self.pushButton_searchlog.clicked.connect(self.logonChange)
+
+            self.lineEdit_flight.textEdited[str].connect(lambda: self.changebackground())
+            self.lineEdit_people.textEdited[str].connect(lambda: self.changebackground())
+            self.lineEdit_change.textEdited[str].connect(lambda: self.changebackground())
+            self.lineEdit_log.textEdited[str].connect(lambda: self.changebackground())
+            self.lineEdit_flight.textChanged.connect(self.FLIGHTonChange)
+            self.lineEdit_log.textChanged.connect(self.logonChange)
+            self.lineEdit_people.textChanged.connect(self.peolpleonChange)
+            self.lineEdit_change.textChanged.connect(self.changeonChange)
+
+            self.serchTimer = QTimer()
+            self.serchTimer.start(3 * 1000)
+            self.serchTimer.timeout.connect(self.QThreadSortTimer)
+            self.updatecheck()
+            self.taskAtuoCheck("1")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def searchpeople(self):
+        try:
+            self.searchpeoplelist = searchpeople_get()
+            self.searchpeoplelist.searchpeoplelist_signal.connect(self.searchpeople_get)
+            self.searchpeoplelist.ipinfo = self.ipinfo
+            self.searchpeoplelist.selectedtime = self.selectedtime
+            self.searchpeoplelist.selectedbc = self.selectedbc
+            self.searchpeoplelist.Allpeoplelist = self.sortdiplaylist
+            # self.searchpeoplelist.show()
+            self.searchpeoplelist.start()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def searchpeople_get(self, *args):
+        try:
+            # print(args)
+            self.searchpeoplestr = args[0]
+            self.QThreadSortNow("people")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def disearchpeople(self):
+        try:
+            self.searchpeoplestr = []
+            self.QThreadSortNow("people")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def call(self):
+        try:
+            if self.localtoken != None and self.localip != None:
+                callnum = self.lineEdit_phonenum.text()
+                try:
+                    data = {"PHB_AutoDialNumber": callnum,
+                            "ReturnPage": "/contacts.htm",
+                            "AutoDialSubmit": "submit",
+                            "PHB_AutoDialLine": "1"
+                            }
+                    header = {
+                        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+                        "Connection": "keep-alive",
+                        "Cookie": self.localtoken
+                    }
+                    requests.post(url="http://%s/contacts.htm" % self.localip, data=data, headers=header)
+                except Exception:
+                    QMessageBox.warning(self, "提示", "IP电话连接失败,请重新配置或再登陆!")
+                    logger.error(traceback.format_exc())
+
+            else:
+                QMessageBox.warning(self, "提示", "未配置本地IP电话,请先配置!")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def calldown(self):
+        try:
+            if self.localtoken != None and self.localip != None:
+                try:
+                    data1 = {"HangupSubmit": "submit"}
+                    header1 = {
+                        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+                        "Connection": "keep-alive",
+                        "Cookie": self.localtoken,
+                    }
+                    requests.post(url="http://%s/contacts.htm" % self.localip, data=data1, headers=header1)
+                except Exception:
+                    QMessageBox.warning(self, "提示", "IP电话连接失败,请重新配置或再登陆!")
+                    logger.error(traceback.format_exc())
+            else:
+                QMessageBox.warning(self, "提示", "未配置本地IP电话,请先配置!")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def relogin(self):
+        try:
+            if self.localip != None:
+                self.QThreadSortNow("setlocalip")
+            else:
+                QMessageBox.warning(self, "提示", "未配置本地IP电话,请先配置!")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def changebackground(self):
+        try:
+            FLIGHTonChange_text = self.lineEdit_flight.text()
+            peolpleonChange_text = self.lineEdit_people.text()
+            changeonChange_text = self.lineEdit_change.text()
+            logonChange_text = self.lineEdit_log.text()
+            if FLIGHTonChange_text != "":
+                self.lineEdit_flight.setStyleSheet("background-color:yellow;color:red;font-weight:bold")
+            else:
+                self.lineEdit_flight.setStyleSheet("background-color:white")
+            if peolpleonChange_text != "":
+                self.lineEdit_people.setStyleSheet("background-color:yellow;color:red;font-weight:bold")
+            else:
+                self.lineEdit_people.setStyleSheet("background-color:white")
+            if changeonChange_text != "":
+                self.lineEdit_change.setStyleSheet("background-color:yellow;color:red;font-weight:bold")
+            else:
+                self.lineEdit_change.setStyleSheet("background-color:white")
+            if logonChange_text != "":
+                self.lineEdit_log.setStyleSheet("background-color:yellow;color:red;font-weight:bold")
+            else:
+                self.lineEdit_log.setStyleSheet("background-color:white")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def changeonPhone(self):
+        try:
+            self.changeonPhone_text = self.lineEdit_phonenum.text()
+            self.QThreadSortNow("phone")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def FLIGHTonChange(self):
+        try:
+            self.FLIGHTonChange_text = self.lineEdit_flight.text()
+            # print(self.FLIGHTonChange_text)
+            self.QThreadSortNow("search")
+        except Exception:
+            logger.error(traceback.format_exc())
+    def FLIGHTonChangeman(self):
+        try:
+            now=datetime.datetime.now()- datetime.timedelta(seconds=5)
+            if now > self.timelock:
+                print("点击")
+                self.timelock=now + datetime.timedelta(seconds=5)
+                self.FLIGHTonChange_text = self.lineEdit_flight.text()
+                # print(self.FLIGHTonChange_text)
+                #self.QThreadSortNow("ALL")
+                self.QThreadSortNow("main")
+
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def peolpleonChange(self):
+        try:
+            self.peolpleonChange_text = self.lineEdit_people.text()
+            self.QThreadSortNow("people")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def changeonChange(self):
+        try:
+            self.changeonChange_text = self.lineEdit_change.text()
+            self.QThreadSortNow("change")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def logonChange(self):
+        try:
+            self.logonChange_text = self.lineEdit_log.text()
+            self.QThreadSortNow("log")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def taskAtuoCheck(self, time):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/taskAtuoCheck/%s" % time
+            requests.get(url=ip, timeout=30).json()
+            # print("准备组任务自动更新") #客户端连接监测一次,12H监测一次
+            # logging.info("准备组任务自动更新")
+        except Exception:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+
+    def updatecheck(self):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/updatecheck"
+            res = requests.get(url=ip, timeout=30).json()
+            if res["返回值"] == "1":
+                self.label_11.setText("正 常")
+                self.label_11.setStyleSheet(
+                    "background-color:green;color:white;border-radius:5px;padding:2px;font-weight:bold")
+                if self.severupdatests != "1":
+                    self.severupdatests = "1"
+                    try:
+                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "服务器状态变更为正常/" + "%s/" % str("系统上报") + "%s" % str(datetime.datetime.now())
+                        requests.get(url=ip, timeout=30).json()
+                    except Exception:
+                        logger.error(traceback.format_exc())
+                        QMessageBox.warning(self,"日志功能失效", "操作日志功能失效请联系管理员!")
+
+            elif res["返回值"] == "0":
+                self.label_11.setText("未更新")
+                self.label_11.setStyleSheet("background-color:yellow;red:white;border-radius:5px;padding:2px;font-weight:bold")
+                if self.severupdatests != "0":
+                    self.severupdatests = "0"
+                    try:
+                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "服务器状态变更为未更新,航班数据暂停刷新/" + "%s/" % str("系统上报") + "%s" % str(datetime.datetime.now())
+                        requests.get(url=ip, timeout=30).json()
+                    except Exception:
+                        logger.error(traceback.format_exc())
+                        QMessageBox.warning(self,"日志功能失效", "操作日志功能失效请联系管理员!")
+                    QMessageBox.warning(self, "警告", "服务器状态变更为未更新,航班数据暂停刷新,请检查服务器端AMRO登录情况或联系管理员!")
+        except Exception:
+            self.label_11.setText("已断开")
+            self.label_11.setStyleSheet("background-color:red;color:white;border-radius:5px;padding:2px;font-weight:bold")
+            if self.severupdatests != "-":
+                self.severupdatests = "-"
+                try:
+                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "服务器状态变更为断开,航班数据暂停刷新/" + "%s/" % str("系统上报") + "%s" % str(datetime.datetime.now())
+                    requests.get(url=ip, timeout=30).json()
+                except Exception:
+                    logger.error(traceback.format_exc())
+                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                self.restartServer(self.ipinfo.split(':')[0],9935)
+            logger.error(traceback.format_exc())
+
+    def initFlightDatabase(self):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/initFlightDatabase/" + str(self.selectedtime)
+            requests.get(url=ip, timeout=30).json()
+        except Exception:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+
+    def severpost_nomeassge(self, postname, postdata, postdata2, postdata3, postdata4):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2) + str(postdata3) + str(postdata4)
+            res = requests.get(url=ip, timeout=30).json()
+            return res
+        except Exception:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+
+    def severpostData_nomeassge(self, postname, data: dict):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname)
+            data = json.dumps(data)
+            res = requests.post(url=ip, data=data, timeout=120).json()
+            return res
+        except Exception:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+
+    def AddPG_widget(self):
+        if int(self.authority) != 3:
+            try:
+                self.AddPG.show()
+                self.AddPG_signal.emit(self.user, self.selectedtime, self.ipinfo)
+            except Exception:
+                logger.error(traceback.format_exc())
+        else:
+            self.show_message2("提示", "权限不够,请联系管理员!")
+
+    def selected_bc_A(self):
+        try:
+            bc = self.sender()
+            if bc.isChecked():
+                self.selectedbc = "A"
+                # print("白班")
+                self.severpost_nomeassge("createWorkloadtablesFromPg", "/%s" % self.selectedtime, "", "", "")
+                if self.loginSts == True:
+                    self.QThreadSortNow("people")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def selected_bc_B(self):
+        try:
+            bc = self.sender()
+            if bc.isChecked():
+                self.selectedbc = "B"
+                # print("夜班")
+                self.severpost_nomeassge("createWorkloadtablesFromPg", "/%s" % self.selectedtime, "", "", "")
+                if self.loginSts == True:
+                    self.QThreadSortNow("people")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def displaySelect2(self):
+        try:
+            displaySelect = self.sender()
+            if displaySelect.isChecked():
+                self.displaySelectstr2 = "1"
+                if self.loginSts == True:
+                    if self.displaySelectstr3 == "1":
+                        self.displaySelect_mode = "3"
+                    else:
+                        self.displaySelect_mode = "1"
+                    #self.QThreadSortNow("main")
+                    self.QThreadSortNow("search")
+
+            else:
+                self.displaySelectstr2 = "0"
+                self.displaySelect_mode = "0"
+                if self.loginSts == True:
+                    if self.displaySelectstr3 == "1":
+                        self.checkBox_3.setChecked(False)
+                    else:
+                        # self.QThreadSortNow("main")
+                        self.QThreadSortNow("search")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def displaySelect3(self):
+        try:
+            displaySelect = self.sender()
+            if displaySelect.isChecked():
+                self.displaySelectstr3 = "1"
+                self.displaySelect_mode = "3"
+                if self.loginSts == True:
+                    if self.displaySelectstr2 == "0":
+                        self.checkBox_2.setChecked(True)
+                    else:
+                        # self.QThreadSortNow("main")
+                        self.QThreadSortNow("search")
+            else:
+                self.displaySelectstr3 = "0"
+                if self.loginSts == True:
+                    if self.displaySelectstr2 == "0":
+                        self.displaySelect_mode = "0"
+                    else:
+                        self.displaySelect_mode = "1"
+                    # self.QThreadSortNow("main")
+                    self.QThreadSortNow("search")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def displayChange(self):
+        try:
+            bc = self.sender()
+            if bc.isChecked():
+                if self.loginSts == True:
+                    self.displayMode = "A"
+                    self.QThreadSortNow("main")
+                # print("A模式")
+            else:
+                if self.loginSts == True:
+                    self.displayMode = "B"
+                    self.QThreadSortNow("main")
+                # print("B模式")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def selectedtime_bc(self):
+        try:
+            self.selectedtime = self.dateEdit.date().toString('yyyyMMdd')
+            judgedate = (datetime.date.today() + datetime.timedelta(days=1)).strftime("%Y%m%d")
+            if self.selectedtime == judgedate:
+                QMessageBox.warning(self, "重要提示","明日航班20:30后提供查询功能!由于第二日航班波动较大,22:00前仅提供查询功能,22:00以后提供第二日航班的航班变更以及节点监控功能!")
+            self.initFlightDatabase()
+            ip = "http://" + str(self.ipinfo) + "/map/" + str(self.selectedtime)
+            self.QThreadSortNow("main")
+            self.QThreadSortNow("people")
+            # print(self.selectedtime)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def show_info(self, title, text):
+        try:
+            reply = QMessageBox.question(self, title, text,QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.Cancel,QMessageBox.StandardButton.Cancel)
+            if reply == QMessageBox.StandardButton.Yes:
+                return 1
+            else:
+                return 0
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def displayMain(self, *args):
+        try:
+            if args[0]:
+                self.initDisplay()
+                self.loginSts = True
+                self.loginWidget.close()
+                self.show()
+                self.QThreadSortNow("main")
+                self.QThreadSortNow("change")
+                self.QThreadSortNow("people")
+                self.QThreadSortNow("log")
+                self.initlocalipback()
+
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def setUser(self, args):
+        try:
+            self.user = args[1]
+            self.authority = args[3]
+            self.label_username.setText(self.user)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def AddFlight(self):
+        try:
+            self.addFlight = addFlightWidget()
+            self.addFlight.ipinfo = self.ipinfo
+            self.addFlight.user = self.user
+            self.addFlight.show()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def HandoverFlight(self):
+        try:
+            self.handoverFlight = handoverFlightWidget()
+            self.handoverFlight.ipinfo = self.ipinfo
+            self.handoverFlight.user = self.user
+            self.handoverFlight.Allflight = self.sorttableWidgetDispalydataALL
+            self.handoverFlight.selectedtime=self.selectedtime
+            self.handoverFlight.handoverFlight_signal.connect(self.handoverFlight_update)
+            self.handoverFlight.show()
+            self.handoverFlight.start()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def handoverFlight_update(self, *args):
+        try:
+            # print(args)
+            self.QThreadSortNow("main")
+        except Exception:
+            logger.error(traceback.format_exc())
+    def showAdduser(self):
+        try:
+            self.addUser = addUserWidget()
+            self.addUser.ipinfo = self.ipinfo
+            self.addUser.user = self.user
+            self.addUser.authority=self.authority
+            self.addUser.show()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def showChangePassword(self):
+        try:
+            self.changePassword = changePassword()
+            self.changePassword.ipinfo = self.ipinfo
+            self.changePassword.user = self.user
+            self.changePassword.show()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def showchangeAuth(self):
+        try:
+            self.changeAuth = changeAuth()
+            self.changeAuth.ipinfo = self.ipinfo
+            self.changeAuth.user = self.user
+            self.changeAuth.start()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    '''
+    def showchangeFlight(self):
+        try:
+            self.changeFlight = changeFlight()
+            self.changeFlight.ipinfo = self.ipinfo
+            self.changeFlight.user = self.user
+            self.changeFlight.start()
+        except Exception:
+            logger.error(traceback.format_exc())
+    '''
+    def openFile(self):
+        try:
+            fileName, _ = QFileDialog.getOpenFileName(self, '打开文件', '/')
+            # print(fileName)
+            data = {"fileName": fileName}
+            res = self.severpostData_nomeassge("get_dic", data)["返回值"]
+            if res != "ok":
+                self.show_message2("警告", "文件错误")
+            elif res == "ok":
+                self.show_message2("提示", "人员信息添加成功!")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def saveCase(self):
+        try:
+            fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/停场航班导入模板.xlsx", "xlsx(*.xlsx)")
+            if fileName:
+                wb = Workbook()
+                wb.create_sheet(title="停场航班导入模板", index=0)
+                ws = wb.active
+                ws.title = '航班数据'
+                ws = wb['航班数据']
+                for row in range(1, 50):
+                    for cloumn in range(1, 7):
+                        ws.cell(row, cloumn).number_format = '@'
+                ws.cell(1, 1).value = "序号"
+                ws.cell(1, 2).value = "日期"
+                ws.cell(1, 3).value = "机号"
+                ws.cell(1, 4).value = "机位"
+                ws.cell(1, 5).value = "机型"
+                ws.cell(1, 6).value = "发动机"
+                ws.cell(1, 7).value = "录入数据请从第三行开始录入,切勿覆盖第一二行数据!!!"
+                ws.cell(2, 1).value = "1"
+                ws.cell(2, 2).value = "2024/03/21"
+                ws.cell(2, 3).value = "1663"
+                ws.cell(2, 4).value = "722"
+                ws.cell(2, 5).value = "A321"
+                ws.cell(2, 6).value = "V2500"
+                ws.cell(2, 7).value = "录入数据请从第三行开始录入,切勿覆盖第一二行数据!!!"
+                wb.save(fileName)
+                self.show_message2("提示", "导出成功!文件已保存至%s" % fileName)
+        except Exception:
+            self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!")
+            logger.error(traceback.format_exc())
+
+    def saveRisktable(self):
+        try:
+            fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/风险数据库.xlsx","xlsx(*.xlsx)")
+            if fileName:
+                ip = "http://" + str(self.ipinfo) + "/static/saveRisktable"
+                res = requests.get(url=ip, timeout=30).json()["返回值"]
+                wb = Workbook()
+                wb.create_sheet(title="风险数据库.xlsx", index=0)
+                ws = wb.active
+                ws.title = '风险数据库'
+                ws = wb['风险数据库']
+                for row in range(1, len(res)+1):
+                    for cloumn in range(1, 8):
+                        ws.cell(row, cloumn).number_format = '@'
+                ws.cell(1, 1).value = "风险编号"
+                ws.cell(1, 2).value = "状态"
+                ws.cell(1, 3).value = "提示内容"
+                ws.cell(1, 4).value = "触发条件1"
+                ws.cell(1, 5).value = "触发条件2"
+                ws.cell(1, 6).value = "触发条件3"
+                ws.cell(1, 7).value = "触发条件4"
+                ws.cell(1, 8).value = "触发条件5"
+                if len(res) != 0:
+                    ii=1
+                    for i in res:
+                        for j in range(0, 8):
+                            #print(ii,j)
+                            ws.cell(int(ii) + 1, j+1).value = i[j]
+                        ii+=1
+                wb.save(fileName)
+        except Exception:
+            print(traceback.format_exc())
+    def saveAllflight(self):
+        try:
+            index = {"序号": "0", "类型": "9", "航班号": "4", "机型": "2", "发动机": "3", "机号": "1", "计达": "5", "预达": "6","计飞": "7", "机位": "8"}
+            index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位"}
+            fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/%s全天航班导出(未含保障结束).xlsx" % self.selectedtime,"xlsx(*.xlsx)")
+            # print(fileName)
+            if fileName:
+                ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly22/" + "%s" % self.selectedtime
+                res = requests.get(url=ip, timeout=30).json()
+                # print(res)
+                wb = Workbook()
+                wb.create_sheet(title="%s全天航班导出(未含保障结束).xlsx" % self.selectedtime, index=0)
+                ws = wb.active
+                ws.title = '航班数据'
+                ws = wb['航班数据']
+                for row in range(1, 400):
+                    for cloumn in range(1, 10):
+                        ws.cell(row, cloumn).number_format = '@'
+                ws.cell(1, 1).value = "序号"
+                ws.cell(1, 2).value = "类型"
+                ws.cell(1, 3).value = "航班号"
+                ws.cell(1, 4).value = "机型"
+                ws.cell(1, 5).value = "发动机"
+                ws.cell(1, 6).value = "机号"
+                ws.cell(1, 7).value = "计达"
+                ws.cell(1, 8).value = "预达"
+                ws.cell(1, 9).value = "计飞"
+                ws.cell(1, 10).value = "机位"
+                if len(res) != 0:
+                    for i in res.keys():
+                        if res[i]["109"] != "4":
+                            for j in range(1, 11):
+                                if j == 2 and "3U" in res[i]["4"] and "CSC" in res[i]["4"]:
+                                    ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                                elif j == 7 or j == 8:
+                                    text = str(res[i][index[index2[j]]]).replace(":","") if str(res[i][index[index2[j]]]) != "" else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                elif j == 9:
+                                    text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":","") if "]" in str(res[i][index[index2[j]]]) else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                else:
+                                    ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                wb.save(fileName)
+            self.show_message2("提示", "%s全天航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+        except Exception:
+            self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+            logger.error(traceback.format_exc())
+
+    def saveAllflight2(self):
+        try:
+            time2 = datetime.datetime.strptime(self.selectedtime, "%Y%m%d")
+            time1 = str((time2 - datetime.timedelta(days=1)).strftime("%Y%m%d"))
+            index = {"序号": "0", "类型": "9", "航班号": "4", "机型": "2", "发动机": "3", "机号": "1", "计达": "5", "预达": "6","计飞": "7", "机位": "8","放行":"10","工1":"11","工2":"12","工3":"13","工4":"14","备注":"30","班组长":"15"}
+            index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位",11: "放行",12: "工1",13: "工2",14: "工3",15: "工4",16: "备注",17: "班组长"}
+            fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/%s航班安排备份导出.xlsx" %(str(time1)+"-"+str(self.selectedtime)[-2:]),"xlsx(*.xlsx)")
+            # print(fileName)
+            wb = Workbook()
+            if fileName:
+                for selectedtime in [self.selectedtime,time1]:
+                    ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly11/" + "%s" %selectedtime
+                    res = requests.get(url=ip, timeout=30).json()
+                    # print(res)
+                    wb.create_sheet(title="%s" % selectedtime, index=0)
+                    ws = wb.active
+                    ws.title = "%s" % selectedtime
+                    ws = wb["%s" % selectedtime]
+                    for row in range(1, 400):
+                        for cloumn in range(1, 18):
+                            ws.cell(row, cloumn).number_format = '@'
+                    ws.cell(1, 1).value = "序号"
+                    ws.cell(1, 2).value = "类型"
+                    ws.cell(1, 3).value = "航班号"
+                    ws.cell(1, 4).value = "机型"
+                    ws.cell(1, 5).value = "发动机"
+                    ws.cell(1, 6).value = "机号"
+                    ws.cell(1, 7).value = "计达"
+                    ws.cell(1, 8).value = "预达"
+                    ws.cell(1, 9).value = "计飞"
+                    ws.cell(1, 10).value = "机位"
+                    ws.cell(1, 11).value = "放行"
+                    ws.cell(1, 12).value = "工1"
+                    ws.cell(1, 13).value = "工2"
+                    ws.cell(1, 14).value = "工3"
+                    ws.cell(1, 15).value = "工4"
+                    ws.cell(1, 16).value = "备注"
+                    ws.cell(1, 17).value = "班组长"
+
+                    if len(res) != 0:
+                        for i in res.keys():
+                            for j in range(1, 18):
+                                if j == 2:
+                                    if "3U" not in res[i]["4"] and "CSC" not in res[i]["4"]:
+                                        ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                                    else:
+                                        ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                                elif j == 7 or j == 8:
+                                    text = str(res[i][index[index2[j]]]).replace(":","") if str(res[i][index[index2[j]]]) != "" else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                elif j == 9:
+                                    text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":","") if "]" in str(res[i][index[index2[j]]]) else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                else:
+                                    ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+            wb.save(fileName)
+            self.show_message2("提示", "%s全天航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+        except Exception:
+            self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+            logger.error(traceback.format_exc())
+
+    def saveAllflight3(self):
+        try:
+            time2 = datetime.datetime.strptime(self.selectedtime, "%Y%m%d")
+            time1 = str((time2 - datetime.timedelta(days=1)).strftime("%Y%m%d"))
+            index = {"序号": "0", "类型": "9", "航班号": "4", "机型": "2", "发动机": "3", "机号": "1", "计达": "5", "预达": "6","计飞": "7", "机位": "8","工作单":"10","飞单":"11","客舱单":"12","临工单":"13","AMRO记录":"14","备注":"32","备用":"15"}
+            index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位",11: "工作单",12: "飞单",13: "客舱单",14: "临工单",15: "AMRO记录",16: "备注",17: "备用"}
+            fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/%s维修记录备份导出.xlsx" %(str(time1)+"-"+str(self.selectedtime)[-2:]),"xlsx(*.xlsx)")
+            # print(fileName)
+            wb = Workbook()
+            if fileName:
+                for selectedtime in [self.selectedtime,time1]:
+                    ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly22/" + "%s" %selectedtime
+                    res = requests.get(url=ip, timeout=30).json()
+                    # print(res)
+                    wb.create_sheet(title="%s" % selectedtime, index=0)
+                    ws = wb.active
+                    ws.title = "%s" % selectedtime
+                    ws = wb["%s" % selectedtime]
+                    for row in range(1, 400):
+                        for cloumn in range(1, 18):
+                            ws.cell(row, cloumn).number_format = '@'
+                    ws.cell(1, 1).value = "序号"
+                    ws.cell(1, 2).value = "类型"
+                    ws.cell(1, 3).value = "航班号"
+                    ws.cell(1, 4).value = "机型"
+                    ws.cell(1, 5).value = "发动机"
+                    ws.cell(1, 6).value = "机号"
+                    ws.cell(1, 7).value = "计达"
+                    ws.cell(1, 8).value = "预达"
+                    ws.cell(1, 9).value = "计飞"
+                    ws.cell(1, 10).value = "机位"
+                    ws.cell(1, 11).value = "工作单"
+                    ws.cell(1, 12).value = "飞单"
+                    ws.cell(1, 13).value = "客舱单"
+                    ws.cell(1, 14).value = "临工单"
+                    ws.cell(1, 15).value = "AMRO记录"
+                    ws.cell(1, 16).value = "备注"
+                    ws.cell(1, 17).value = "备用"
+
+                    if len(res) != 0:
+                        for i in res.keys():
+                            for j in range(1, 18):
+                                if j == 2:
+                                    if "3U" not in res[i]["4"] and "CSC" not in res[i]["4"]:
+                                        ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                                    else:
+                                        ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                                elif j == 6:
+                                    text = "B-"+str(res[i][index[index2[j]]])
+                                    ws.cell(int(i) + 2, j).value = text
+                                elif j == 7 or j == 8:
+                                    text = str(res[i][index[index2[j]]]).replace(":","") if str(res[i][index[index2[j]]]) != "" else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                elif j == 9:
+                                    text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":","") if "]" in str(res[i][index[index2[j]]]) else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                else:
+                                    ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+            wb.save(fileName)
+            self.show_message2("提示", "%s全天航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+        except Exception:
+            self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+            logger.error(traceback.format_exc())
+
+    def saveDealflight(self):
+
+        try:
+            index = {"序号": "0", "类型": "9", "航班号": "4", "机型": "2", "发动机": "3", "机号": "1", "计达": "5", "预达": "6","计飞": "7", "机位": "8"}
+            index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位"}
+            fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/%s交班航班导出.xlsx" % self.selectedtime,"xlsx(*.xlsx)")
+            # print(fileName)
+            if fileName:
+                ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly22/" + "%s" % self.selectedtime
+                res = requests.get(url=ip, timeout=30).json()
+                # print(res)
+                wb = Workbook()
+                wb.create_sheet(title="%s交班航班导出.xlsx" % self.selectedtime, index=0)
+                ws = wb.active
+                ws.title = '航班数据'
+                ws = wb['航班数据']
+                for row in range(1, 400):
+                    for cloumn in range(1, 10):
+                        ws.cell(row, cloumn).number_format = '@'
+                ws.cell(1, 1).value = "序号"
+                ws.cell(1, 2).value = "类型"
+                ws.cell(1, 3).value = "航班号"
+                ws.cell(1, 4).value = "机型"
+                ws.cell(1, 5).value = "发动机"
+                ws.cell(1, 6).value = "机号"
+                ws.cell(1, 7).value = "计达"
+                ws.cell(1, 8).value = "预达"
+                ws.cell(1, 9).value = "计飞"
+                ws.cell(1, 10).value = "机位"
+                if len(res) != 0:
+                    for i in res.keys():
+                        if res[i]["109"] == "1" or res[i]["109"] == "3":
+                            for j in range(1, 11):
+                                if j == 2:
+                                    if "3U" not in res[i]["4"] and "CSC" not in res[i]["4"]:
+                                        ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                                    else:
+                                        ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                                elif j == 7 or j == 8:
+                                    text = str(res[i][index[index2[j]]]).replace(":","") if str(res[i][index[index2[j]]]) != "" else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                elif j == 9:
+                                    text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":","") if "]" in str(res[i][index[index2[j]]]) else ""
+                                    ws.cell(int(i) + 2, j).value = text
+                                else:
+                                    ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                wb.save(fileName)
+            self.show_message2("提示", "%s交班航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+        except Exception:
+            self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+            logger.error(traceback.format_exc())
+################################################################################################################################################
+    def updateStopFlight(self):
+        try:
+            fileName, _ = QFileDialog.getOpenFileName(self, '打开文件', '/')
+            # print(fileName)
+            data = {"fileName": fileName}
+            res = self.severpostData_nomeassge("updateStopFlight", data)["返回值"]
+            if res != "ok":
+                self.show_message2("警告", "停场航班添加失败!")
+            elif res == "ok":
+                self.show_message2("提示", "停场航班添加成功!")
+                self.QThreadSortNow("main")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def updateTaskAuto(self):
+        try:
+            if int(self.authority) <= 1:
+                fileName, _ = QFileDialog.getOpenFileName(self, '打开文件', '/')
+                # print(fileName)
+                data = {"fileName": fileName}
+                res = self.severpostData_nomeassge("updateTaskAuto", data)["返回值"]
+                if res != "ok":
+                    self.show_message2("警告", "文件错误")
+                elif res == "ok":
+                    self.taskAtuoCheck("3")
+                    self.show_message2("提示", "准备组任务更新成功!")
+
+            else:
+                self.show_message2("提示", "权限不够,请联系管理员!")
+        except Exception:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+    def updateRiskdb(self):
+        try:
+            if int(self.authority) <= 1:
+                fileName, _ = QFileDialog.getOpenFileName(self, '打开文件', '/')
+                # print(fileName)
+                data = {"fileName": fileName}
+                res = self.severpostData_nomeassge("updateRiskdb", data)["返回值"]
+                if res != "ok":
+                    self.show_message2("警告", "文件错误")
+                elif res == "ok":
+                    self.show_message2("提示", "风险数据库更新成功!")
+
+            else:
+                self.show_message2("提示", "权限不够,请联系管理员!")
+        except Exception:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+
+    def show_message2(self, type, str):
+        try:
+            QMessageBox.warning(self, "%s" % type, "%s" % str)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def QThreadSortDispalyTimer(self, name, dict, dict2, seversts, displayMode):
+        try:
+            if name == "sortTableWidgetDispaly":
+                if displayMode == "A":
+                    self.displayLabel = ["备","序号","备","机号","航班信息","机型","机型信息","发动机","备","航班号","备","计达","备","预达",
+                                 "备","计飞","备","机位","备","类型","备","放行","备","工1","备","工2","备","工3","备","工4",
+                                 "备","班组长","备","到位","备","放行","备","销夹","备","随机","备","随机","备","保留","备","工作包",
+                                 "备","进出港城市","备","维修人员","备","放行","备","航班编号","备","任务编号","备","TATD","备","类型",
+                                 "备","附加消息","备","备","备","备"]
+                    '''
+                    self.displayLabel = ["序号", "机号", "机型", "发动机", "航班号", "计达", "预达", "计飞", "机位", "类型", "放行", "工1", "工2",
+                                         "工3","工4", "班组长", "到位", "放行", "销夹", "随机", "随机", "保留", "工作包", "进出港城市", "维修人员",
+                                         "放行", "航班编号",
+                                         "任务编号", "TATD", "类型", "附加消息"]
+                    '''
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+
+                elif displayMode == "B":
+                    self.displayLabel = ["序号", "机号", "机型", "发动机", "航班号", "计达", "预达", "计飞", "机位", "类型", "工作单", "飞单", "客舱单",
+                                         "临工单","AMRO记录", "备用", "到位", "二送", "放行", "销夹", "随机", "随机", "保留", "工作包", "进出港城市",
+                                         "维修人员", "二送人员","放行", "航班编号", "任务编号", "TATD", "类型", "附加消息"]
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+                self.sorttableWidgetDispalydata = {}
+                self.sorttableWidgetDispalydata = dict
+                if self.doubleclickLockUpdate == 0:
+                    self.tableWidgetDispaly()
+                # print(self.sorttableWidgetDispalydata)
+            elif name == "sortTableWidgetDispalyALL":
+                self.sorttableWidgetDispalydataALL = {}
+                self.sorttableWidgetDispalydataALL = dict
+
+            elif name == "sorttableWidgetDisplayChange":
+                self.sortlogchange = {}
+                self.sortlogchange = dict
+                self.tableWidgetDisplayChange()
+                # print(self.sortlogchange)
+            elif name == "sorttableWidgetPeopleDisplay":
+                self.sortdiplaylist = {}
+                self.sortdiplaylist = dict
+                self.peopleOnJob = [""]
+                self.peopleOnJob = dict2
+                self.tableWidgetPeopleDisplay()
+                # print(self.peopleOnJob)
+                # print(self.sortdiplaylist)
+            elif name == "sorttableWidgetLOGDispaly":
+                self.sortlog = {}
+                self.sortlog = dict
+                self.tableWidgetLOGDispaly()
+                # print(self.sortlog)
+
+            if seversts == "0":
+                self.severupdatests = "-"
+                self.label_11.setText("已断开")
+                self.label_11.setStyleSheet(
+                    "background-color:red;color:white;border-radius:5px;padding:2px;font-weight:bold")
+                self.restartServer(self.ipinfo.split(':')[0],9935)
+            elif seversts == "1" and self.severupdatests == "1":
+                self.label_11.setText("正 常")
+                self.label_11.setStyleSheet(
+                    "background-color:green;color:white;border-radius:5px;padding:2px;font-weight:bold")
+            elif seversts == "1" and self.severupdatests == "0":
+                self.label_11.setText("未更新")
+                self.label_11.setStyleSheet(
+                    "background-color:yellow;color:red;border-radius:5px;padding:2px;font-weight:bold")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def QThreadSortDispalyNow(self, name, dict, dict2, seversts, displayMode):
+        try:
+            if name == "sortTableWidgetDispaly":
+                if displayMode == "A":
+                    self.displayLabel=["备","序号","备","机号","航班信息","机型","机型信息","发动机","备","航班号","备","计达","备","预达",
+                                 "备","计飞","备","机位","备","类型","备","放行","备","工1","备","工2","备","工3","备","工4",
+                                 "备","班组长","备","到位","备","放行","备","销夹","备","随机","备","随机","备","保留","备","工作包",
+                                 "备","进出港城市","备","维修人员","备","放行","备","航班编号","备","任务编号","备","TATD","备","类型",
+                                 "备","附加消息","备","备","备","备"]
+                    '''
+                    self.displayLabel = ["序号", "机号", "机型", "发动机", "航班号", "计达", "预达", "计飞", "机位", "类型", "放行", "工1", "工2",
+                                         "工3","工4", "班组长", "到位", "放行", "销夹", "随机", "随机", "保留", "工作包", "进出港城市", "维修人员",
+                                         "放行", "航班编号","任务编号", "TATD", "类型", "附加消息"]
+                    '''
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+
+                else:
+                    self.displayLabel = ["序号", "机号", "机型", "发动机", "航班号", "计达", "预达", "计飞", "机位", "类型", "工作单", "飞单", "客舱单",
+                                         "临工单","AMRO记录", "备用", "到位", "二送", "放行", "销夹", "随机", "随机", "保留", "工作包", "进出港城市",
+                                         "维修人员", "二送人员","放行", "航班编号", "任务编号", "TATD", "类型", "附加消息"]
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+                self.sorttableWidgetDispalydata = {}
+                self.sorttableWidgetDispalydata = dict
+                # print(self.sorttableWidgetDispalydata)
+                if  self.doubleclickLockUpdate == 0:
+                    self.tableWidgetDispaly()
+            elif name == "SearchsortTableWidgetDispaly":
+                if displayMode == "A":
+                    self.displayLabel = ["备","序号","备","机号","航班信息","机型","机型信息","发动机","备","航班号","备","计达","备","预达",
+                                 "备","计飞","备","机位","备","类型","备","放行","备","工1","备","工2","备","工3","备","工4",
+                                 "备","班组长","备","到位","备","放行","备","销夹","备","随机","备","随机","备","保留","备","工作包",
+                                 "备","进出港城市","备","维修人员","备","放行","备","航班编号","备","任务编号","备","TATD","备","类型",
+                                 "备","附加消息","备","备","备","备"]
+                    '''
+                    self.displayLabel = ["序号", "机号", "机型", "发动机", "航班号", "计达", "预达", "计飞", "机位", "类型", "放行", "工1",
+                                         "工2","工3","工4", "班组长", "到位", "放行", "销夹", "随机", "随机", "保留", "工作包", "进出港城市",
+                                         "维修人员","放行", "航班编号","任务编号", "TATD", "类型", "附加消息"]
+                    '''
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+
+                elif displayMode == "B":
+                    self.displayLabel =["序号", "机号", "机型", "发动机", "航班号", "计达", "预达", "计飞", "机位", "类型", "工作单", "飞单", "客舱单",
+                                         "临工单","AMRO记录", "备用", "到位", "二送", "放行", "销夹", "随机", "随机", "保留", "工作包", "进出港城市",
+                                         "维修人员", "二送人员","放行", "航班编号", "任务编号", "TATD", "类型", "附加消息"]
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+                self.sorttableWidgetDispalydata = {}
+                self.sorttableWidgetDispalydata = dict
+                if self.doubleclickLockUpdate == 0:
+                    self.tableWidgetDispaly()
+                # print(self.sorttableWidgetDispalydata)
+            elif name == "sortTableWidgetDispalyALL":
+                self.sorttableWidgetDispalydataALL = {}
+                self.sorttableWidgetDispalydataALL = dict
+            elif name == "sorttableWidgetDisplayChange":
+                self.sortlogchange = {}
+                self.sortlogchange = dict
+                self.tableWidgetDisplayChange()
+                # print(self.sortlogchange)
+            elif name == "sorttableWidgetPeopleDisplay":
+                self.sortdiplaylist = {}
+                self.sortdiplaylist = dict
+                self.peopleOnJob = [""]
+                self.peopleOnJob = dict2
+                self.tableWidgetPeopleDisplay()
+                # print(self.peopleOnJob)
+                # print(self.sortdiplaylist)
+            elif name == "sorttableWidgetLOGDispaly":
+                self.sortlog = {}
+                self.sortlog = dict
+                self.tableWidgetLOGDispaly()
+                # print(self.sortlog)
+            elif name == "sorttableWidgetPHONEDispaly":
+                self.sorttableWidgetPHONEDispalydata = {}
+                self.sorttableWidgetPHONEDispalydata = dict
+                self.tableWidgetPhoneDispaly()
+            if seversts == "0":
+                self.severupdatests = "-"
+                self.label_11.setText("已断开")
+                self.label_11.setStyleSheet(
+                    "background-color:red;color:white;border-radius:5px;padding:2px;font-weight:bold")
+                self.restartServer(self.ipinfo.split(':')[0],9935)
+            elif seversts == "1" and self.severupdatests == "1":
+                self.label_11.setText("正 常")
+                self.label_11.setStyleSheet(
+                    "background-color:green;color:white;border-radius:5px;padding:2px;font-weight:bold")
+            elif seversts == "1" and self.severupdatests == "0":
+                self.label_11.setText("未更新")
+                self.label_11.setStyleSheet(
+                    "background-color:yellow;color:red;border-radius:5px;padding:2px;font-weight:bold")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def restartServer(self,serverIP,serverPort):
+        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        client.settimeout(120)
+        client.connect((serverIP, serverPort))
+        client.send("restart".encode())
+        client.close()
+        QMessageBox.warning(self, "提示", "服务器端正在尝试自动重启服务器,请等待30S后刷新查看显示状态!若仍然断开,请联系管理员!")
+
+    def initlocalipback(self):
+        try:
+            if os.path.exists("D:/flightinfo/logs/localip.code") is True:
+                read_path = "D:/flightinfo/logs/localip.code"
+                with open(read_path, "r", encoding="utf-8") as f2:
+                    rember_2 = f2.read()
+                    if ';;' in rember_2:
+                        self.localip = rember_2.split(';;')[0]
+                        self.localtoken = rember_2.split(';;')[-1]
+                        QMessageBox.warning(self, "提示", "本地网络电话获取缓存成功,可拨号尝试,如拨号失败则需重新配置!")
+        except Exception:
+            logger.error(traceback.format_exc())
+    def openmaintainAuthCheck(self):
+        self.maintainAuthCheckSts=1
+        QMessageBox.warning(self, "提示", "授权检查已开启,将核对人员发动机授权情况!")
+
+    def closemaintainAuthCheck(self):
+        self.maintainAuthCheckSts=0
+        QMessageBox.warning(self, "提示", "授权检查已关闭,将无法核对人员发动机授权情况!")
+
+    def setlocalipback(self, token):
+        try:
+            self.localtoken = None
+            self.localtoken = token
+            if "auth=" in token:
+                QMessageBox.warning(self, "提示", "本地网络电话配置成功!")
+                save_path = "D:/flightinfo/logs/localip.code"
+                with open(save_path, "w", encoding="utf-8") as f1:
+                    f1.write(str(self.localip) + ";;" + str(self.localtoken))
+                self.lineEdit_phonenum.setText("")
+            else:
+                QMessageBox.warning(self, "提示", "本地网络电话配置失败,本地呼叫无法使用,请确认IP正确,可尝试重启IP电话后再试!")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def QThreadSortTimer(self):
+        try:
+            nowDay = datetime.datetime.now().strftime("%Y%m%d")
+            tomorr = (datetime.date.today() + datetime.timedelta(days=1)).strftime("%Y%m%d")
+            yester = (datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y%m%d")
+            if self.selectedtime == nowDay:
+                datestr = "2"
+            elif self.selectedtime == tomorr:
+                datestr = "3"
+            elif self.selectedtime == yester:
+                datestr = "1"
+            else:
+                datestr = "4"
+            ip = "http://"+self.ipinfo+"/static/VinCheck/"+self.vin+"/"+self.displayMode+"/%s"%datestr
+            res = requests.get(url=ip, timeout=30).json()["返回值"]
+            self.sum += 1
+            self.flightsum += 1
+            #print(self.doubleclickLockUpdate)
+            if self.loginSts == True:
+                # print("多线程刷新1")
+
+                self.FLIGHTonChange_text = self.lineEdit_flight.text()
+                self.peolpleonChange_text = self.lineEdit_people.text()
+                self.changeonChange_text = self.lineEdit_change.text()
+                self.logonChange_text = self.lineEdit_log.text()
+                if (self.doubleclickLockUpdate==0 and res =="ok" and self.flightsum % 20 == 0) or\
+                        (self.doubleclickLockUpdate==0 and datestr =="4" and self.flightsum % 20 == 0):
+                    print(datetime.datetime.now(),"开始数据库刷新", self.vin)
+                    th1 = QThread()
+                    self.sortTableWidgetDispalyThread1 = sortdisplaySever("sortTableWidgetDispaly", self.ipinfo,
+                                                                          self.selectedtime, self.FLIGHTonChange_text,
+                                                                          self.displayMode, "0", self.displaySelect_mode,
+                                                                          th1)
+                    self.sortTableWidgetDispalyThread1.sortupdate.connect(self.QThreadSortDispalyTimer)
+                    self.sortTableWidgetDispalyThread1.moveToThread(th1)
+                    th1.started.connect(self.sortTableWidgetDispalyThread1.run)
+                    th1.start()
+                    if datestr !="4":
+                        ip = "http://"+self.ipinfo+"/static/updateVin/" + self.displayMode + "/%s" % datestr
+                        self.vin = requests.get(url=ip, timeout=30).json()["返回值"]
+                        print(datetime.datetime.now(),"更新刷新",self.vin)
+                elif self.doubleclickLockUpdate==0 and res !="ok":
+                    print(datetime.datetime.now(),"开始读取刷新", self.vin)
+                    th1234 = QThread()
+                    self.sortTableWidgetDispalyThread1234 = sortdisplaySever("sortTableWidgetDispaly", self.ipinfo,
+                                                                          self.selectedtime, self.FLIGHTonChange_text,
+                                                                          self.displayMode, "1", self.displaySelect_mode,
+                                                                          th1234)
+                    self.sortTableWidgetDispalyThread1234.sortupdate.connect(self.QThreadSortDispalyTimer)
+                    self.sortTableWidgetDispalyThread1234.moveToThread(th1234)
+                    th1234.started.connect(self.sortTableWidgetDispalyThread1234.run)
+                    th1234.start()
+                    self.flightsum = 0
+                    ip = "http://"+self.ipinfo+"/static/getVin/"+ self.displayMode + "/%s" % datestr
+                    self.vin = requests.get(url=ip, timeout=30).json()["返回值"]
+                    print(datetime.datetime.now(),"仅仅读取",self.vin)
+                '''
+                else:
+                    th11111 = QThread()
+                    self.sortTableWidgetDispalyThread11111 = sortdisplaySever("sortTableWidgetDispalyALL", self.ipinfo,
+                                                                          self.selectedtime, self.FLIGHTonChange_text,
+                                                                          self.displayMode, "1", self.displaySelect_mode,
+                                                                          th11111)
+                    self.sortTableWidgetDispalyThread11111.sortupdate.connect(self.QThreadSortDispalyTimer)
+                    self.sortTableWidgetDispalyThread11111.moveToThread(th11111)
+                    th11111.started.connect(self.sortTableWidgetDispalyThread11111.run)
+                    th11111.start()
+                '''
+            if self.loginSts == True and self.sum % 20 == 0:
+                th2 = QThread()
+                self.sorttableWidgetDisplayChangeThread2 = sortdisplaySever("sorttableWidgetDisplayChange", self.ipinfo,
+                                                                            self.selectedtime, self.changeonChange_text,
+                                                                            "", "", "", th2)
+                self.sorttableWidgetDisplayChangeThread2.sortupdate.connect(self.QThreadSortDispalyTimer)
+                self.sorttableWidgetDisplayChangeThread2.moveToThread(th2)
+                th2.started.connect(self.sorttableWidgetDisplayChangeThread2.run)
+                th2.start()
+
+                th3 = QThread()
+                self.sorttableWidgetPeopleDisplayThread3 = sortdisplaySever("sorttableWidgetPeopleDisplay", self.ipinfo,
+                                                                            self.selectedtime,
+                                                                            self.peolpleonChange_text, "",
+                                                                            self.selectedbc, "", th3)
+                self.sorttableWidgetPeopleDisplayThread3.sortupdate.connect(self.QThreadSortDispalyTimer)
+                self.sorttableWidgetPeopleDisplayThread3.moveToThread(th3)
+                th3.started.connect(self.sorttableWidgetPeopleDisplayThread3.run)
+                th3.start()
+
+                th4 = QThread()
+                self.sorttableWidgetLOGDispalyThread4 = sortdisplaySever("sorttableWidgetLOGDispaly", self.ipinfo,
+                                                                         self.selectedtime, self.logonChange_text, "",
+                                                                         "", "", th4)
+                self.sorttableWidgetLOGDispalyThread4.sortupdate.connect(self.QThreadSortDispalyTimer)
+                self.sorttableWidgetLOGDispalyThread4.moveToThread(th4)
+                th4.started.connect(self.sorttableWidgetLOGDispalyThread4.run)
+                th4.start()
+                self.updatecheck()
+            if self.loginSts == True and self.sum % 2400 == 0:
+                self.taskAtuoCheck("2")
+                self.sum=0
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def QThreadSortNow(self, name):
+        try:
+            if "main" in str(name) and self.doubleclickLockUpdate == 0:
+                # print(datetime.datetime.now())
+                th11 = QThread()
+                self.sortTableWidgetDispalyThread11 = sortdisplaySever("sortTableWidgetDispaly", self.ipinfo,
+                                                                       self.selectedtime, self.FLIGHTonChange_text,
+                                                                       self.displayMode, "0", self.displaySelect_mode,
+                                                                       th11)
+                self.sortTableWidgetDispalyThread11.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sortTableWidgetDispalyThread11.moveToThread(th11)
+                th11.started.connect(self.sortTableWidgetDispalyThread11.run)
+                th11.start()
+                nowDay = datetime.datetime.now().strftime("%Y%m%d")
+                tomorr = (datetime.date.today() + datetime.timedelta(days=1)).strftime("%Y%m%d")
+                yester = (datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y%m%d")
+                if self.selectedtime == nowDay:
+                    datestr = "2"
+                elif self.selectedtime == tomorr:
+                    datestr = "3"
+                elif self.selectedtime == yester:
+                    datestr = "1"
+                else:
+                    datestr = "4"
+                if datestr != "4":
+                    ip = "http://" + self.ipinfo + "/static/updateVin/" + self.displayMode + "/%s" % datestr
+                    self.vin = requests.get(url=ip, timeout=30).json()["返回值"]
+                    print(datetime.datetime.now(), "人工更新刷新", self.vin)
+            elif "ALL" in str(name) and self.doubleclickLockUpdate == 0:
+                th111111 = QThread()
+                self.sortTableWidgetDispalyThread111111 = sortdisplaySever("sortTableWidgetDispalyALL", self.ipinfo,
+                                                                          self.selectedtime, self.FLIGHTonChange_text,
+                                                                          self.displayMode, "1", self.displaySelect_mode,
+                                                                          th111111)
+                self.sortTableWidgetDispalyThread111111.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sortTableWidgetDispalyThread111111.moveToThread(th111111)
+                th111111.started.connect(self.sortTableWidgetDispalyThread111111.run)
+                th111111.start()
+            elif "search" in str(name) and self.doubleclickLockUpdate == 0:
+                # print(datetime.datetime.now())
+                th111 = QThread()
+                self.sortTableWidgetDispalyThread111 = sortdisplaySever("SearchsortTableWidgetDispaly", self.ipinfo,
+                                                                        self.selectedtime, self.FLIGHTonChange_text,
+                                                                        self.displayMode, self.sorttableWidgetDispalydataALL, self.displaySelect_mode,
+                                                                        th111)
+                self.sortTableWidgetDispalyThread111.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sortTableWidgetDispalyThread111.moveToThread(th111)
+                th111.started.connect(self.sortTableWidgetDispalyThread111.run)
+                th111.start()
+            elif "change" in str(name):
+                # print(datetime.datetime.now())
+                th12 = QThread()
+                self.sorttableWidgetDisplayChangeThread12 = sortdisplaySever("sorttableWidgetDisplayChange",
+                                                                             self.ipinfo, self.selectedtime,
+                                                                             self.changeonChange_text, "", "", "", th12)
+                self.sorttableWidgetDisplayChangeThread12.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sorttableWidgetDisplayChangeThread12.moveToThread(th12)
+                th12.started.connect(self.sorttableWidgetDisplayChangeThread12.run)
+                th12.start()
+            elif "people" in str(name):
+                # print(datetime.datetime.now())
+                th13 = QThread()
+                self.sorttableWidgetPeopleDisplayThread13 = sortdisplaySever("sorttableWidgetPeopleDisplay",
+                                                                             self.ipinfo, self.selectedtime,
+                                                                             self.peolpleonChange_text, "",
+                                                                             self.selectedbc, self.searchpeoplestr,
+                                                                             th13)
+                self.sorttableWidgetPeopleDisplayThread13.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sorttableWidgetPeopleDisplayThread13.moveToThread(th13)
+                th13.started.connect(self.sorttableWidgetPeopleDisplayThread13.run)
+                th13.start()
+            elif "log" in str(name):
+                # print(datetime.datetime.now())
+                th14 = QThread()
+                self.sorttableWidgetLOGDispalyThread14 = sortdisplaySever("sorttableWidgetLOGDispaly", self.ipinfo,
+                                                                          self.selectedtime, self.logonChange_text, "",
+                                                                          "", "", th14)
+                self.sorttableWidgetLOGDispalyThread14.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sorttableWidgetLOGDispalyThread14.moveToThread(th14)
+                th14.started.connect(self.sorttableWidgetLOGDispalyThread14.run)
+                th14.start()
+            elif "setlocalip" in str(name):
+                th99 = QThread()
+                self.setlocalipThread = setlocalip(self.localip, th99)
+                self.setlocalipThread.localipupdate.connect(self.setlocalipback)
+                self.setlocalipThread.moveToThread(th99)
+                th99.started.connect(self.setlocalipThread.run)
+                th99.start()
+            elif "phone" in str(name):
+                th15 = QThread()
+                self.sorttableWidgetPHONEDispaly15 = sortdisplaySever("sorttableWidgetPHONEDispaly", self.ipinfo, "",
+                                                                      self.changeonPhone_text, "", "", "", th15)
+                self.sorttableWidgetPHONEDispaly15.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sorttableWidgetPHONEDispaly15.moveToThread(th15)
+                th15.started.connect(self.sorttableWidgetPHONEDispaly15.run)
+                th15.start()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def tableWidgetLOGDispaly(self):
+        try:
+            log = self.sortlog
+            self.tableWidgetLOG.setRowCount(len(log.keys()))
+            if log != "":
+                for i in log.keys():
+                    self.tableWidgetLOG.setItem(int(i), 0, QTableWidgetItem(str(int(i)+1)))
+                    self.tableWidgetLOG.setItem(int(i), 1, QTableWidgetItem(str(log[i])))
+                    self.tableWidgetLOG.item(int(i), 0).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+            self.tableWidgetLOG.resizeColumnToContents(0)
+            self.tableWidgetLOG.setColumnWidth(1, 240)
+            self.tableWidgetLOG.resizeRowsToContents()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def itemclick(self, row, column):
+        if self.doubleclickLockUpdate == 1 and self.doubleclickLock == 0:
+            self.doubleclickLockUpdate = 0
+            #self.QThreadSortNow("ALL")
+            #self.QThreadSortNow("main")
+            try:
+                self.tableWidgetFlight.cellChanged.disconnect(self.cellchanged)
+            except:
+                pass
+
+    def itemclick2(self, row, column):
+        try:
+            # print(self.doubleclickLock)
+            if (int(column) - self.tableWidgetFlight.columnCount() == -1 or 9 < column < 16) and self.doubleclickLock == 0:
+                self.doubleclickLockUpdate=1
+                self.clickrow = row
+                self.clickcolumn = column
+                self.olditem = self.tableWidgetFlight.item(row, column).text()
+                item = self.tableWidgetFlight.item(row, column)
+                # 如果单元格对象不存在,则返回默认的背景色
+                if not item:
+                    self.color=self.tableWidgetFlight.palette().color(QPalette.Base)
+                else:
+                    # 获取并返回单元格的背景色
+                    self.color=item.background()
+                self.tableWidgetFlight.cellChanged.connect(self.cellchanged)
+            else:
+                self.doubleclickLockUpdate = 0
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def cellchanged(self, row, column):
+        if self.clickrow == row and self.clickcolumn == column and self.displayMode =="A":
+            self.clickrow = None
+            self.clickcolumn = None
+            try:
+                #t1 = datetime.datetime.now()
+                self.doubleclickLock = 1
+                self.newitem = self.tableWidgetFlight.item(row, column).text().replace("\"","*").replace("\\",";").replace("\'","*").replace("/","、").replace("#","*")
+                flightid = self.tableWidgetFlight.item(row, self.tableWidgetFlight.columnCount() - 5).text()
+                flighttype = self.tableWidgetFlight.item(row, 9).text()
+                acno = self.tableWidgetFlight.item(row, 1).text()
+                flightno = self.tableWidgetFlight.item(row, 4).text()
+                bgtype = str(self.displayLabel[column]).replace("/","")
+                if int(column) - self.tableWidgetFlight.columnCount() == -1:
+                    item = self.tableWidgetFlight.item(row, column)
+                    if item.text() != "":
+                        text = item.text().replace("\"","*").replace("\\",";").replace("\'","*").replace("/","、").replace("#","*")
+                    else:
+                        text = "清空项目12345678987654321"
+                    ip = "http://" + str(self.ipinfo) + "/static/updateEidteItem/" + "%s/" % str(text) + "%s/" % str(flightid) + "%s/" % str(self.displayMode) + "%s/" % str(flighttype) + "%s" % str(self.selectedtime)
+                    # print(ip)
+                    ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "航班显示模块:%s,%s%s由%s变更为%s%s/" % (acno, flightno, bgtype, self.olditem, self.newitem,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                    try:
+                        requests.get(url=ip, timeout=30).json()
+                        requests.get(url=ip2, timeout=30).json()
+                    except Exception:
+                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                        logger.error(traceback.format_exc())
+                elif 9 < column < 16 and self.olditem != self.newitem:
+                    item = self.tableWidgetFlight.item(row, column)
+                    if item.text() != "":
+                        text = item.text().replace("\"","*").replace("\\",";").replace("\'","*").replace("/","、").replace("#","*")
+                        if "!" in str(text):
+                            text = text.replace("!", "")
+                        if "√" in str(text):
+                            text = text.replace("√", "")
+                    else:
+                        text = "清空项目12345678987654321"
+                    ip = "http://" + str(self.ipinfo) + "/static/checkPglist/%s/%s/%s" % (text, self.selectedtime, self.selectedbc)
+                    # print(ip)
+                    try:
+                        res = requests.get(url=ip, timeout=30).json()
+                        if res["返回值"] == "fail":
+                            self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                            self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                            self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                            QMessageBox.warning(self, "警告", "%sAMRO未考勤,请核实考勤名单或者检查人员字母!" % text)
+                        elif res["返回值"] == "OK" and self.maintainAuthCheckSts == 1 and text != "清空项目12345678987654321" and column == 10 and "3U" not in str(flightno) and "CSC" not in str(flightno):
+                            ####需要加一把锁,有功能开关调用
+                            airplanetype=self.tableWidgetFlight.item(row, 2).text()
+                            engtype=self.tableWidgetFlight.item(row, 3).text()
+                            if "A3" in airplanetype and engtype[0:3] =="LEA":
+                                auttype="ALEAP"
+                            elif "A3" in airplanetype and engtype[0:3] !="LEA":
+                                auttype = "ACSC"
+                            elif "737NG" in airplanetype:
+                                auttype = "737NG"
+                            elif "737MAX" in airplanetype:
+                                auttype = "737MAX"
+                            else:
+                                auttype = "ALL"
+                            ipp = "http://" + str(self.ipinfo) + "/static/maintainAuthCheck/%s/%s" % (text, auttype)
+                            try:
+                                res = requests.get(url=ipp, timeout=30).json()
+                                if res["返回值"] == "fail":
+                                    self.tableWidgetFlight.setItem(int(row), column,QTableWidgetItem(str(self.olditem)))
+                                    self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                                    self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                    QMessageBox.warning(self, "警告", "%s不满足发动机授权条件!请核对信息或者更新授权信息!" % text)
+                                elif res["返回值"] == "ok":
+                                    self.tableWidgetFlight.setItem(int(row), column,QTableWidgetItem(str(self.newitem)))
+                                    self.tableWidgetFlight.item(int(row), column).setBackground(QColor("yellow"))
+                                    self.tableWidgetFlight.item(int(row), column).setForeground(QColor("black"))
+                                    self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                    ip = "http://" + str(self.ipinfo) + "/static/updateDragDropItem/%s/%s/%s/%s/%s/%s" % (column, text, flightid, self.displayMode, flighttype, self.selectedtime)
+                                    # print(ip)
+                                    ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "航班显示模块:%s,%s%s由%s变更为%s%s/" % (acno, flightno, bgtype, self.olditem, self.newitem,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    try:
+                                        requests.get(url=ip, timeout=30).json()
+                                        requests.get(url=ip2, timeout=30).json()
+                                    except Exception:
+                                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                        logger.error(traceback.format_exc())
+                            except:
+                                self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                                self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                                self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                logger.error(traceback.format_exc())
+                        elif (res["返回值"] == "OK" and (self.maintainAuthCheckSts == 0 or "3U" in str(flightno) or "CSC" in str(flightno))) or text == "清空项目12345678987654321" or column != 10:
+                            self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.newitem)))
+                            self.tableWidgetFlight.item(int(row), column).setBackground(QColor("yellow"))
+                            self.tableWidgetFlight.item(int(row), column).setForeground(QColor("black"))
+                            self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                            ip = "http://" + str(self.ipinfo) + "/static/updateDragDropItem/%s/%s/%s/%s/%s/%s" % (column, text, flightid, self.displayMode, flighttype, self.selectedtime)
+                            # print(ip)
+                            ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "航班显示模块:%s,%s%s由%s变更为%s%s/" % (acno, flightno, bgtype, self.olditem, self.newitem,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            try:
+                                requests.get(url=ip, timeout=30).json()
+                                requests.get(url=ip2, timeout=30).json()
+                            except Exception:
+                                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                logger.error(traceback.format_exc())
+                        else:
+                            self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                            self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                            self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    except Exception:
+                        self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                        self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                        self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                        logger.error(traceback.format_exc())
+                self.doubleclickLockUpdate = 0
+                self.doubleclickLock = 0
+                self.tableWidgetFlight.cellChanged.disconnect(self.cellchanged)
+                self.QThreadSortNow("main")
+                #t2 = datetime.datetime.now()
+                #print(f'【编辑操作】【客户端计时】:{t2 - t1}')
+            except Exception:
+                self.doubleclickLockUpdate = 0
+                self.clickrow = None
+                self.clickcolumn = None
+                try:
+                    self.tableWidgetFlight.cellChanged.disconnect(self.cellchanged)
+                except:
+                    pass
+                self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                logger.error(traceback.format_exc())
+                self.doubleclickLock = 0
+                self.QThreadSortNow("main")
+        elif self.clickrow == row and self.clickcolumn == column and self.displayMode =="B":
+            self.clickrow = None
+            self.clickcolumn = None
+            try:
+                self.doubleclickLock = 1
+                self.newitem = self.tableWidgetFlight.item(row, column).text()
+                flightid = self.tableWidgetFlight.item(row, self.tableWidgetFlight.columnCount() - 5).text()
+                flighttype = self.tableWidgetFlight.item(row, 9).text()
+                acno = self.tableWidgetFlight.item(row, 1).text()
+                flightno = self.tableWidgetFlight.item(row, 4).text()
+                bgtype = str(self.displayLabel[column]).replace("/","")
+                if int(column) - self.tableWidgetFlight.columnCount() == -1:
+                    item = self.tableWidgetFlight.item(row, column)
+                    if item.text() != "":
+                        text = item.text().replace("\"","#").replace("\\",";").replace("\'","#")
+                    else:
+                        text = "清空项目12345678987654321"
+                    ip = "http://" + str(self.ipinfo) + "/static/updateEidteItem/" + "%s/" % str(text) + "%s/" % str(flightid) + "%s/" % str(self.displayMode) + "%s/" % str(flighttype) + "%s" % str(self.selectedtime)
+                    # print(ip)
+                    ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "维修记录模块:%s,%s%s由%s变更为%s%s/" % (acno, flightno, bgtype, self.olditem, self.newitem,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                    try:
+                        requests.get(url=ip, timeout=30).json()
+                        requests.get(url=ip2, timeout=30).json()
+                    except Exception:
+                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                        logger.error(traceback.format_exc())
+                elif 9 < column < 16 and self.olditem != self.newitem:
+                    item = self.tableWidgetFlight.item(row, column)
+                    if item.text() != "":
+                        text = item.text().replace("\"","#").replace("\\",";").replace("\'","#")
+                        if "!" in str(text):
+                            text = text.replace("!", "")
+                        if "√" in str(text):
+                            text = text.replace("√", "")
+                    else:
+                        text = "清空项目12345678987654321"
+                    # print(ip)
+                    try:
+                        if text != "清空项目12345678987654321":
+                            ####需要加一把锁,有功能开关调用
+                            ip = "http://" + str(self.ipinfo) + "/static/updateDragDropItem/%s/%s/%s/%s/%s/%s" % (column, text, flightid, self.displayMode, flighttype, self.selectedtime)
+                            # print(ip)
+                            ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "维修记录模块:%s,%s%s由%s变更为%s%s/" % (acno, flightno, bgtype, self.olditem, self.newitem,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            try:
+                                requests.get(url=ip, timeout=30).json()
+                                self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.newitem)))
+                                self.tableWidgetFlight.item(int(row), column).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), column).setForeground(QColor("black"))
+                                self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                requests.get(url=ip2, timeout=30).json()
+                            except Exception:
+                                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                logger.error(traceback.format_exc())
+                        elif text == "清空项目12345678987654321":
+                            ip = "http://" + str(self.ipinfo) + "/static/updateDragDropItem/%s/%s/%s/%s/%s/%s" % (column, text, flightid, self.displayMode, flighttype, self.selectedtime)
+                            # print(ip)
+                            ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "维修记录模块:%s,%s%s由%s变更为%s%s/" % (acno, flightno, bgtype, self.olditem, self.newitem,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            try:
+                                requests.get(url=ip, timeout=30).json()
+                                self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.newitem)))
+                                self.tableWidgetFlight.item(int(row), column).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), column).setForeground(QColor("black"))
+                                self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                requests.get(url=ip2, timeout=30).json()
+                            except Exception:
+                                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                logger.error(traceback.format_exc())
+                        else:
+                            self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                            self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                            self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    except Exception:
+                        self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                        self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                        self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                        logger.error(traceback.format_exc())
+                self.doubleclickLockUpdate = 0
+                self.doubleclickLock = 0
+                self.tableWidgetFlight.cellChanged.disconnect(self.cellchanged)
+                self.QThreadSortNow("main")
+            except Exception:
+                self.doubleclickLockUpdate = 0
+                self.clickrow = None
+                self.clickcolumn = None
+                try:
+                    self.tableWidgetFlight.cellChanged.disconnect(self.cellchanged)
+                except:
+                    pass
+                self.tableWidgetFlight.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                self.tableWidgetFlight.item(int(row), column).setBackground(QColor(self.color))
+                self.tableWidgetFlight.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                logger.error(traceback.format_exc())
+                self.doubleclickLock = 0
+                self.QThreadSortNow("main")
+
+    def btnClick(self, item):
+        if int(self.authority) != 3:
+            try:
+                btn = self.sender()
+                now_2=datetime.datetime.now()- datetime.timedelta(seconds=2)
+                print(self.changeupdatetime,now_2)
+                if btn:
+                    row = self.tableWidget.indexAt(btn.pos()).row()
+                    a = self.tableWidget.item(row, 3).text()
+                    self.severpost_nomeassge("dealLogs", "/%s" % self.user, "/%s" % a, "", "")
+                    self.QThreadSortNow("change")
+                    if self.changeupdatetime < now_2:
+                        self.changeupdatetime = datetime.datetime.now()
+                        self.QThreadSortNow("main")
+
+            except Exception:
+                logger.error(traceback.format_exc())
+        else:
+            QMessageBox.warning(self, "提示", "权限不够,请联系管理员!")
+
+    def tableWidgetDisplayChange(self):
+        try:
+            log = self.sortlogchange
+            self.tableWidget.setRowCount(len(log.keys()))
+            if log != "":
+                for i in log.keys():
+
+                    btnList = [QPushButton('处理')]
+                    self.tableWidget.setItem(int(i), 0, QTableWidgetItem(str(int(i)+1)))
+                    self.tableWidget.setItem(int(i), 1, QTableWidgetItem(str(log[i][2])))
+                    self.tableWidget.setItem(int(i), 3, QTableWidgetItem(str(log[i][0])))
+                    self.tableWidget.setItem(int(i), 4, QTableWidgetItem(str(log[i][1])))
+                    self.tableWidget.setItem(int(i), 5, QTableWidgetItem(str(log[i][10])))
+                    self.tableWidget.setCellWidget(int(i), 2, btnList[0])
+                    self.tableWidget.item(int(i), 0).setForeground(QColor('red'))
+                    self.tableWidget.item(int(i), 1).setForeground(QColor('red'))
+                    self.tableWidget.item(int(i), 0).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    self.tableWidget.item(int(i), 1).setToolTip("%s" % str(log[i][10]))
+                    for btn in btnList:
+                        btn.clicked.connect(self.btnClick)
+            self.tableWidget.setColumnHidden(5, True)
+            self.tableWidget.setColumnHidden(4, True)
+            self.tableWidget.setColumnHidden(3, True)
+            self.tableWidget.resizeColumnToContents(0)
+            self.tableWidget.setColumnWidth(2, 40)
+            self.tableWidget.setColumnWidth(1, 210)
+            self.tableWidget.resizeRowsToContents()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def generateMenu3(self, pos):
+        try:
+            for i in self.tableWidget_3.selectionModel().selection().indexes():
+                menu = QMenu()
+                item2 = menu.addAction('拨打IP电话')
+                screenPos = self.tableWidget_3.mapToGlobal(pos)
+                action = menu.exec(screenPos)
+                rowIndex = i.row()
+                phonenum = self.tableWidget_3.item(rowIndex, 3).text()
+                if action == item2:
+                    if self.localip != None and self.localtoken != None:
+                        try:
+                            data = {"PHB_AutoDialNumber": phonenum,
+                                    "ReturnPage": "/contacts.htm",
+                                    "AutoDialSubmit": "submit",
+                                    "PHB_AutoDialLine": "1"
+                                    }
+                            header = {
+                                "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+                                "Connection": "keep-alive",
+                                "Cookie": self.localtoken
+                            }
+                            requests.post(url="http://%s/contacts.htm" % self.localip, data=data, headers=header)
+                        except Exception:
+                            self.show_info("警告", "拨号失败,请检查IP后重新配置或联系管理员!")
+                            logger.error(traceback.format_exc())
+
+                    else:
+                        self.show_info("警告", "使用前请配置IP电话!")
+                    return
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def generateMenu2(self, pos):
+        try:
+            for i in self.tableWidgetPerson.selectionModel().selection().indexes():
+                menu = QMenu()
+                item1 = menu.addAction('查看详情')
+                item2 = menu.addAction('拨打IP电话')
+                screenPos = self.tableWidgetPerson.mapToGlobal(pos)
+                action = menu.exec(screenPos)
+                rowIndex = i.row()
+                colnum = self.tableWidgetPerson.columnCount()
+                name = self.tableWidgetPerson.item(rowIndex, 1).text()
+                # print(name)
+                if action == item2:
+                    ip = "http://" + str(self.ipinfo) + "/static/get_empNos_phoone/%s" % name
+                    infos = requests.get(url=ip, timeout=30).json()
+
+                    # print(self.localtoken)
+                    # '''
+                    if infos == {}:
+                        self.show_info("警告", "无法查询到%s个人信息,请更新后尝试!!" % name)
+                    else:
+                        try:
+                            # print(infos["电话"])
+                            data = {"PHB_AutoDialNumber": infos["电话"],
+                                    "ReturnPage": "/contacts.htm",
+                                    "AutoDialSubmit": "submit",
+                                    "PHB_AutoDialLine": "1"
+                                    }
+                            header = {
+                                "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+                                "Connection": "keep-alive",
+                                "Cookie": self.localtoken
+                            }
+                            requests.post(url="http://%s/contacts.htm" % self.localip, data=data, headers=header)
+                        except Exception:
+                            logger.error(traceback.format_exc())
+
+                    # '''
+                    return
+                elif action == item1:
+                    ip = "http://" + str(self.ipinfo) + "/static/get_empNos_phoone/%s" % name
+                    infos = requests.get(url=ip, timeout=30).json()
+                    # print(infos)
+                    # '''
+                    if infos == {}:
+                        self.show_info("警告", "无法查询到%s个人信息,请更新后尝试!!" % name)
+                    else:
+                        ip = "http://" + str(self.ipinfo) + "/static/get_empNos_phoone/%s" % name
+                        infos = requests.get(url=ip, timeout=30).json()
+                        self.checkLoadSingal = checkLoadSingal()
+                        self.checkLoadSingal.worknum = infos["工号"]
+                        self.checkLoadSingal.ipinfo = self.ipinfo
+                        self.checkLoadSingal.name = name
+                        self.checkLoadSingal.selectedtime = self.selectedtime
+                        self.checkLoadSingal.start()
+                    # print("正在开发")
+                else:
+                    return
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def LM_TSK_SURE_PG_NOW(self, id, empNos, type, shiftDate, shift):
+        dict = {"taskid": id,
+                "empNos": empNos,
+                "type": type,
+                "shiftDate": shiftDate,
+                "shift": shift
+                }
+        res = self.severpostData_nomeassge("LM_TSK_SURE_PG", data=dict)["返回值"]
+        return res
+
+    def send_dingdong(self, a, b, c, d, e, f, g, h, i, j, k, l):
+        dict_dingdong = {"acno": a,
+                         "actype": b,
+                         "tasktype": c,
+                         "tatd": d,
+                         "bay": e,
+                         "taskid": f,
+                         "wxemp": g,
+                         "fxemp": h,
+                         "wx": i,
+                         "fx": j,
+                         "ecsj":k,
+                         "msgInfo": l
+                         }
+        res = self.severpostData_nomeassge("dingdong", data=dict_dingdong)["返回值"]
+        return res
+
+    def getRiskData(self,bay,flighttype):
+        if "送" in flighttype or flighttype == "航前":
+            type="出港提示"
+        else:
+            type = "进港提示"
+        res=""
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/getRiskData/" + "%s/" % bay + "%s" % type
+            res=requests.get(url=ip, timeout=30).json()["返回值"]
+        except Exception:
+            print(traceback.format_exc())
+            QMessageBox.warning(self, "风险提示失效", "风险提示推送功能失效请联系管理员!")
+        return res
+
+    def generateMenu(self, pos):
+        if int(self.authority) < 3 and self.displayMode =="A":
+            try:
+                zydy = {"短停": "TR", "航后": "AF", "航前": "AP", "特后前": "TAF", "未显示": ""}
+                for i in self.tableWidgetFlight.selectionModel().selection().indexes():
+                    '''
+                    col_dic = {"0": "序号", "1": "机号", "2": "机型", "3": "发动机", "4": "航班号", "5": "计达", "6": "预达", "7": "计飞",
+                               "8": "机位", "9": "类型", "10": "放行", "11": "工1", "12": "工2", "13": "工3", "14": "工4", "15": "班组长",
+                               "16": "到位", "18": "放行","19": "销夹", "17": "二送", "20": "随机", "21": "随机", "22": "保留", "23": "工作包", 
+                               "24": "进出港城市","25": "维修人员", "26": "二送人员", "27": "放行", "28": "航班编号", "29": "任务编号","30":"TATD","31":"类型","32":"附加消息"}
+                    '''
+                    menu = QMenu()
+                    item1 = menu.addAction('维修人员派工')
+                    item2 = menu.addAction('放行人员派工')
+                    item3 = menu.addAction('二送人员派工')
+                    item4 = menu.addAction('推送维修人员')
+                    item5 = menu.addAction('推送放行人员')
+                    item6 = menu.addAction('推送二送人员')
+                    item7 = menu.addAction('确认通知')
+                    item8 = menu.addAction('人工接机到位')
+                    item9 = menu.addAction('人工确认放行')
+                    item10 = menu.addAction('人工确认随机到位')
+                    item11 = menu.addAction('人工确认二送到位')
+                    item12 = menu.addAction('人工确认销夹取下')
+                    item13 = menu.addAction('一键派工&通知')
+                    item15 = menu.addAction('电话通知')
+                    item16 = menu.addAction('查看工作包')
+                    item17 = menu.addAction('删除航班')
+                    item18 = menu.addAction('工作交接')
+
+                    screenPos = self.tableWidgetFlight.mapToGlobal(pos)
+                    action = menu.exec(screenPos)
+                    rowIndex = i.row()
+                    colnum = self.tableWidgetFlight.columnCount()
+                    # print(colnum)
+
+                    acno = self.tableWidgetFlight.item(rowIndex, 1).text()
+                    flightno = self.tableWidgetFlight.item(rowIndex, 4).text()
+                    qw1 = self.tableWidgetFlight.item(rowIndex, 11).text().replace("!", "") if "!" in self.tableWidgetFlight.item(rowIndex, 11).text() else self.tableWidgetFlight.item(rowIndex, 11).text()
+                    qw2 = self.tableWidgetFlight.item(rowIndex, 12).text().replace("!", "") if "!" in self.tableWidgetFlight.item(rowIndex, 12).text() else self.tableWidgetFlight.item(rowIndex, 12).text()
+                    g1 = self.tableWidgetFlight.item(rowIndex, 13).text().replace("!", "") if "!" in self.tableWidgetFlight.item(rowIndex, 13).text() else self.tableWidgetFlight.item(rowIndex, 13).text()
+                    g2 = self.tableWidgetFlight.item(rowIndex, 14).text().replace("!", "") if "!" in self.tableWidgetFlight.item(rowIndex, 14).text() else self.tableWidgetFlight.item(rowIndex, 14).text()
+                    fx = self.tableWidgetFlight.item(rowIndex, 10).text().replace("!", "") if "!" in self.tableWidgetFlight.item(rowIndex, 10).text() else self.tableWidgetFlight.item(rowIndex, 10).text()
+
+                    qw1_1 = "" if "√" in qw1 else qw1
+                    qw2_1 = "" if "√" in qw2 else qw2
+                    g1_1 = "" if "√" in g1 else g1
+                    g2_1 = "" if "√" in g2 else g2
+                    fx_1 = "" if "√" in fx else fx
+
+                    qw1 = qw1.replace("√", "") if "√" in qw1 else qw1
+                    qw2 = qw2.replace("√", "") if "√" in qw2 else qw2
+                    g1 = g1.replace("√", "") if "√" in g1 else g1
+                    g2 = g2.replace("√", "") if "√" in g2 else g2
+                    fx = fx.replace("√", "") if "√" in fx else fx
+                    fj = str(self.tableWidgetFlight.item(rowIndex, colnum - 1).text())
+                    dict_people = {"工1": qw1,
+                                   "工2": qw2,
+                                   "工3": g1,
+                                   "工4": g2,
+                                   "放行": fx
+                                   }
+                    dict_people_noCall = {"工1": qw1_1,
+                                   "工2": qw2_1,
+                                   "工3": g1_1,
+                                   "工4": g2_1,
+                                   "放行": fx_1
+                                   }
+                    # print(dict_people)
+                    if action == item1:
+                        if str(self.tableWidgetFlight.item(rowIndex, colnum - 5).text()) != "" and "MAN" not in str(
+                                self.tableWidgetFlight.item(rowIndex, colnum - 5).text())  and str(self.tableWidgetFlight.item(rowIndex, colnum - 4).text()) != "" :
+                            empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                            # print(empNos)
+                            if empNos["code"] != "fail":
+                                res=self.LM_TSK_SURE_PG_NOW(self.tableWidgetFlight.item(rowIndex, colnum - 4).text(),empNos["WXempNos"],"WX",empNos["date"],empNos["bc"])
+                                if res == "ok":
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工成功%s/" % (acno, flightno, str(qw1 + "-" + qw2 + "-" + g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception:
+                                        logger.error(traceback.format_exc())
+                                        QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    self.show_info("成功提示", "派工成功!")
+                            if empNos["faillist"] != []:
+                                try:
+                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    requests.get(url=ip, timeout=30).json()
+                                except Exception:
+                                    logger.error(traceback.format_exc())
+                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                self.show_info("派工错误", "以下人员派工失败:%s,请确认考勤打卡情况!" % empNos["faillist"])
+                        else:
+                            self.show_info("警告", "该航班非AMRO航班或者无任务编号,请确认是否为AMRO航班,如确认请使用AMRO人工派工!!")
+                        return
+                    elif action == item18:
+                        if int(self.authority) <= 2:
+                            if self.tableWidgetFlight.item(rowIndex, 24).text() !="" and "【交班航班】" not in fj and \
+                                    ("3U" in self.tableWidgetFlight.item(rowIndex, 4).text() or "CSC" in self.tableWidgetFlight.item(rowIndex, 4).text()):
+                                relay = QMessageBox.warning(self, "警告", "是否确定要对B-%s,%s进行工作交接?"%(self.tableWidgetFlight.item(rowIndex, 1).text(),self.tableWidgetFlight.item(rowIndex, 4).text()),
+                                    QMessageBox.StandardButton.Yes,
+                                    QMessageBox.StandardButton.Close)
+                                if relay == QMessageBox.StandardButton.Yes:
+                                    data = {"taskid": self.tableWidgetFlight.item(rowIndex, 26).text(),"sts": "1"}
+                                    res = self.severpostData_nomeassge("handoverflight", data=data)["返回值"]
+                                    if res == "ok":
+                                        flightid = self.tableWidgetFlight.item(rowIndex, colnum - 5).text()
+                                        flighttype = self.tableWidgetFlight.item(rowIndex, 9).text()
+                                        fjxx = "【交班航班】" + fj
+                                        ip = "http://" + str(self.ipinfo) + "/static/updateEidteItem/" + "%s/" % str(fjxx) + "%s/" % str(flightid) + "A/%s/" % str(flighttype) + "%s" % str(self.selectedtime)
+                                        try:
+                                            requests.get(url=ip, timeout=30).json()
+                                        except Exception:
+                                            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                            logger.error(traceback.format_exc())
+                                        self.QThreadSortNow("main")
+                                        QMessageBox.warning(self, "提示", "B-%s,%s工作交接推送成功"%(self.tableWidgetFlight.item(rowIndex, 1).text(),self.tableWidgetFlight.item(rowIndex, 4).text()))
+
+                                    else:
+                                        QMessageBox.warning(self, "警告", "航班交接失败,请重新尝试")
+                            elif "【交班航班】" in fj:
+                                QMessageBox.warning(self, "提示", "该航班已交接,请勿重复交接!")
+                            elif "3U" not in self.tableWidgetFlight.item(rowIndex, 4).text() and "CSC" not in self.tableWidgetFlight.item(rowIndex, 4).text():
+                                QMessageBox.warning(self, "提示", "该航班为非川航航班,无需交接!!!")
+                            else:
+                                QMessageBox.warning(self, "提示", "无法对未安排人员的的航班无法进行交接班,请先进行派工后交班!")
+
+
+
+                        else:
+                            self.show_info("警告", "权限不够,请联系管理员!!!")
+                        return
+                    elif action == item17:
+                        if int(self.authority) <= 1:
+                            if "MAN" in str(self.tableWidgetFlight.item(rowIndex, colnum - 5).text()):
+                                ip = "http://" + str(self.ipinfo) + "/static/" + "deleteFlight/" + "%s/%s/%s" % (
+                                    self.tableWidgetFlight.item(rowIndex, colnum - 5).text(), self.user, self.selectedtime)
+                                res = requests.get(url=ip, timeout=30).json()
+                                if res["返回值"] == "ok":
+                                    self.show_info("成功提示", "航班删除成功!")
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s航班被删除%s/" % (acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception:
+                                        logger.error(traceback.format_exc())
+                                        QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    self.QThreadSortNow("main")
+                                else:
+                                    self.show_info("提示", "航班删除失败,如需请联系管理员!")
+                            else:
+                                self.show_info("警告", "删除航班功能仅限于人工添加的航班,AMRO航班无法删除!!!")
+                        else:
+                            self.show_info("警告", "权限不够,请联系管理员!!!")
+                        return
+                    elif action == item16:
+                        if str(self.tableWidgetFlight.item(rowIndex, colnum - 5).text()) != "" and "MAN" not in str(self.tableWidgetFlight.item(rowIndex, colnum - 5).text()) and str(self.tableWidgetFlight.item(rowIndex, colnum - 4).text()) != "":
+                            taskid = self.tableWidgetFlight.item(rowIndex, colnum - 4).text()
+                            ip = "http://" + str(self.ipinfo) + "/static/checkWorkjob/%s" % taskid
+                            infos = requests.get(url=ip, timeout=30).json()
+                            if infos["返回值"] == "ok":
+                                self.show_info("成功提示", "工作包查询成功!")
+                                self.QThreadSortNow("main")
+                        else:
+                            self.show_info("警告", "该航班非AMRO航班或者无任务编号,无法查询工作包!!")
+                        return
+                    elif action == item15:
+                        # {"工号":"0","电话":"1","姓名":"2","航班编号":"3","航班号":"4","附加消息":"5","拨号次数":"6","":"8","":"9","":"10"}
+                        if "人工" not in str(fj):
+                            for i in dict_people_noCall.keys():
+                                if dict_people_noCall[i] != "":
+                                    name = str(dict_people_noCall[i])
+                                    if "!" in name:
+                                        name = name.replace("!", "")
+                                    if "√" in name:
+                                        name = name.replace("√", "")
+                                    ip = "http://" + str(self.ipinfo) + "/static/get_empNos_phoone/%s" % name
+                                    infos = requests.get(url=ip, timeout=30).json()
+                                    # print(infos)
+                                    flightnumber = self.tableWidgetFlight.item(rowIndex, 4).text()
+                                    flighttype = self.tableWidgetFlight.item(rowIndex, 9).text()
+                                    flightids = str(self.tableWidgetFlight.item(rowIndex, colnum - 4).text()) + str(
+                                        flighttype) + str(name) + str(datetime.datetime.now().strftime("%H:%M:%S"))
+                                    if infos == {}:
+                                        self.show_info("警告", "无法查询到%s个人信息,请人工联系或更新后尝试!!" % name)
+                                        ip = "http://" + str(
+                                            self.ipinfo) + "/static/insertLogs/" + "%s%s%s未在通讯录,无法完成自动拨号,请人工联系或更新信息后尝试" % (
+                                                 flightnumber, flighttype, name) + "/system/" + str(
+                                            datetime.datetime.now().strftime("%Y-%m-%d %H:%M"))
+                                        requests.get(url=ip, timeout=30).json()
+                                    else:
+                                        callnumber = 0
+                                        data = {"工号": "%s" % infos["工号"], "电话": "%s" % infos["电话"], "姓名": "%s" % name,
+                                                "航班编号": "%s" % flightids, "航班号": "%s" % flightnumber, "附加消息": "%s" % fj,
+                                                "拨号次数": callnumber}
+                                        self.severpostData_nomeassge("insertCalllist", data)
+                            ip = "http://" + str(self.ipinfo) + "/static/calltry"
+                            requests.get(url=ip, timeout=30).json()
+                            self.severpost_nomeassge("infoConfirm", "/%s" % self.tableWidgetFlight.item(rowIndex, 9).text(),
+                                                     "/%s" % self.tableWidgetFlight.item(rowIndex, colnum - 5).text(),
+                                                     "/%s" % self.displayMode, "/%s" % self.selectedtime)
+                            try:
+                                ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s电话通知%s/" % (
+                                acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                requests.get(url=ip, timeout=30).json()
+                            except Exception:
+                                logger.error(traceback.format_exc())
+                                QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                            self.QThreadSortNow("main")
+                            # 需要一次拨号请求
+                        else:
+                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs/" + "%s,%s附加消息有需要人工通知的内容,请人工介入,请通知到位后点击确认通知!!" % (acno, flightno) + "/system/" + str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M"))
+                            requests.get(url=ip, timeout=30).json()
+                            QMessageBox.warning(self, "人工提醒", "%s,%s附加消息有需要人工通知的内容,将推送航班监控席位由人工通知!" % (acno, flightno) )
+                        return
+                    elif action == item2:
+                        if str(self.tableWidgetFlight.item(rowIndex, colnum - 5).text()) != "" and "MAN" not in str(
+                                self.tableWidgetFlight.item(rowIndex, colnum - 5).text()) and str(self.tableWidgetFlight.item(rowIndex, colnum - 4).text()) != "":
+                            empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                            if empNos["code"] != "fail":
+
+                                res = self.LM_TSK_SURE_PG_NOW(self.tableWidgetFlight.item(rowIndex, colnum - 4).text(),empNos["FXempNos"], "FX", empNos["date"], empNos["bc"])
+
+                                if res == "ok":
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工成功%s/" % (acno, flightno, str(fx),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except:
+                                        self.show_info("日志功能失效", "操作日志功能失效请联系管理员")
+                                    self.show_info("成功提示", "派工成功!")
+                            if empNos["faillist"] != []:
+                                try:
+                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    requests.get(url=ip, timeout=30).json()
+                                except Exception:
+                                    logger.error(traceback.format_exc())
+                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                self.show_info("派工错误", "以下人员派工失败:%s,请确认考勤打卡情况!" % empNos["faillist"])
+                        else:
+                            self.show_info("警告", "该航班非AMRO航班或者无任务编号,请确认是否为AMRO航班,如确认请使用AMRO人工派工!!")
+                        return
+                    elif action == item3:
+                        if str(self.tableWidgetFlight.item(rowIndex, colnum - 5).text()) != "" and "MAN" not in str(self.tableWidgetFlight.item(rowIndex, colnum - 5).text()) and str(self.tableWidgetFlight.item(rowIndex, colnum - 4).text()) != "":
+                            empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                            if empNos["code"] != "fail":
+                                res = self.LM_TSK_SURE_PG_NOW(self.tableWidgetFlight.item(rowIndex, colnum - 4).text(),empNos["ESempNos"], "ECSJ", empNos["date"], empNos["bc"])
+
+                                if res == "ok":
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工成功%s/" % (acno, flightno, str(g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception:
+                                        logger.error(traceback.format_exc())
+                                        QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    self.show_info("成功提示", "派工成功!")
+                            if empNos["faillist"] != []:
+                                try:
+                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    requests.get(url=ip, timeout=30).json()
+                                except Exception:
+                                    logger.error(traceback.format_exc())
+                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                self.show_info("派工错误", "以下人员派工失败:%s,请确认考勤打卡情况!" % empNos["faillist"])
+                        else:
+                            self.show_info("警告", "该航班非AMRO航班或者无任务编号,请确认是否为AMRO航班,如确认请使用AMRO人工派工!!")
+                        return
+                    elif action == item4:
+                        if str(self.tableWidgetFlight.item(rowIndex, colnum - 5).text()) != "" and "MAN" not in str(
+                                self.tableWidgetFlight.item(rowIndex, colnum - 5).text()) and str(self.tableWidgetFlight.item(rowIndex, colnum - 4).text()) != "":
+                            empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                            if empNos["code"] != "fail":
+                                risktips=""
+                                if self.tableWidgetFlight.item(rowIndex, 8).text() !="":
+                                    res=self.getRiskData(self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 9).text())
+                                    risktips=f"【风险提示】{res}" if res !="" else ""
+                                msgInfo="进港维修任务保障推送!%s%s" % (fj,risktips)
+                                res= self.send_dingdong(self.tableWidgetFlight.item(rowIndex, 1).text(),self.tableWidgetFlight.item(rowIndex, 2).text(),
+                                                        self.tableWidgetFlight.item(rowIndex, colnum - 2).text(),
+                                                        "进" +self.tableWidgetFlight.item(rowIndex, colnum - 3).text().split("</br>")[0] + ",出" +self.tableWidgetFlight.item(rowIndex, colnum - 3).text().split("</br>")[1],
+                                                        self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, colnum - 4).text(),
+                                                        empNos["WXempNos"],"",empNos["WX"],empNos["FX"],"",msgInfo)
+                                if res != "ok":
+                                    self.show_info("失败提示", "%s维修人员%s派工信息推送失败!" % (self.tableWidgetFlight.item(rowIndex, 1).text(), empNos["WX"]))
+                                else:
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送成功%s/" % (acno, flightno, str(qw1 + "-" + qw2 + "-" + g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception:
+                                        logger.error(traceback.format_exc())
+                                        QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    self.severpost_nomeassge("infoConfirm2", "/%s" % self.tableWidgetFlight.item(rowIndex, 9).text(),"/%s" % self.tableWidgetFlight.item(rowIndex,colnum - 5).text(),"/%s" % self.displayMode, "/%s" % self.selectedtime)
+                                    self.show_info("成功提示", "%s维修人员%s派工信息推送成功!!!" % (self.tableWidgetFlight.item(rowIndex, 1).text(), empNos["WX"]))
+                                    self.QThreadSortNow("main")
+
+                            if empNos["faillist"] != []:
+                                try:
+                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    requests.get(url=ip, timeout=30).json()
+                                except Exception:
+                                    logger.error(traceback.format_exc())
+                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                self.show_info("通知错误", "以下人员通知失败:%s,请确认考勤打卡情况!" % empNos["faillist"])
+                        else:
+                            self.show_info("警告", "该航班非AMRO航班或者无任务编号,请确认是否为AMRO航班,如确认请使用AMRO人工叮咚消息通知!!")
+                        return
+
+                    elif action == item5:
+                        if str(self.tableWidgetFlight.item(rowIndex, colnum - 5).text()) != "" and "MAN" not in str(
+                                self.tableWidgetFlight.item(rowIndex, colnum - 5).text())and str(self.tableWidgetFlight.item(rowIndex, colnum - 4).text()) != "":
+                            empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                            if empNos["code"] != "fail":
+                                risktips=""
+                                if self.tableWidgetFlight.item(rowIndex, 8).text() !="":
+                                    res=self.getRiskData(self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 9).text())
+                                    risktips=f"【风险提示】{res}" if res !="" else ""
+                                msgInfo="放行人员保障推送!%s%s" % (fj,risktips)
+                                res= self.send_dingdong(self.tableWidgetFlight.item(rowIndex, 1).text(),self.tableWidgetFlight.item(rowIndex, 2).text(),
+                                                        self.tableWidgetFlight.item(rowIndex, colnum - 2).text(),
+                                                        "进" +self.tableWidgetFlight.item(rowIndex, colnum - 3).text().split("</br>")[0] + ",出" +self.tableWidgetFlight.item(rowIndex, colnum - 3).text().split("</br>")[1],
+                                                        self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, colnum - 4).text(),
+                                                        "", empNos["FXempNos"],empNos["WX"],empNos["FX"],"",msgInfo)
+
+                                if res != "ok":
+                                    self.show_info("失败提示", "%s放行人员%s派工信息推送失败!" % (
+                                        self.tableWidgetFlight.item(rowIndex, 1).text(), empNos["FX"]))
+                                else:
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送成功%s/" % (acno, flightno, str(fx),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception:
+                                        logger.error(traceback.format_exc())
+                                        QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    self.show_info("成功提示", "%s放行人员%s派工信息推成功!!!" % (
+                                        self.tableWidgetFlight.item(rowIndex, 1).text(), empNos["FX"]))
+                                    self.severpost_nomeassge("infoConfirm2","/%s" % self.tableWidgetFlight.item(rowIndex, 9).text(),
+                                                             "/%s" % self.tableWidgetFlight.item(rowIndex,colnum - 5).text(),
+                                                             "/%s" % self.displayMode, "/%s" % self.selectedtime)
+                                    self.QThreadSortNow("main")
+                            if empNos["faillist"] != []:
+                                try:
+                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    requests.get(url=ip, timeout=30).json()
+                                except Exception:
+                                    logger.error(traceback.format_exc())
+                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                self.show_info("通知错误", "以下人员通知失败:%s,请确认考勤打卡情况!" % empNos["faillist"])
+                        else:
+                            self.show_info("警告","该航班非AMRO航班或者无任务编号,请确认是否为AMRO航班,如确认请使用AMRO人工叮咚消息通知!!")
+                        return
+
+                    elif action == item6:
+                        if str(self.tableWidgetFlight.item(rowIndex, colnum - 5).text()) != "" and "MAN" not in str(
+                                self.tableWidgetFlight.item(rowIndex, colnum - 5).text())and str(self.tableWidgetFlight.item(rowIndex, colnum - 4).text()) != "":
+                            empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                            if empNos["code"] != "fail":
+                                risktips = ""
+                                if self.tableWidgetFlight.item(rowIndex, 8).text() != "":
+                                    res = self.getRiskData(self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 9).text())
+                                    risktips = f"【风险提示】{res}" if res != "" else ""
+                                msgInfo = "二次送机任务推送!%s%s" % (fj, risktips)
+                                res= self.send_dingdong(self.tableWidgetFlight.item(rowIndex, 1).text(),self.tableWidgetFlight.item(rowIndex, 2).text(),
+                                                        self.tableWidgetFlight.item(rowIndex, colnum - 2).text(),
+                                                        "进" +self.tableWidgetFlight.item(rowIndex, colnum - 3).text().split("</br>")[0] + ",出" +self.tableWidgetFlight.item(rowIndex, colnum - 3).text().split("</br>")[1],
+                                                        self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, colnum - 4).text(),
+                                                        empNos["ESempNos"], "",empNos["WX"],empNos["FX"],empNos["ES"],msgInfo)
+
+                                if res != "ok":
+                                    self.show_info("失败提示", "%s二次送机人员%s派工信息推送失败!" % (
+                                        self.tableWidgetFlight.item(rowIndex, 1).text(), empNos["ES"]))
+                                else:
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送成功%s/" % (acno, flightno, str(g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception:
+                                        logger.error(traceback.format_exc())
+                                        QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    self.show_info("成功提示", "%s二次送机人员%s派工信息推送成功!!!" % (
+                                        self.tableWidgetFlight.item(rowIndex, 1).text(), empNos["ES"]))
+                                    self.severpost_nomeassge("infoConfirm2","/%s" % self.tableWidgetFlight.item(rowIndex, 9).text(),
+                                                             "/%s" % self.tableWidgetFlight.item(rowIndex,colnum - 5).text(),
+                                                             "/%s" % self.displayMode, "/%s" % self.selectedtime)
+                                    self.QThreadSortNow("main")
+                            if empNos["faillist"] != []:
+                                try:
+                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                    requests.get(url=ip, timeout=30).json()
+                                except Exception:
+                                    logger.error(traceback.format_exc())
+                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                self.show_info("通知错误", "以下人员通知失败:%s,请确认考勤打卡情况!" % empNos["faillist"])
+                        else:
+                            self.show_info("警告","该航班非AMRO航班或者无任务编号,请确认是否为AMRO航班,如确认请使用AMRO人工叮咚消息通知!!")
+                        return
+                    elif action == item7:
+                        self.severpost_nomeassge("infoConfirm", "/%s" % self.tableWidgetFlight.item(rowIndex, 9).text(),
+                                                 "/%s" % self.tableWidgetFlight.item(rowIndex, colnum - 5).text(),
+                                                 "/%s" % self.displayMode, "/%s" % self.selectedtime)
+                        try:
+                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s点击确认通知%s/" % (acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            requests.get(url=ip, timeout=30).json()
+                        except Exception:
+                            logger.error(traceback.format_exc())
+                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                        self.QThreadSortNow("main")
+                        return
+                    elif action == item8:
+                        self.severpost_nomeassge("manChangests",
+                                                 "/%s" % self.tableWidgetFlight.item(rowIndex, colnum - 5).text(), "/接机到位",
+                                                 "/%s" % self.selectedtime, "/%s" % self.user)
+                        try:
+                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s人工点击接机到位%s/" % (acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            requests.get(url=ip, timeout=30).json()
+                        except Exception:
+                            logger.error(traceback.format_exc())
+                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                        self.QThreadSortNow("main")
+                        self.QThreadSortNow("change")
+                        self.QThreadSortNow("log")
+                        return
+                    elif action == item9:
+                        self.severpost_nomeassge("manChangests","/%s" % self.tableWidgetFlight.item(rowIndex, colnum - 5).text(), "/放行","/%s" % self.selectedtime, "/%s" % self.user)
+                        # print("人工确认放行")
+                        try:
+                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s人工点击放行%s/" % (acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            requests.get(url=ip, timeout=30).json()
+                        except Exception:
+                            logger.error(traceback.format_exc())
+                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                        self.QThreadSortNow("main")
+                        self.QThreadSortNow("change")
+                        self.QThreadSortNow("log")
+                        return
+                    elif action == item10:
+                        self.severpost_nomeassge("manChangests","/%s" % self.tableWidgetFlight.item(rowIndex, colnum - 5).text(), "/随机到位","/%s" % self.selectedtime, "/%s" % self.user)
+                        # print("人工确认随机到位")
+                        try:
+                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s人工点击随机到位%s/" % (acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            requests.get(url=ip, timeout=30).json()
+                        except Exception:
+                            logger.error(traceback.format_exc())
+                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                        self.QThreadSortNow("main")
+                        self.QThreadSortNow("change")
+                        self.QThreadSortNow("log")
+                        return
+                    elif action == item11:
+                        self.severpost_nomeassge("manChangests",
+                                                 "/%s" % self.tableWidgetFlight.item(rowIndex, colnum - 5).text(), "/二送到位",
+                                                 "/%s" % self.selectedtime, "/%s" % self.user)
+                        # print("人工确认二送到位")
+                        try:
+                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s人工点击二送到位%s/" % (acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            requests.get(url=ip, timeout=30).json()
+                        except Exception:
+                            logger.error(traceback.format_exc())
+                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                        self.QThreadSortNow("main")
+                        self.QThreadSortNow("change")
+                        self.QThreadSortNow("log")
+                        return
+                    elif action == item12:
+                        self.severpost_nomeassge("manChangests",
+                                                 "/%s" % self.tableWidgetFlight.item(rowIndex, colnum - 5).text(), "/销子夹板",
+                                                 "/%s" % self.selectedtime, "/%s" % self.user)
+                        try:
+                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s人工点击销子夹板%s/" % (acno, flightno,datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                            requests.get(url=ip, timeout=30).json()
+                        except Exception:
+                            logger.error(traceback.format_exc())
+                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                        self.QThreadSortNow("main")
+                        self.QThreadSortNow("change")
+                        self.QThreadSortNow("log")
+                        return
+                    elif action == item13:
+                        msg = {}
+                        if str(self.tableWidgetFlight.item(rowIndex, colnum - 5).text()) != "" and "MAN" not in str(self.tableWidgetFlight.item(rowIndex, colnum - 5).text())and str(self.tableWidgetFlight.item(rowIndex, colnum - 4).text()) != "":
+                            if self.tableWidgetFlight.item(rowIndex, 9).text() != "短停送" and self.tableWidgetFlight.item(rowIndex, 9).text() != "特后前送":
+                                empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                                # print(empNos)
+                                try:
+                                    if empNos["code"] != "fail":
+                                        res=self.LM_TSK_SURE_PG_NOW(self.tableWidgetFlight.item(rowIndex, colnum - 4).text(),empNos["WXempNos"],"WX",empNos["date"],empNos["bc"])
+
+                                        if res == "ok":
+                                            msg["aa"] = "%s维修人员派工成功!"% str(qw1 + "-" + qw2 + "-" + g1 + "-" + g2)
+                                            try:
+                                                ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工成功%s/" % (acno, flightno, str(qw1 + "-" + qw2 + "-" + g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                requests.get(url=ip, timeout=30).json()
+                                            except Exception:
+                                                logger.error(traceback.format_exc())
+                                                QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+
+                                    if empNos["faillist"] != []:
+                                        msg["a"] = "以下维修人员派工失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                        try:
+                                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]", ""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                            requests.get(url=ip, timeout=30).json()
+                                        except Exception:
+                                            logger.error(traceback.format_exc())
+                                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                except:
+                                    pass
+                                try:
+                                    if empNos["code"] != "fail":
+                                        res = self.LM_TSK_SURE_PG_NOW(self.tableWidgetFlight.item(rowIndex, colnum - 4).text(),empNos["FXempNos"], "FX", empNos["date"], empNos["bc"])
+                                        if res == "ok":
+                                            msg["bb"] = "放行人员%s派工成功!"%str(fx)
+                                            try:
+                                                ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工成功%s/" % (acno, flightno, str(fx),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                requests.get(url=ip, timeout=30).json()
+                                            except Exception:
+                                                logger.error(traceback.format_exc())
+                                                QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    if empNos["faillist"] != []:
+                                        msg["b"] = "以下放行人员派工失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                        try:
+                                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                            requests.get(url=ip, timeout=30).json()
+                                        except Exception:
+                                            logger.error(traceback.format_exc())
+                                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                except:
+                                    pass
+                                try:
+                                    if empNos["code"] != "fail":
+                                        risktips = ""
+                                        if self.tableWidgetFlight.item(rowIndex, 8).text() != "":
+                                            res = self.getRiskData(self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 9).text())
+                                            risktips = f"【风险提示】{res}" if res != "" else ""
+                                        msgInfo = "进港维修任务保障推送!%s%s" % (fj, risktips)
+                                        res= self.send_dingdong(self.tableWidgetFlight.item(rowIndex, 1).text(),self.tableWidgetFlight.item(rowIndex, 2).text(),
+                                                                self.tableWidgetFlight.item(rowIndex, colnum - 2).text(),
+                                                                "进" +self.tableWidgetFlight.item(rowIndex, colnum - 3).text().split("</br>")[0] + ",出" +self.tableWidgetFlight.item(rowIndex, colnum - 3).text().split("</br>")[1],
+                                                                self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, colnum - 4).text(),empNos["WXempNos"],"",empNos["WX"],empNos["FX"],"",msgInfo)
+
+                                        if res == "ok":
+                                            msg["cc"] = "%s维修人员%s派工信息推送成功!!!" % (self.tableWidgetFlight.item(rowIndex, 1).text(), empNos["WX"])
+                                            self.severpost_nomeassge("infoConfirm2","/%s" % self.tableWidgetFlight.item(rowIndex, 9).text(),"/%s" % self.tableWidgetFlight.item(rowIndex,colnum - 5).text(),"/%s" % self.displayMode, "/%s" % self.selectedtime)
+                                            try:
+                                                ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送成功%s/" % (acno, flightno, str(qw1 + "-" + qw2 + "-" + g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                requests.get(url=ip, timeout=30).json()
+                                            except Exception:
+                                                logger.error(traceback.format_exc())
+                                                QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    if empNos["faillist"] != []:
+                                        msg["c"] = "以下人员通知失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                        try:
+                                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                            requests.get(url=ip, timeout=30).json()
+                                        except Exception:
+                                            logger.error(traceback.format_exc())
+                                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                except:
+                                    #pass
+                                    print(traceback.format_exc())
+                                try:
+                                    if empNos["code"] != "fail":
+                                        risktips = ""
+                                        if self.tableWidgetFlight.item(rowIndex, 8).text() != "":
+                                            res = self.getRiskData(self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 9).text())
+                                            risktips = f"【风险提示】{res}" if res != "" else ""
+                                        msgInfo = "放行任务保障信息!%s%s" % (fj, risktips)
+                                        res= self.send_dingdong(self.tableWidgetFlight.item(rowIndex, 1).text(),self.tableWidgetFlight.item(rowIndex, 2).text(),
+                                                                self.tableWidgetFlight.item(rowIndex, colnum - 2).text(),
+                                                                "进" +self.tableWidgetFlight.item(rowIndex, colnum - 3).text().split("</br>")[0] + ",出" +self.tableWidgetFlight.item(rowIndex, colnum - 3).text().split("</br>")[1],
+                                                                self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, colnum - 4).text(),
+                                                                "", empNos["FXempNos"],empNos["WX"],empNos["FX"],"",msgInfo)
+
+                                        if res == "ok":
+                                            msg["dd"] = "%s放行人员%s派工信息推成功!!!" % (
+                                                self.tableWidgetFlight.item(rowIndex, 1).text(), empNos["FX"])
+                                            self.severpost_nomeassge("infoConfirm2","/%s" % self.tableWidgetFlight.item(rowIndex, 9).text(),"/%s" % self.tableWidgetFlight.item(rowIndex,colnum - 5).text(),"/%s" % self.displayMode, "/%s" % self.selectedtime)
+                                            try:
+                                                ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送成功%s/" % (acno, flightno, str(fx),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                requests.get(url=ip, timeout=30).json()
+                                            except Exception:
+                                                logger.error(traceback.format_exc())
+                                                QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    if empNos["faillist"] != []:
+                                        msg["d"] = "以下人员通知失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                        try:
+                                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                            requests.get(url=ip, timeout=30).json()
+                                        except Exception:
+                                            logger.error(traceback.format_exc())
+                                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                except:
+                                    pass
+
+                            else:
+                                empNos = self.severpostData_nomeassge("get_empNos", dict_people)
+                                if "【交班航班】" in fj:
+                                    try:
+                                        if empNos["code"] != "fail":
+                                            res = self.LM_TSK_SURE_PG_NOW(self.tableWidgetFlight.item(rowIndex, colnum - 4).text(),empNos["FXempNos"], "FX", empNos["date"], empNos["bc"])
+                                            if res == "ok":
+                                                msg["bb"] = "放行人员%s派工成功!"%str(fx)
+                                                try:
+                                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工成功%s/" % (acno, flightno, str(fx),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                    requests.get(url=ip, timeout=30).json()
+                                                except Exception:
+                                                    logger.error(traceback.format_exc())
+                                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                        if empNos["faillist"] != []:
+                                            msg["b"] = "以下放行人员派工失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                            try:
+                                                ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                requests.get(url=ip, timeout=30).json()
+                                            except Exception:
+                                                logger.error(traceback.format_exc())
+                                                QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    except:
+                                        pass
+
+                                    try:
+                                        if empNos["code"] != "fail":
+                                            risktips = ""
+                                            if self.tableWidgetFlight.item(rowIndex, 8).text() != "":
+                                                res = self.getRiskData(self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 9).text())
+                                                risktips = f"【风险提示】{res}" if res != "" else ""
+                                            msgInfo = "放行任务保障信息!%s%s" % (fj, risktips)
+                                            res= self.send_dingdong(self.tableWidgetFlight.item(rowIndex, 1).text(),self.tableWidgetFlight.item(rowIndex, 2).text(),
+                                                                    self.tableWidgetFlight.item(rowIndex, colnum - 2).text(),
+                                                                    "进" +self.tableWidgetFlight.item(rowIndex, colnum - 3).text().split("</br>")[0] + ",出" +self.tableWidgetFlight.item(rowIndex, colnum - 3).text().split("</br>")[1],
+                                                                    self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, colnum - 4).text(),
+                                                                    "", empNos["FXempNos"],empNos["WX"],empNos["FX"],"",msgInfo)
+
+                                            if res == "ok":
+                                                msg["dd"] = "%s放行人员%s派工信息推成功!!!" % (
+                                                    self.tableWidgetFlight.item(rowIndex, 1).text(), empNos["FX"])
+                                                self.severpost_nomeassge("infoConfirm2","/%s" % self.tableWidgetFlight.item(rowIndex, 9).text(),"/%s" % self.tableWidgetFlight.item(rowIndex,colnum - 5).text(),"/%s" % self.displayMode, "/%s" % self.selectedtime)
+                                                try:
+                                                    ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送成功%s/" % (acno, flightno, str(fx),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                    requests.get(url=ip, timeout=30).json()
+                                                except Exception:
+                                                    logger.error(traceback.format_exc())
+                                                    QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                        if empNos["faillist"] != []:
+                                            msg["d"] = "以下人员通知失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                            try:
+                                                ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                                requests.get(url=ip, timeout=30).json()
+                                            except Exception:
+                                                logger.error(traceback.format_exc())
+                                                QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                    except:
+                                        pass
+
+                                # print(empNos)
+                                if empNos["code"] != "fail":
+                                    res = self.LM_TSK_SURE_PG_NOW(self.tableWidgetFlight.item(rowIndex, colnum - 4).text(),empNos["ESempNos"], "ECSJ", empNos["date"], empNos["bc"])
+                                    if res == "ok":
+                                        msg["ee"] = "%s二次送机派工成功!"%str(g1 + "-" + g2)
+                                        try:
+                                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工成功%s/" % (acno, flightno, str(g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                            requests.get(url=ip, timeout=30).json()
+                                        except Exception:
+                                            logger.error(traceback.format_exc())
+                                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                if empNos["faillist"] != []:
+                                    msg["e"] = "以下人员派工失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                if empNos["code"] != "fail":
+                                    risktips = ""
+                                    if self.tableWidgetFlight.item(rowIndex, 8).text() != "":
+                                        res = self.getRiskData(self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, 9).text())
+                                        risktips = f"【风险提示】{res}" if res != "" else ""
+                                    msgInfo = "二次送机任务推送!%s%s" % (fj, risktips)
+                                    res= self.send_dingdong(self.tableWidgetFlight.item(rowIndex, 1).text(),self.tableWidgetFlight.item(rowIndex, 2).text(),
+                                                            self.tableWidgetFlight.item(rowIndex, colnum - 2).text(),
+                                                            "进" +self.tableWidgetFlight.item(rowIndex, colnum - 3).text().split("</br>")[0] + ",出" +self.tableWidgetFlight.item(rowIndex, colnum - 3).text().split("</br>")[1],
+                                                            self.tableWidgetFlight.item(rowIndex, 8).text(),self.tableWidgetFlight.item(rowIndex, colnum - 4).text(),
+                                                            empNos["ESempNos"], "",empNos["WX"],empNos["FX"],empNos["ES"],msgInfo)
+                                    if res == "ok":
+                                        msg["ff"] = "%s二次送机人员%s派工信息推送成功!!!" % (
+                                            self.tableWidgetFlight.item(rowIndex, 1).text(), empNos["ES"])
+                                        self.severpost_nomeassge("infoConfirm2","/%s" % self.tableWidgetFlight.item(rowIndex, 9).text(),
+                                                                 "/%s" % self.tableWidgetFlight.item(rowIndex,colnum - 5).text(),
+                                                                 "/%s" % self.displayMode, "/%s" % self.selectedtime)
+                                        try:
+                                            ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送成功%s/" % (acno, flightno, str(g1 + "-" + g2),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                            requests.get(url=ip, timeout=30).json()
+                                        except Exception:
+                                            logger.error(traceback.format_exc())
+                                            QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                                if empNos["faillist"] != []:
+                                    msg["f"] = "以下人员通知失败:%s,请确认考勤打卡情况!" % empNos["faillist"]
+                                    try:
+                                        ip = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "%s,%s%s派工信息推送失败%s/" % (acno, flightno,str(empNos["faillist"]).replace(",", "-").replace("'", "").replace("[", "").replace("]",""),datetime.datetime.now()) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception:
+                                        logger.error(traceback.format_exc())
+                                        QMessageBox.warning(self, "日志功能失效", "操作日志功能失效请联系管理员!")
+                            msgs = ""
+                            for j in ["aa", "bb", "cc", "dd", "ee", "ff", "a", "b", "c", "d", "e", "f"]:
+                                if j in msg.keys():
+                                    if msgs == "":
+                                        msgs = msg[j]
+                                    else:
+                                        msgs = msgs + "\n" + msg[j]
+                            self.show_info("一键派工提示信息", msgs)
+                            self.QThreadSortNow("main")
+
+                        else:
+                            self.show_info("警告", "该航班非AMRO航班或者无任务编号,请确认是否为AMRO航班,如确认请使用AMRO人工派工和叮咚消息通知!!")
+                        return
+                    else:
+                        return
+            except Exception:
+                logger.error(traceback.format_exc())
+        elif self.displayMode=="B":
+            for i in self.tableWidgetFlight.selectionModel().selection().indexes():
+                menu = QMenu()
+                item1 = menu.addAction("工作单确认检查")
+                screenPos = self.tableWidgetFlight.mapToGlobal(pos)
+                action = menu.exec(screenPos)
+                rowIndex = i.row()
+                colnum = self.tableWidgetFlight.columnCount()
+                flightids=self.tableWidgetFlight.item(rowIndex, colnum - 5).text()
+                flighttype = self.tableWidgetFlight.item(rowIndex, 9).text()
+                if action == item1:
+                    nowstr=self.user+str(datetime.datetime.now().timestamp()).split(".")[0]
+                    ip = "http://" + str(self.ipinfo) + "/static/updateDragDropItem/%s/%s/%s/%s/%s/%s" % (
+                    "10", nowstr, flightids, self.displayMode, flighttype, self.selectedtime)
+                    # print(ip)
+                    #self.tableWidgetFlight.setItem(int(rowIndex), column, QTableWidgetItem(str(nowstr)))
+                    try:
+                        requests.get(url=ip, timeout=30).json()
+                    except Exception:
+                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                        logger.error(traceback.format_exc())
+                    self.QThreadSortNow("main")
+                    return
+        else:
+            QMessageBox.warning(self, "提示", "权限不够,请联系管理员!")
+
+    def tableWidgetPhoneDispaly(self):
+        try:
+            phoneLabel = ["序号", "姓名", "部门", "电话","name"]
+            col = len(phoneLabel)
+            diplaylist = self.sorttableWidgetPHONEDispalydata
+            self.tableWidget_3.setRowCount(len(diplaylist.keys()))
+            for row in diplaylist.keys():
+                for colNum in range(0, col):
+                    if colNum == 0:
+                        self.tableWidget_3.setItem(int(row), colNum, QTableWidgetItem(str(int(row)+1)))
+                        self.tableWidget_3.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    else:
+                        self.tableWidget_3.setItem(int(row), colNum,
+                                                   QTableWidgetItem(diplaylist[row][phoneLabel[colNum]]))
+                        self.tableWidget_3.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+            self.tableWidget_3.resizeColumnsToContents()
+            self.tableWidget_3.setColumnHidden(4, True)
+
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def tableWidgetPeopleDisplay(self):
+        try:
+            peopleLabel = ["序号", "姓名", "角色", "总量", "当前", "最后时间"]
+            col = len(peopleLabel)
+            diplaylist = self.sortdiplaylist
+            self.tableWidgetPerson.setRowCount(len(diplaylist.keys()))
+            # print( self.searchpeoplestr )
+            for row in diplaylist.keys():
+                for colNum in range(0, col):
+                    if colNum == 0:
+                        self.tableWidgetPerson.setItem(int(row), colNum, QTableWidgetItem(str(int(row)+1)))
+                        self.tableWidgetPerson.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    else:
+                        self.tableWidgetPerson.setItem(int(row), colNum,
+                                                       QTableWidgetItem(diplaylist[row][peopleLabel[colNum]]))
+                        self.tableWidgetPerson.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+
+            self.tableWidgetPerson.resizeColumnsToContents()
+            # self.tableWidgetPerson.itemEntered.connect(self.enter_item_slot)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def enter_item_slot(self, item):
+        try:
+            self.tool_tip = item.text()
+            # print("self.tool_tip:", self.tool_tip)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def tableWidgetDispaly(self):
+        try:
+            selftaxi = ["166", "166L", "166R", "167", "167L", "167R", "168", "169", "170", "171", "172", "173", "174",
+                        "269", "270", "271", "272", "273", "274", "275", "287", "288", "601", "602", "603", "604",
+                        "605", "606", "607", "607L", "607R"]  # 自滑位
+            if self.sorttableWidgetDispalydata != "":
+                # print("刷新开始")
+                # dateNow=datetime.datetime.now()
+                tableWidgetDispalydata = self.sorttableWidgetDispalydata
+                col = len(self.displayLabel)
+                self.tableWidgetFlight.setRowCount(len(tableWidgetDispalydata.keys()))
+                for row in tableWidgetDispalydata.keys():
+                    for colNum in range(0, col):
+                        if colNum == 6:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(
+                                str(tableWidgetDispalydata[row][str(colNum)])))
+                            self.tableWidgetFlight.item(int(row), colNum).setBackground(
+                                QColor(str(tableWidgetDispalydata[row]["99"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setForeground(
+                                QColor(str(tableWidgetDispalydata[row]["102"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 7:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(
+                                str(tableWidgetDispalydata[row][str(colNum)])))
+                            self.tableWidgetFlight.item(int(row), colNum).setBackground(
+                                QColor(str(tableWidgetDispalydata[row]["99"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setForeground(
+                                QColor(str(tableWidgetDispalydata[row]["103"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 8:
+                            if tableWidgetDispalydata[row][str(colNum)] in selftaxi and tableWidgetDispalydata[row][str(colNum)] != "":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(
+                                    str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("lightgreen"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("black"))
+                                self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(
+                                    Qt.AlignmentFlag.AlignCenter)
+                                if "自滑机位" not in tableWidgetDispalydata[row][str(col - 1)]:
+                                    flightid = tableWidgetDispalydata[row][str(col - 5)]
+                                    # print(flightid)
+                                    flighttype = tableWidgetDispalydata[row]["9"]
+                                    fjxx = "自滑机位;" + str(tableWidgetDispalydata[row][str(col - 1)])
+                                    ip = "http://" + str(self.ipinfo) + "/static/updateEidteItem/" + "%s/" % str(
+                                        fjxx) + "%s/" % str(flightid) + "%s/" % str(self.displayMode) + "%s/" % str(
+                                        flighttype) + "%s" % str(self.selectedtime)
+                                    try:
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception:
+                                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                        logger.error(traceback.format_exc())
+                                if self.displayMode =="A":
+                                    for colNum2 in (10, 11, 12, 13, 14):
+                                        if tableWidgetDispalydata[row][str(colNum2)] != "" and "*" not in str(tableWidgetDispalydata[row][str(colNum2)]):
+                                            self.severpost_nomeassge("selftaxiLogs", "/%s请通知%s,%s为自滑位,注意特殊机位保障要求!" % (
+                                                tableWidgetDispalydata[row]["1"], tableWidgetDispalydata[row][str(colNum2)],
+                                                tableWidgetDispalydata[row]["8"]),"/%s" % tableWidgetDispalydata[row][str(col - 5)], "","")
+                                            self.severpost_nomeassge("infoConfirm3","/%s" % tableWidgetDispalydata[row][str(9)],"/%s" % tableWidgetDispalydata[row][str(col - 5)],
+                                                                     "/%s" % self.displayMode, "/%s" % self.selectedtime)
+
+                            elif tableWidgetDispalydata[row][str(colNum)] not in selftaxi or \
+                                    tableWidgetDispalydata[row][str(colNum)] == "":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(
+                                    str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(
+                                    QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(
+                                    QColor(str(tableWidgetDispalydata[row]["101"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(
+                                    Qt.AlignmentFlag.AlignCenter)
+                            font = QFont()
+                            # font.setFamily("SimHei")
+                            font.setFamily("Microsoft YaHei")
+                            font.setBold(True)
+
+                            self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+                        elif colNum == 9:
+                            if tableWidgetDispalydata[row][str(colNum)] == "短停送" or tableWidgetDispalydata[row][str(colNum)] == "特后前送":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(
+                                    str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(
+                                    QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str("blue")))
+                                self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(
+                                    Qt.AlignmentFlag.AlignCenter)
+                                font = QFont()
+                                # font.setFamily("SimHei")
+                                font.setFamily("Microsoft YaHei")
+                                font.setBold(True)
+                                self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+
+                            else:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(
+                                    str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(
+                                    QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(
+                                    QColor(str(tableWidgetDispalydata[row]["101"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(
+                                    Qt.AlignmentFlag.AlignCenter)
+
+                        elif 9 < colNum < 15:
+                            if "√" in tableWidgetDispalydata[row][str(colNum)] or tableWidgetDispalydata[row][str(colNum)] == "":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(
+                                    str(tableWidgetDispalydata[row][str(colNum)]).replace("*","")))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(
+                                    QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(
+                                    QColor(str(tableWidgetDispalydata[row]["101"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(
+                                    Qt.AlignmentFlag.AlignCenter)
+                            elif "√" not in tableWidgetDispalydata[row][str(colNum)] and tableWidgetDispalydata[row][
+                                str(colNum)] != "":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(
+                                    str(tableWidgetDispalydata[row][str(colNum)]).replace("*","")))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("black"))
+                                self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(
+                                    Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == col - 1:
+                            if str(tableWidgetDispalydata[row][str(colNum)]) !="" and str(tableWidgetDispalydata[row][str(colNum)]) != None:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("red"))
+                                self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                self.tableWidgetFlight.item(int(row), col - 1).setToolTip("%s" % str(tableWidgetDispalydata[row][str(col - 1)]))
+                                font = QFont()
+                                # font.setFamily("SimHei")
+                                font.setFamily("Microsoft YaHei")
+                                font.setBold(True)
+                                self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+                            else:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                                self.tableWidgetFlight.item(int(row), col - 1).setToolTip("%s" % str(tableWidgetDispalydata[row][str(col - 1)]))
+                                font = QFont()
+                                # font.setFamily("SimHei")
+                                font.setFamily("Microsoft YaHei")
+                                font.setBold(True)
+                                self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+
+                            if "二拖" in tableWidgetDispalydata[row][str(colNum)]:
+                                for selftaxiPostion in selftaxi:
+                                    if selftaxiPostion in tableWidgetDispalydata[row][str(colNum)]:
+                                        for colNum2 in (10, 11, 12, 13, 14):
+                                            if tableWidgetDispalydata[row][str(colNum2)] != "":
+                                                self.severpost_nomeassge("selftaxiLogs",
+                                                                         "/%s请通知%s,%s二拖机位目的机位为自滑位,注意特殊机位保障要求!" % (
+                                                                             tableWidgetDispalydata[row]["1"],
+                                                                             tableWidgetDispalydata[row][str(colNum2)],
+                                                                             tableWidgetDispalydata[row]["8"]),
+                                                                         "/%s" % tableWidgetDispalydata[row][
+                                                                             str(col - 5)], "", "")
+                        elif colNum == 22:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(
+                                str(tableWidgetDispalydata[row][str(colNum)])))
+                            self.tableWidgetFlight.item(int(row), colNum).setBackground(
+                                QColor(str(tableWidgetDispalydata[row]["99"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setForeground(
+                                QColor(str(tableWidgetDispalydata[row]["101"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                            self.tableWidgetFlight.item(int(row), 22).setToolTip(
+                                "%s" % str(tableWidgetDispalydata[row][str(22)]))
+                        elif 0 < colNum < 5:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(
+                                str(tableWidgetDispalydata[row][str(colNum)])))
+                            self.tableWidgetFlight.item(int(row), colNum).setBackground(
+                                QColor(str(tableWidgetDispalydata[row]["99"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setForeground(
+                                QColor(str(tableWidgetDispalydata[row]["101"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                            if self.displayMode == "A":
+                                self.tableWidgetFlight.item(int(row), colNum).setToolTip(
+                                    "%s" % str(tableWidgetDispalydata[row][str(23)]))
+                            else:
+                                self.tableWidgetFlight.item(int(row), colNum).setToolTip(
+                                    "%s" % str(tableWidgetDispalydata[row][str(24)]))
+                            if colNum == 1 and tableWidgetDispalydata[row][str(colNum)] in ["8182","8185","8186"] and tableWidgetDispalydata[row][str(9)] =="航前":
+
+                                if "【工具提示】无TPIS,带胎压表" not in tableWidgetDispalydata[row][str(col - 1)]:
+                                    flightid = tableWidgetDispalydata[row][str(col - 5)]
+                                    # print(flightid)
+                                    flighttype = tableWidgetDispalydata[row]["9"]
+                                    fjxx = "【工具提示】无TPIS,带胎压表;" + str(tableWidgetDispalydata[row][str(col - 1)])
+                                    ip = "http://" + str(self.ipinfo) + "/static/updateEidteItem/" + "%s/" % str(
+                                        fjxx) + "%s/" % str(flightid) + "%s/" % str(self.displayMode) + "%s/" % str(
+                                        flighttype) + "%s" % str(self.selectedtime)
+                                    try:
+                                        requests.get(url=ip, timeout=30).json()
+                                    except Exception:
+                                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                        logger.error(traceback.format_exc())
+
+
+                        elif colNum == 0:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(int(row)+1)))
+                            self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                            if self.displayMode == "A":
+                                self.tableWidgetFlight.item(int(row), colNum).setToolTip(
+                                    "[%s,%s]" % (str(tableWidgetDispalydata[row][str(col-5)]),str(tableWidgetDispalydata[row][str(col-4)])))
+                            else:
+                                self.tableWidgetFlight.item(int(row), colNum).setToolTip(
+                                    "[%s,%s]" % (str(tableWidgetDispalydata[row][str(col-5)]),str(tableWidgetDispalydata[row][str(col-4)])))
+                        else:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(
+                                str(tableWidgetDispalydata[row][str(colNum)])))
+                            self.tableWidgetFlight.item(int(row), colNum).setBackground(
+                                QColor(str(tableWidgetDispalydata[row]["99"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setForeground(
+                                QColor(str(tableWidgetDispalydata[row]["101"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                self.tableWidgetFlight.setColumnHidden(col - 2, True)
+                self.tableWidgetFlight.setColumnHidden(col - 3, True)
+                self.tableWidgetFlight.setColumnHidden(col - 4, True)
+                self.tableWidgetFlight.setColumnHidden(col - 5, True)
+                self.tableWidgetFlight.setColumnHidden(col - 6, False)
+                self.tableWidgetFlight.setColumnHidden(col - 7, False)
+                self.tableWidgetFlight.setColumnHidden(col - 1, False)
+                if self.displayMode == "A":
+                    self.tableWidgetFlight.setColumnHidden(col - 8, True)
+                    self.tableWidgetFlight.setColumnHidden(col - 9, False)
+                    self.tableWidgetFlight.setColumnHidden(col - 10, True)
+                    self.tableWidgetFlight.setColumnHidden(col - 11, False)
+                    self.tableWidgetFlight.setColumnHidden(col - 12, True)
+                else:
+                    self.tableWidgetFlight.setColumnHidden(col - 8, False)
+                    self.tableWidgetFlight.setColumnHidden(col - 9, True)
+                    self.tableWidgetFlight.setColumnHidden(col - 10, False)
+                    self.tableWidgetFlight.setColumnHidden(col - 11, True)
+                    self.tableWidgetFlight.setColumnHidden(col - 12, True)
+                self.tableWidgetFlight.resizeColumnsToContents()
+                self.tableWidgetFlight.setColumnWidth(10, 70)
+                self.tableWidgetFlight.setColumnWidth(11, 70)
+                self.tableWidgetFlight.setColumnWidth(12, 70)
+                self.tableWidgetFlight.setColumnWidth(13, 70)
+                self.tableWidgetFlight.setColumnWidth(14, 70)
+                self.tableWidgetFlight.setColumnWidth(15, 70)
+                self.tableWidgetFlight.setColumnWidth(22, 45)
+                # print("刷新结束")
+                # print(datetime.datetime.now() - dateNow)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def on_completer_activated(self, text):
+        try:
+            if text:
+                index = self.comboBox.findText(text)
+                self.comboBox.setCurrentIndex(index)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def LM_TSK_SURE_PG(self):
+        try:
+            data = {
+                "empNos": dict["empNos"],  # 员工号
+                "taskid": dict["taskid"],  # taskid
+                "type": dict["type"],  # 类型
+                "shiftDate": dict["shiftDate"],  # 上班日期
+                "shift": dict["shift"],  # 班次
+            }
+            self.severpostData_nomeassge("LM_TSK_SURE_PG", data)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def dingdong(self):
+        try:
+            data = {
+                "acno": dict["empNos"],  # 机号
+                "actype": dict["taskid"],  # 机型
+                "tasktype": dict["type"],  # 任务类型
+                "tatd": dict["shiftDate"],  # 起飞/落地时间
+                "msgInfo": dict["shift"],  # 消息
+                "bay": dict["empNos"],  # 机位
+                "wxemp": dict["taskid"],  # 维修人员员工号
+                "fxemp": dict["type"],  # 放行人员员工号
+                "wx": dict["shiftDate"],  # 维修人员
+                "fx": dict["shift"],  # 放行人员
+                "ecsj": dict["shift"],  # 二次送机人员
+
+            }
+            self.severpostData_nomeassge("dingdong", data)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def update_pglistA(self, text):
+        try:
+            self.severpost_nomeassge("getPglist", "A", "", "", "")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def update_pglistB(self, text):
+        try:
+            self.severpost_nomeassge("getPglist", "B", "", "", "")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def search(self):
+        # print('进行查询')
+        try:
+            self.threadWOrk_get_flight_list()
+            if self.cookie != None:
+                # print('查询中')
+                self.threadWOrk_get_flight_list()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def threadWork_getcookie(self):
+        try:
+            self.fl = utils.flight_list()
+            worker = Worker2(self.fn_cookie, self.fl)
+            worker.signals.result.connect(self.print_output_cookie)
+            worker.signals.finished.connect(self.thread_complete)
+            worker.signals.error.connect(self.thread_error)
+            self.threadpool.start(worker)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def threadWOrk_get_flight_list(self):
+        try:
+            dateNow = datetime.datetime.now()
+            dateNowStr = dateNow.strftime("%Y-%m-%d")
+            worker = Worker2(self.fn_get_flight_list, self.fl, dateNowStr, self.cookie)
+            worker.signals.result.connect(self.print_output_flight_list)
+            worker.signals.finished.connect(self.thread_complete)
+            worker.signals.error.connect(self.thread_error)
+            self.threadpool.start(worker)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def fn_get_flight_list(self, fl, date, cookie):
+        try:
+            # print(fl.token)
+            # flight_list = fl.request_filght_list(date, cookie)
+            flight_list = utils.loadjson('./temp/1/fl1688398151.json')
+            return flight_list
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def fn_cookie(self, fl):
+        try:
+            # 耗时进程
+            # print(fl)
+            fl.start()
+            cookie = fl.get_cookie()
+            return cookie
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def print_output_cookie(self, dlist):
+        try:
+            self.cookie = dlist
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def print_output_flight_list(self, dlist):
+        try:
+            # print(dlist['code'])
+            self.tableDisplay2()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def thread_complete(self):
+        print("THREAD COMPLETE!")
+
+    def thread_error(self, error):
+        print("进程error:{}".format(error))
+
+
+class LoginWidget(Ui_login, QWidget):
+    login_signal = QtCore.pyqtSignal(bool)
+    login_user = QtCore.pyqtSignal(list)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            # print('login widget')
+            self.pushButton.clicked.connect(self.btn)
+            # self.setipinfo()
+            self.ipinfo = None
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def severpost_meassge(self, postname, postdata, postdata2):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2)
+            try:
+                res = requests.get(url=ip, timeout=30).json()
+                # print(res)
+
+            except Exception:
+                # print('登录服务器失败')
+                logging.info('登录服务器失败')
+                res = ""
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                logger.error(traceback.format_exc())
+
+            return res
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def btn(self):
+        try:
+            username = self.lineEditUser.text()
+            password = self.lineEditPassword.text()
+            try:
+                res = self.severpost_meassge("loginTable", "/%s" % username, "/%s" % password)["返回值"]
+                # print(res)
+            except Exception:
+                res = ""
+                logger.error(traceback.format_exc())
+
+            # print(res)
+            if res != "" and int(res[3])<=3:
+                self.login_signal.emit(True)
+                self.login_user.emit(res)
+            else:
+                self.show_message()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def show_message(self):
+        try:
+            QMessageBox.warning(self, "警告", "无此用户或密码错误或账号无权限访问办公平台")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+
+class amroLoginWidget(Ui_amroLogin, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.ipinfo = None
+
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def btn(self):
+        try:
+            username = self.lineEditUsername.text()
+            password = self.lineEditPassword.text()
+            ip = "http://" + str(self.ipinfo) + "/static/remotelogin/%s/%s" % (username, password)
+            try:
+                res = requests.get(url=ip, timeout=60)
+                if res.text == "ok":
+                    QMessageBox.warning(self, "提示", "服务器AMRO登录成功!")
+                    self.close()
+                else:
+                    QMessageBox.warning(self, "提示", "服务器AMRO登录失败,请检查账号密码或服务器端登录或联系管理员检查服务器!")
+            except:
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                self.close()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+
+class amroLoginWidget2(Ui_amroLogin2, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.ipinfo = None
+
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def btn(self):
+        try:
+            username = self.lineEditUsername.text()
+            password = self.lineEditPassword.text()
+            ip = "http://" + str(self.ipinfo) + "/static/remoteCookielogin/%s/%s" % (username, password)
+            try:
+                res = requests.get(url=ip, timeout=60)
+                if res.text == "ok":
+                    QMessageBox.warning(self, "提示", "服务器AMRO登录成功!")
+                    self.close()
+                else:
+                    QMessageBox.warning(self, "提示", "服务器AMRO登录失败,请检查账号和Cookie或服务器端登录或联系管理员检查服务器!")
+            except:
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                self.close()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+
+class checkCalllist(Ui_checkCalllist, QWidget):
+    checkCalllist_signal = QtCore.pyqtSignal(str)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.ipinfo = None
+            self.selectedtime = None
+            self.pushButton.clicked.connect(self.btn)
+            # self.show()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def start(self):
+        try:
+            selectedtime_time = str(self.selectedtime) + " 00:00:00"
+            now = datetime.datetime.strptime(selectedtime_time, "%Y%m%d %H:%M:%S")
+            tom = (now + datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
+            yesterday = (now - datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
+            self.label_5.setText("%s/%s" % (str(yesterday)[0:10], str(tom)[0:10]))
+            ip = "http://" + str(self.ipinfo) + "/static/checkCalllist" + "/" + str(self.selectedtime)
+            try:
+                res = requests.get(url=ip, timeout=30).json()
+                # print(res)
+            except Exception:
+                # print('登录服务器失败')
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                logger.error(traceback.format_exc())
+
+            self.peopleLabel = ["序号", "电话", "工号", "姓名", "航班号", "拨号次数", "创建时间", "接通时间"]
+            self.tableWidgetFlight.setColumnCount(len(self.peopleLabel))
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setHorizontalHeaderLabels(self.peopleLabel)
+            col = len(self.peopleLabel)
+            diplaylist = res
+            self.tableWidgetFlight.setRowCount(len(diplaylist.keys()))
+            for row in diplaylist.keys():
+                for colNum in range(0, col):
+                    if colNum == 0:
+                        self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(row)))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    else:
+                        self.tableWidgetFlight.setItem(int(row), colNum,
+                                                       QTableWidgetItem(diplaylist[row][self.peopleLabel[colNum]]))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+            self.tableWidgetFlight.resizeColumnsToContents()
+            # self.show()
+        except Exception:
+            logger.error(traceback.format_exc())
+    def btn(self):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/checkCalllist" + "/" + str(self.selectedtime)
+            self.res = requests.get(url=ip, timeout=30).json()
+        except Exception:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+            self.res = {}
+        col = len(self.peopleLabel)
+        diplaylist = self.res
+        self.tableWidgetFlight.setRowCount(len(diplaylist))
+        rownum = 0
+        for row in diplaylist:
+            for colNum in range(0, col):
+                if colNum == 0:
+                    self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(row)))
+                    self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                else:
+                    self.tableWidgetFlight.setItem(int(row), colNum,QTableWidgetItem(diplaylist[row][self.peopleLabel[colNum]]))
+                    self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+        self.tableWidgetFlight.resizeColumnsToContents()
+
+    def closeEvent(self, event):
+        try:
+            reply = QMessageBox.question(self, '确认', '你确定要退出程序吗?')
+            reply = str(reply)
+            if reply == "StandardButton.Yes":
+                self.checkCalllist_signal.emit(reply)
+                event.ignore()
+            else:
+                event.ignore()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+
+class checkLoadSingal(Ui_checkLoadSingal, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.worknum = None
+            self.name = None
+            self.selectedtime = None
+            self.ipinfo = None
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def start(self):
+        try:
+            # print(self.worknum)
+            # print(self.name)
+            # print(self.selectedtime)
+            # print(self.ipinfo)
+            self.label_3.setText(self.name)
+            selectedtime_time = str(self.selectedtime) + " 00:00:00"
+            now = datetime.datetime.strptime(selectedtime_time, "%Y%m%d %H:%M:%S")
+            yesterday = (now - datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
+            self.label_5.setText("%s/%s" % (str(yesterday)[0:10], str(now)[0:10]))
+            # print(now)
+            # print(yesterday)
+            ip = "http://" + str(self.ipinfo) + "/static/checkLoadSingal" + "/" + str(self.worknum) + "/" + str(
+                yesterday) + "/" + str(now)
+            try:
+                res = requests.get(url=ip, timeout=30).json()
+                # print(res)
+            except Exception:
+                # print('登录服务器失败')
+                logging.warning('登录服务器失败, res获取失败')
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                logger.error(traceback.format_exc())
+
+            self.show()
+            peopleLabel = ["序号", "保障日期", "类型", "机号", "机位", "开始时间", "结束时间"]
+            self.tableWidgetFlight.setColumnCount(len(peopleLabel))
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setHorizontalHeaderLabels(peopleLabel)
+            col = len(peopleLabel)
+            diplaylist = res
+            self.tableWidgetFlight.setRowCount(len(diplaylist.keys()))
+            for row in diplaylist.keys():
+                for colNum in range(0, col):
+                    if colNum == 0:
+                        self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(row)))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    else:
+                        self.tableWidgetFlight.setItem(int(row), colNum,
+                                                       QTableWidgetItem(diplaylist[row][peopleLabel[colNum]]))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+            self.tableWidgetFlight.resizeColumnsToContents()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+
+class searchpeople_get(Ui_searchpeople_get, QWidget):
+    searchpeoplelist_signal = QtCore.pyqtSignal(list)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.searchpeoplelist = None
+            self.ipinfo = None
+            self.Allpeoplelist = {}
+            self.selectedtime = None
+            self.selectedbc = None
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def btn(self):
+        try:
+            searchpeoplelist = []
+            for row in range(self.tableWidgetFlight.rowCount()):
+                item = self.tableWidgetFlight.item(row, 2)
+                if item is not None and item.checkState() == Qt.CheckState.Checked:
+                    name = self.tableWidgetFlight.item(row, 1).text()
+                    searchpeoplelist.append(name)
+            # print(searchpeoplelist)
+            self.searchpeoplelist = searchpeoplelist
+            self.searchpeoplelist_signal.emit(self.searchpeoplelist)
+            self.close()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def start(self):
+        try:
+            self.show()
+            peopleLabel = ["序号", "姓名", "选择"]
+            diplaylist = self.Allpeoplelist
+            self.tableWidgetFlight.setColumnCount(len(peopleLabel))
+            self.tableWidgetFlight.setHorizontalHeaderLabels(peopleLabel)
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setRowCount(len(diplaylist.keys()))
+
+            for row in diplaylist.keys():
+                for colNum in range(0, 3):
+                    if colNum == 0:
+                        self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(row)))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    elif colNum == 1:
+                        self.tableWidgetFlight.setItem(int(row), colNum,
+                                                       QTableWidgetItem(diplaylist[row][peopleLabel[colNum]]))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    elif colNum == 2:
+                        checkbox = QTableWidgetItem()
+                        checkbox.setCheckState(Qt.CheckState.Unchecked)
+                        self.tableWidgetFlight.setItem(int(row), colNum, checkbox)
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+            self.tableWidgetFlight.resizeColumnsToContents()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+
+class localipset(Ui_Addloacalip, QWidget):
+    localipset_signal = QtCore.pyqtSignal(str)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.localip1 = None
+            self.localip = None
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def start(self):
+        self.show()
+        self.lineEditIP.setText(self.localip)
+
+    def btn(self):
+        try:
+            self.localip1 = self.lineEditIP.text()
+            self.localipset_signal.emit(self.localip1)
+            self.close()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+
+class checkLogs(Ui_checkLogs, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        self.setupUi(self)
+        self.ipinfo = None
+        self.endtime = (datetime.date.today() + datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
+        self.starttime = (datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
+        self.dateTimeEdit.setDateTime(datetime.datetime.strptime(self.starttime, "%Y-%m-%d %H:%M:%S"))
+        self.dateTimeEdit_2.setDateTime(datetime.datetime.strptime(self.endtime, "%Y-%m-%d %H:%M:%S"))
+        self.lineEdit.textChanged.connect(self.changed)
+        self.peopleLabel = ["序号", "航班编号", "警告信息", "信息状态", "提示信息", "产生时间", "处理人", "处理时间", "变更字段", "显示对象", "提示内容"]
+        self.tableWidgetFlight.setColumnCount(len(self.peopleLabel))
+        self.tableWidgetFlight.verticalHeader().setVisible(False)
+        self.tableWidgetFlight.setHorizontalHeaderLabels(self.peopleLabel)
+        self.pushButton.clicked.connect(self.btn)
+
+    def start(self):
+        self.show()
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/checkLogs/" + self.starttime + "/" + self.endtime
+            self.res = requests.get(url=ip, timeout=30).json()
+        except Exception:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+            self.res = {}
+        col = len(self.peopleLabel)
+        diplaylist = self.res
+        self.tableWidgetFlight.setRowCount(len(diplaylist))
+        rownum = 0
+        for row in diplaylist:
+            for colNum in range(0, col):
+                if colNum == 0:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(rownum)))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                else:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(row[colNum])))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignLeft)
+            rownum += 1
+        self.tableWidgetFlight.resizeColumnsToContents()
+
+    def changed(self):
+        res = []
+        for i in self.res:
+            if str(self.lineEdit.text()) in str(i):
+                res.append(i)
+        col = len(self.peopleLabel)
+        diplaylist = res
+        self.tableWidgetFlight.setRowCount(len(diplaylist))
+        rownum = 0
+        for row in diplaylist:
+            for colNum in range(0, col):
+                if colNum == 0:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(rownum)))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                else:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(row[colNum])))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignLeft)
+            rownum += 1
+        self.tableWidgetFlight.resizeColumnsToContents()
+
+    def btn(self):
+        self.starttime = self.dateTimeEdit.text()
+        self.endtime = self.dateTimeEdit_2.text()
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/checkLogs/" + self.starttime + "/" + self.endtime
+            self.res = requests.get(url=ip, timeout=30).json()
+        except Exception:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+            self.res = {}
+        col = len(self.peopleLabel)
+        diplaylist = self.res
+        self.tableWidgetFlight.setRowCount(len(diplaylist))
+        rownum = 0
+        for row in diplaylist:
+            for colNum in range(0, col):
+                if colNum == 0:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(rownum)))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                else:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(row[colNum])))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignLeft)
+            rownum += 1
+        self.tableWidgetFlight.resizeColumnsToContents()
+
+
+class changeAuth(Ui_changeAuth, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.ipinfo = None
+            self.label_5.setText("")
+            self.label_6.setText("")
+            self.pushButton.clicked.connect(self.btn)
+            self.user = None
+            self.comboBox.addItems(['1', '2', '3',"4"])
+            self.comboBox.setEditable(True)
+            self.filterModel1 = QSortFilterProxyModel(self.comboBox)
+            self.filterModel1.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.filterModel1.setSourceModel(self.comboBox.model())
+            self.completer1 = QCompleter(self.filterModel1, self.comboBox)
+            self.completer1.setCompletionMode(QCompleter.CompletionMode.UnfilteredPopupCompletion)
+            self.completer1.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.comboBox.setCompleter(self.completer)
+            self.comboBox.lineEdit().textEdited.connect(self.filterModel1.setFilterFixedString)
+            self.completer1.activated.connect(self.on_completer_activated1)
+
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def start(self):
+        self.show()
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/loginDbget/" + str(self.user)
+            self.res = requests.get(url=ip, timeout=30).json()
+        except Exception:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+            self.res = {}
+        if self.res != {}:
+            namelist = []
+            for i in self.res.keys():
+                namelist.append(self.res[i]["登录名"])
+            print(namelist)
+            self.comboBox_2.addItems(namelist)
+            self.comboBox_2.setEditable(True)
+            self.comboBox_2.currentIndexChanged.connect(self.changed)
+            self.filterModel = QSortFilterProxyModel(self.comboBox_2)
+            self.filterModel.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.filterModel.setSourceModel(self.comboBox_2.model())
+            self.completer = QCompleter(self.filterModel, self.comboBox_2)
+            self.completer.setCompletionMode(QCompleter.CompletionMode.UnfilteredPopupCompletion)
+            self.completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.comboBox_2.setCompleter(self.completer)
+            self.comboBox_2.lineEdit().textEdited.connect(self.filterModel.setFilterFixedString)
+            self.completer.activated.connect(self.on_completer_activated)
+        else:
+            QMessageBox.warning(self, "提示", "获取数据库为空,请检查数据库或联系管理员")
+
+    def on_completer_activated1(self, text):
+        try:
+            if text:
+                index = self.comboBox.findText(text)
+                self.comboBox.setCurrentIndex(index)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def on_completer_activated(self, text):
+        try:
+            if text:
+                print(text)
+                index = self.comboBox_2.findText(text)
+                self.comboBox_2.setCurrentIndex(index)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def changed(self):
+        if self.res != {}:
+            self.label_5.setText(self.res[self.comboBox_2.currentText()]["使用人"])
+            self.label_6.setText(self.res[self.comboBox_2.currentText()]["权限"])
+
+    def btn(self):
+        data = {
+            '登录名': "'%s'" % self.comboBox_2.currentText(),
+            "权限": "'%s'" % self.comboBox.currentText()
+        }
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/changeAuth"
+            data = json.dumps(data)
+            res = requests.post(url=ip, data=data, timeout=30).json()
+            if res["返回值"] == "1":
+                QMessageBox.warning(self, "提示", "权限变更成功!")
+                self.close()
+            else:
+                QMessageBox.warning(self, "提示", "权限变更失败,请联系管理员检查服务器!")
+        except Exception:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+
+
+class changePassword(Ui_FormChangePssword, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.ipinfo = None
+            self.pushButton.clicked.connect(self.btn)
+            self.user = None
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def severpost_meassge(self, postname, postdata, postdata2):
+
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2)
+            res = requests.get(url=ip, timeout=30).json()
+            return res
+        except Exception:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+
+            return ''
+
+    def severpost_data(self, postname, data: dict):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname)
+            data = json.dumps(data)
+            res = requests.post(url=ip, data=data, timeout=30).json()
+            return res
+        except Exception:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+
+            return 'fail'
+
+    def btn(self):
+        try:
+            oldpassword = self.lineEditold.text()
+            newpassword = self.lineEditnew.text()
+            newpassword2 = self.lineEditnew2.text()
+
+            res = self.severpost_meassge("loginTable", "/%s" % self.user, "/%s" % oldpassword)["返回值"]
+            # print(res)
+            if res != "":
+                if newpassword == newpassword2:
+                    dataDic = {'登录名': self.user, '新密码': newpassword, "旧密码": oldpassword}
+
+                    res = self.severpost_data("changePassword", dataDic)
+                    if res["返回值"] == "ok":
+                        self.close()
+                        QMessageBox.warning(self, "提示", "密码修改成功!!!")
+                    else:
+                        QMessageBox.warning(self, "提示", "密码修改失败,请检查服务器连接状态或联系管理员!!!")
+                else:
+                    QMessageBox.warning(self, "警告", "两次密码输入不同!!!")
+            else:
+                QMessageBox.warning(self, "警告", "原密码错误!!!")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+
+class AddPGWidget(Ui_FormAddPG, QWidget):
+    # AddPG_signal=QtCore.pyqtSignal(str)
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            nowDay = datetime.datetime.now()
+            self.dateTimeEdit.setDateTime(nowDay)
+            self.pushButton.clicked.connect(self.btn)
+            # self.AddPG_signal.connect(self.getname)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def getname(self, name, date, ip):
+        try:
+            self.getname = name
+            self.getdate = date
+            self.getip = ip
+            # print(self.getname)
+            # print(self.getdate)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def severpost_meassge(self, postname, postdata, postdata2, postdata3):
+        # print(ip)
+        try:
+            ip = "http://" + str(self.getip) + "/static/" + str(postname) + str(postdata) + str(postdata2) + str(
+                postdata3)
+            res = requests.get(url=ip, timeout=30).json()
+            if res["返回值"] == "ok":
+                QMessageBox.warning(self, "提示", "已创建待办")
+            else:
+                QMessageBox.warning(self, "提示", "创建待办失败,请检查配置文件或联系管理员检查服务器!")
+        except Exception:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+
+    def btn(self):
+        try:
+            dealtext = self.textEdit.toPlainText()
+            time = self.dateTimeEdit.dateTime().toString('yyyy-M-d H:mm')
+            # print(time)
+            self.severpost_meassge("insertLogs", "/%s" % dealtext, "/%s" % self.getname, "/%s" % time)
+            self.close()
+        except Exception:
+            logger.error(traceback.format_exc())
+
+
+class addFlightWidget(Ui_FormAddFlight, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            nowDay = datetime.datetime.now()
+            self.dateEdit.setDateTime(nowDay)
+            self.dateTimeEdit.setDateTime(nowDay)
+            self.dateTimeEdit_2.setDateTime(nowDay)
+            self.pushButton.clicked.connect(self.btn)
+            self.comboBox.addItems(['短停', '航前', '特后前', '航后'])
+            self.comboBox.setEditable(True)
+            self.comboBox.currentIndexChanged.connect(self.changed)
+            self.filterModel = QSortFilterProxyModel(self.comboBox)
+            self.filterModel.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.filterModel.setSourceModel(self.comboBox.model())
+            self.completer = QCompleter(self.filterModel, self.comboBox)
+            self.completer.setCompletionMode(QCompleter.CompletionMode.UnfilteredPopupCompletion)
+            self.completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.comboBox.setCompleter(self.completer)
+            self.comboBox.lineEdit().textEdited.connect(self.filterModel.setFilterFixedString)
+            self.completer.activated.connect(self.on_completer_activated)
+            self.ipinfo = None
+            self.user = None
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def on_completer_activated(self, text):
+        try:
+            if text:
+                print(text)
+                index = self.comboBox.findText(text)
+                self.comboBox.setCurrentIndex(index)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def changed(self):
+        if self.comboBox.currentText() == "航前":
+            self.label_8.setEnabled(False)
+            self.dateTimeEdit.setEnabled(False)
+            self.label_9.setEnabled(True)
+            self.dateTimeEdit_2.setEnabled(True)
+        elif self.comboBox.currentText() == "航后":
+            self.label_9.setEnabled(False)
+            self.dateTimeEdit_2.setEnabled(False)
+            self.label_8.setEnabled(True)
+            self.dateTimeEdit.setEnabled(True)
+        else:
+            self.label_8.setEnabled(True)
+            self.dateTimeEdit.setEnabled(True)
+            self.label_9.setEnabled(True)
+            self.dateTimeEdit_2.setEnabled(True)
+
+    def btn(self):
+        if self.lineEditPWD.text() != "" and self.lineEditUser.text() != "" and self.lineEditPeople.text() != "" and self.lineEdit.text() != "" and self.lineEdit_2.text() != "":
+            ip = "http://" + str(self.ipinfo) + "/static/" + "manAddFlight/" + "%s/%s/%s/%s/%s/%s/%s/%s/%s/%s" % (
+                self.comboBox.currentText(), self.lineEditPWD.text(), self.lineEditUser.text(),
+                self.lineEditPeople.text(),
+                self.lineEdit.text(), self.dateEdit.text(), self.lineEdit_2.text(), self.dateTimeEdit.text(),
+                self.dateTimeEdit_2.text(), self.user)
+            try:
+                res = requests.get(url=ip, timeout=30).json()
+                if res["返回值"] == "ok":
+                    self.close()
+                    QMessageBox.warning(self, "提示", "航班添加成功!!!")
+                else:
+                    self.close()
+                    QMessageBox.warning(self, "警告", "航班添加失败")
+            except Exception:
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                logger.error(traceback.format_exc())
+
+        else:
+            QMessageBox.warning(self, "警告", "请完善航班信息后再提交!")
+
+class handoverFlightWidget(Ui_handoverFlight, QWidget):
+    handoverFlight_signal = QtCore.pyqtSignal(str)
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.user = None
+            self.ipinfo = None
+            self.selectedtime=None
+            self.Allflight = {}
+        except Exception:
+            logger.error(traceback.format_exc())
+    def severpostData_nomeassge(self, postname, data: dict):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname)
+            data = json.dumps(data)
+            res = requests.post(url=ip, data=data, timeout=30).json()
+            return res
+        except Exception:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+    def btn(self):
+        try:
+            list = []
+            sts=[]
+            list_cz = []
+            sts_cz = []
+            rows=[]
+            for row in range(self.tableWidgetFlight.rowCount()):
+                item = self.tableWidgetFlight.item(row, 0)
+                if item and item.checkState() == Qt.CheckState.Checked and self.tableWidgetFlight.item(row, 8).text() != "":
+                    name = self.tableWidgetFlight.item(row, 10).text()
+                    rows.append(row)
+                    list.append(name)
+                    sts.append("1")
+            data = {"taskid": ','.join(list),
+                    "sts": ','.join(sts)}
+
+            if list !=[]:
+                res = self.severpostData_nomeassge("handoverflight", data=data)["返回值"]
+                if res == "ok" :
+                    QMessageBox.warning(self, "提示", f"交班提交成功!请核对附加消息交班航班!")
+                    for ii in rows:
+                        try:
+                            if "【交班航班】" not in self.tableWidgetFlight.item(ii, 11).text() and self.tableWidgetFlight.item(ii, 8).text() != "":
+                                flightid = self.tableWidgetFlight.item(ii, 12).text()
+                                flighttype = self.tableWidgetFlight.item(ii, 7).text()
+                                fjxx = "【交班航班】" + self.tableWidgetFlight.item(ii, 11).text()
+                                ip = "http://" + str(self.ipinfo) + "/static/updateEidteItem/" + "%s/" % str(fjxx) + "%s/" % str(flightid) + "A/%s/" % str(flighttype) + "%s" % str(self.selectedtime)
+                                try:
+                                    requests.get(url=ip, timeout=30).json()
+                                    self.handoverFlight_signal.emit("1")
+                                except Exception:
+                                    QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                    logger.error(traceback.format_exc())
+
+                        except:
+                            logger.error(traceback.format_exc())
+
+                    self.close()
+                else:
+                    QMessageBox.warning(self, "警告", "航班交接失败,请重新尝试")
+
+            else:
+                QMessageBox.warning(self, "警告", "请选择要交接的航班!未进行派工的航班无法进行交接班")
+
+        except Exception:
+            print(traceback.format_exc())
+            logger.error(traceback.format_exc())
+
+    def start(self):
+        try:
+            self.show()
+            peopleLabel = ["选择","序号", "机号","航班号", "预达", "计飞", "机位", "类型", "维修人员","放行", "任务编号","附加消息","航班编号" ]
+            tableWidgetDispalydata = self.Allflight
+            self.tableWidgetFlight.setColumnCount(len(peopleLabel))
+            self.tableWidgetFlight.setHorizontalHeaderLabels(peopleLabel)
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setRowCount(len(tableWidgetDispalydata.keys()))
+            i = 0
+            for row in tableWidgetDispalydata.keys():
+                if ("3U" in tableWidgetDispalydata[row][str(4)] or "CSC" in tableWidgetDispalydata[row][str(4)]) and \
+                        tableWidgetDispalydata[row][str(24)] != "" and "【交班航班】" not in tableWidgetDispalydata[row][str(30)]:
+                    for colNum in range(0, 13):
+                        if colNum == 0:
+                            checkbox = QTableWidgetItem()
+                            checkbox.setCheckState(Qt.CheckState.Unchecked)
+                            self.tableWidgetFlight.setItem(i, colNum, checkbox)
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 1:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(i+1)))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 2:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(1)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 3:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(4)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 4:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(6)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 5:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(7)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+
+                        elif colNum == 6:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(8)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 7:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(9)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 8:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(24)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+
+                        elif colNum == 9:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(25)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 10:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(26)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 12:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(26)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 11:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(30)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        if (i+1)%2 ==0:
+                            self.tableWidgetFlight.item(i, colNum).setBackground(QColor('#DDE2E3'))
+                    i += 1
+
+
+            self.tableWidgetFlight.resizeColumnsToContents()
+            self.tableWidgetFlight.setColumnHidden(12, True)
+            self.tableWidgetFlight.setColumnHidden(10, True)
+        except Exception:
+            #print(traceback.format_exc())
+            logger.error(traceback.format_exc())
+
+class addUserWidget(Ui_FormAdduser, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.comboBox.addItems(['1', '2', '3',"4"])
+            self.comboBox.setEditable(True)
+            self.filterModel = QSortFilterProxyModel(self.comboBox)
+            self.filterModel.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.filterModel.setSourceModel(self.comboBox.model())
+            self.completer = QCompleter(self.filterModel, self.comboBox)
+            self.completer.setCompletionMode(QCompleter.CompletionMode.UnfilteredPopupCompletion)
+            self.completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.comboBox.setCompleter(self.completer)
+
+            self.comboBox.lineEdit().textEdited.connect(self.filterModel.setFilterFixedString)
+            self.completer.activated.connect(self.on_completer_activated)
+            self.ipinfo = None
+            self.user = None
+            self.authority=None
+
+        except Exception:
+            logger.error(traceback.format_exc())
+
+
+    def severpost_meassge(self, postname, data: dict):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname)
+            data = json.dumps(data)
+            res = requests.post(url=ip, data=data, timeout=30).json()
+            return res
+        except Exception:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            logger.error(traceback.format_exc())
+
+            return 'fail'
+
+    def on_completer_activated(self, text):
+        try:
+            if text:
+                index = self.comboBox.findText(text)
+                self.comboBox.setCurrentIndex(index)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def btn(self):
+        try:
+            if int(self.authority) <= 1:
+                username = self.lineEditUser.text()
+                password = self.lineEditPWD.text()
+                authority = self.comboBox.currentText()
+                people = self.lineEditPeople.text()
+                if username != "" and password != "":
+                    # print('用户名:{},密码:{},权限:{},使用人:{}'.format(username,password,authority,people))
+                    dataDic = {
+                        '登录名': username,
+                        '密码': password,
+                        '权限': authority,
+                        '使用人': people
+                    }
+
+                    res = self.severpost_meassge("addUserWidget", dataDic)
+                    if res["返回值"] == "1":
+                        self.close()
+                        self.show_message("提示", "用户创建成功!!!")
+                    else:
+                        self.show_message("警告", "此用户已存在")
+                else:
+                    self.show_message("警告", "用户名或密码不能为空!!!")
+            else:
+                self.close()
+                self.show_message("警告", "权限不够,请联系管理员!!!")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def show_message(self, type, str):
+        try:
+            QMessageBox.warning(self, "%s" % type, "%s" % str)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+
+class findServerWidget(Ui_FormLink, QWidget):
+    selectServer_signal = QtCore.pyqtSignal(str)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.threadpool = QThreadPool()
+            self.setupUi(self)
+            self.serverList = []
+            self.tableWidget.setColumnCount(2)
+            self.tableWidget.setHorizontalHeaderLabels(['服务器地址', '状态'])
+            self.threadWork_findServer()
+            self.tableWidget.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
+            self.tableWidget.cellDoubleClicked.connect(self.selectServer)
+            self.pushButton_manset.clicked.connect(self.setipinfo)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def setipinfo(self):
+        try:
+            self.ipinfo = ""
+            if os.path.exists("server.code") is True:
+                read_path = os.getcwd() + "\\server.code"
+                with open(read_path, "r", encoding="utf-8") as f2:
+                    rember_2 = f2.read()
+                    if ';' in rember_2:
+                        self.ipinfo = rember_2.split(';')[0]
+                        self.ipinfo1 = rember_2.split(':')[0]
+                        ip = "http://" + str(self.ipinfo) + "/static/linktest"
+                        try:
+                            res = requests.get(url=ip, timeout=30)
+                            self.selectServer_signal.emit(self.ipinfo1)
+                            if res.text == "ok":
+                                QMessageBox.warning(self, "提示", "服务器人工配置成功!")
+                            else:
+                                QMessageBox.warning(self, "提示", "服务器人工配置失败,请检查配置文件或联系管理员检查服务器!")
+                        except Exception:
+                            QMessageBox.warning(self, "提示", "服务器人工配置失败,请联系管理员检查服务器!")
+                            logger.error(traceback.format_exc())
+                    else:
+                        QMessageBox.warning(self, "提示", "服务器人工配置失败,请检查配置文件或联系管理员检查服务器!")
+            else:
+                QMessageBox.warning(self, "提示", "服务器人工配置失败,系统缺少配置文件!")
+        except Exception:
+            logger.error(traceback.format_exc())
+    def setipinfo2(self):
+        try:
+            self.ipinfo = ""
+            if os.path.exists("server.code") is True:
+                read_path = os.getcwd() + "\\server.code"
+                with open(read_path, "r", encoding="utf-8") as f2:
+                    rember_2 = f2.read()
+                    if ';' in rember_2:
+                        self.ipinfo = rember_2.split(';')[0]
+                        self.ipinfo1 = rember_2.split(':')[0]
+                        ip = "http://" + str(self.ipinfo) + "/static/linktest"
+                        try:
+                            res = requests.get(url=ip, timeout=30)
+                            self.selectServer_signal.emit(self.ipinfo1)
+                            if res.text == "ok":
+                                QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置成功!")
+                            else:
+                                QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置成功,服务器连接失败,请检查配置文件或联系管理员检查服务器!")
+                        except Exception:
+                            QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置成功,服务器连接失败,请检查配置文件或联系管理员检查服务器!")
+                            logger.error(traceback.format_exc())
+                    else:
+                        QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置失败,请检查配置文件或联系管理员检查服务器!")
+            else:
+                QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置失败,系统缺少配置文件!")
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def selectServer(self, row, col):
+        # print(self.tableWidget.item(row,col).text())
+        try:
+            self.selectServer_signal.emit(self.tableWidget.item(row, 0).text())
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def threadWork_findServer(self):
+        try:
+            worker = Worker2(self.fn)
+            worker.signals.result.connect(self.print_out_result)
+            self.threadpool.start(worker)
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def fn(self):
+        try:
+            serverList = serverFind.findServer()
+            return serverList
+        except Exception:
+            logger.error(traceback.format_exc())
+
+    def print_out_result(self, dlist):
+        try:
+            self.serverList = dlist
+            # print(self.serverList)
+            if self.serverList == [] or self.serverList ==None:
+                self.setipinfo2()
+            else:
+                self.tableWidget.setRowCount(len(self.serverList))
+                rowNum = 0
+                for row in self.serverList:
+                    colNum = 0
+                    for col in row:
+                        self.tableWidget.setItem(rowNum, colNum, QTableWidgetItem(col))
+                        colNum += 1
+                    rowNum += 1
+        except Exception:
+            logger.error(traceback.format_exc())
+
+
+class mapWebWidget(Ui_FormMapWeb, QWidget):
+    def __init__(self):
+        super().__init__()
+        self.setupUi(self)
+        # self.webEngineView.load(QUrl('http://192.168.2.22:6010/'))
+
+
+class Worker2(QRunnable):
+    def __init__(self, fn, *args, **kwargs):
+        super(Worker2, self).__init__()
+        # Store constructor arguments (re-used for processing)
+        self.fn = fn
+        self.args = args
+        self.kwargs = kwargs
+        self.signals = WorkerSignals()
+
+    @pyqtSlot()
+    def run(self):
+        try:
+            result = self.fn(
+                *self.args, **self.kwargs
+            )
+        except Exception:
+
+            traceback.print_exc()
+            exctype, value = sys.exc_info()[:2]
+            self.signals.error.emit((exctype, value, traceback.format_exc()))
+        else:
+            self.signals.result.emit(result)  # Return the result of the processing
+        finally:
+            self.signals.finished.emit()
+
+
+class WorkerSignals(QObject):
+    finished = pyqtSignal()
+    error = pyqtSignal(tuple)
+    result = pyqtSignal(object)
+
+
+if __name__ == '__main__':
+    app = QApplication(sys.argv)
+    mw = MainWidget()
+
+    sys.exit(app.exec())

+ 51 - 0
Functions/QtFunctions/AddPGWidget.py

@@ -0,0 +1,51 @@
+
+from UI.AddPG import Ui_FormAddPG
+from .LogerinTxt import app_logger
+from PyQt6.QtWidgets import QWidget,QMessageBox
+import requests
+import datetime
+
+class AddPGWidget(Ui_FormAddPG, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            nowDay = datetime.datetime.now()
+            self.dateTimeEdit.setDateTime(nowDay)
+            self.pushButton.clicked.connect(self.btn)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def getname(self, name, date, ip):
+        try:
+            self.getname = name
+            self.getdate = date
+            self.getip = ip
+            # print(self.getname)
+            # print(self.getdate)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def severpost_meassge(self, postname, postdata, postdata2, postdata3):
+        # print(ip)
+        try:
+            ip = "http://" + str(self.getip) + "/static/" + str(postname) + str(postdata) + str(postdata2) + str(
+                postdata3)
+            res = requests.get(url=ip, timeout=30).json()
+            if res["返回值"] == "ok":
+                QMessageBox.warning(self, "提示", "已创建待办")
+            else:
+                QMessageBox.warning(self, "提示", "创建待办失败,请检查配置文件或联系管理员检查服务器!")
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+
+    def btn(self):
+        try:
+            dealtext = self.textEdit.toPlainText()
+            time = self.dateTimeEdit.dateTime().toString('yyyy-M-d H:mm')
+            # print(time)
+            self.severpost_meassge("insertLogs", "/%s" % dealtext, "/%s" % self.getname, "/%s" % time)
+            self.close()
+        except Exception as e:
+            app_logger.log_error(e)

+ 110 - 0
Functions/QtFunctions/LogerinTxt.py

@@ -0,0 +1,110 @@
+
+import traceback
+from datetime import datetime
+import os
+from pathlib import Path
+
+path="D:\\flightinfo"
+class ErrorLogger:
+    """
+    错误日志记录器(单例模式,固定配置)
+    功能:
+    - 自动创建日志目录和文件
+    - 限制单个日志文件大小
+    - 自动滚动保留最近备份
+    - 最新错误显示在最前面
+    - 包含详细时间戳和错误堆栈
+    """
+
+    # 固定配置(类属性)
+    _DEFAULT_FILENAME = "app_errors.log"
+    _DEFAULT_LOG_DIR = Path(f"{path}\logs")  # 默认存储目录
+    _DEFAULT_MAX_SIZE_KB = 1024  # 默认1MB大小限制
+    _DEFAULT_BACKUP_COUNT = 5  # 默认保留5个备份
+
+    _instance = None  # 单例实例
+
+    def __new__(cls):
+        if cls._instance is None:
+            cls._instance = super().__new__(cls)
+            cls._instance.__init__()  # 确保初始化只执行一次
+        return cls._instance
+
+    def __init__(self):
+        if not hasattr(self, '_initialized'):  # 防止重复初始化
+            self.filename = self._DEFAULT_LOG_DIR / self._DEFAULT_FILENAME
+            self.max_size = self._DEFAULT_MAX_SIZE_KB * 1024
+            self.backup_count = self._DEFAULT_BACKUP_COUNT
+            self._ensure_directory_exists()
+            self._ensure_file_exists()
+            self._initialized = True
+
+    def _ensure_directory_exists(self):
+        """确保日志目录存在"""
+        try:
+            self._DEFAULT_LOG_DIR.mkdir(parents=True, exist_ok=True)
+        except Exception as e:
+            raise RuntimeError(f"无法创建日志目录 {self._DEFAULT_LOG_DIR}: {e}")
+
+    def _ensure_file_exists(self):
+        """确保日志文件存在"""
+        try:
+            if not self.filename.exists():
+                with open(self.filename, 'w', encoding='utf-8') as f:
+                    f.write("")  # 创建空文件
+        except Exception as e:
+            raise RuntimeError(f"无法创建日志文件 {self.filename}: {e}")
+
+    def _rotate_files(self):
+        """执行日志文件滚动"""
+        if self.filename.exists() and os.path.getsize(self.filename) >= self.max_size:
+            try:
+                # 删除最旧的备份
+                oldest = f"{self.filename}.{self.backup_count}"
+                if os.path.exists(oldest):
+                    os.remove(oldest)
+
+                # 重命名其他备份
+                for i in range(self.backup_count - 1, 0, -1):
+                    src = f"{self.filename}.{i}"
+                    if os.path.exists(src):
+                        os.rename(src, f"{self.filename}.{i + 1}")
+
+                # 重命名当前日志
+                os.rename(self.filename, f"{self.filename}.1")
+
+                # 创建新日志文件
+                self._ensure_file_exists()
+            except Exception as e:
+                print(f"日志滚动失败: {e}")
+
+    def log_error(self, error_msg=None):
+        """
+        记录错误信息
+        :param error_msg: 可以是Exception对象或任意可转换为字符串的内容
+        """
+        self._rotate_files()
+
+        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]  # 带毫秒的时间戳
+
+        if isinstance(error_msg, Exception):
+            error_details = "".join(traceback.format_exception(
+                type(error_msg), error_msg, error_msg.__traceback__))
+        else:
+            error_details = str(error_msg) if error_msg else "Unknown error"
+
+        log_entry = f"[{timestamp}]\n{error_details}\n{'=' * 50}\n"
+
+        try:
+            if os.path.exists(self.filename):
+                with open(self.filename, 'r+', encoding='utf-8') as f:
+                    content = f.read()
+                    f.seek(0)
+                    f.write(log_entry + content)
+            else:
+                with open(self.filename, 'w', encoding='utf-8') as f:
+                    f.write(log_entry)
+        except Exception as e:
+            print(f"无法写入错误日志: {e}")
+# 创建单例实例(推荐直接使用这个实例)
+app_logger = ErrorLogger()

+ 64 - 0
Functions/QtFunctions/LoginWidget.py

@@ -0,0 +1,64 @@
+from PyQt6 import QtCore
+from UI.login import Ui_login
+from PyQt6.QtWidgets import QWidget, QMessageBox
+from .LogerinTxt import app_logger
+import requests
+
+class LoginWidget(Ui_login, QWidget):
+    login_signal = QtCore.pyqtSignal(bool)
+    login_user = QtCore.pyqtSignal(list)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            # print('login widget')
+            self.pushButton.clicked.connect(self.btn)
+            # self.setipinfo()
+            self.ipinfo = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def severpost_meassge(self, postname, postdata, postdata2):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2)
+            try:
+                res = requests.get(url=ip, timeout=30).json()
+                # print(res)
+
+            except Exception as e:
+                # print('登录服务器失败')
+                app_logger.log_error('登录服务器失败')
+                res = ""
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                app_logger.log_error(e)
+
+            return res
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def btn(self):
+        try:
+            username = self.lineEditUser.text()
+            password = self.lineEditPassword.text()
+            try:
+                res = self.severpost_meassge("loginTable", "/%s" % username, "/%s" % password)["返回值"]
+                # print(res)
+            except Exception as e:
+                res = ""
+                app_logger.log_error(e)
+
+            # print(res)
+            if res != "" and int(res[3]) <= 3:
+                self.login_signal.emit(True)
+                self.login_user.emit(res)
+            else:
+                self.show_message()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def show_message(self):
+        try:
+            QMessageBox.warning(self, "警告", "无此用户或密码错误或账号无权限访问办公平台")
+        except Exception as e:
+            app_logger.log_error(e)

+ 64 - 0
Functions/QtFunctions/LoginWidget_display.py

@@ -0,0 +1,64 @@
+from PyQt6 import QtCore
+from UI.login import Ui_login
+from PyQt6.QtWidgets import QWidget, QMessageBox
+from .LogerinTxt import app_logger
+import requests
+
+class LoginWidget(Ui_login, QWidget):
+    login_signal = QtCore.pyqtSignal(bool)
+    login_user = QtCore.pyqtSignal(list)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            # print('login widget')
+            self.pushButton.clicked.connect(self.btn)
+            # self.setipinfo()
+            self.ipinfo = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def severpost_meassge(self, postname, postdata, postdata2):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2)
+            try:
+                res = requests.get(url=ip, timeout=30).json()
+                # print(res)
+
+            except Exception as e:
+                # print('登录服务器失败')
+                app_logger.log_error('登录服务器失败')
+                res = ""
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                app_logger.log_error(e)
+
+            return res
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def btn(self):
+        try:
+            username = self.lineEditUser.text()
+            password = self.lineEditPassword.text()
+            try:
+                res = self.severpost_meassge("loginTable", "/%s" % username, "/%s" % password)["返回值"]
+                # print(res)
+            except Exception as e:
+                res = ""
+                app_logger.log_error(e)
+
+            # print(res)
+            if res != "" and int(res[3]) <= 4:
+                self.login_signal.emit(True)
+                self.login_user.emit(res)
+            else:
+                self.show_message()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def show_message(self):
+        try:
+            QMessageBox.warning(self, "警告", "无此用户或密码错误或账号无权限访问办公平台")
+        except Exception as e:
+            app_logger.log_error(e)

+ 317 - 0
Functions/QtFunctions/SaveFile.py

@@ -0,0 +1,317 @@
+
+from openpyxl import Workbook
+from PyQt6.QtWidgets import QFileDialog
+import requests
+
+def saveRisktable(self):
+    try:
+        fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/风险数据库.xlsx" ,"xlsx(*.xlsx)")
+        if fileName:
+            ip = "http://" + str(self.ipinfo) + "/static/saveRisktable"
+            res = requests.get(url=ip, timeout=30).json()["返回值"]
+            wb = Workbook()
+            wb.create_sheet(title="风险数据库.xlsx", index=0)
+            ws = wb.active
+            ws.title = '风险数据库'
+            ws = wb['风险数据库']
+            for row in range(1, len(res ) +1):
+                for cloumn in range(1, 8):
+                    ws.cell(row, cloumn).number_format = '@'
+            ws.cell(1, 1).value = "风险编号"
+            ws.cell(1, 2).value = "状态"
+            ws.cell(1, 3).value = "提示内容"
+            ws.cell(1, 4).value = "触发条件1"
+            ws.cell(1, 5).value = "触发条件2"
+            ws.cell(1, 6).value = "触发条件3"
+            ws.cell(1, 7).value = "触发条件4"
+            ws.cell(1, 8).value = "触发条件5"
+            if len(res) != 0:
+                ii =1
+                for i in res:
+                    for j in range(0, 8):
+                        # print(ii,j)
+                        ws.cell(int(ii) + 1, j+ 1).value = i[j]
+                    ii += 1
+            wb.save(fileName)
+    except Exception:
+        print(traceback.format_exc())
+
+
+def saveAllflight(self):
+    try:
+        index = {"序号": "0", "类型": "9", "航班号": "4", "机型": "2", "发动机": "3", "机号": "1", "计达": "5", "预达": "6", "计飞": "7",
+                 "机位": "8"}
+        index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位"}
+        fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/%s全天航班导出(未含保障结束).xlsx" % self.selectedtime,
+                                                  "xlsx(*.xlsx)")
+        # print(fileName)
+        if fileName:
+            ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly22/" + "%s" % self.selectedtime
+            res = requests.get(url=ip, timeout=30).json()
+            # print(res)
+            wb = Workbook()
+            wb.create_sheet(title="%s全天航班导出(未含保障结束).xlsx" % self.selectedtime, index=0)
+            ws = wb.active
+            ws.title = '航班数据'
+            ws = wb['航班数据']
+            for row in range(1, 400):
+                for cloumn in range(1, 10):
+                    ws.cell(row, cloumn).number_format = '@'
+            ws.cell(1, 1).value = "序号"
+            ws.cell(1, 2).value = "类型"
+            ws.cell(1, 3).value = "航班号"
+            ws.cell(1, 4).value = "机型"
+            ws.cell(1, 5).value = "发动机"
+            ws.cell(1, 6).value = "机号"
+            ws.cell(1, 7).value = "计达"
+            ws.cell(1, 8).value = "预达"
+            ws.cell(1, 9).value = "计飞"
+            ws.cell(1, 10).value = "机位"
+            if len(res) != 0:
+                for i in res.keys():
+                    if res[i]["109"] != "4":
+                        for j in range(1, 11):
+                            if j == 2 and "3U" in res[i]["4"] and "CSC" in res[i]["4"]:
+                                ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                            elif j == 7 or j == 8:
+                                text = str(res[i][index[index2[j]]]).replace(":", "") if str(
+                                    res[i][index[index2[j]]]) != "" else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            elif j == 9:
+                                text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":", "") if "]" in str(
+                                    res[i][index[index2[j]]]) else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            else:
+                                ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+            wb.save(fileName)
+        self.show_message2("提示", "%s全天航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+    except Exception:
+        self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+        logger.error(traceback.format_exc())
+
+
+def saveAllflight2(self):
+    try:
+        time2 = datetime.datetime.strptime(self.selectedtime, "%Y%m%d")
+        time1 = str((time2 - datetime.timedelta(days=1)).strftime("%Y%m%d"))
+        index = {"序号": "1", "类型": "19", "航班号": "9", "机型": "5", "发动机": "7", "机号": "3", "计达": "11", "预达": "13",
+                 "计飞": "15", "机位": "8", "放行": "21", "工1": "23", "工2": "25", "工3": "27", "工4": "29", "备注": "61",
+                 "班组长": "31"}
+        index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位", 11: "放行",
+                  12: "工1", 13: "工2", 14: "工3", 15: "工4", 16: "备注", 17: "班组长"}
+        fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹",
+                                                  "/%s航班安排备份导出.xlsx" % (str(time1) + "-" + str(self.selectedtime)[-2:]),
+                                                  "xlsx(*.xlsx)")
+        # print(fileName)
+        wb = Workbook()
+        if fileName:
+            for selectedtime in [self.selectedtime, time1]:
+                ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly11/" + "%s" % selectedtime
+                res = requests.get(url=ip, timeout=30).json()
+                # print(res)
+                wb.create_sheet(title="%s" % selectedtime, index=0)
+                ws = wb.active
+                ws.title = "%s" % selectedtime
+                ws = wb["%s" % selectedtime]
+                for row in range(1, 400):
+                    for cloumn in range(1, 18):
+                        ws.cell(row, cloumn).number_format = '@'
+                ws.cell(1, 1).value = "序号"
+                ws.cell(1, 2).value = "类型"
+                ws.cell(1, 3).value = "航班号"
+                ws.cell(1, 4).value = "机型"
+                ws.cell(1, 5).value = "发动机"
+                ws.cell(1, 6).value = "机号"
+                ws.cell(1, 7).value = "计达"
+                ws.cell(1, 8).value = "预达"
+                ws.cell(1, 9).value = "计飞"
+                ws.cell(1, 10).value = "机位"
+                ws.cell(1, 11).value = "放行"
+                ws.cell(1, 12).value = "工1"
+                ws.cell(1, 13).value = "工2"
+                ws.cell(1, 14).value = "工3"
+                ws.cell(1, 15).value = "工4"
+                ws.cell(1, 16).value = "备注"
+                ws.cell(1, 17).value = "班组长"
+
+                if len(res) != 0:
+                    for i in res.keys():
+                        for j in range(1, 18):
+                            if j == 2:
+                                if "3U" not in res[i]["4"] and "CSC" not in res[i]["4"]:
+                                    ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                                else:
+                                    ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                            elif j == 7 or j == 8:
+                                text = str(res[i][index[index2[j]]]).replace(":", "") if str(
+                                    res[i][index[index2[j]]]) != "" else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            elif j == 9:
+                                text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":", "") if "]" in str(
+                                    res[i][index[index2[j]]]) else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            else:
+                                ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+        wb.save(fileName)
+        self.show_message2("提示", "%s全天航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+    except Exception:
+        self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+        logger.error(traceback.format_exc())
+
+
+def saveAllflight3(self):
+    try:
+        time2 = datetime.datetime.strptime(self.selectedtime, "%Y%m%d")
+        time1 = str((time2 - datetime.timedelta(days=1)).strftime("%Y%m%d"))
+        index = {"序号": "0", "类型": "9", "航班号": "4", "机型": "2", "发动机": "3", "机号": "1", "计达": "5", "预达": "6", "计飞": "7",
+                 "机位": "8", "工作单": "10", "飞单": "11", "客舱单": "12", "临工单": "13", "AMRO记录": "14", "备注": "32", "电签": "15"}
+        index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位",
+                  11: "工作单", 12: "飞单", 13: "客舱单", 14: "临工单", 15: "AMRO记录", 16: "备注", 17: "电签"}
+        fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹",
+                                                  "/%s维修记录备份导出.xlsx" % (str(time1) + "-" + str(self.selectedtime)[-2:]),
+                                                  "xlsx(*.xlsx)")
+        # print(fileName)
+        wb = Workbook()
+        if fileName:
+            for selectedtime in [self.selectedtime, time1]:
+                ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly22/" + "%s" % selectedtime
+                res = requests.get(url=ip, timeout=30).json()
+                # print(res)
+                wb.create_sheet(title="%s" % selectedtime, index=0)
+                ws = wb.active
+                ws.title = "%s" % selectedtime
+                ws = wb["%s" % selectedtime]
+                for row in range(1, 400):
+                    for cloumn in range(1, 18):
+                        ws.cell(row, cloumn).number_format = '@'
+                ws.cell(1, 1).value = "序号"
+                ws.cell(1, 2).value = "类型"
+                ws.cell(1, 3).value = "航班号"
+                ws.cell(1, 4).value = "机型"
+                ws.cell(1, 5).value = "发动机"
+                ws.cell(1, 6).value = "机号"
+                ws.cell(1, 7).value = "计达"
+                ws.cell(1, 8).value = "预达"
+                ws.cell(1, 9).value = "计飞"
+                ws.cell(1, 10).value = "机位"
+                ws.cell(1, 11).value = "工作单"
+                ws.cell(1, 12).value = "飞单"
+                ws.cell(1, 13).value = "客舱单"
+                ws.cell(1, 14).value = "临工单"
+                ws.cell(1, 15).value = "AMRO记录"
+                ws.cell(1, 16).value = "备注"
+                ws.cell(1, 17).value = "电签"
+
+                if len(res) != 0:
+                    for i in res.keys():
+                        for j in range(1, 18):
+                            if j == 2:
+                                if "3U" not in res[i]["4"] and "CSC" not in res[i]["4"]:
+                                    ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                                else:
+                                    ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                            elif j == 6:
+                                text = "B-" + str(res[i][index[index2[j]]])
+                                ws.cell(int(i) + 2, j).value = text
+                            elif j == 7 or j == 8:
+                                text = str(res[i][index[index2[j]]]).replace(":", "") if str(
+                                    res[i][index[index2[j]]]) != "" else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            elif j == 9:
+                                text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":", "") if "]" in str(
+                                    res[i][index[index2[j]]]) else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            else:
+                                ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+        wb.save(fileName)
+        self.show_message2("提示", "%s全天航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+    except Exception:
+        self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+        logger.error(traceback.format_exc())
+
+
+def saveDealflight(self):
+    try:
+        index = {"序号": "0", "类型": "9", "航班号": "4", "机型": "2", "发动机": "3", "机号": "1", "计达": "5", "预达": "6", "计飞": "7",
+                 "机位": "8"}
+        index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位"}
+        fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/%s交班航班导出.xlsx" % self.selectedtime, "xlsx(*.xlsx)")
+        # print(fileName)
+        if fileName:
+            ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly22/" + "%s" % self.selectedtime
+            res = requests.get(url=ip, timeout=30).json()
+            # print(res)
+            wb = Workbook()
+            wb.create_sheet(title="%s交班航班导出.xlsx" % self.selectedtime, index=0)
+            ws = wb.active
+            ws.title = '航班数据'
+            ws = wb['航班数据']
+            for row in range(1, 400):
+                for cloumn in range(1, 10):
+                    ws.cell(row, cloumn).number_format = '@'
+            ws.cell(1, 1).value = "序号"
+            ws.cell(1, 2).value = "类型"
+            ws.cell(1, 3).value = "航班号"
+            ws.cell(1, 4).value = "机型"
+            ws.cell(1, 5).value = "发动机"
+            ws.cell(1, 6).value = "机号"
+            ws.cell(1, 7).value = "计达"
+            ws.cell(1, 8).value = "预达"
+            ws.cell(1, 9).value = "计飞"
+            ws.cell(1, 10).value = "机位"
+            if len(res) != 0:
+                for i in res.keys():
+                    if res[i]["109"] == "1" or res[i]["109"] == "3":
+                        for j in range(1, 11):
+                            if j == 2:
+                                if "3U" not in res[i]["4"] and "CSC" not in res[i]["4"]:
+                                    ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                                else:
+                                    ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                            elif j == 7 or j == 8:
+                                text = str(res[i][index[index2[j]]]).replace(":", "") if str(
+                                    res[i][index[index2[j]]]) != "" else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            elif j == 9:
+                                text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":", "") if "]" in str(
+                                    res[i][index[index2[j]]]) else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            else:
+                                ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+            wb.save(fileName)
+        self.show_message2("提示", "%s交班航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+    except Exception:
+        self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+        logger.error(traceback.format_exc())
+
+def saveCase(self):
+    try:
+        fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/停场航班导入模板.xlsx", "xlsx(*.xlsx)")
+        if fileName:
+            wb = Workbook()
+            wb.create_sheet(title="停场航班导入模板", index=0)
+            ws = wb.active
+            ws.title = '航班数据'
+            ws = wb['航班数据']
+            for row in range(1, 50):
+                for cloumn in range(1, 7):
+                    ws.cell(row, cloumn).number_format = '@'
+            ws.cell(1, 1).value = "序号"
+            ws.cell(1, 2).value = "日期"
+            ws.cell(1, 3).value = "机号"
+            ws.cell(1, 4).value = "机位"
+            ws.cell(1, 5).value = "机型"
+            ws.cell(1, 6).value = "发动机"
+            ws.cell(1, 7).value = "录入数据请从第三行开始录入,切勿覆盖第一二行数据!!!"
+            ws.cell(2, 1).value = "1"
+            ws.cell(2, 2).value = "2024/03/21"
+            ws.cell(2, 3).value = "1663"
+            ws.cell(2, 4).value = "722"
+            ws.cell(2, 5).value = "A321"
+            ws.cell(2, 6).value = "V2500"
+            ws.cell(2, 7).value = "录入数据请从第三行开始录入,切勿覆盖第一二行数据!!!"
+            wb.save(fileName)
+            self.show_message2("提示", "导出成功!文件已保存至%s" % fileName)
+    except Exception:
+        self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!")
+        logger.error(traceback.format_exc())

+ 33 - 0
Functions/QtFunctions/Worker2.py

@@ -0,0 +1,33 @@
+from PyQt6.QtCore import QObject,pyqtSlot,QRunnable
+import sys
+import traceback
+from PyQt6 import QtCore
+
+
+
+class WorkerSignals(QObject):
+    finished = QtCore.pyqtSignal()
+    error = QtCore.pyqtSignal(tuple)
+    result = QtCore.pyqtSignal(object)
+
+class Worker2(QRunnable):
+    def __init__(self, fn, *args, **kwargs):
+        super(Worker2, self).__init__()
+        # Store constructor arguments (re-used for processing)
+        self.fn = fn
+        self.args = args
+        self.kwargs = kwargs
+        self.signals = WorkerSignals()
+
+    @pyqtSlot()
+    def run(self):
+        try:
+            result = self.fn(*self.args, **self.kwargs)
+        except Exception:
+            traceback.print_exc()
+            exctype, value = sys.exc_info()[:2]
+            self.signals.error.emit((exctype, value, traceback.format_exc()))
+        else:
+            self.signals.result.emit(result)  # Return the result of the processing
+        finally:
+            self.signals.finished.emit()

+ 1 - 0
Functions/QtFunctions/__init__.py

@@ -0,0 +1 @@
+from .Worker2 import Worker2

+ 83 - 0
Functions/QtFunctions/addFlightWidget.py

@@ -0,0 +1,83 @@
+from UI.addFlight import Ui_FormAddFlight
+from .LogerinTxt import app_logger
+from PyQt6.QtCore import Qt, QSortFilterProxyModel
+from PyQt6.QtWidgets import QCompleter, QWidget,QMessageBox
+import requests
+import datetime
+
+
+
+class addFlightWidget(Ui_FormAddFlight, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            nowDay = datetime.datetime.now()
+            self.dateEdit.setDateTime(nowDay)
+            self.dateTimeEdit.setDateTime(nowDay)
+            self.dateTimeEdit_2.setDateTime(nowDay)
+            self.pushButton.clicked.connect(self.btn)
+            self.comboBox.addItems(['短停', '航前', '特后前', '航后'])
+            self.comboBox.setEditable(True)
+            self.comboBox.currentIndexChanged.connect(self.changed)
+            self.filterModel = QSortFilterProxyModel(self.comboBox)
+            self.filterModel.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.filterModel.setSourceModel(self.comboBox.model())
+            self.completer = QCompleter(self.filterModel, self.comboBox)
+            self.completer.setCompletionMode(QCompleter.CompletionMode.UnfilteredPopupCompletion)
+            self.completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.comboBox.setCompleter(self.completer)
+            self.comboBox.lineEdit().textEdited.connect(self.filterModel.setFilterFixedString)
+            self.completer.activated.connect(self.on_completer_activated)
+            self.ipinfo = None
+            self.user = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def on_completer_activated(self, text):
+        try:
+            if text:
+                print(text)
+                index = self.comboBox.findText(text)
+                self.comboBox.setCurrentIndex(index)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def changed(self):
+        if self.comboBox.currentText() == "航前":
+            self.label_8.setEnabled(False)
+            self.dateTimeEdit.setEnabled(False)
+            self.label_9.setEnabled(True)
+            self.dateTimeEdit_2.setEnabled(True)
+        elif self.comboBox.currentText() == "航后":
+            self.label_9.setEnabled(False)
+            self.dateTimeEdit_2.setEnabled(False)
+            self.label_8.setEnabled(True)
+            self.dateTimeEdit.setEnabled(True)
+        else:
+            self.label_8.setEnabled(True)
+            self.dateTimeEdit.setEnabled(True)
+            self.label_9.setEnabled(True)
+            self.dateTimeEdit_2.setEnabled(True)
+
+    def btn(self):
+        if self.lineEditPWD.text() != "" and self.lineEditUser.text() != "" and self.lineEditPeople.text() != "" and self.lineEdit.text() != "" and self.lineEdit_2.text() != "":
+            ip = "http://" + str(self.ipinfo) + "/static/" + "manAddFlight/" + "%s/%s/%s/%s/%s/%s/%s/%s/%s/%s" % (
+                self.comboBox.currentText(), self.lineEditPWD.text(), self.lineEditUser.text(),
+                self.lineEditPeople.text(),
+                self.lineEdit.text(), self.dateEdit.text(), self.lineEdit_2.text(), self.dateTimeEdit.text(),
+                self.dateTimeEdit_2.text(), self.user)
+            try:
+                res = requests.get(url=ip, timeout=30).json()
+                if res["返回值"] == "ok":
+                    self.close()
+                    QMessageBox.warning(self, "提示", "航班添加成功!!!")
+                else:
+                    self.close()
+                    QMessageBox.warning(self, "警告", "航班添加失败")
+            except Exception as e:
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                app_logger.log_error(e)
+
+        else:
+            QMessageBox.warning(self, "警告", "请完善航班信息后再提交!")

+ 90 - 0
Functions/QtFunctions/addUserWidget.py

@@ -0,0 +1,90 @@
+
+from UI.adduser import Ui_FormAdduser
+from .LogerinTxt import app_logger
+from PyQt6.QtCore import Qt, QSortFilterProxyModel
+from PyQt6.QtWidgets import QCompleter, QWidget, QMessageBox
+import json
+import requests
+
+
+class addUserWidget(Ui_FormAdduser, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.comboBox.addItems(['1', '2', '3',"4"])
+            self.comboBox.setEditable(True)
+            self.filterModel = QSortFilterProxyModel(self.comboBox)
+            self.filterModel.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.filterModel.setSourceModel(self.comboBox.model())
+            self.completer = QCompleter(self.filterModel, self.comboBox)
+            self.completer.setCompletionMode(QCompleter.CompletionMode.UnfilteredPopupCompletion)
+            self.completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.comboBox.setCompleter(self.completer)
+
+            self.comboBox.lineEdit().textEdited.connect(self.filterModel.setFilterFixedString)
+            self.completer.activated.connect(self.on_completer_activated)
+            self.ipinfo = None
+            self.user = None
+            self.authority=None
+        except Exception as e:
+            app_logger.log_error(e)
+
+
+
+    def severpost_meassge(self, postname, data: dict):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname)
+            data = json.dumps(data)
+            res = requests.post(url=ip, data=data, timeout=30).json()
+            return res
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+
+            return 'fail'
+
+    def on_completer_activated(self, text):
+        try:
+            if text:
+                index = self.comboBox.findText(text)
+                self.comboBox.setCurrentIndex(index)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def btn(self):
+        try:
+            if int(self.authority) <= 1:
+                username = self.lineEditUser.text()
+                password = self.lineEditPWD.text()
+                authority = self.comboBox.currentText()
+                people = self.lineEditPeople.text()
+                if username != "" and password != "":
+                    # print('用户名:{},密码:{},权限:{},使用人:{}'.format(username,password,authority,people))
+                    dataDic = {
+                        '登录名': username,
+                        '密码': password,
+                        '权限': authority,
+                        '使用人': people
+                    }
+
+                    res = self.severpost_meassge("addUserWidget", dataDic)
+                    if res["返回值"] == "1":
+                        self.close()
+                        self.show_message("提示", "用户创建成功!!!")
+                    else:
+                        self.show_message("警告", "此用户已存在")
+                else:
+                    self.show_message("警告", "用户名或密码不能为空!!!")
+            else:
+                self.close()
+                self.show_message("警告", "权限不够,请联系管理员!!!")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def show_message(self, type, str):
+        try:
+            QMessageBox.warning(self, "%s" % type, "%s" % str)
+        except Exception as e:
+            app_logger.log_error(e)

+ 33 - 0
Functions/QtFunctions/amroLoginWidget.py

@@ -0,0 +1,33 @@
+
+from UI.amroLogin import Ui_amroLogin
+from .LogerinTxt import app_logger
+from PyQt6.QtWidgets import QWidget, QMessageBox
+import requests
+
+class amroLoginWidget(Ui_amroLogin, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.ipinfo = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def btn(self):
+        try:
+            username = self.lineEditUsername.text()
+            password = self.lineEditPassword.text()
+            ip = "http://" + str(self.ipinfo) + "/static/remotelogin/%s/%s" % (username, password)
+            try:
+                res = requests.get(url=ip, timeout=60)
+                if res.text == "ok":
+                    QMessageBox.warning(self, "提示", "服务器AMRO登录成功!")
+                    self.close()
+                else:
+                    QMessageBox.warning(self, "提示", "服务器AMRO登录失败,请检查账号密码或服务器端登录或联系管理员检查服务器!")
+            except:
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                self.close()
+        except Exception as e:
+            app_logger.log_error(e)

+ 33 - 0
Functions/QtFunctions/amroLoginWidget2.py

@@ -0,0 +1,33 @@
+
+from UI.amroLogin2 import Ui_amroLogin2
+from .LogerinTxt import app_logger
+from PyQt6.QtWidgets import QWidget, QMessageBox
+import requests
+
+class amroLoginWidget2(Ui_amroLogin2, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.ipinfo = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def btn(self):
+        try:
+            username = self.lineEditUsername.text()
+            password = self.lineEditPassword.text()
+            ip = "http://" + str(self.ipinfo) + "/static/remoteCookielogin/%s/%s" % (username, password)
+            try:
+                res = requests.get(url=ip, timeout=60)
+                if res.text == "ok":
+                    QMessageBox.warning(self, "提示", "服务器AMRO登录成功!")
+                    self.close()
+                else:
+                    QMessageBox.warning(self, "提示", "服务器AMRO登录失败,请检查账号和Cookie或服务器端登录或联系管理员检查服务器!")
+            except:
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                self.close()
+        except Exception as e:
+            app_logger.log_error(e)

+ 0 - 0
Functions/QtFunctions/baseFunctions.py


+ 101 - 0
Functions/QtFunctions/changeAuth.py

@@ -0,0 +1,101 @@
+
+from UI.changeAuth import Ui_changeAuth
+from .LogerinTxt import app_logger
+from PyQt6.QtCore import Qt, QSortFilterProxyModel
+from PyQt6.QtWidgets import QCompleter, QWidget,QMessageBox
+import json
+import requests
+
+class changeAuth(Ui_changeAuth, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.ipinfo = None
+            self.label_5.setText("")
+            self.label_6.setText("")
+            self.pushButton.clicked.connect(self.btn)
+            self.user = None
+            self.comboBox.addItems(['1', '2', '3',"4"])
+            self.comboBox.setEditable(True)
+            self.filterModel1 = QSortFilterProxyModel(self.comboBox)
+            self.filterModel1.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.filterModel1.setSourceModel(self.comboBox.model())
+            self.completer1 = QCompleter(self.filterModel1, self.comboBox)
+            self.completer1.setCompletionMode(QCompleter.CompletionMode.UnfilteredPopupCompletion)
+            self.completer1.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.comboBox.setCompleter(self.completer)
+            self.comboBox.lineEdit().textEdited.connect(self.filterModel1.setFilterFixedString)
+            self.completer1.activated.connect(self.on_completer_activated1)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def start(self):
+        self.show()
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/loginDbget/" + str(self.user)
+            self.res = requests.get(url=ip, timeout=30).json()
+        except Exception as e:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+            self.res = {}
+        if self.res != {}:
+            namelist = []
+            for i in self.res.keys():
+                namelist.append(self.res[i]["登录名"])
+            print(namelist)
+            self.comboBox_2.addItems(namelist)
+            self.comboBox_2.setEditable(True)
+            self.comboBox_2.currentIndexChanged.connect(self.changed)
+            self.filterModel = QSortFilterProxyModel(self.comboBox_2)
+            self.filterModel.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.filterModel.setSourceModel(self.comboBox_2.model())
+            self.completer = QCompleter(self.filterModel, self.comboBox_2)
+            self.completer.setCompletionMode(QCompleter.CompletionMode.UnfilteredPopupCompletion)
+            self.completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.comboBox_2.setCompleter(self.completer)
+            self.comboBox_2.lineEdit().textEdited.connect(self.filterModel.setFilterFixedString)
+            self.completer.activated.connect(self.on_completer_activated)
+        else:
+            QMessageBox.warning(self, "提示", "获取数据库为空,请检查数据库或联系管理员")
+
+    def on_completer_activated1(self, text):
+        try:
+            if text:
+                index = self.comboBox.findText(text)
+                self.comboBox.setCurrentIndex(index)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def on_completer_activated(self, text):
+        try:
+            if text:
+                print(text)
+                index = self.comboBox_2.findText(text)
+                self.comboBox_2.setCurrentIndex(index)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def changed(self):
+        if self.res != {}:
+            self.label_5.setText(self.res[self.comboBox_2.currentText()]["使用人"])
+            self.label_6.setText(self.res[self.comboBox_2.currentText()]["权限"])
+
+    def btn(self):
+        data = {
+            '登录名': "'%s'" % self.comboBox_2.currentText(),
+            "权限": "'%s'" % self.comboBox.currentText()
+        }
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/changeAuth"
+            data = json.dumps(data)
+            res = requests.post(url=ip, data=data, timeout=30).json()
+            if res["返回值"] == "1":
+                QMessageBox.warning(self, "提示", "权限变更成功!")
+                self.close()
+            else:
+                QMessageBox.warning(self, "提示", "权限变更失败,请联系管理员检查服务器!")
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)

+ 64 - 0
Functions/QtFunctions/changePassword.py

@@ -0,0 +1,64 @@
+
+from UI.changePassword import Ui_FormChangePssword
+from .LogerinTxt import app_logger
+from PyQt6.QtWidgets import QWidget,QMessageBox
+import json
+import requests
+
+class changePassword(Ui_FormChangePssword, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.ipinfo = None
+            self.pushButton.clicked.connect(self.btn)
+            self.user = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def severpost_meassge(self, postname, postdata, postdata2):
+
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2)
+            res = requests.get(url=ip, timeout=30).json()
+            return res
+        except Exception as e:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+            return ''
+
+    def severpost_data(self, postname, data: dict):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname)
+            data = json.dumps(data)
+            res = requests.post(url=ip, data=data, timeout=30).json()
+            return res
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+
+            return 'fail'
+
+    def btn(self):
+        try:
+            oldpassword = self.lineEditold.text()
+            newpassword = self.lineEditnew.text()
+            newpassword2 = self.lineEditnew2.text()
+            res = self.severpost_meassge("loginTable", "/%s" % self.user, "/%s" % oldpassword)["返回值"]
+            # print(res)
+            if res != "":
+                if newpassword == newpassword2:
+                    dataDic = {'登录名': self.user, '新密码': newpassword, "旧密码": oldpassword}
+                    res = self.severpost_data("changePassword", dataDic)
+                    if res["返回值"] == "ok":
+                        self.close()
+                        QMessageBox.warning(self, "提示", "密码修改成功!!!")
+                    else:
+                        QMessageBox.warning(self, "提示", "密码修改失败,请检查服务器连接状态或联系管理员!!!")
+                else:
+                    QMessageBox.warning(self, "警告", "两次密码输入不同!!!")
+            else:
+                QMessageBox.warning(self, "警告", "原密码错误!!!")
+        except Exception as e:
+            app_logger.log_error(e)

+ 91 - 0
Functions/QtFunctions/checkCalllist.py

@@ -0,0 +1,91 @@
+from PyQt6 import QtCore
+from UI.checkCalllist import Ui_checkCalllist
+from .LogerinTxt import app_logger
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QWidget, QMessageBox, QTableWidgetItem
+import requests
+import datetime
+
+class checkCalllist(Ui_checkCalllist, QWidget):
+    checkCalllist_signal = QtCore.pyqtSignal(str)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.ipinfo = None
+            self.selectedtime = None
+            self.pushButton.clicked.connect(self.btn)
+            # self.show()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def start(self):
+        try:
+            selectedtime_time = str(self.selectedtime) + " 00:00:00"
+            now = datetime.datetime.strptime(selectedtime_time, "%Y%m%d %H:%M:%S")
+            tom = (now + datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
+            yesterday = (now - datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
+            self.label_5.setText("%s/%s" % (str(yesterday)[0:10], str(tom)[0:10]))
+            ip = "http://" + str(self.ipinfo) + "/static/checkCalllist" + "/" + str(self.selectedtime)
+            try:
+                res = requests.get(url=ip, timeout=30).json()
+                # print(res)
+            except Exception as e:
+                # print('登录服务器失败')
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                app_logger.log_error(e)
+
+            self.peopleLabel = ["序号", "电话", "工号", "姓名", "航班号", "拨号次数", "创建时间", "接通时间"]
+            self.tableWidgetFlight.setColumnCount(len(self.peopleLabel))
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setHorizontalHeaderLabels(self.peopleLabel)
+            col = len(self.peopleLabel)
+            diplaylist = res
+            self.tableWidgetFlight.setRowCount(len(diplaylist.keys()))
+            for row in diplaylist.keys():
+                for colNum in range(0, col):
+                    if colNum == 0:
+                        self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(row)))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    else:
+                        self.tableWidgetFlight.setItem(int(row), colNum,QTableWidgetItem(diplaylist[row][self.peopleLabel[colNum]]))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+            self.tableWidgetFlight.resizeColumnsToContents()
+            # self.show()
+        except Exception as e:
+            app_logger.log_error(e)
+    def btn(self):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/checkCalllist" + "/" + str(self.selectedtime)
+            self.res = requests.get(url=ip, timeout=30).json()
+        except Exception as e:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+            self.res = {}
+        col = len(self.peopleLabel)
+        diplaylist = self.res
+        self.tableWidgetFlight.setRowCount(len(diplaylist))
+        rownum = 0
+        for row in diplaylist:
+            for colNum in range(0, col):
+                if colNum == 0:
+                    self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(row)))
+                    self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                else:
+                    self.tableWidgetFlight.setItem(int(row), colNum,QTableWidgetItem(diplaylist[row][self.peopleLabel[colNum]]))
+                    self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+        self.tableWidgetFlight.resizeColumnsToContents()
+
+    def closeEvent(self, event):
+        try:
+            reply = QMessageBox.question(self, '确认', '你确定要退出程序吗?')
+            reply = str(reply)
+            if reply == "StandardButton.Yes":
+                self.checkCalllist_signal.emit(reply)
+                event.ignore()
+            else:
+                event.ignore()
+        except Exception as e:
+            app_logger.log_error(e)

+ 63 - 0
Functions/QtFunctions/checkLoadSingal.py

@@ -0,0 +1,63 @@
+
+from UI.checkLoadSingal import Ui_checkLoadSingal
+from .LogerinTxt import app_logger
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QWidget, QMessageBox, QTableWidgetItem
+import requests
+import datetime
+
+class checkLoadSingal(Ui_checkLoadSingal, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.worknum = None
+            self.name = None
+            self.selectedtime = None
+            self.ipinfo = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def start(self):
+        try:
+            # print(self.worknum)
+            # print(self.name)
+            # print(self.selectedtime)
+            # print(self.ipinfo)
+            self.label_3.setText(self.name)
+            selectedtime_time = str(self.selectedtime) + " 00:00:00"
+            now = datetime.datetime.strptime(selectedtime_time, "%Y%m%d %H:%M:%S")
+            yesterday = (now - datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
+            self.label_5.setText("%s/%s" % (str(yesterday)[0:10], str(now)[0:10]))
+            # print(now)
+            # print(yesterday)
+            ip = "http://" + str(self.ipinfo) + "/static/checkLoadSingal" + "/" + str(self.worknum) + "/" + str(
+                yesterday) + "/" + str(now)
+            try:
+                res = requests.get(url=ip, timeout=30).json()
+                # print(res)
+            except Exception as e:
+                # print('登录服务器失败')
+                app_logger.log_error('登录服务器失败, res获取失败')
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                app_logger.log_error(e)
+
+            self.show()
+            peopleLabel = ["序号", "保障日期", "类型", "机号", "机位", "开始时间", "结束时间"]
+            self.tableWidgetFlight.setColumnCount(len(peopleLabel))
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setHorizontalHeaderLabels(peopleLabel)
+            col = len(peopleLabel)
+            diplaylist = res
+            self.tableWidgetFlight.setRowCount(len(diplaylist.keys()))
+            for row in diplaylist.keys():
+                for colNum in range(0, col):
+                    if colNum == 0:
+                        self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(row)))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    else:
+                        self.tableWidgetFlight.setItem(int(row), colNum,QTableWidgetItem(diplaylist[row][peopleLabel[colNum]]))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+            self.tableWidgetFlight.resizeColumnsToContents()
+        except Exception as e:
+            app_logger.log_error(e)

+ 94 - 0
Functions/QtFunctions/checkLogs.py

@@ -0,0 +1,94 @@
+
+from UI.checkLogs import Ui_checkLogs
+from .LogerinTxt import app_logger
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QWidget,QMessageBox,QTableWidgetItem
+import requests
+import datetime
+
+class checkLogs(Ui_checkLogs, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        self.setupUi(self)
+        self.ipinfo = None
+        self.endtime = (datetime.date.today() + datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
+        self.starttime = (datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
+        self.dateTimeEdit.setDateTime(datetime.datetime.strptime(self.starttime, "%Y-%m-%d %H:%M:%S"))
+        self.dateTimeEdit_2.setDateTime(datetime.datetime.strptime(self.endtime, "%Y-%m-%d %H:%M:%S"))
+        self.lineEdit.textChanged.connect(self.changed)
+        self.peopleLabel = ["序号", "航班编号", "警告信息", "信息状态", "提示信息", "产生时间", "处理人", "处理时间", "变更字段", "显示对象", "提示内容"]
+        self.tableWidgetFlight.setColumnCount(len(self.peopleLabel))
+        self.tableWidgetFlight.verticalHeader().setVisible(False)
+        self.tableWidgetFlight.setHorizontalHeaderLabels(self.peopleLabel)
+        self.pushButton.clicked.connect(self.btn)
+
+    def start(self):
+        self.show()
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/checkLogs/" + self.starttime + "/" + self.endtime
+            self.res = requests.get(url=ip, timeout=30).json()
+        except Exception as e:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+            self.res = {}
+        col = len(self.peopleLabel)
+        diplaylist = self.res
+        self.tableWidgetFlight.setRowCount(len(diplaylist))
+        rownum = 0
+        for row in diplaylist:
+            for colNum in range(0, col):
+                if colNum == 0:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(rownum)))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                else:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(row[colNum])))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignLeft)
+            rownum += 1
+        self.tableWidgetFlight.resizeColumnsToContents()
+
+    def changed(self):
+        res = []
+        for i in self.res:
+            if str(self.lineEdit.text()) in str(i):
+                res.append(i)
+        col = len(self.peopleLabel)
+        diplaylist = res
+        self.tableWidgetFlight.setRowCount(len(diplaylist))
+        rownum = 0
+        for row in diplaylist:
+            for colNum in range(0, col):
+                if colNum == 0:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(rownum)))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                else:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(row[colNum])))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignLeft)
+            rownum += 1
+        self.tableWidgetFlight.resizeColumnsToContents()
+
+    def btn(self):
+        self.starttime = self.dateTimeEdit.text()
+        self.endtime = self.dateTimeEdit_2.text()
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/checkLogs/" + self.starttime + "/" + self.endtime
+            self.res = requests.get(url=ip, timeout=30).json()
+        except Exception as e :
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+            self.res = {}
+        col = len(self.peopleLabel)
+        diplaylist = self.res
+        self.tableWidgetFlight.setRowCount(len(diplaylist))
+        rownum = 0
+        for row in diplaylist:
+            for colNum in range(0, col):
+                if colNum == 0:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(rownum)))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                else:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(row[colNum])))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignLeft)
+            rownum += 1
+        self.tableWidgetFlight.resizeColumnsToContents()

+ 147 - 0
Functions/QtFunctions/findServerWidget.py

@@ -0,0 +1,147 @@
+from PyQt6 import QtCore
+from PyQt6.QtCore import QThreadPool
+from UI.findserver import Ui_FormLink
+from UI.mapWeb import Ui_FormMapWeb
+from PyQt6.QtCore import Qt
+from PyQt6.QtGui import QColor,QFont
+from PyQt6.QtWidgets import QWidget,QAbstractItemView,QMessageBox, QTableWidgetItem
+from .Worker2 import Worker2
+from .LogerinTxt import app_logger
+import os
+import requests
+from Functions import serverFind
+
+
+
+class mapWebWidget(Ui_FormMapWeb, QWidget):
+    def __init__(self):
+        super().__init__()
+        self.setupUi(self)
+        # self.webEngineView.load(QUrl('http://192.168.2.22:6010/'))
+
+
+class findServerWidget(Ui_FormLink, QWidget):
+    selectServer_signal = QtCore.pyqtSignal(str)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.threadpool = QThreadPool()
+            self.setupUi(self)
+            self.serverList = []
+            self.tableWidget.setColumnCount(2)
+            self.tableWidget.setHorizontalHeaderLabels(['服务器地址', '备注'])
+            self.threadWork_findServer()
+            self.tableWidget.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
+            self.tableWidget.cellDoubleClicked.connect(self.selectServer)
+            self.pushButton_manset.clicked.connect(self.setipinfo)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def setipinfo(self):
+        try:
+            self.ipinfo = ""
+            if os.path.exists("server.code") is True:
+                read_path = os.getcwd() + "\\server.code"
+                with open(read_path, "r", encoding="utf-8") as f2:
+                    rember_2 = f2.read()
+                    if ';' in rember_2:
+                        self.ipinfo = rember_2.split(';')[0]
+                        self.ipinfo1 = rember_2.split(':')[0]
+                        ip = "http://" + str(self.ipinfo) + "/static/linktest"
+                        try:
+                            res = requests.get(url=ip, timeout=30)
+                            self.selectServer_signal.emit(self.ipinfo1)
+                            if res.text == "ok":
+                                QMessageBox.warning(self, "提示", "服务器人工配置成功!")
+                            else:
+                                QMessageBox.warning(self, "提示", "服务器人工配置失败,请检查配置文件或联系管理员检查服务器!")
+                        except Exception as e:
+                            QMessageBox.warning(self, "提示", "服务器人工配置失败,请联系管理员检查服务器!")
+                            app_logger.log_error(e)
+                    else:
+                        QMessageBox.warning(self, "提示", "服务器人工配置失败,请检查配置文件或联系管理员检查服务器!")
+            else:
+                QMessageBox.warning(self, "提示", "服务器人工配置失败,系统缺少配置文件!")
+        except Exception as e:
+            app_logger.log_error(e)
+    def setipinfo2(self):
+        try:
+            self.ipinfo = ""
+            if os.path.exists("server.code") is True:
+                read_path = os.getcwd() + "\\server.code"
+                with open(read_path, "r", encoding="utf-8") as f2:
+                    rember_2 = f2.read()
+                    if ';' in rember_2:
+                        self.ipinfo = rember_2.split(';')[0]
+                        self.ipinfo1 = rember_2.split(':')[0]
+                        ip = "http://" + str(self.ipinfo) + "/static/linktest"
+                        try:
+                            res = requests.get(url=ip, timeout=30)
+                            self.selectServer_signal.emit(self.ipinfo1)
+                            if res.text == "ok":
+                                QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置成功!")
+                            else:
+                                QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置成功,服务器连接失败,请检查配置文件或联系管理员检查服务器!")
+                        except Exception as e:
+                            QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置成功,服务器连接失败,请检查配置文件或联系管理员检查服务器!")
+                            app_logger.log_error(e)
+                    else:
+                        QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置失败,请检查配置文件或联系管理员检查服务器!")
+            else:
+                QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置失败,系统缺少配置文件!")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def selectServer(self, row, col):
+        # print(self.tableWidget.item(row,col).text())
+        try:
+            self.selectServer_signal.emit(self.tableWidget.item(row, 0).text())
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def threadWork_findServer(self):
+        try:
+            worker = Worker2(self.fn)
+            worker.signals.result.connect(self.print_out_result)
+            self.threadpool.start(worker)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def fn(self):
+        try:
+            serverList = serverFind.findServer()
+            return serverList
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def print_out_result(self, dlist):
+        try:
+            self.serverList = dlist
+            # print(self.serverList)
+            if self.serverList == [] or self.serverList ==None:
+                self.setipinfo2()
+            else:
+                self.tableWidget.setRowCount(len(self.serverList))
+                rowNum = 0
+                for row in self.serverList:
+                    colNum = 0
+                    for col in row:
+                        self.tableWidget.setItem(rowNum, colNum, QTableWidgetItem(col))
+                        self.tableWidget.item(rowNum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        if "测试服务器" in row[1]:
+                            self.tableWidget.item(rowNum, colNum).setForeground(QColor('red'))
+                        elif "主机服务器" in row[1]:
+                            self.tableWidget.item(rowNum, colNum).setForeground(QColor('green'))
+                            font = QFont()
+                            # font.setFamily("SimHei")
+                            font.setFamily("Microsoft YaHei")
+                            font.setBold(True)
+                            self.tableWidget.item(rowNum, colNum).setFont(font)
+                        else:
+                            self.tableWidget.item(rowNum, colNum).setForeground(QColor('blue'))
+                        colNum += 1
+                    rowNum += 1
+                self.tableWidget.resizeColumnsToContents()
+        except Exception as e:
+            app_logger.log_error(e)

+ 152 - 0
Functions/QtFunctions/handoverFlightWidget.py

@@ -0,0 +1,152 @@
+
+from .LogerinTxt import app_logger
+from UI.handoverFlight import Ui_handoverFlight
+from PyQt6 import QtCore
+from PyQt6.QtCore import Qt
+from PyQt6.QtGui import QColor
+from PyQt6.QtWidgets import QWidget,QMessageBox, QTableWidgetItem
+import json
+import requests
+
+
+
+class handoverFlightWidget(Ui_handoverFlight, QWidget):
+    handoverFlight_signal = QtCore.pyqtSignal(str)
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.user = None
+            self.ipinfo = None
+            self.selectedtime=None
+            self.Allflight = {}
+        except Exception as e:
+            app_logger.log_error(e)
+    def severpostData_nomeassge(self, postname, data: dict):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname)
+            data = json.dumps(data)
+            res = requests.post(url=ip, data=data, timeout=30).json()
+            return res
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+    def btn(self):
+        try:
+            list = []
+            sts=[]
+            list_cz = []
+            sts_cz = []
+            rows=[]
+            for row in range(self.tableWidgetFlight.rowCount()):
+                item = self.tableWidgetFlight.item(row, 0)
+                if item and item.checkState() == Qt.CheckState.Checked and self.tableWidgetFlight.item(row, 8).text() != "":
+                    name = self.tableWidgetFlight.item(row, 10).text()
+                    rows.append(row)
+                    list.append(name)
+                    sts.append("1")
+            data = {"taskid": ','.join(list),
+                    "sts": ','.join(sts)}
+
+            if list !=[]:
+                res = self.severpostData_nomeassge("handoverflight", data=data)["返回值"]
+                if res == "ok" :
+                    QMessageBox.warning(self, "提示", f"交班提交成功!请核对附加消息交班航班!")
+                    for ii in rows:
+                        try:
+                            if "【交班航班】" not in self.tableWidgetFlight.item(ii, 11).text() and self.tableWidgetFlight.item(ii, 8).text() != "":
+                                flightid = self.tableWidgetFlight.item(ii, 12).text()
+                                flighttype = self.tableWidgetFlight.item(ii, 7).text()
+                                fjxx = "【交班航班】" + self.tableWidgetFlight.item(ii, 11).text()
+                                ip = "http://" + str(self.ipinfo) + "/static/updateEidteItem/" + "%s/" % str(fjxx) + "%s/" % str(flightid) + "A/%s/" % str(flighttype) + "%s" % str(self.selectedtime)
+                                try:
+                                    requests.get(url=ip, timeout=30).json()
+                                    self.handoverFlight_signal.emit("1")
+                                except Exception as e:
+                                    QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                    app_logger.log_error(e)
+                        except Exception as e:
+                            app_logger.log_error(e)
+
+                    self.close()
+                else:
+                    QMessageBox.warning(self, "警告", "航班交接失败,请重新尝试")
+
+            else:
+                QMessageBox.warning(self, "警告", "请选择要交接的航班!未进行派工的航班无法进行交接班")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def start(self):
+        try:
+            self.show()
+            peopleLabel = ["选择","序号", "机号","航班号", "预达", "计飞", "机位", "类型", "维修人员","放行", "任务编号","附加消息","航班编号" ]
+            #tableWidgetDispalydata = self.Allflight
+            tableWidgetDispalydata={}
+            for key, values in self.Allflight.items():
+                # 检查所有字段是否包含关键词
+                if(('3U' in values["9"] or "CSC" in values["9"]) and values["49"] != "" and "【交班航班】" not in values["30"]):
+                    tableWidgetDispalydata[key] = values
+            self.tableWidgetFlight.setColumnCount(len(peopleLabel))
+            self.tableWidgetFlight.setHorizontalHeaderLabels(peopleLabel)
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setRowCount(len(tableWidgetDispalydata))
+            i = 0
+            for row in tableWidgetDispalydata.keys():
+                if ("3U" in tableWidgetDispalydata[row][str(9)] or "CSC" in tableWidgetDispalydata[row][str(9)]) and \
+                        tableWidgetDispalydata[row][str(49)] != "" and "【交班航班】" not in tableWidgetDispalydata[row][str(30)]:
+                    for colNum in range(0, 13):
+                        if colNum == 0:
+                            checkbox = QTableWidgetItem()
+                            checkbox.setCheckState(Qt.CheckState.Unchecked)
+                            self.tableWidgetFlight.setItem(i, colNum, checkbox)
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 1:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(i+1)))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 2:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(1)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 3:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(9)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 4:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(13)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 5:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(15)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+
+                        elif colNum == 6:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(8)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 7:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(19)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 8:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(49)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+
+                        elif colNum == 9:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(51)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 10:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(53)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 12:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(53)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 11:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(30)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        if (i+1)%2 ==0:
+                            self.tableWidgetFlight.item(i, colNum).setBackground(QColor('#DDE2E3'))
+                    i += 1
+
+
+            self.tableWidgetFlight.resizeColumnsToContents()
+            self.tableWidgetFlight.setColumnHidden(12, True)
+            self.tableWidgetFlight.setColumnHidden(10, True)
+        except Exception as e:
+            app_logger.log_error(e)

+ 57 - 0
Functions/QtFunctions/ipcall.py

@@ -0,0 +1,57 @@
+
+from selenium import webdriver
+from selenium.webdriver.chrome.options import Options
+
+
+class searchinfo(object):
+    def __init__(self):
+        self.token1 = None
+
+    def start(self,ip):
+        self.token1=self.login(ip)
+        return self.token1
+
+    def login(self,ip):
+        try:
+            #return "test" + str(datetime.datetime.now())
+            chrome_options = Options()
+            chrome_options.add_argument("--headless")
+            chrome_options.add_experimental_option("detach",True)
+            chrome_options.add_argument("window-size=1920x1080")
+            chrome_options.add_argument("--start-maximized")
+            chrome_options.add_argument('--disable-gpu')  # 如果不加这个选项,有时定位会出现问题
+            browser = webdriver.Chrome(
+                executable_path=r'D:\flightinfo\Google\Chrome\Application\chromedriver.exe',
+                options=chrome_options)
+            browser.set_window_size(width=2000,height=300)
+            browser.get("http://%s/"%ip)
+            browser.find_element_by_id("username").send_keys("adminadmin")
+            browser.find_element_by_id("password").send_keys("adminadmin")
+            browser.find_element_by_id("logonButton").click()
+            # print(browser.get_cookies())
+            for cookie in browser.get_cookies():
+                #print(str(browser.get_cookies()))
+                if "keepOnLine" not in str(browser.get_cookies()):
+                    browser.get("http://%s/" % ip)
+                    browser.switch_to.frame("title_top")
+                    browser.find_element_by_id("enableSessionTimeout").click()
+                if "keepOnLine" in cookie.values() and cookie["value"] == "false":
+                    browser.get("http://%s/" % ip)
+                    browser.switch_to.frame("title_top")
+                    browser.find_element_by_id("enableSessionTimeout").click()
+            for cookie in browser.get_cookies():
+                #print(str(browser.get_cookies()))
+                if "auth" in cookie.values():
+                    return "auth=" + cookie["value"] + ";CUR_LANG=cn;" + "CTCPgSz=10;" + "keepOnLine=true"
+                else:
+                    return "fail"
+        except Exception:
+            return "fail"
+
+        #print(str(browser.get_cookies()))
+
+
+if __name__ == '__main__':
+    fl = searchinfo()
+
+

+ 31 - 0
Functions/QtFunctions/localipset.py

@@ -0,0 +1,31 @@
+
+from UI.addloaclip import Ui_Addloacalip
+from PyQt6 import QtCore
+from .LogerinTxt import app_logger
+from PyQt6.QtWidgets import QWidget
+
+
+class localipset(Ui_Addloacalip, QWidget):
+    localipset_signal = QtCore.pyqtSignal(str)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.localip1 = None
+            self.localip = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def start(self):
+        self.show()
+        self.lineEditIP.setText(self.localip)
+
+    def btn(self):
+        try:
+            self.localip1 = self.lineEditIP.text()
+            self.localipset_signal.emit(self.localip1)
+            self.close()
+        except Exception as e:
+            app_logger.log_error(e)

+ 64 - 0
Functions/QtFunctions/searchpeople_get.py

@@ -0,0 +1,64 @@
+
+from UI.searchpeople_get import Ui_searchpeople_get
+from PyQt6 import QtCore
+from .LogerinTxt import app_logger
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QWidget, QTableWidgetItem
+
+class searchpeople_get(Ui_searchpeople_get, QWidget):
+    searchpeoplelist_signal = QtCore.pyqtSignal(list)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.searchpeoplelist = None
+            self.ipinfo = None
+            self.Allpeoplelist = {}
+            self.selectedtime = None
+            self.selectedbc = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def btn(self):
+        try:
+            searchpeoplelist = []
+            for row in range(self.tableWidgetFlight.rowCount()):
+                item = self.tableWidgetFlight.item(row, 2)
+                if item is not None and item.checkState() == Qt.CheckState.Checked:
+                    name = self.tableWidgetFlight.item(row, 1).text()
+                    searchpeoplelist.append(name)
+            # print(searchpeoplelist)
+            self.searchpeoplelist = searchpeoplelist
+            self.searchpeoplelist_signal.emit(self.searchpeoplelist)
+            self.close()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def start(self):
+        try:
+            self.show()
+            peopleLabel = ["序号", "姓名", "选择"]
+            diplaylist = self.Allpeoplelist
+            self.tableWidgetFlight.setColumnCount(len(peopleLabel))
+            self.tableWidgetFlight.setHorizontalHeaderLabels(peopleLabel)
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setRowCount(len(diplaylist.keys()))
+
+            for row in diplaylist.keys():
+                for colNum in range(0, 3):
+                    if colNum == 0:
+                        self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(row)))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    elif colNum == 1:
+                        self.tableWidgetFlight.setItem(int(row), colNum,QTableWidgetItem(diplaylist[row][peopleLabel[colNum]]))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    elif colNum == 2:
+                        checkbox = QTableWidgetItem()
+                        checkbox.setCheckState(Qt.CheckState.Unchecked)
+                        self.tableWidgetFlight.setItem(int(row), colNum, checkbox)
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+            self.tableWidgetFlight.resizeColumnsToContents()
+        except Exception as e:
+            app_logger.log_error(e)

+ 0 - 0
Functions/QtFunctions/setPhone.py


+ 33 - 0
Functions/QtFunctions/setlocalip.py

@@ -0,0 +1,33 @@
+from .LogerinTxt import app_logger
+from Functions.QtFunctions import ipcall
+from PyQt6.QtCore import QObject
+from PyQt6 import QtCore
+
+class setlocalip(QObject):
+    localipupdate = QtCore.pyqtSignal(str)
+
+    def __init__(self, ip, thread):
+        super().__init__()
+        self.ip = ip
+        self.thread = thread
+
+    def run(self):
+        # print("jjingruy1")
+        try:
+            if self.ip != None:
+                try:
+                    localcalltry = ipcall.searchinfo()
+                    self.localtoken = localcalltry.start(self.ip)
+                    # print("本地测试print(self.localtoken)")
+                    # print(self.localtoken)
+                except Exception as e:
+                    self.localtoken = None
+                    self.localtoken = None
+                    app_logger.log_error(e)
+            else:
+                self.localtoken = None
+            self.localipupdate.emit(self.localtoken)
+            self.thread.quit()
+        except Exception as e:
+            app_logger.log_error(e)
+            self.thread.quit()

+ 404 - 0
Functions/QtFunctions/sortdisplaySever.py

@@ -0,0 +1,404 @@
+import requests
+import datetime
+from PyQt6.QtCore import QObject
+from .LogerinTxt import app_logger
+from PyQt6 import QtCore
+
+class sortdisplaySever(QObject):
+    sortupdate = QtCore.pyqtSignal(str, dict, list, str, str)
+
+    def __init__(self, name, ip, selectedtime, text, displayMode, selectedbc, displayselect, thread):
+        super().__init__()
+        self.funcName = name
+        self.ipinfo = ip
+        self.selectedtime = selectedtime
+        self.text = text
+        self.displayMode = displayMode
+        self.selectedbc = selectedbc
+        self.displayselect_mode = displayselect
+        self.thread = thread
+        nowDay = datetime.datetime.now().strftime("%Y%m%d")
+        tomorr =(datetime.date.today() + datetime.timedelta(days=1)).strftime("%Y%m%d")
+        yester =(datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y%m%d")
+        if self.selectedtime == nowDay:
+            self.date = "2"
+        elif self.selectedtime == tomorr:
+            self.date = "3"
+        elif self.selectedtime == yester:
+            self.date = "1"
+        else:
+            self.date = "4"
+
+    def run(self):
+        try:
+            list = []
+            if self.funcName == "sortTableWidgetDispaly":
+                #print("1")
+                self.sortTableWidgetDispaly()
+                self.sortupdate.emit("sortTableWidgetDispaly", self.sorttableWidgetDispalydata, list, self.seversts,self.displayMode)
+                self.sortupdate.emit("sortTableWidgetDispalyALL", self.DispalydataAll, list, self.seversts,self.displayMode)
+            if self.funcName == "sortTableWidgetDispalyALL":
+                #print("2")
+                self.sortTableWidgetDispalyALL()
+                self.sortupdate.emit("sortTableWidgetDispalyALL", self.sorttableWidgetDispalydata, list, self.seversts,self.displayMode)
+            elif self.funcName == "SearchsortTableWidgetDispaly":
+                #print("3")
+                self.SearchsortTableWidgetDispaly()
+                self.sortupdate.emit("SearchsortTableWidgetDispaly", self.sorttableWidgetDispalydata, list,self.seversts,self.displayMode)
+            elif self.funcName == "sorttableWidgetDisplayChange":
+                #print("4")
+                self.sorttableWidgetDisplayChange()
+                self.sortupdate.emit("sorttableWidgetDisplayChange", self.sortlogchange, list, self.seversts,self.displayMode)
+            elif self.funcName == "sorttableWidgetPeopleDisplay":
+                self.sorttableWidgetPeopleDisplay()
+                self.sortupdate.emit("sorttableWidgetPeopleDisplay", self.sortdiplaylist, self.peopleOnJob,self.seversts, self.displayMode)
+            elif self.funcName == "sorttableWidgetLOGDispaly":
+                self.sorttableWidgetLOGDispaly()
+                self.sortupdate.emit("sorttableWidgetLOGDispaly", self.sortlog, list, self.seversts, self.displayMode)
+            elif self.funcName == "sorttableWidgetPHONEDispaly":
+                self.sorttableWidgetPHONEDispaly()
+                self.sortupdate.emit("sorttableWidgetPHONEDispaly", self.sorttableWidgetPHONEDispalydata, list,self.seversts, "")
+            self.thread.quit()
+        except Exception as e:
+            app_logger.log_error(e)
+            self.thread.quit()
+
+    def severpost_nomeassge(self, postname, postdata, postdata2, postdata3):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2) + str(postdata3)
+            try:
+                res = requests.get(url=ip, timeout=30).json()
+                self.seversts = "1"
+                return res
+            except Exception as e:
+                app_logger.log_error(e)
+                app_logger.log_error("重大bug")
+                app_logger.log_error(ip)
+                self.seversts = "0"
+                return []
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sorttableWidgetPHONEDispaly(self):
+        try:
+            sorttableWidgetPHONEDispalydataall = self.severpost_nomeassge("getphonelist", "", "", "")
+            self.sorttableWidgetPHONEDispalydata = {}
+            num = 0
+            if sorttableWidgetPHONEDispalydataall != None:
+                if self.text != "":
+                    for i in sorttableWidgetPHONEDispalydataall.keys():
+                        if str.lower(str(self.text)) in str(sorttableWidgetPHONEDispalydataall[i]):
+                            self.sorttableWidgetPHONEDispalydata[str(num)] = sorttableWidgetPHONEDispalydataall[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetPHONEDispalydata = sorttableWidgetPHONEDispalydataall
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def checkall(self, datas, text):
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if datas[i]["109"] != text:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+
+    def checkStrsingle(self,datas, text, text2): #单一条件筛选
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(text) in str(datas[i]) and datas[i]["109"] != text2:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] != text1:
+                    if str(datas[i]["8"])[0] == text2 and str(datas[i]["8"])[0] == text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll2(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] != text1:
+                    if str(datas[i]["8"])[0] != text2 and str(datas[i]["8"])[0] != text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll3(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] == text1:
+                    if str(datas[i]["8"])[0] == text2 and str(datas[i]["8"])[0] == text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll4(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] == text1:
+                    if str(datas[i]["8"])[0] != text2 and str(datas[i]["8"])[0] != text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+
+    def sortTableWidgetDispaly(self):
+        try:
+            text = self.text
+            Partdisplay = self.displayselect_mode  # 不显示起飞航班
+            # print(Partdisplay)
+            tableWidgetDispalydataAll = {}
+            if self.displayMode == "A" and (self.selectedbc == "0" or self.date=="4"):
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispaly", "/%s" % self.selectedtime,"/%s"%self.date,"")
+            elif self.displayMode == "B"and (self.selectedbc == "0" or self.date=="4"):
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispaly2", "/%s" % self.selectedtime,"/%s"%self.date,"")
+            elif self.displayMode == "A" and self.selectedbc == "1":
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispalyRead","/%s"%self.date,"","")
+            elif self.displayMode == "B"and self.selectedbc == "1":
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispalyRead2","/%s"%self.date,"","")
+            self.DispalydataAll=tableWidgetDispalydataAll
+            self.sorttableWidgetDispalydata = {}
+            num = 0
+            if tableWidgetDispalydataAll != None:
+                if text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata=self.checkStrsingle(tableWidgetDispalydataAll, text, "")
+                elif text == "T1" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "2", "2", "2")
+                elif text == "T2T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "2", "1")
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6"  and text != "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "4")
+                elif text == "T1" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "2", "1")
+                elif text == "" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkall(tableWidgetDispalydataAll, "4")
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "1")
+                elif text == "T1" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "2", "1")
+                elif text == "" and Partdisplay == "3":
+                    for i in tableWidgetDispalydataAll.keys():
+                        if tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetDispalydata = tableWidgetDispalydataAll
+
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sortTableWidgetDispalyALL(self):
+        try:
+            if self.displayMode == "A" and (self.selectedbc == "0" or self.date=="4"):
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispaly", "/%s" % self.selectedtime,"/%s"%self.date,"")
+            elif self.displayMode == "B"and (self.selectedbc == "0" or self.date=="4"):
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispaly2", "/%s" % self.selectedtime,"/%s"%self.date,"")
+            elif self.displayMode == "A" and self.selectedbc == "1":
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispalyRead","/%s"%self.date,"","")
+            elif self.displayMode == "B"and self.selectedbc == "1":
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispalyRead2","/%s"%self.date,"","")
+        except Exception as e:
+            app_logger.log_error(e)
+
+
+
+    def SearchsortTableWidgetDispaly(self):
+        try:
+            text = self.text
+            self.seversts = "1"
+            Partdisplay = self.displayselect_mode  # 不显示起飞航班
+            # print(Partdisplay)
+            tableWidgetDispalydataAll = self.selectedbc
+
+            self.sorttableWidgetDispalydata = {}
+            num = 0
+            if tableWidgetDispalydataAll != None:
+                if text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6"and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "")
+                elif text == "T1" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "2", "1")
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "4")
+                elif text == "T1" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "2", "1")
+                elif text == "" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkall(tableWidgetDispalydataAll,  "4")
+
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "3":
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]) and tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "2", "1")
+                elif text == "" and Partdisplay == "3":
+                    for i in tableWidgetDispalydataAll.keys():
+                        if tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetDispalydata = tableWidgetDispalydataAll
+        except Exception as e:
+            app_logger.log_error(e)
+
+
+    def sorttableWidgetDisplayChange(self):
+        try:
+            text = self.text
+            logall = self.severpost_nomeassge("tableWidgetDisplayChange", "/%s" % self.selectedtime, "", "")
+            self.sortlogchange = {}
+            num = 0
+            if text != "":
+                for i in logall.keys():
+                    if str(text) in str(logall[i]):
+                        self.sortlogchange[str(num)] = logall[i]
+                        num += 1
+            else:
+                self.sortlogchange = logall
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sorttableWidgetPeopleDisplay(self):
+        try:
+            if self.displayselect_mode == "" or self.displayselect_mode == []:
+                text = self.text
+                self.peopleOnJob = [""]
+                bc = self.selectedbc
+                nowDaystr = self.selectedtime  # 选择的日期
+                diplaylistall = self.severpost_nomeassge("qtPeopleLoad", "/%s" % nowDaystr, "/%s" % bc, "")
+                self.sortdiplaylist = {}
+                num = 0
+                if text != "":
+                    for i in diplaylistall.keys():
+                        if str(text) in str(diplaylistall[i]):
+                            self.sortdiplaylist[str(num)] = diplaylistall[i]
+                            num += 1
+                else:
+                    self.sortdiplaylist = diplaylistall
+                for i in self.sortdiplaylist.keys():
+                    self.peopleOnJob.append(self.sortdiplaylist[i]["姓名"])
+            else:
+                names = self.displayselect_mode
+                text = self.text
+                self.peopleOnJob = [""]
+                bc = self.selectedbc
+                nowDaystr = self.selectedtime  # 选择的日期
+                diplaylistall = self.severpost_nomeassge("qtPeopleLoad", "/%s" % nowDaystr, "/%s" % bc, "")
+                self.sortdiplaylist = {}
+                num = 0
+                if text != "":
+                    for i in diplaylistall.keys():
+                        if str(text) in str(diplaylistall[i]):
+                            for name in names:
+                                if str(name) in str(diplaylistall[i]):
+                                    self.sortdiplaylist[str(num)] = diplaylistall[i]
+                                    num += 1
+                else:
+                    for i in diplaylistall.keys():
+                        for name in names:
+                            if str(name) in str(diplaylistall[i]):
+                                self.sortdiplaylist[str(num)] = diplaylistall[i]
+                                num += 1
+                for i in self.sortdiplaylist.keys():
+                    self.peopleOnJob.append(self.sortdiplaylist[i]["姓名"])
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sorttableWidgetLOGDispaly(self):
+        try:
+            text = self.text
+            logall = self.severpost_nomeassge("tableWidgetLOGDispaly", "/%s" % self.selectedtime, "", "")
+            self.sortlog = {}
+            num = 0
+            if text != "":
+                for i in logall.keys():
+                    if str(text) in str(logall[i]):
+                        self.sortlog[str(num)] = logall[i]
+                        num += 1
+            else:
+                self.sortlog = logall
+        except Exception as e:
+            app_logger.log_error(e)

+ 521 - 0
Functions/QtFunctions/workloadinfos.py

@@ -0,0 +1,521 @@
+
+from UI.workloadinfos import Ui_workloadinfos
+from .LogerinTxt import app_logger
+from PyQt6.QtCore import Qt,QTimer
+from PyQt6.QtWidgets import QWidget,QMessageBox,QTableWidgetItem,QFileDialog,QStyledItemDelegate,QStyle,QMenu
+from PyQt6 import QtCore
+from PyQt6.QtGui import QTextDocument, QTextCursor, QTextCharFormat, QColor, QTextOption, QPalette
+import requests
+import os
+import json
+import openpyxl
+import datetime
+import time
+
+filename = "D:\\flightinfo\\logs\\peoples.json"
+class Workloadinfos(Ui_workloadinfos, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        self.setupUi(self)
+        self.ipinfo = None
+        self.user = None
+        self.selectedbc=None
+        self.selectedtime=None
+        self.doubleclickLock = 0
+        self.headerLabel = ["序号", "交", "姓名", "备", "角色", "备", "授权", "备", "工作量", "备", "当前工作量", "备", "总工作量", "备",
+                            "总工时", "备", "当前工作", "备", "修正工时", "备", "修正详情", "备注信息", "备", "备", "备", "备", "备", "备",
+                            "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"]
+        self.tableWidgetWorkload.setSortingEnabled(True)
+        self.tableWidgetWorkload.setColumnCount(len(self.headerLabel))
+        self.tableWidgetWorkload.verticalHeader().setVisible(False)
+        self.tableWidgetWorkload.setHorizontalHeaderLabels(self.headerLabel)
+        self.refresh.clicked.connect(self.refreshnow)
+        self.changeupdate.clicked.connect(self.update)
+        self.clear.clicked.connect(self.clearselect)
+        self.autoupdateMode=False
+        self.autoupdate_check.stateChanged.connect(self.on_checkbox_changed)
+        # 保存当前排序状态
+        self.current_sort_column = -1
+        self.current_sort_order = Qt.SortOrder.AscendingOrder
+        self.searchinfo.returnPressed.connect(self.search_table)
+        self.searchinfo.textChanged.connect(self.search_table_empty)
+        self.selectall.clicked.connect(self.selectall_funciton)
+        self.load_pushbutton.clicked.connect(self.get_load)
+        self.tableWidgetWorkload.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
+        self.tableWidgetWorkload.customContextMenuRequested.connect(self.generateMenu)
+        self.tableWidgetWorkload.horizontalHeader().sortIndicatorChanged.connect(self.on_sort_changed)
+        self.changeupdate.clicked.connect(self.changeupdate_Function)
+        self.tableWidgetWorkload.cellDoubleClicked.connect(self.itemclick2)
+
+
+    def start(self):
+        self.show()
+        self.peopleresold = self.read_json_to_list()
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/getPglistInDatabase"
+            self.peopleres = requests.get(url=ip, timeout=30).json()['返回值']
+            #print(self.peopleres)
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+            self.peopleres = []
+        self.peopleselect=self.peopleresold if self.peopleresold else self.peopleres
+        self.comboBox_peoplelist.addItems(self.peopleres)
+        self.set_initial_selection()
+        self.refreshnow()
+        self.serchTimer = QTimer()
+        self.serchTimer.start(120 * 1000)
+        self.serchTimer.timeout.connect(self.autoupdate)
+
+    def itemclick2(self, row, column):
+        try:
+            # print(self.doubleclickLock)
+            if column == 21 and self.doubleclickLock == 0:
+                self.doubleclickLockUpdate=1
+                self.clickrow = row
+                self.clickcolumn = column
+                self.olditem = self.tableWidgetWorkload.item(row, column).text()
+                item = self.tableWidgetWorkload.item(row, column)
+                # 如果单元格对象不存在,则返回默认的背景色
+                if not item:
+                    self.color=self.tableWidgetWorkload.palette().color(QPalette.Base)
+                else:
+                    # 获取并返回单元格的背景色
+                    self.color = item.background()
+                self.tableWidgetWorkload.cellChanged.connect(self.cellchanged)
+            else:
+                self.doubleclickLockUpdate = 0
+        except Exception as e:
+            app_logger.log_error(e)
+    def cellchanged(self, row, column):
+        if self.clickrow == row and self.clickcolumn == column :
+            self.clickrow = None
+            self.clickcolumn = None
+            try:
+                self.doubleclickLock = 1
+                self.newitem = self.tableWidgetWorkload.item(row, column).text().replace("\"","*").replace("\\",";").replace("\'","*").replace("/","、").replace("#","*")
+                name = self.tableWidgetWorkload.item(row, 2).text()
+                if column == 21 and self.olditem != self.newitem:
+                    item = self.tableWidgetWorkload.item(row, column)
+                    if item.text() != "":
+                        text = item.text().replace("\"", "*").replace("\\", ";").replace("\'", "*").replace("/", "、").replace("#", "*")
+                    else:
+                        text = "清空项目12345678987654321"
+                    ip = "http://" + str(self.ipinfo) + "/static/updateNoteItem/" + "%s/" % str(text) + "%s" % str(name)
+                    # print(ip)
+                    ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "排班辅助%s的备注模块:由%s变更为%s/" % (name,self.olditem, self.newitem) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                    try:
+                        requests.get(url=ip, timeout=30).json()
+                        requests.get(url=ip2, timeout=30).json()
+                        self.tableWidgetWorkload.setItem(int(row), column, QTableWidgetItem(str(self.newitem)))
+                        self.tableWidgetWorkload.item(int(row), column).setBackground(QColor("yellow"))
+                        self.tableWidgetWorkload.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    except Exception as e:
+                        app_logger.log_error(e)
+                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                self.doubleclickLockUpdate = 0
+                self.doubleclickLock = 0
+                self.tableWidgetWorkload.cellChanged.disconnect(self.cellchanged)
+            except Exception as e:
+                self.doubleclickLockUpdate = 0
+                self.clickrow = None
+                self.clickcolumn = None
+                app_logger.log_error(e)
+                try:
+                    self.tableWidgetWorkload.cellChanged.disconnect(self.cellchanged)
+                except:
+                    pass
+                self.tableWidgetWorkload.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                self.tableWidgetWorkload.item(int(row), column).setBackground(QColor(self.color))
+                self.tableWidgetWorkload.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                app_logger.log_error(e)
+                self.doubleclickLock = 0
+
+
+    def changeupdate_Function(self):
+        day=datetime.datetime.now().strftime("%Y%m%d")
+        info = self.changeinfo.text().strip().lower()
+        people = self.changepeople.text().strip()
+        costtime = self.changevalue.text().strip().lower()
+        try:
+            costtime = float(costtime)
+            if info and people and costtime:
+                timestr=str(int(time.time()*1000))
+                id= f"人工修正-{info}-{timestr}-{people}"
+                data0={
+                    "id": id,
+                    'people':people,
+                    'costtime':costtime,
+                    'info':info,
+                    'day':day
+                }
+                try:
+                    ip = "http://" + str(self.ipinfo) + "/static/manchangecosttime"
+                    data = json.dumps(data0)
+                    res = requests.post(url=ip, data=data, timeout=30).json()
+                    if res["返回值"] == "ok":
+                        QMessageBox.information(self, "提示", "操作成功!")
+                        self.refreshnow()
+                    else:
+                        QMessageBox.warning(self, "提示", "操作失败!")
+                except Exception as e:
+                    QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                    app_logger.log_error(e)
+
+            else:
+                QMessageBox.warning(self,"警告", "请填写完整信息!!!")
+        except ValueError:
+            QMessageBox.warning(self,"警告", "工时内请填写数字!!!")
+
+    def generateMenu(self, pos):
+        try:
+            nowDay = datetime.date.today().strftime("%Y%m%d")
+            a_str = nowDay + " 09:00:00"
+            b_str = nowDay + " 20:30:00"
+            a = datetime.datetime.strptime(a_str, "%Y%m%d %H:%M:%S")
+            b = datetime.datetime.strptime(b_str, "%Y%m%d %H:%M:%S")
+            nowtime = datetime.datetime.now()
+            passday = (nowtime - datetime.timedelta(days=4)).strftime("%Y%m%d")
+            if a < nowtime < b:
+                for i in self.tableWidgetWorkload.selectionModel().selection().indexes():
+                    menu = QMenu()
+                    item = menu.addAction('上个班未交班')
+                    item2 = menu.addAction('上个班交班')
+
+                    screenPos = self.tableWidgetWorkload.mapToGlobal(pos)
+                    action = menu.exec(screenPos)
+                    rowIndex = i.row()
+                    taskids = self.tableWidgetWorkload.item(rowIndex, 3).text()
+                    handstsNow=self.tableWidgetWorkload.item(rowIndex, 1).text()
+                    name=self.tableWidgetWorkload.item(rowIndex, 2).text()
+                    data={
+                        "ids":taskids,
+                        "type":handstsNow,
+                        "name":name,
+                        "date":passday,
+                    }
+                    if action == item:
+                        if handstsNow == "Y":
+                            self.handoverflight(data)
+                            self.refreshnow()
+                        else:
+                            QMessageBox.warning(self, "警告", f"未查询到{name}交班记录,无需取消交班")
+                        return
+                    elif action == item2:
+                        if handstsNow != "Y":
+                            self.handoverflight(data)
+                            self.refreshnow()
+                        else:
+                            QMessageBox.warning(self, "警告", f"经查询{name}已被记录交班,不用重复记录")
+                        return
+                    else:
+                        return
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def get_load(self):
+        try:
+            peoples = []
+            fileName, _ = QFileDialog.getOpenFileName(self, '打开文件', '/')
+            ext = os.path.splitext(fileName)[1].lower()
+            if ext == ".xlsx":
+                workbook = openpyxl.load_workbook(filename=fileName)
+                mysheet = workbook.active
+                myrows = list(mysheet.values)
+                if myrows[0][0] != ""and myrows[0][0] != None:
+                    for i in myrows:
+                        if i[0] != ""and i[0] != None:
+                            peoples.append(i[0])
+                if peoples:
+                    self.peopleselect=peoples
+                    self.write_list_to_json(peoples)
+                    self.set_initial_selection()
+                    self.refreshnow()
+                else:
+                    QMessageBox.information(self, "提示", "人员名单导入为空,请重新录入")
+            else:
+                QMessageBox.warning(self, "警告", "请使用xlsx文件,在第一列输入人名再导入,人名需要带字母")
+                return
+        except Exception as e:
+            app_logger.log_error(e)
+    def selectall_funciton(self):
+        self.peopleselect=self.peopleres
+        self.write_list_to_json(self.peopleselect)
+        self.set_initial_selection()
+    def search_table_empty(self):
+        """根据搜索框内容过滤表格数据"""
+        search_text = self.searchinfo.text().strip().lower()
+        if not search_text:
+            # 如果搜索框为空,显示所有行
+            for row in range(self.tableWidgetWorkload.rowCount()):
+                self.tableWidgetWorkload.setRowHidden(row, False)
+            return
+
+    def search_table(self):
+        """根据搜索框内容过滤表格数据"""
+        search_text = self.searchinfo.text().strip().lower()
+        if not search_text:
+            # 如果搜索框为空,显示所有行
+            for row in range(self.tableWidgetWorkload.rowCount()):
+                self.tableWidgetWorkload.setRowHidden(row, False)
+            return
+        # 遍历表格所有单元格进行搜索
+        for row in range(self.tableWidgetWorkload.rowCount()):
+            row_hidden = True
+            for col in range(self.tableWidgetWorkload.columnCount()):
+                item = self.tableWidgetWorkload.item(row, col)
+                if item and search_text in item.text().lower():
+                    row_hidden = False
+                    break
+            self.tableWidgetWorkload.setRowHidden(row, row_hidden)
+
+    def on_sort_changed(self, logicalIndex, order):
+        """记录当前的排序状态"""
+        self.current_sort_column = logicalIndex
+        self.current_sort_order = order
+
+    def on_checkbox_changed(self, state):
+        if state != 0:
+            self.autoupdateMode = True
+        else:
+            self.autoupdateMode = False
+
+    def ensure_file_exists(self):
+        """确保文件存在,不存在则创建空文件"""
+        directory = os.path.dirname(filename)
+        # 如果目录不存在,则创建目录
+        if directory and not os.path.exists(directory):
+            os.makedirs(directory)
+        # 如果文件不存在,则创建空文件
+        if not os.path.exists(filename):
+            with open(filename, 'w', encoding='utf-8') as f:
+                f.write("[]")  #
+
+    def write_list_to_json(self,data_list):
+        """将 Python 列表写入 JSON 文件"""
+        try:
+            self.ensure_file_exists()  # 确保文件存在
+            with open(filename, 'w', encoding='utf-8') as f:
+                json.dump(data_list, f, ensure_ascii=False)
+            #print(f"数据已成功写入 {filename}")
+        except Exception as e:
+            app_logger.log_error(e)
+            #print(f"写入文件时出错: {e}")
+    def read_json_to_list(self):
+        """从 JSON 文件读取数据并转换为 Python 列表"""
+        try:
+            self.ensure_file_exists()  # 确保文件存在
+            with open(filename, 'r', encoding='utf-8') as f:
+                data = json.load(f)
+            return data
+        except json.JSONDecodeError:
+            #print(f"文件 {filename} 格式不是有效的 JSON,将重置为空列表")
+            # 重置文件为空白列表
+            self.write_list_to_json([])
+            return None
+        except Exception as e:
+            return None
+    def set_initial_selection(self):
+        """设置多选ComboBox的初始选中值"""
+        for i in range(self.comboBox_peoplelist.model().rowCount()):
+            item = self.comboBox_peoplelist.model().item(i)
+            if item.text() in self.peopleselect:
+                item.setCheckState(QtCore.Qt.CheckState.Checked)
+            else:
+                item.setCheckState(QtCore.Qt.CheckState.Unchecked)
+        self.comboBox_peoplelist.update_text()
+    def getdatas(self):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/getworkload"
+            data = json.dumps(self.peopleselect)
+            res = requests.post(url=ip, data=data, timeout=30).json()
+            return res
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+    def handoverflight(self,data0):
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/handoverflight"
+            data = json.dumps(data0)
+            res = requests.post(url=ip, data=data, timeout=30).json()
+            if res["返回值"] == "ok":
+                QMessageBox.information(self, "提示", "操作成功!")
+            else:
+                QMessageBox.warning(self, "提示", "操作失败!")
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+    def autoupdate(self):
+        if self.autoupdateMode:
+            res = self.getdatas()
+            self.tableDisplay(res)
+            if self.searchinfo.text():
+                self.search_table()
+
+    def tableDisplay(self,displaydata):
+        try:
+            if displaydata:
+                self.tableWidgetWorkload.setSortingEnabled(False)
+                # 清除原有数据
+                self.tableWidgetWorkload.setRowCount(0)
+                # 设置列数(假设数据是二维列表,第一行为表头)
+                self.tableWidgetWorkload.setRowCount(len(displaydata))
+                for row in range(len(displaydata)):
+                    for col in range(len(self.headerLabel)):
+                        item = QTableWidgetItem(str(displaydata[str(row)][str(col)]))
+                        self.tableWidgetWorkload.setItem(row, col, item)
+                        if col == 16 and "无" not in str(displaydata[str(row)][str(col)]):
+                            item.setForeground(QColor("red"))
+                            font = item.font()
+                            item.setFont(font)
+                        elif col == 8 :
+                            item.setForeground(QColor("green"))
+                            font = item.font()
+                            font.setBold(True)
+                            item.setFont(font)
+                        elif col == 21 and str(displaydata[str(row)][str(col)]) != "" :
+                            item.setBackground(QColor("yellow"))
+                        elif col == 1 and str(displaydata[str(row)][str(col)]) == "Y":
+                            item.setBackground(QColor("yellow"))
+                        if col not in [5]:
+                            self.tableWidgetWorkload.item(int(row), col).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        else:
+                            self.tableWidgetWorkload.item(int(row), col).setTextAlignment(Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignCenter)
+                            self.tableWidgetWorkload.setRowHeight(int(row), 35)
+
+                    settips = {1: "3", 14: "20"}
+                    for key, value in settips.items():
+                        if self.tableWidgetWorkload.item(int(row), key):
+                            self.tableWidgetWorkload.item(int(row), key).setToolTip("%s" % (str(displaydata[str(row)][str(value)])))
+
+                self.tableWidgetWorkload.setItemDelegate(ColoredTextDelegate())
+                self.tableWidgetWorkload.resizeColumnsToContents()
+                self.tableWidgetWorkload.setWordWrap(True)
+                self.tableWidgetWorkload.setColumnWidth(6, 100)
+
+                for i in range(len(self.headerLabel)):
+                    if i in [3,5,7,9,11,13,15,17,19,22,23,24,25,26,27,10,12,18,20]:
+                        self.tableWidgetWorkload.setColumnHidden(i, True)
+                    else:
+                        self.tableWidgetWorkload.setColumnHidden(i, False)
+
+                self.tableWidgetWorkload.setSortingEnabled(True)
+        except Exception as e:
+            app_logger.log_error(e)
+            self.tableWidgetWorkload.setSortingEnabled(True)
+
+    def refreshnow(self):
+        self.peopleselect = self.comboBox_peoplelist.get_selected_items()
+        self.write_list_to_json(self.peopleselect)
+        res=self.getdatas()
+        self.tableDisplay(res)
+        if self.searchinfo.text():
+            self.search_table()
+
+    def clearselect(self):
+        self.peopleselect=[]
+        self.write_list_to_json(self.peopleselect)
+        self.set_initial_selection()
+
+class ColoredTextDelegate(QStyledItemDelegate):
+
+    def paint(self, painter, option, index):# 保存painter状态
+        painter.save()
+
+        # 设置交替行颜色
+        palette = option.palette
+        if index.row() % 2 == 1:
+            bg_color = palette.color(QPalette.ColorRole.AlternateBase)
+        else:
+            bg_color = palette.color(QPalette.ColorRole.Base)
+
+        # 绘制背景(考虑选中状态)
+        if option.state & QStyle.StateFlag.State_Selected:
+            painter.fillRect(option.rect, palette.highlight())
+        else:
+            painter.fillRect(option.rect, bg_color)
+
+        if index.column() in [28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47]:
+            # 获取单元格文本
+
+            text = index.data(Qt.ItemDataRole.DisplayRole) or ""
+            if "预排" in text:
+                painter.fillRect(option.rect, QColor("yellow"))
+                # 设置文本绘制选项
+                painter.save()
+            text_option = QTextOption()
+            text_option.setAlignment(Qt.AlignmentFlag.AlignCenter)
+            doc = QTextDocument()
+            doc.setDefaultTextOption(text_option)
+            doc.setTextWidth(option.rect.width())
+
+            default_format = QTextCharFormat()
+            default_format.setForeground(QColor("gray"))
+            font = default_format.font()
+            font.setPointSize(8)
+            default_format.setFont(font)
+
+            balck_format = QTextCharFormat()
+            balck_format.setForeground(QColor("balck"))
+            font = balck_format.font()
+            font.setPointSize(10)
+            balck_format.setFont(font)
+            # 插入带格式文本
+            cursor = QTextCursor(doc)
+            cursor.insertText(text[:5], balck_format)
+            cursor.insertText(text[5:], default_format)
+
+            # 绘制文档
+            painter.save()
+            painter.translate(option.rect.topLeft())
+            doc.drawContents(painter)
+            painter.restore()
+        elif index.column() == 8:
+            text = index.data(Qt.ItemDataRole.DisplayRole) or ""
+            start = text.find("(")
+            end = text.find(")")
+            # 设置文本绘制选项
+            painter.save()
+            text_option = QTextOption()
+            text_option.setAlignment(Qt.AlignmentFlag.AlignCenter)
+
+            doc = QTextDocument()
+            doc.setDefaultTextOption(text_option)
+            doc.setTextWidth(option.rect.width())
+
+            default_format = QTextCharFormat()
+            default_format.setForeground(QColor("red"))
+            font = default_format.font()
+            font.setBold(True)
+            default_format.setFont(font)
+
+            balck_format = QTextCharFormat()
+            balck_format.setForeground(QColor("balck"))
+
+            # 插入带格式文本
+            cursor = QTextCursor(doc)
+            cursor.insertText(text[:start+1], balck_format)
+            cursor.insertText(text[start+1:end], default_format)
+            cursor.insertText(text[end:], balck_format)
+            # 计算垂直居中位置
+            text_height = doc.size().height()
+            y_offset = (option.rect.height() - text_height) / 2
+            # 绘制文本
+            painter.translate(option.rect.x(), option.rect.y() + y_offset)
+            doc.drawContents(painter)
+            painter.restore()
+
+        else:
+            # 其他单元格使用默认绘制
+            super().paint(painter, option, index)
+
+
+    def sizeHint(self, option, index):
+        # 确保单元格有合适的大小
+        if index.column() == 8:
+            text = index.data(Qt.ItemDataRole.DisplayRole) or ""
+            doc = QTextDocument()
+            doc.setPlainText(text)
+            doc.setTextWidth(option.rect.width())
+            return doc.size().toSize()
+        return super().sizeHint(option, index)

+ 0 - 0
Functions/__init__.py


+ 176 - 0
Functions/ipFind.py

@@ -0,0 +1,176 @@
+import ipaddress
+import subprocess
+import re
+
+
+# 执行windows命令
+def exec_command(commands) -> list:
+    """执行windows命令"""
+    if not commands:
+        return list()
+    # 子进程的标准输出设置为管道对象
+    if isinstance(commands, str):
+        commands = [commands]
+    return_list = []
+    for i in commands:
+        p = subprocess.Popen(i, shell=True, stdout=subprocess.PIPE, universal_newlines=True)
+        p.wait()
+        res = "".join(p.stdout.readlines())
+        return_list.append(res)
+    return return_list
+
+
+def get_net_card():
+    """
+    功能:通过ipconfig返回的文本解析网卡名字、ip、掩码、网关等信息
+    注释:简单做了注释
+    测试:在window10 专业版测试通过(可以检测到以太网两个(包含手机、网线)、wifi一个)
+    测试反馈:如果使用发现其余问题可以反馈到 sunnylishaoxu@163.com,非常感谢
+    说明一:
+       默认网关. . . . . . . . . . . . . : fe80::10b1:1865:86e8:ad10%41
+                                           172.20.10.1
+    """
+    net_card_data = list()
+    res = exec_command("ipconfig")
+    temp_dict = dict(flag=True)
+    gateway_error = False
+
+    for x in res[0].splitlines():
+
+
+        try:
+            # 匹配IP正则
+            pattern = re.compile(r'((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}')
+            # 测试发现有的网关会默认在下一行,情况见说明一,所以这边检查到默认网关,发现没有匹配到,则从下一行找
+            if gateway_error:
+                temp_dict['gateway1'] = pattern.search(x).group()
+                gateway_error = False
+                #print("当前网卡 %s 获取第二行网关信息 %s" % (temp_dict['card_name'], temp_dict['gateway1']))
+                continue
+            # 如果发现新的适配器,则重置上一个网卡是否可用的状态
+            if "适配器" in x:
+                temp_dict = dict(flag=True)
+                temp_dict['card_name'] = x.split(" ", 1)[1][:-1]
+                #print("当前网卡 %s" % (temp_dict['card_name']))
+                continue
+            if "IPv4 地址" in x:
+                temp_dict['ip'] = pattern.search(x).group()
+                #print("当前网卡 %s 获取IP信息 %s" % (temp_dict['card_name'], temp_dict['ip']))
+                continue
+            elif "子网掩码" in x:
+                temp_dict['mask'] = pattern.search(x).group()
+                #print("当前网卡 %s 获取子网掩码信息 %s" % (temp_dict['card_name'], temp_dict['mask']))
+                continue
+            # 测试发现有的网关会默认在下一行,情况见说明一,所以这边做了异常处理
+            elif "默认网关" in x:
+                try:
+                    temp_dict['gateway1'] = pattern.search(x).group()
+                    #print("当前网卡 %s 获取默认网关信息 %s" % (temp_dict['card_name'], temp_dict['gateway1']))
+                except:
+                    gateway_error = True
+                    #print("当前网卡 %s 解析当前行默认网关信息错误" % (temp_dict['card_name']))
+
+                # 如果检查到网关,代表当前适配器信息已经获取完毕 重置网关状态与适配器信息字典
+                if temp_dict.get("gateway1"):
+                    net_card_data.append(temp_dict)
+                    #print("当前网卡 %s 当前适配器信息获取完毕 %s \n\n" % (temp_dict['card_name'], temp_dict))
+
+                    temp_dict = dict(flag=True)
+                    continue
+            # 发现媒体已断开则更改当前适配器状态
+            elif "媒体已断开" in x:
+                #print("当前网卡 %s 已断开 跳过\n\n" % (temp_dict['card_name']))
+                temp_dict['flag'] = False
+                continue
+            # 判断媒体状态正常,IP、子网掩码、网关都正常后,保持起来
+            if temp_dict.get("flag") and temp_dict.get("ip") and temp_dict.get("mask") and temp_dict.get("gateway1"):
+                #print("当前网卡 %s 当前适配器信息获取完毕 %s \n\n" % (temp_dict['card_name'], temp_dict))
+                net_card_data.append(temp_dict)
+                # 重置网关状态与适配器信息字典
+                temp_dict = dict(flag=True)
+                continue
+        except Exception as e:
+            # print(e)
+            # print(x)
+            pass
+    # for i in net_card_data:
+    #     print("%s:%s" % (i.get("card_name"), i))
+    return net_card_data
+
+
+# 子网掩码地址转长度
+def netmask_to_bit_length(netmask):
+    """
+    >>> netmask_to_bit_length('255.255.255.0')
+    24
+    >>>
+    """
+    # 分割字符串格式的子网掩码为四段列表
+    # 计算二进制字符串中 '1' 的个数
+    # 转换各段子网掩码为二进制, 计算十进制
+    return sum([bin(int(i)).count('1') for i in netmask.split('.')])
+
+# 子网掩码长度转地址
+def bit_length_to_netmask(mask_int):
+    """
+    >>> bit_length_to_netmask(24)
+    '255.255.255.0'
+    >>>
+    """
+    bin_array = ["1"] * mask_int + ["0"] * (32 - mask_int)
+    tmpmask = [''.join(bin_array[i * 8:i * 8 + 8]) for i in range(4)]
+    tmpmask = [str(int(netmask, 2)) for netmask in tmpmask]
+    return '.'.join(tmpmask)
+
+
+def getStartIP(gateway:str,mask:str):
+    gatewayList = gateway.split('.')
+    maskList = mask.split('.')
+    newStartIP=''
+    for i in range(4):
+        bgate = list(bin(int(gatewayList[i])).replace('0b','').zfill(8))
+        bmask = list(bin(int(maskList[i])).replace('0b','').zfill(8))
+        # print('gate:{}'.format(bgate))
+        # print('mask:{}'.format(bmask))
+        ngate = [0, 0, 0, 0, 0, 0, 0, 0]
+        for n in range(8):
+
+
+            if bmask[n]=='0':
+                ngate[n]=0
+            else:
+                ngate[n]=bgate[n]
+        # print("newGate:{}".format(ngate))
+        nbgate = ''
+        for item in ngate:
+            nbgate+=str(item)
+        # print(nbgate)
+        # print('formate gate:{}'.format(int(nbgate, 2)))
+        newStartIP += str(int(nbgate, 2))
+        newStartIP += '.'
+    # print(gatewayList)
+    # print(newStartIP[:-1])
+    return newStartIP[:-1]
+
+def ipFind():
+    res = get_net_card()
+    #print(res)
+    allNetIP = []
+    for i in res:
+        ip = i['gateway1']
+        ipl = ip.split('.')
+        mask = i['mask']
+        newip = getStartIP(ip, mask)
+        masklen = netmask_to_bit_length(mask)
+        net = ipaddress.ip_network('{}/{}'.format(newip, masklen))
+
+        for x in net.hosts():
+            allNetIP.append(str(x))
+
+    return allNetIP
+
+
+
+if __name__ == '__main__':
+    allNetIP = ipFind()
+    print(allNetIP)

+ 19 - 0
Functions/openPdf.py

@@ -0,0 +1,19 @@
+
+import sys
+import subprocess
+import tempfile
+import os
+
+
+def open_with_system_viewer(pdf_data):
+    with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as f:
+        f.write(pdf_data)
+        temp_path = f.name
+
+    # 打开系统默认阅读器
+    if sys.platform.startswith('darwin'):  # macOS
+        subprocess.call(('open', temp_path))
+    elif os.name == 'nt':  # Windows
+        os.startfile(temp_path)
+    elif os.name == 'posix':  # Linux
+        subprocess.call(('xdg-open', temp_path))

+ 57 - 0
Functions/serverFind.py

@@ -0,0 +1,57 @@
+import requests
+import time
+import random
+from concurrent.futures import ThreadPoolExecutor
+from .ipFind import ipFind  # 假设ipFind是一个从本地模块导入的函数
+
+
+def task(i):
+    """发送HTTP请求检查服务器状态的任务函数"""
+    sleep_seconds = random.randint(1, 3)
+    # 可选:取消注释以显示线程执行信息
+    # print('线程名称:{},参数:{},睡眠时间:{}'.format(threading.current_thread().name, i, sleep_seconds))
+    try:
+        # 随机延迟,减少请求风暴
+        time.sleep(sleep_seconds)
+        # 发送请求并设置合理的超时时间
+        r = requests.get(f'http://{i}:7162/findserver', timeout=3).text
+    except requests.exceptions.ConnectTimeout:
+        # 连接超时处理
+        r = '0'
+    except requests.exceptions.ReadTimeout:
+        # 读取超时处理
+        r = '0'
+    except requests.exceptions.ConnectionError:
+        # 连接错误处理
+        r = '0'
+    except Exception as e:
+        # 其他异常处理
+        print(f"请求处理异常: {e}")
+        r = '0'
+    return [i, r]
+
+
+def findServer():
+    """查找可用服务器的主函数"""
+    time1 = time.time()
+    # 创建线程池,设置合理的最大工作线程数
+    with ThreadPoolExecutor(max_workers=500) as pool:
+        # 获取所有IP地址
+        allIP = ipFind()
+        # 使用线程池并行执行任务
+        result = list(pool.map(task, allIP))
+
+    print(f'耗时:{time.time() - time1}')
+
+    # 筛选可用服务器
+    serverList = []
+    for item in result:
+        if "天府综合平台一期:" in item[1]:
+            item[1] = item[1].replace("天府综合平台一期:", "")
+            serverList.append(item)
+    return serverList
+
+
+if __name__ == '__main__':
+    l = findServer()
+    print("可用服务器列表:", l)

+ 415 - 0
Functions/utils.py

@@ -0,0 +1,415 @@
+import datetime
+import time
+import json
+import requests
+from selenium.webdriver.support import expected_conditions as EC
+from selenium import webdriver
+from selenium.webdriver import ActionChains
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support.wait import WebDriverWait
+from selenium.webdriver.chrome.options import Options
+
+
+class flight_list(object):
+
+    def __init__(self):
+        self.url = r"http://me.sichuanair.com/login.shtml"
+        self.login_url = "https://login.sichuanair.com/idp/AuthnEngine?currentAuth=urn_oasis_names_tc_SAML_2.0_ac_classes_BAMUsernamePassword"
+        self.flight_list_url = "https://me.sichuanair.com/api/v1/plugins/LM_FLIGHT_LIST"
+        self.flight_list_third_url = "https://me.sichuanair.com/api/v1/plugins/LM_FLIGHT_THIRD_LIST"
+        self.task_flight_list_url="https://me.sichuanair.com/api/v1/plugins/LM_TASK_ASSIGNMENT_LIST"
+        self.LM_FJ_TASK_PG="https://me.sichuanair.com/api/v1/plugins/LM_FJ_TASK_PG"
+        self.task_filght_third_list_url="https://cscsupplier.sichuanair.com/api/v1/plugins/LM_TASK_ASSIGNMENT_THIRD_LIST"
+        self.LM_TSK_DINGDONG_url ="https://cscsupplier.sichuanair.com/api/v1/plugins/LM_TSK_DINGDONG"
+        self.LM_TSK_SURE_PG_url="https://cscsupplier.sichuanair.com/api/v1/plugins/LM_TSK_SURE_PG"
+        self.LM_TSK_EMP_PGLIST_url="https://cscsupplier.sichuanair.com/api/v1/plugins/LM_TSK_EMP_PGLIST"
+        self.MM_GJJH_LIST="https://cscsupplier.sichuanair.com/api/v1/plugins/MM_GJJH_LIST"
+        self.LM_TSK_HANDOVER_url="https://cscsupplier.sichuanair.com/api/v1/plugins/LM_TSK_HANDOVER"
+        self.LM_FLIGHT_SEARCH_LIST='https://cscsupplier.sichuanair.com/api/v1/plugins/LM_FLIGHT_SEARCH_LIST'
+        self.LM_TASK_ARCHIVE_LIST='https://cscsupplier.sichuanair.com/api/v1/plugins/LM_TASK_ARCHIVE_LIST'
+        self.jobcard='https://cscsupplier.sichuanair.com'
+
+        self.token = None
+        #amro状态
+        self.amro_status = 0
+        self.flight_list_json = None
+        self.flight_list_third_json = None
+
+
+    def start(self, username, password):
+        try:
+            self.token = self.login(username, password)
+        except Exception:
+            pass
+
+        return self.token
+
+    def login(self, username, password):
+        try:
+
+            options = webdriver.EdgeOptions()
+            options.use_chromium = True
+            #options.add_experimental_option('excludeSwitches', ['enable-logging'])
+            #options.add_argument("headless")
+            #options.add_argument("disable-gpu")
+            #options.add_argument('start-maximized')
+            #options.add_argument('window-size=1920x1080')
+            self.driver = webdriver.Edge(options=options)
+            self.actions = ActionChains(self.driver)
+        except:
+            chrome_options = Options()
+            chrome_options.add_argument("--headless")
+            chrome_options.add_argument("window-size=1920x1080")
+            chrome_options.add_argument("--start-maximized")
+            chrome_options.add_argument('--disable-gpu')  # 如果不加这个选项,有时定位会出现问题
+            self.driver = webdriver.Chrome(executable_path=r'D:\flightinfo\Google\Chrome\Application\chromedriver.exe',
+                                           # executable_path=path
+                                           options=chrome_options)
+
+            self.actions = ActionChains(self.driver)
+
+
+        self.driver.get(self.url)
+        WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, 'singleSubmit')))
+        loginbtn = self.driver.find_element('id', 'singleSubmit')
+        time.sleep(0.5)
+        self.actions.click(loginbtn)
+        self.actions.perform()
+        WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.NAME, "j_username"))).send_keys(
+            username)
+        time.sleep(0.5)
+        self.driver.find_element('name', "j_password").send_keys(password)
+        #time.sleep(0.5)
+        time.sleep(0.5)
+        self.driver.find_element_by_xpath("//button[@type='button']").click()
+        time.sleep(1)
+        for cookie in self.driver.get_cookies():
+            if "_amro_sk" in cookie.values():
+                self.amro_status = 1
+                self.driver.quit()
+                return "_amro_sk=" +cookie["value"]
+            else:
+                pass
+        self.driver.quit()
+    def get_cookie(self):
+        if self.token!=None:
+            return self.token
+        else:
+            return None
+
+    def checkCookieSts(self,cookie):
+        url = "https://me.sichuanair.com/api/v1/plugins/PROCESS_CLAIM_TASK_PRO_LIST"
+        data = {
+            'user_id': '',
+            'userId': '',
+            'accountType': 'ARCHIVE',
+            'page': '1',
+            'rows': '11'
+        }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        result = requests.post(url, data, headers=header).json()
+
+        #print(result['code'], result['msg'], result['data'])
+        return result['code']
+
+
+    def checkWorkjob(self,taskids,acno,taskType,actype,startDate,endDate,cookie):
+        data = {"taskids": taskids,
+                "acno": acno,
+                "taskType": taskType,
+                "actype": actype,
+                "startDate": startDate,
+                "endDate": endDate
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.LM_FJ_TASK_PG_json = requests.post(url=self.LM_FJ_TASK_PG, data=data, headers=header).json()
+        except Exception:
+            self.LM_FJ_TASK_PG_json = None
+        return  self.LM_FJ_TASK_PG_json
+
+    def request_jobcard(self, cookie, filename):  # 需要自动逻辑白班夜班
+        one_year_later = datetime.datetime.now() + datetime.timedelta(days=365)
+        timestamp = int(one_year_later.timestamp()*1000)
+        header = {
+            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
+            "Cookie": cookie}
+        try:
+            task_jobcard_json = requests.get(url=f'https://cscsupplier.sichuanair.com{filename}?_cache_timestamp={timestamp}',headers=header).content
+        except Exception:
+            task_jobcard_json = None
+        return task_jobcard_json
+
+    def request_MM_GJJH_LIST(self,cookie):
+        yesterday=(datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y-%m-%d")
+        today = datetime.date.today().strftime("%Y-%m-%d")
+        data={"mfrpn":"",
+            "zjcdats": yesterday,
+            "zjcdate": today,
+            "zwgh": "Y",
+            "zlynam":"",
+            "zbmtxt":"",
+            "zkstxt":"",
+            "zfdtxt":"",
+            "zlgort": "TF20",
+            "zghnam":"",
+            "ghrbm":"",
+            "ghrks":"",
+            "ghrfd":"",
+            "zghkcd":"",
+            "sort": "ZBMTXT",
+            "order": "asc"
+            }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.MM_GJJH_LIST_json = requests.post(url=self.MM_GJJH_LIST, data=data, headers=header).json()
+        except Exception:
+            self.MM_GJJH_LIST_json = None
+        return self.MM_GJJH_LIST_json
+
+    def request_task_filght_list(self, flightDate:str,cookie,bc:str):   #需要自动逻辑白班夜班
+        data = {"airportCode": "ZUTF",
+                "ddate": flightDate,
+                "notView":"",
+                "baseCode": "TF01",
+                "actype1":"(A319|A320|A321)",
+                "aclocArea1": "()",
+                "tasktype1": "()",
+                "shift":bc,
+                "tasktype":"",
+                "actype": "A319,A320,A321",
+                "aclocArea":"",
+                "isshiftex":"",
+                "repush":"",
+                "page": "1",
+                "rows": "500"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.task_flight_list_json = requests.post(url=self.task_flight_list_url, data=data, headers=header).json()
+        except Exception:
+            self.task_flight_list_json = None
+        #with open('./temp/task_flight_list_json/fl{}.json'.format(int(time.time())), 'w') as f:
+            #json.dump(self.task_flight_list_json, f, indent=4)
+
+        return self.task_flight_list_json
+
+
+    def request_task_filght_third_list(self, flightDate:str, cookie,bc:str):   #需要自动逻辑白班夜班
+        data = {"airportCode": "ZUTF",
+                "ddate": flightDate,
+                "notView":"",
+                "baseCode": "TF01",
+                "isThird": "Y",
+                "actype1":"",
+                "aclocArea1": "()",
+                "tasktype1": "()",
+                "shift":bc,
+                "tasktype":"",
+                "actype": "(A319|A320|A321|B737NG|B737MAX|C919)",
+                "aclocArea":"",
+                "isshiftex":"",
+                "repush":"",
+                "page": "1",
+                "rows": "500"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.task_filght_third_list = requests.post(url=self.task_filght_third_list_url, data=data, headers=header).json()
+        except Exception:
+            self.task_filght_third_list = None
+        #with open('./temp/task_filght_third_list/fl{}.json'.format(int(time.time())), 'w') as f:
+        #    json.dump(self.task_filght_third_list, f, indent=4)
+        return self.task_filght_third_list
+
+    def request_LM_TASK_ARCHIVE_LIST(self, flightDate:str, cookie):   #需要自动逻辑白班夜班
+        startdatePlStart=flightDate+" 00:00:00"
+        flightDate2=(datetime.datetime.strptime(flightDate, "%Y%m%d")+datetime.timedelta(days=1)).strftime("%Y%m%d")
+        startdatePlEnd=flightDate2+" 09:00:00"
+        data = {"startdatePlStart": startdatePlStart,
+                "startdatePlEnd": startdatePlEnd,
+                "airportCode":'ZUTF',
+                "taskTypeDefault": "LM",
+                "actype1": '(A319|A320|A321)',
+                "actype": "A319,A320,A321",
+                "baseCode": "TF01",
+                "page":"1",
+                "rows": "500"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01","Cookie": cookie}
+        try:
+            self.task_LM_TASK_ARCHIVE_LIST = requests.post(url=self.LM_TASK_ARCHIVE_LIST, data=data, headers=header).json()
+        except Exception:
+            self.task_LM_TASK_ARCHIVE_LIST = None
+        #with open('./temp/task_LM_FLIGHT_SEARCH_LIST/fl{}.json'.format(int(time.time())), 'w') as f:
+        #    json.dump(self.task_LM_FLIGHT_SEARCH_LIST, f, indent=4)
+        return self.task_LM_TASK_ARCHIVE_LIST
+
+    def request_LM_FLIGHT_SEARCH_LIST(self, flightDate:str, cookie):   #需要自动逻辑白班夜班
+        data = {"base4code": "ZUTF",
+                "flightDate": flightDate,
+                "flightDate1":flightDate,
+                "jcType": "",
+                "actype1": '(A319|A320|A321)',
+                "dep_4code": "",
+                "arr_4code": "",
+                "acno":'',
+                "actype": "A319,A320,A321",
+                "flightNo":"",
+                "notView":"",
+                "page":"1",
+                "onlyAf":"",
+                "rows": "500"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01","Cookie": cookie}
+        try:
+            self.task_LM_FLIGHT_SEARCH_LIST = requests.post(url=self.LM_FLIGHT_SEARCH_LIST, data=data, headers=header).json()
+        except Exception:
+            self.task_LM_FLIGHT_SEARCH_LIST = None
+        #with open('./temp/task_LM_FLIGHT_SEARCH_LIST/fl{}.json'.format(int(time.time())), 'w') as f:
+        #    json.dump(self.task_LM_FLIGHT_SEARCH_LIST, f, indent=4)
+        return self.task_LM_FLIGHT_SEARCH_LIST
+
+    def request_filght_list(self, flightDate:str, cookie):
+        data = {"base4code": "ZUTF",
+                "flightDate": flightDate,#2023-06-02
+                "tasktype": "",
+                "notView": "",
+                "jcType": "",
+                "actype1": "(A319|A320|A321)",
+                "actype": "A319,A320,A321",
+                "acno": "",
+                "dep_4code": "",
+                "arr_4code": "",
+                "flightNo": "",
+                "repush": ""
+
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.flight_list_json = requests.post(url=self.flight_list_url, data=data, headers=header).json()
+        except Exception:
+            self.flight_list_json = None
+        #with open('./temp/filght_list/fl{}.json'.format(int(time.time())), 'w') as f:
+        #    json.dump(self.flight_list_json, f, indent=4)
+        return self.flight_list_json
+
+
+    def request_LM_TSK_HANDOVER(self,dict:dict,cookie):
+        data = {
+                "taskids": dict["taskid"],
+                "tasksts": dict["sts"],  # 必须,可能需要修改,不知道影响不
+                "FunctionCode": "LM_TSK_HANDOVER"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.LM_TSK_HANDOVER = requests.post(url=self.LM_TSK_HANDOVER_url, data=data, headers=header).json()
+            #print(self.LM_TSK_HANDOVER)
+        except Exception:
+            self.LM_TSK_HANDOVER = None
+        return self.LM_TSK_HANDOVER
+
+    def request_LM_TSK_DINGDONG(self,dict:dict,cookie):
+        data = {"tasksts": "1",  # 必须
+                "taskid": "{}".format(dict["taskid"]),
+                "acno": dict["acno"],
+                "actype": dict["actype"],
+                "tasktype": dict["tasktype"],
+                "tatd": dict["tatd"],
+                "msgInfo": dict["msgInfo"],
+                "bay": dict["bay"],
+                "wxemp": dict["wxemp"],  # 必须dict["wxemp"]
+                "fxemp": dict["fxemp"],
+                "wx": dict["wx"],
+                "fx": dict["fx"],
+                "ecsj": dict["ecsj"],
+                "ecsjEmp": "",
+                "FunctionCode": "LM_TSK_DINGDONG"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.LM_TSK_DINGDONG = requests.post(url=self.LM_TSK_DINGDONG_url, data=data, headers=header).json()
+        except Exception:
+            self.LM_TSK_DINGDONG = None
+        return self.LM_TSK_DINGDONG
+    def request_flight_third_list(self, flightDate: str, cookie):
+        data = {"base4code": "ZUTF",
+                "flightDate": flightDate,
+                "flightDateStart": flightDate,
+                "tasktype": "",
+                "notView": "",
+                "isThird":"Y",
+                "actype1": "(21N|319|320|321|32N|332|738|73G|A21N|A319|A319|A320|A321|A32N|A738|A73G|AZZZ|B737|C919)",
+                "actype": "B737NG,B737MAX,A319,A320,A321,C919"
+                #"actype": "A319%2CA320%2CA321%2CB737MAX%2CB737NG"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.flight_third_list = requests.post(url=self.flight_list_third_url, data=data, headers=header).json()
+        except Exception:
+            self.flight_third_list = None
+        #with open('./temp/filght_list/fl{}.json'.format(int(time.time())), 'w') as f:
+        #    json.dump(self.flight_third_list, f, indent=4)
+        return self.flight_third_list
+
+    def request_LM_TSK_SURE_PG(self,dict:dict,cookie):
+        empNos = dict["empNos"]
+        taskid = dict["taskid"]
+        type = dict["type"]
+        shiftDate = dict["shiftDate"]
+        shift = dict["shift"]
+
+        data = {"empNos": empNos,
+                "taskid": taskid,
+                "type": type,                 #ECSJ 二次送机  WX  FX
+                "shiftDate": shiftDate,                   #夜班航前需要前一天
+                "shift": shift,
+                "FunctionCode": "LM_TSK_SURE_PG"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            #print(data)
+            self.LM_TSK_SURE_PG = requests.post(url=self.LM_TSK_SURE_PG_url, data=data, headers=header).json()
+            #print(self.LM_TSK_SURE_PG )
+        except Exception:
+            self.LM_TSK_SURE_PG = None
+        return self.LM_TSK_SURE_PG
+
+    def request_LM_TSK_EMP_PGLIST(self,taskid:str,shiftDate:str,shift:str,cookie):
+        data = {"flightDate": shiftDate,
+                "shift": shift,
+                "type": "WX",
+                "taskid":taskid,
+                "wx": "wx",
+                "baseCode": "TF01",       #EMP_NO,NAME,MAINLY_ROLE
+                "deptNo": "",
+                "fx": "fx",
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.LM_TSK_EMP_PGLIST = requests.post(url=self.LM_TSK_EMP_PGLIST_url, data=data, headers=header).json()
+        except Exception:
+            self.LM_TSK_EMP_PGLIST = None
+        #with open('./temp/LM_TSK_EMP_PGLIST/fl{}.json'.format(int(time.time())), 'w') as f:
+        #    json.dump(self.LM_TSK_EMP_PGLIST, f, indent=4)
+        return self.LM_TSK_EMP_PGLIST
+
+
+
+if __name__ == '__main__':
+    fl = flight_list()
+    #fl.start()
+    nowDay = datetime.datetime.now().replace(microsecond=0)
+    nowDayStr = nowDay.strftime("%Y-%m-%d")
+

+ 8 - 0
Google/Chrome/Application/73.0.3683.86/73.0.3683.86.manifest

@@ -0,0 +1,8 @@
+<assembly
+  xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
+  <assemblyIdentity
+      name='73.0.3683.86'
+      version='73.0.3683.86'
+      type='win32'/>
+  <file name='chrome_elf.dll'/>
+</assembly>

+ 5 - 0
Google/Chrome/Application/73.0.3683.86/Extensions/external_extensions.json

@@ -0,0 +1,5 @@
+// This json file will contain a list of extensions that will be included
+// in the installer.
+
+{
+}

二进制
Google/Chrome/Application/73.0.3683.86/Installer/chrmstp.exe


二进制
Google/Chrome/Application/73.0.3683.86/Installer/setup.exe


二进制
Google/Chrome/Application/73.0.3683.86/Locales/am.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/ar.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/bg.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/bn.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/ca.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/cs.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/da.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/de.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/el.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/en-GB.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/en-US.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/es-419.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/es.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/et.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/fa.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/fi.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/fil.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/fr.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/gu.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/he.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/hi.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/hr.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/hu.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/id.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/it.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/ja.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/kn.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/ko.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/lt.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/lv.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/ml.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/mr.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/ms.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/nb.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/nl.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/pl.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/pt-BR.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/pt-PT.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/ro.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/ru.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/sk.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/sl.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/sr.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/sv.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/sw.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/ta.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/te.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/th.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/tr.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/uk.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/vi.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/zh-CN.pak


二进制
Google/Chrome/Application/73.0.3683.86/Locales/zh-TW.pak


+ 8 - 0
Google/Chrome/Application/73.0.3683.86/MEIPreload/manifest.json

@@ -0,0 +1,8 @@
+{
+  "name": "MEI Preload", 
+  "icons": {}, 
+  "version": "1.0.4.0", 
+  "manifest_version": 2, 
+  "update_url": "https://clients2.google.com/service/update2/crx", 
+  "description": "Contains preloaded data for Media Engagement"
+}

二进制
Google/Chrome/Application/73.0.3683.86/MEIPreload/preloaded_data.pb


二进制
Google/Chrome/Application/73.0.3683.86/VisualElements/logo.png


二进制
Google/Chrome/Application/73.0.3683.86/VisualElements/logobeta.png


二进制
Google/Chrome/Application/73.0.3683.86/VisualElements/logocanary.png


二进制
Google/Chrome/Application/73.0.3683.86/VisualElements/logodev.png


部分文件因为文件数量过多而无法显示