Browse Source

2024/01/31 出口引导节点增加时间显示

wk 1 year ago
parent
commit
bcad2e80dc

+ 1 - 1
入口引导节点/projection_node.py

@@ -66,7 +66,7 @@ frame = ws.Frame(import_id,images,prj_parameter,True)
 frame.resize(600, 900)
 frame.resize(600, 900)
 
 
 
 
-frame.setWindowTitle("贵阳观山湖智能停车库 %d 引导"%terminal_id)
+frame.setWindowTitle("贵阳万寿竹路智能停车库 %d 引导"%terminal_id)
 frame.setWindowFlags(Qt.WindowMaximizeButtonHint|Qt.WindowCloseButtonHint)
 frame.setWindowFlags(Qt.WindowMaximizeButtonHint|Qt.WindowCloseButtonHint)
 screen_count = desktop.screenCount()
 screen_count = desktop.screenCount()
 screen = desktop.screen(screen_count-1)
 screen = desktop.screen(screen_count-1)

+ 191 - 1
入口引导节点/window_screen_pyqt.py

@@ -157,8 +157,198 @@ class Frame(QMainWindow):
 
 
         self.panel_txt.setGeometry(0, top_h + car_number_h, txt_w, txt_h)
         self.panel_txt.setGeometry(0, top_h + car_number_h, txt_w, txt_h)
         self.panel_arrow.setGeometry(0, top_h + car_number_h + txt_h, arrow_w, arrow_h)
         self.panel_arrow.setGeometry(0, top_h + car_number_h + txt_h, arrow_w, arrow_h)
-
     def Switch(self):
     def Switch(self):
+        try:
+            if self.terminal_statu.timeout() is False:
+                terminal_statu = message.terminal_node_statu()
+                tf.Parse(self.terminal_statu.statu, terminal_statu)
+                self.car_number_txt.setText(terminal_statu.car_number)
+                self.car_number_txt.setStyleSheet(
+                    "border-width:1px;border-style:solid;border-color:rgb(150,150,150);color:green")
+            else:
+                self.car_number_txt.setText("车牌号为空!")
+                self.car_number_txt.setStyleSheet(
+                    "border-width:1px;border-style:solid;border-color:rgb(150,150,150);color:red")
+
+            # 先判断连接状态
+            if self.dispatch_statu.timeout():
+                self.panel_txt.ShowImg(self.images['传感器超时'])
+                self.panel_arrow.FlashImg(self.images['传感器超时'])
+                return
+
+            if self.measure_statu.timeout():
+                self.panel_txt.ShowImg(self.images['测绘超时'])
+                self.panel_arrow.FlashImg(self.images['测绘超时'])
+                return
+
+            # 有车才显示
+            dispatch_statu = message.dispatch_node_statu()
+            tf.Parse(self.dispatch_statu.statu, dispatch_statu)
+
+            measure_buffer = message.measure_buffer()
+            measure_info = message.measure_info()
+            tf.Parse(self.measure_statu.statu, measure_buffer)
+            measure_info.CopyFrom(measure_buffer.measure_info_to_terminal)
+            # 测量状态
+            lidar_statu = measure_info.ground_status  # 测量状态(正常,无数据、噪声、超界)
+            # 传感器状态
+            dispatch_plc_passway_status = dispatch_statu.dispatch_plc_passway_status_vector[self.import_id - 1]
+            sensor_1 = dispatch_plc_passway_status.sensor_1
+
+
+
+            if lidar_statu == MeasureStatu['故障']:
+                self.panel_txt.ShowImg(self.images['测绘超时'])
+                self.panel_arrow.FlashImg(self.images['测绘超时'])
+                return
+            # 获取传感器数据
+            # print('---------------------------------')
+            # print('PLC数据:')
+            # print(dispatch_plc_passway_status)
+            # print('----------------------------------')
+            # print('====================================')
+            # print('雷达数据:')
+            # print(measure_info)
+            # print('====================================')
+
+            # 判断超界信息
+            if (sensor_1 >> 3) & 0x01 == 0:
+                if not self.last_back_io == "超界":
+                    self.last_back_io = "超界"
+                    self.flag = False
+            else:
+                if not self.last_back_io == "正常":
+                    self.last_back_io = "正常"
+                    self.flag = True
+
+            # if dispatch_plc_passway_status.car_height == 0:
+            #     self.panel_txt.ShowImg(self.images["空闲"])
+            #     self.panel_arrow.ShowImg(self.images["空闲"])
+            #     return
+
+            if dispatch_plc_passway_status.car_height == 4:
+                self.panel_txt.ShowImg(self.images["超高车辆"])
+                self.panel_arrow.ShowImg(self.images["超高车辆"])
+                return
+
+
+            # 以下是有车的处理
+            # 1,显示测量数据(实时和静态)
+
+            static_info_txt = ''
+            realtime_info_txt = "(实时) 中心(%.3f,%.3f) 角度:%.2f° 宽:%.3f 轴距:%.3f 前轮角:%.2f°" % \
+                                (measure_info.cx, measure_info.cy, measure_info.theta, measure_info.width,
+                                 measure_info.wheelbase, measure_info.front_theta)
+            if not self.last_moving_statu == None:
+                static_info_txt = "(静止) 中心(%.3f,%.3f) 角度:%.2f° 宽:%.3f 轴距:%.3f 前轮角:%.2f°" % \
+                                  (self.last_moving_statu.cx, self.last_moving_statu.cy,
+                                   self.last_moving_statu.theta, self.last_moving_statu.width,
+                                   self.last_moving_statu.wheelbase, self.last_moving_statu.front_theta)
+            self.measure_info_txt.setText(realtime_info_txt + "\n" + static_info_txt)
+
+            # 2,获取车辆运动状态(静止or动态)
+            border_statu = measure_info.border_statu
+            is_moving = measure_info.motion_statu == 0
+            print(is_moving)
+            # 当前运动
+            if is_moving:
+                with self.lock:
+                    self.last_moving_statu = None
+            else:
+                # 当前静止
+                if lidar_statu == MeasureStatu["ok"]:
+                    with self.lock:
+                        self.last_moving_statu = measure_info
+                elif lidar_statu == MeasureStatu["超界"]:
+                    if not self.last_moving_statu == None:
+                        # 上一刻静止且数据正确,当前静止,不可能出现超界,将超界清除
+                        new_border = border_statu
+                        new_border = (new_border & (~(0x01 << 0)))
+                        new_border = (new_border & (~(0x01 << 1)))
+                        new_border = (new_border & (~(0x01 << 2)))
+                        new_border = (new_border & (~(0x01 << 3)))
+                        new_border = (new_border & (~(0x01 << 6)))
+                        new_border = (new_border & (~(0x01 << 7)))
+                        new_border = (new_border & (~(0x01 << 8)))
+                        new_border = (new_border & (~(0x01 << 9)))
+                        border_statu = new_border
+                elif lidar_statu == MeasureStatu["无数据"]:
+                    # 当前静止无车,清除上一时刻数据
+                    with self.lock:
+                        self.last_moving_statu = None
+                # elif lidar_statu == MeasureStatu["噪声"]:
+                    # if not self.last_moving_statu == None:
+                        # 上一时刻静止且正确,当前噪声,不显示当前数据,显示上一正确数据
+                        # measure_info.CopyFrom(self.last_moving_statu)
+
+            # print((sensor_1 >> 4) & 0x01)
+            # 先判断光电
+            if (sensor_1 >> 3) & 0x01 == 0:
+                self.panel_txt.ShowImg(self.images["请调整"])
+                self.panel_arrow.FlashImg(self.images["向前调整"])
+                self.last_show = "调整"
+                return
+            elif (sensor_1 >> 4) & 0x01 == 0:
+                self.panel_txt.ShowImg(self.images["请调整"])
+                self.panel_arrow.FlashImg(self.images["向后调整"])
+                self.last_show = "调整"
+                # print(111)
+                return
+            # elif (sensor_1 >> 5) & 0x01 == 0:
+            #     self.panel_txt.ShowImg(self.images["请调整"])
+            #     self.panel_arrow.FlashImg(self.images["向右调整"])
+            #     self.last_show = "调整"
+            #     return
+            # elif (sensor_1 >> 6) & 0x01 == 0:
+            #     self.panel_txt.ShowImg(self.images["请调整"])
+            #     self.panel_arrow.FlashImg(self.images["向左调整"])
+            #     self.last_show = "调整"
+            #     return
+            lidar_statu = measure_info.ground_status  # 测量状态(正常,无数据、噪声、超界)
+
+            # 光电正常
+            if lidar_statu == MeasureStatu["无数据"]:
+                self.panel_txt.ShowImg(self.images["空闲"])
+                self.panel_arrow.ShowImg(self.images["空闲"])
+                return
+            elif lidar_statu == MeasureStatu["失去连接"]:
+                self.panel_txt.ShowImg(self.images['测绘超时'])
+                self.panel_arrow.FlashImg(self.images['测绘超时'])
+                return
+            elif lidar_statu == MeasureStatu["噪声"]:
+                    self.panel_txt.ShowImg(self.images['请调整'])
+                    self.panel_arrow.ShowImg(self.images["请调整"])
+                    return
+            elif lidar_statu == MeasureStatu["ok"]:
+                self.panel_txt.ShowImg(self.images['正确文字'])
+                self.panel_arrow.ShowImg(self.images['正确图片'])
+                return
+            # 查看是否超界
+            elif lidar_statu == MeasureStatu["超界"]:
+                border = border_statu & 0xf7ff
+                if (border in ArrowType.keys()) is False:
+                    self.panel_txt.ShowImg(self.images['检查杂物'])
+                    self.panel_arrow.FlashImg(self.images['检查杂物'])
+                else:
+                    if ArrowType[border] == "正确图片":
+                        self.panel_arrow.ShowImg(self.images[ArrowType[border]])
+                        self.panel_txt.ShowImg(self.images['正确文字'])
+                    elif ArrowType[border] == "向前调整":
+                        if measure_info.move_distance > 0.01:
+                            self.panel_txt.ShowTxt("请向前" + '%.2f'%(measure_info.move_distance * 100) + "厘米")
+                        else:
+                            self.panel_txt.ShowImg(self.images['请调整'])
+                        self.panel_arrow.FlashImg(self.images["向前调整"])
+                    else:
+                        self.panel_arrow.FlashImg(self.images[ArrowType[border]])
+                        self.panel_txt.ShowImg(self.images['请调整'])
+
+
+        except Exception as e:
+            print(str(e.args))
+            logging.error(str(e.args))
+
+    def Switch1(self):
         try:
         try:
             if self.terminal_statu.timeout() is False:
             if self.terminal_statu.timeout() is False:
                 terminal_statu = message.terminal_node_statu()
                 terminal_statu = message.terminal_node_statu()

+ 2 - 2
出口引导节点/main_window_XmSgj.py

@@ -138,8 +138,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
                 item.setForeground(QColor(80, 80, 80))
                 item.setForeground(QColor(80, 80, 80))
                 show_str = "%s %s排队中" % (dict['car_number'], self.get_unit(dict['unit']))
                 show_str = "%s %s排队中" % (dict['car_number'], self.get_unit(dict['unit']))
                 if index != 40:
                 if index != 40:
-                    show_str = "%s 剩%d分钟" % (dict['car_number'],
-                                                int((dict['row_number() over(order by queue_time)'] - 1) * 5 *
+                    show_str = "%s 预计剩%d分钟" % (dict['car_number'],
+                                                int((dict['row_number() over(order by queue_time)']) * 5 *
                                                     self.pick_wait_weight[index][0]['wait_weight']))
                                                     self.pick_wait_weight[index][0]['wait_weight']))
             elif (dict['statu'] == 1):  # 工作
             elif (dict['statu'] == 1):  # 工作
                 item.setForeground(QColor('blue'))
                 item.setForeground(QColor('blue'))

+ 41 - 17
管理节点/config.json

@@ -24,37 +24,59 @@
                 "mq_password": "123456",
                 "mq_password": "123456",
                 //态交换机需要订阅的端口列表  厦门的
                 //态交换机需要订阅的端口列表  厦门的
                 "mq_statu_exchange_keys": [["statu_ex","dispatch_11_statu_port"],
                 "mq_statu_exchange_keys": [["statu_ex","dispatch_11_statu_port"],
-                                            ["statu_ex","dispatch_21_statu_port"]]
+                                            ["statu_ex","dispatch_12_statu_port"],
+                                            ["statu_ex","dispatch_13_statu_port"],
+                                            ["statu_ex","dispatch_14_statu_port"],
+                                            ["statu_ex","dispatch_21_statu_port"],
+                                            ["statu_ex","dispatch_22_statu_port"],
+                                            ["statu_ex","dispatch_23_statu_port"],
+                                            ["statu_ex","dispatch_24_statu_port"],
+                                            ["statu_ex","dispatch_25_statu_port"],
+                                            ["statu_ex","dispatch_31_statu_port"],
+                                            ["statu_ex","dispatch_32_statu_port"]]
               },
               },
   //  车库配置
   //  车库配置
   "parking_config":{
   "parking_config":{
                       //窗口名称
                       //窗口名称
+//                      "window_title" : "贵阳万寿竹路智能立体停车库 车位管理系统-V1.0",
+//                      "process_title" : "贵阳万寿竹路智能停车库停取排队信息",
                       "window_title" : "厦门上古街智能立体停车库 车位管理系统-V1.0",
                       "window_title" : "厦门上古街智能立体停车库 车位管理系统-V1.0",
-                      "process_title" : "贵阳万寿竹路智能停车库停取排队信息",
+                      "process_title" : "上古街智能停车库停取排队信息",
                       // 车高分级 三级分别限高多少
                       // 车高分级 三级分别限高多少
                       "grade1" : 1,
                       "grade1" : 1,
                       "grade2" : 2,
                       "grade2" : 2,
                       "grade3" : 3,
                       "grade3" : 3,
                       "grade4" : 4,
                       "grade4" : 4,
-                      //行(厦门14行,贵阳10)
-                      "row" : 10 ,
+                      //行(厦门15行,贵阳10)
+                      "row" : 15 ,
                       //列(厦门6列,贵阳12)
                       //列(厦门6列,贵阳12)
-                      "column" : 12,
-                      //单元号  贵阳项目1-2, 楚天项目1-3,厦门项目11-32
-                      "unit" : 11,
+                      "column" : 6,
+
                       //出入口和控制室占用车位
                       //出入口和控制室占用车位
-                      //              单元号:占用数量
-                      "in_occupy_space":{"11":3,"21":3},
-                      "out_occupy_space":{"11":3,"21":3},
-                      "controlroom_occupy_space":{"11":0,"21":3},
+                      //              单元号:占用数量贵阳参数
+//                      "in_occupy_space":{"11":3,"21":3},
+//                      "out_occupy_space":{"11":3,"21":3},
+//                      "controlroom_occupy_space":{"11":0,"21":3},
+//                      "parking_unit_list" : { "A": 11,"B":21},
+//                      "process_unit_list" : { "A": [11], "B":[21],"所有":[11,21]},
+//                      "db_unit_list" : { "A": [11], "B": [21],"所有":[11,21]},
+//
+                      // 厦门参数
+                      "in_occupy_space":{"11":2,"12":3,"13":3,"14":3,"21":3,"22":3,"23":3,"24":3,"25":2,"31": 3,"32":3},
+                      "out_occupy_space":{"11":2,"12":3,"13":3,"14":3,"21":3,"22":3,"23":3,"24":3,"25":2,"31": 3,"32":3},
+                      "controlroom_occupy_space":{"11":0,"12":0,"13":0,"14":0,"21":0,"22":0,"23":0,"24":0,"25":0,"31": 0,"32":0},
+
+                      "parking_unit_list" : { "A1": 11,"A2": 12,"A3": 13,"A4": 14, "B1":21, "B2":22, "B3":23, "B4":24, "B5":25, "C1":31, "C2":32},
+                      "process_unit_list" : { "A": [11,12,13,14], "B":[21,22,23,24,25],"C": [31,32]},
+                      "db_unit_list" : { "A1": 11,"A2": 12,"A3": 13,"A4": 14, "B1":21, "B2":22, "B3":23, "B4":24, "B5":25, "C1":31, "C2":32,"A": [11,12,13,14], "B":[21,22,23,24,25],"C": [31,32],"所有":[11,12,13,14,21,22,23,24,25,31,32]},
 
 
-                      "parking_unit_list" : { "A": 11, "B":21},
-                      "process_unit_list" : { "A": [11], "B":[21],"所有":[11,21]},
-                      "db_unit_list" : { "A": [11], "B": [21],"所有":[11,21]},
+                      "init_parking_unit" : "C2",
+                      "init_process_unit" : "C",
+                      "init_db_unit_list" : "C",
                       //层高显示减值
                       //层高显示减值
-                      "floor_minus" : 0,
+                      "floor_minus" : 2,
                       //密码
                       //密码
-                      "passwd" : "123456",
+                      "passwd" : "",
                       "record_title": [
                       "record_title": [
                         "序号",
                         "序号",
                         "唯一码",
                         "唯一码",
@@ -90,7 +112,9 @@
                         "号牌可信度",
                         "号牌可信度",
                         "号牌识别时间点",
                         "号牌识别时间点",
                         "号牌全景图",
                         "号牌全景图",
-                        "号牌特写图"
+                        "号牌特写图",
+                        "存车夹车杆雷达信息",
+                        "取车夹车杆雷达信息"
                       ]
                       ]
   }
   }
 }
 }

+ 44 - 45
管理节点/window_controller/main_window.py

@@ -13,7 +13,7 @@ import threading
 import time
 import time
 import traceback
 import traceback
 from functools import partial
 from functools import partial
-
+from django.core.serializers.json import DjangoJSONEncoder
 import requests
 import requests
 from PyQt5.QtCore import QSize, QDateTime
 from PyQt5.QtCore import QSize, QDateTime
 from PyQt5.QtCore import pyqtSignal, QTimer, Qt
 from PyQt5.QtCore import pyqtSignal, QTimer, Qt
@@ -48,7 +48,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         self.label.setText(self.parking_config['process_title'])
         self.label.setText(self.parking_config['process_title'])
         # 数据存储
         # 数据存储
         # 全矩阵
         # 全矩阵
-        self.btn_positions = [(i, j) for i in range(self.parking_config['row']-1, -1, -1) for j in
+        self.btn_positions = [(i, j) for i in range(self.parking_config['row'] - 1, -1, -1) for j in
                               range(self.parking_config['column'])]
                               range(self.parking_config['column'])]
         # # 奇数矩阵
         # # 奇数矩阵
         # self.btn_positions1 = [(i, j) for i in range(self.parking_config['row']-1, -1, -1) for j in
         # self.btn_positions1 = [(i, j) for i in range(self.parking_config['row']-1, -1, -1) for j in
@@ -57,7 +57,6 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         # self.btn_positions2 = [(i, j) for i in range(self.parking_config['row']-1, -1, -1) for j in
         # self.btn_positions2 = [(i, j) for i in range(self.parking_config['row']-1, -1, -1) for j in
         #                       range(2,self.parking_config['column']+2,2)]
         #                       range(2,self.parking_config['column']+2,2)]
 
 
-
         self._dispatch_statu = {}
         self._dispatch_statu = {}
         self.unit_space_is_init = False
         self.unit_space_is_init = False
         self.process_is_init = False
         self.process_is_init = False
@@ -66,7 +65,6 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         self.process_unit_list = self.parking_config['process_unit_list']
         self.process_unit_list = self.parking_config['process_unit_list']
         self.db_unit_list = self.parking_config['db_unit_list']
         self.db_unit_list = self.parking_config['db_unit_list']
 
 
-
         self.label_dict = {}
         self.label_dict = {}
         self.list_widget_dict = {}
         self.list_widget_dict = {}
 
 
@@ -104,9 +102,14 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         self.process_comboBox.addItems(list(self.process_unit_list.keys()))
         self.process_comboBox.addItems(list(self.process_unit_list.keys()))
         self.db_comboBox.addItems(list(self.db_unit_list.keys()))
         self.db_comboBox.addItems(list(self.db_unit_list.keys()))
 
 
-        self.db_unit = self.db_comboBox.currentText()
-        self.process_unit = self.process_comboBox.currentText()
-        self.parking_unit = self.unit_comboBox.currentText()
+        self.parking_unit = self.parking_config['init_parking_unit']
+        self.process_unit = self.parking_config['init_process_unit']
+        self.db_unit = self.parking_config['init_db_unit_list']
+
+        self.unit_comboBox.setCurrentText(self.parking_unit)
+        self.process_comboBox.setCurrentText(self.process_unit)
+        self.db_comboBox.setCurrentText(self.db_unit)
+
         self.updata_record_btn.clicked.connect(self.updata_record)
         self.updata_record_btn.clicked.connect(self.updata_record)
 
 
         # 调度状态指示灯
         # 调度状态指示灯
@@ -147,7 +150,6 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         self.update_unit_btn.clicked.connect(self.update_btn_click)
         self.update_unit_btn.clicked.connect(self.update_btn_click)
         self.update_unit_btn_2.clicked.connect(self.update_process_unit_btn_click)
         self.update_unit_btn_2.clicked.connect(self.update_process_unit_btn_click)
 
 
-
         # 初始化显示库位高度
         # 初始化显示库位高度
         font = QFont()
         font = QFont()
         font.setFamily('宋体')
         font.setFamily('宋体')
@@ -167,6 +169,14 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
                                             31: {}, 32: {}}
                                             31: {}, 32: {}}
 
 
         self.last_command_dict = {}
         self.last_command_dict = {}
+        self.unit_label.setText(self.parking_unit)
+
+        self.pushButton_grade1.setIcon(QIcon(QPixmap("./images/grade1.png")))
+        self.pushButton_grade2.setIcon(QIcon(QPixmap("./images/grade2.png")))
+        self.pushButton_grade3.setIcon(QIcon(QPixmap("./images/grade3.png")))
+        self.pushButton_grade1.setText("车高等级:" + str(self.parking_config['grade1']))
+        self.pushButton_grade2.setText("车高等级:" + str(self.parking_config['grade2']))
+        self.pushButton_grade3.setText("车高等级:" + str(self.parking_config['grade3']))
 
 
         # 数据库更新时间
         # 数据库更新时间
         self.db_update_time = time.time() - 3
         self.db_update_time = time.time() - 3
@@ -224,7 +234,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
             self.data_lock.acquire()
             self.data_lock.acquire()
             unit = self.parking_unit_list[self.parking_unit]
             unit = self.parking_unit_list[self.parking_unit]
             # 车位管理
             # 车位管理
-            self.parkspace_show(unit, self.parking_config["in_occupy_space"][str(unit)],
+            self.parkspace_show(self.parking_unit, self.parking_config["in_occupy_space"][str(unit)],
                                 self.parking_config["out_occupy_space"][str(unit)],
                                 self.parking_config["out_occupy_space"][str(unit)],
                                 self.parking_config["controlroom_occupy_space"][str(unit)])
                                 self.parking_config["controlroom_occupy_space"][str(unit)])
             # # 流程监控
             # # 流程监控
@@ -242,10 +252,10 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         # 当前选中时间内指定单元记录数据
         # 当前选中时间内指定单元记录数据
         if len(self.db_unit) != 1 and self.db_unit_list[self.db_unit] is not None:
         if len(self.db_unit) != 1 and self.db_unit_list[self.db_unit] is not None:
             self.db_unit_park_dict = self.db.query_park_count_in_time_and_unit(self.in_date, self.out_date,
             self.db_unit_park_dict = self.db.query_park_count_in_time_and_unit(self.in_date, self.out_date,
-                                                                                   self.db_unit_list[self.db_unit])
+                                                                               self.db_unit_list[self.db_unit])
             self.db_unit_pick_dict = self.db.query_pick_count_out_time_and_unit(self.in_date, self.out_date,
             self.db_unit_pick_dict = self.db.query_pick_count_out_time_and_unit(self.in_date, self.out_date,
-                                                                                    self.db_unit_list[
-                                                                                        self.db_unit])
+                                                                                self.db_unit_list[
+                                                                                    self.db_unit])
 
 
         # 当前选中时间内指定总单元记录数据
         # 当前选中时间内指定总单元记录数据
         if len(self.db_unit) == 1:
         if len(self.db_unit) == 1:
@@ -269,7 +279,6 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         else:
         else:
             statu = self._dispatch_statu[key].statu
             statu = self._dispatch_statu[key].statu
             dispatch_node_statu = message.dispatch_node_statu()
             dispatch_node_statu = message.dispatch_node_statu()
-            print(dispatch_node_statu)
             try:
             try:
                 tf.Parse(statu, dispatch_node_statu)
                 tf.Parse(statu, dispatch_node_statu)
             except Exception:
             except Exception:
@@ -289,35 +298,23 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
 
 
     # 车位显示
     # 车位显示
     def parkspace_show(self, unit, in_occupy_space, out_occupy_space, controlroom_occupy_space):
     def parkspace_show(self, unit, in_occupy_space, out_occupy_space, controlroom_occupy_space):
-        self.unit_label.setText(self.get_unit(unit))
-        self.pushButton_grade1.setIcon(QIcon(QPixmap("./images/grade1.png")))
-        self.pushButton_grade2.setIcon(QIcon(QPixmap("./images/grade2.png")))
-        self.pushButton_grade3.setIcon(QIcon(QPixmap("./images/grade3.png")))
-        self.pushButton_grade1.setText("车高等级:" + str(self.parking_config['grade1']))
-        self.pushButton_grade2.setText("车高等级:" + str(self.parking_config['grade2']))
-        self.pushButton_grade3.setText("车高等级:" + str(self.parking_config['grade3']))
 
 
         # 绘制车位按钮
         # 绘制车位按钮
         if self.space_dict is None:
         if self.space_dict is None:
             return
             return
-        space_dict = copy.deepcopy(self.space_dict)
-        is_show_car_number = self.car_number_rbtn_2.isChecked()
 
 
-        if self.unit_space_dict != space_dict:
+        is_show_car_number = self.car_number_rbtn_2.isChecked()
+        if self.unit_space_dict != self.space_dict:
+            self.unit_label.setText(unit)
             print('有修改')
             print('有修改')
             if self.unit_space_is_init == False:
             if self.unit_space_is_init == False:
-                self.unit_space_dict = copy.deepcopy(space_dict)
+                self.unit_space_dict = copy.deepcopy(self.space_dict)
                 self.unit_space_is_init = True
                 self.unit_space_is_init = True
 
 
                 is_drawIn = False
                 is_drawIn = False
                 is_drawOut = False
                 is_drawOut = False
                 is_drawControlRoom = False
                 is_drawControlRoom = False
-                # 根据下标奇偶数分成两组
-                even_space_list = space_dict[::2]
-                odd_space_list = space_dict[1::2]
-
-
-                for park, position in zip(space_dict, self.btn_positions):
+                for park, position in zip(self.space_dict, self.btn_positions):
                     btn = QPushButton()
                     btn = QPushButton()
                     font, text_str, stylesheet, tool_tip = self.get_btn_show(park)
                     font, text_str, stylesheet, tool_tip = self.get_btn_show(park)
                     btn.setFont(font)
                     btn.setFont(font)
@@ -341,17 +338,20 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
                         btn.clicked.connect(self.park_btn_left_click)
                         btn.clicked.connect(self.park_btn_left_click)
                         self.unit_gridLayout.addWidget(btn, *position)
                         self.unit_gridLayout.addWidget(btn, *position)
             else:
             else:
-                for park1, park2 in zip(self.unit_space_dict, space_dict):
-                    if park1 != park2:
-                        font, text_str, stylesheet, tool_tip = self.get_btn_show(park2)
-                        results = self.findChild(QPushButton, str(park2["table_id"]))
+                temp1 = copy.deepcopy(self.unit_space_dict)
+                temp2 = copy.deepcopy(self.space_dict)
+                merged = zip(temp1, temp2)
+                for last_space,space in merged:
+                    if last_space.values() != space.values():
+                        font, text_str, stylesheet, tool_tip = self.get_btn_show(space)
+                        results = self.findChild(QPushButton, str(space["table_id"]))
                         if results is None:
                         if results is None:
                             return
                             return
                         results.setFont(font)
                         results.setFont(font)
                         results.setText(text_str)
                         results.setText(text_str)
                         results.setStyleSheet(stylesheet)
                         results.setStyleSheet(stylesheet)
                         results.setToolTip(tool_tip)
                         results.setToolTip(tool_tip)
-                self.unit_space_dict = copy.deepcopy(space_dict)
+                self.unit_space_dict = copy.deepcopy(self.space_dict)
         if self.show_model != is_show_car_number:
         if self.show_model != is_show_car_number:
             self.show_model = is_show_car_number
             self.show_model = is_show_car_number
             for park in self.unit_space_dict:
             for park in self.unit_space_dict:
@@ -581,9 +581,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
     def btn_pickUp(self, dict, table_process_mod):
     def btn_pickUp(self, dict, table_process_mod):
         if self.is_input_pwd() is True:
         if self.is_input_pwd() is True:
             table = message.pick_table()
             table = message.pick_table()
-            # table.statu = message.table_statu()
             table.statu.table_process_mod = table_process_mod
             table.statu.table_process_mod = table_process_mod
-            a = dict['primary_key']
             table.primary_key = dict["primary_key"]
             table.primary_key = dict["primary_key"]
             self.rabbitmq.publish("command_ex", "user_pick_command_request_port",
             self.rabbitmq.publish("command_ex", "user_pick_command_request_port",
                                   tf.MessageToString(table, as_utf8=True))
                                   tf.MessageToString(table, as_utf8=True))
@@ -780,8 +778,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         # elif park["statu"] == 10 and park["remark"] is not None:
         # elif park["statu"] == 10 and park["remark"] is not None:
         # text_str = park["remark"][0:4]
         # text_str = park["remark"][0:4]
         # font.setPointSize(20)
         # font.setPointSize(20)
-        elif (park["statu"] == 2 or park["statu"] == 1 or park["statu"] == 4) and park[
-            "car_number"] is not None and self.car_number_rbtn_2.isChecked():
+        elif 0 < park["statu"] < 6 and park["car_number"] is not None and self.car_number_rbtn_2.isChecked():
             text_str = park["car_number"]
             text_str = park["car_number"]
             font.setPointSize(20)
             font.setPointSize(20)
 
 
@@ -792,8 +789,6 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         background_color = ""
         background_color = ""
         background_image = ""
         background_image = ""
 
 
-
-
         # 设置背景图
         # 设置背景图
         if park["height_level"] == self.parking_config['grade1']:
         if park["height_level"] == self.parking_config['grade1']:
             background_image = "background-image: url(./images/grade1.png);"
             background_image = "background-image: url(./images/grade1.png);"
@@ -829,7 +824,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         for key in park.keys():
         for key in park.keys():
             if park[key] is None:
             if park[key] is None:
                 park[key] = ''
                 park[key] = ''
-        tool_tip = json.dumps(park)
+        tool_tip = json.dumps(park, cls=DjangoJSONEncoder)
         return font, text_str, stylesheet, tool_tip
         return font, text_str, stylesheet, tool_tip
 
 
     # 显示车辆图片
     # 显示车辆图片
@@ -936,7 +931,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         if self.is_pwd is False:
         if self.is_pwd is False:
             # 组装显示信息
             # 组装显示信息
             # 实例取车窗口,并以模态窗口形式显示
             # 实例取车窗口,并以模态窗口形式显示
-            pickup_window = PickupWindow(tipstr)
+            pickup_window = PickupWindow(tipstr,self.parking_config['passwd'])
             pickup_window.exec_()
             pickup_window.exec_()
 
 
             res = pickup_window.getResult()
             res = pickup_window.getResult()
@@ -974,7 +969,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
                 item.setForeground(QColor('red'))
                 item.setForeground(QColor('red'))
                 show_str = dict['car_number'] + " 故障!"
                 show_str = dict['car_number'] + " 故障!"
             show_str = "存 %d入 %d出 %d号车位 %s %s " % (
             show_str = "存 %d入 %d出 %d号车位 %s %s " % (
-            dict["import_id"], dict["export_id"], parkspace.table_id, show_str, str(dict["queue_time"].time()))
+                dict["import_id"], dict["export_id"], parkspace.table_id, show_str, str(dict["queue_time"].time()))
 
 
         elif dict['type'] == 2:  # 取车指令
         elif dict['type'] == 2:  # 取车指令
             item.setBackground(QColor(250, 240, 200))
             item.setBackground(QColor(250, 240, 200))
@@ -991,7 +986,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
                 item.setForeground(QColor('red'))
                 item.setForeground(QColor('red'))
                 show_str = dict['car_number'] + " 故障!"
                 show_str = dict['car_number'] + " 故障!"
             show_str = "取 %d入 %d出 %d号车位 %s %s " % (
             show_str = "取 %d入 %d出 %d号车位 %s %s " % (
-            dict["import_id"], dict["export_id"], parkspace.table_id, show_str, str(dict["queue_time"].time()))
+                dict["import_id"], dict["export_id"], parkspace.table_id, show_str, str(dict["queue_time"].time()))
         item.setText(show_str)
         item.setText(show_str)
         return item
         return item
 
 
@@ -1044,6 +1039,10 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
             return '号牌特写图'
             return '号牌特写图'
         elif key == 'remark':
         elif key == 'remark':
             return '备注'
             return '备注'
+        elif key == 'remark_time':
+            return '备注时间'
+        elif key == 'apply_end_time':
+            return '预约结束时间'
         else:
         else:
             return '未知'
             return '未知'
 
 

+ 4 - 3
管理节点/window_controller/pickup_passwd_window.py

@@ -8,7 +8,6 @@ from PyQt5.QtWidgets import QDialog, QMessageBox, QListWidgetItem, QLineEdit, QL
 import ui.pickupUi as pickupUi
 import ui.pickupUi as pickupUi
 
 
 # 取车密码
 # 取车密码
-pickup_password = "123456"
 
 
 
 
 # 窗口返回值
 # 窗口返回值
@@ -23,10 +22,12 @@ class ResultReturn(Enum):
 
 
 class PickupWindow(QDialog, pickupUi.Ui_Dialog):
 class PickupWindow(QDialog, pickupUi.Ui_Dialog):
 
 
-    def __init__(self,tipstr):  # 默认使用空列表传值
+    def __init__(self,tipstr,passwd):  # 默认使用空列表传值
         super(PickupWindow, self).__init__()
         super(PickupWindow, self).__init__()
         self.setupUi(self)
         self.setupUi(self)
         self.setWindowTitle("密码确认")
         self.setWindowTitle("密码确认")
+        self.pickup_password = passwd
+
         if tipstr is not None:
         if tipstr is not None:
             self.input_passwd_label.setText(tipstr)
             self.input_passwd_label.setText(tipstr)
         # 设置初始窗口大小
         # 设置初始窗口大小
@@ -70,7 +71,7 @@ class PickupWindow(QDialog, pickupUi.Ui_Dialog):
         self.setResult(ResultReturn.DEFAULT)
         self.setResult(ResultReturn.DEFAULT)
         # 获取密码输入
         # 获取密码输入
         password = self.password_lineEdit.text()
         password = self.password_lineEdit.text()
-        if password != pickup_password:
+        if password != self.pickup_password:
             self.password_lineEdit.clear()
             self.password_lineEdit.clear()
             QMessageBox.warning(self, "提示", "密码错误,请重新输入", QMessageBox.Yes)
             QMessageBox.warning(self, "提示", "密码错误,请重新输入", QMessageBox.Yes)
         else:
         else: