Prechádzať zdrojové kódy

2024/01/29 测试收费系统外网请求

wk 1 rok pred
rodič
commit
eae324776f

+ 20 - 0
mytool/db_helper/db_operation.py

@@ -19,7 +19,23 @@ class DBOperation:
     # 更新
     def update(self, sql):
         return self._db.execute_sql(sql)
+    def query_total_empty_space(self):
+        sql = "select count(*) from space where statu=0 and car_number is NULL"
+        return self._db.query_all_sql(sql)
+    def query_large_empty_space(self):
+        sql = "select count(*) from space where statu=0 and car_number is NULL and height>=1.7"
+        return self._db.query_all_sql(sql)
+    def query_small_empty_space(self):
+        sql = "select count(*) from space where statu=0 and car_number is NULL and height<1.7"
+        return self._db.query_all_sql(sql)
+
+    def query_queue_condition(self, unit):
+        sql = "Select * , row_number() over(order by queue_time)  from command_queue where statu <2 and unit=%s"
+        return self._db.query_all_sql(sql, unit)
 
+    def query_command_queue_count_in_unit(self, unit):
+        sql = "select count(*) from command_queue where statu <2 and unit=%s"
+        return self._db.query_all_sql(sql, unit)
     def query_parking_in_unit_tableid(self, unit, tableid):
         sql = "select * from space WHERE unit=%s and table_id=%s"
         return self._db.query_all_sql(sql, (unit, tableid))
@@ -153,6 +169,10 @@ class DBOperation:
         sql = "update space set remark=%s where id=%s"
         return self._db.execute_sql(sql, (remark, space_id))
 
+    def update_command_queue_upload_statu_in_car_number(self,car_number):
+        sql = "update command_queue set upload_statu=1 where car_number=%s"
+        return self._db.execute_sql(sql, car_number)
+
     def clear_space_data(self, space_id):
         sql = "update space set car_number=NULL,primary_key=NULL,statu=0,space_info=NULL,measure_buffer=NULL,plate_color=NULL,plate_type=NULL,plate_confidence=NULL,recognition_time=NULL,plate_full_image=NULL,plate_clip_image=NULL,remark=NULL where id=%s"
         return self._db.execute_sql(sql, space_id)

+ 109 - 36
指令检查节点/check_command_XmSgj.py

@@ -3,7 +3,9 @@ import datetime
 import hashlib
 import json
 import sys
+import threading
 import time
+from collections import namedtuple
 from concurrent.futures import ThreadPoolExecutor
 
 import requests
@@ -49,18 +51,34 @@ class CommandChecker:
                                     db_config['db_user'], db_config['db_password'])
         self._dispatch_statu = {}
         self._measure_statu = {}
+        self.push_pickqueue_thread = threading.Thread(target=self.push_pickqueue)
+
+        # 入场推送地址
         self._in_url = 'http://szdy.xmsztc.cn/Api/CarInEntry'
+        # 查询推送地址
         self._query_url = 'http://szdy.xmsztc.cn/Api/GetBill'
+        # 出场推送地址
         self._out_url = 'http://szdy.xmsztc.cn/Api/CarOutEntry'
+        # 手机端出场推送地址
         self._out_url_phone = 'https://sztc.xmsztc.cn/api/operateOutScene/sgjOutSceneRecord'
-        # self._out_url_phone = 'https://sztc.smartcityxm.com/api/operateOutScene/sgjOutSceneRecord'  测试环境
-
+        # self._out_url_phone = 'https://sztc.smartcityxm.com/api/operateOutScene/sgjOutSceneRecord'  #测试环境
+        # 余位
+        # self._park_surplus_url = 'https://sztc.xmsztc.cn/api/basicPark/sgjParkSurplus'
+        self._park_surplus_url = 'https://sztc.smartcityxm.com/api/basicPark/sgjParkSurplus'  #测试环境
+        # 公众号
+        # self._queue_url = 'https://sztc.xmsztc.cn/api/operateOutScene/sgjSendPickUpMsg'
+        self._queue_url = 'https://sztc.smartcityxm.com/api/operateOutScene/sgjSendPickUpMsg' # 测试环境
+        # 手机端appid
         self._app_id_phone = '20230412151327035'
+        # 手机端app秘钥
         self._appSecret_phone = 'Dl8gh4GGspOu9UU7YW00b55wE93ga6aF'
-
+        # 云端秘钥
         self._secret_key = 'anzs74aph8ac8dy6tj48t05js6zpkgx5'
+        # 车场ID
         self._parking_id = '2306041414159951342'
+        # 云端appid
         self._app_id = 'blbc5zkpyymaicd3'
+        # 云端主地址
         self._http = 'https://sztc.smartcityxm.com/wechath5/#/pagesA/parkingBill/inrecord_parking?inRecordId='
 
         self.chnnId_in = {11: '2307241522121721333', 12: '2306041439573931681', 13: '2307241531240571925',
@@ -76,6 +94,7 @@ class CommandChecker:
 
         self._plate_color = {'蓝色': '1', '黑色': '2', '黄色': '3', '白色': '4', '绿色': '5', '其他': '6'}
 
+        self.push_pickqueue_thread.start()
     def get_in_url(self):
         return self._in_url
 
@@ -311,8 +330,11 @@ class CommandChecker:
             if len(whitelist_res) <= 0:
                 # 向收费系统推送入场信息
                 print("----------------------------推送入场-----------------------------" + str(datetime.datetime.now()))
-                request = self.get_request_data(park_table, 'in')
-                statu, response = self.push_http_request(self._in_url, request)
+                in_dict = self.get_cloud_request_data(park_table, 'in')
+                headers_dict,park_surplus_dict,pickup_queue_dict,phone_out_dict = self.get_phone_request_data(park_table.car_number,park_table.primary_key,park_table.unit_id, 'in')
+                statu, response = self.push_http_request(self._in_url, in_dict)
+                print("----------------------------推送余位-----------------------------" + str(datetime.datetime.now()))
+                self.push_http_request(self._park_surplus_url, park_surplus_dict, headers_dict)
 
                 if statu != message.eNormal:
                     park_table.statu.execute_statu = statu
@@ -388,11 +410,19 @@ class CommandChecker:
                 # if pick_table.unit_id != 31 and pick_table.unit_id != 32:
                 # 直接向收费系统发送出场
                 print("****************************收费系统推送出场****************************" + str(datetime.datetime.now()))
-                request, request2,headers = self.get_request_data(pick_table, 'out')
-                self.push_http_request(self._out_url, request)
+                out_dict = self.get_cloud_request_data(pick_table, 'out')
+                headers_dict,park_surplus_dict,pickup_queue_dict,phone_out_dict = self.get_phone_request_data(pick_table.car_number,pick_table.primary_key,pick_table.unit_id, 'out')
+                self.push_http_request(self._out_url, out_dict)
                 print("\n")
                 print("****************************手机端推送出场****************************" + str(datetime.datetime.now()))
-                self.push_http_request(self._out_url_phone, request2,headers)
+                self.push_http_request(self._out_url_phone, phone_out_dict,headers_dict)
+                print("\n")
+                print("****************************推送余位****************************" + str(datetime.datetime.now()))
+                self.push_http_request(self._park_surplus_url, park_surplus_dict, headers_dict)
+                print("\n")
+                print("****************************推送排队****************************" + str(datetime.datetime.now()))
+                self.push_http_request(self._queue_url, pickup_queue_dict, headers_dict)
+                print("\n")
                 print('强制取车')
             else:
                 print("****************************查询白名单****************************" + str(datetime.datetime.now()))
@@ -400,17 +430,28 @@ class CommandChecker:
                 if len(whitelist_res) <= 0:
                     # 向收费系统查询缴费情况
                     print("****************************查询缴费情况****************************" + str(datetime.datetime.now()))
-                    request = self.get_request_data(pick_table, 'query')
+                    request = self.get_cloud_request_data(pick_table, 'query')
                     statu, response = self.push_http_request(self._query_url, request)
                     if statu == message.eNormal:
                         if ('Data' in response.keys()) and ('UnpaidMoney' in response['Data'].keys()):
                             if response['Data']['UnpaidMoney'] == 0:
                                 # 向收费系统推送车辆离场
-                                print("****************************收费系统推送出场****************************" + str(datetime.datetime.now()))
-                                request, request2,headers = self.get_request_data(pick_table, 'out')
-                                statu, response = self.push_http_request(self._out_url, request)
+                                print("****************************收费系统推送出场****************************" + str(
+                                    datetime.datetime.now()))
+                                out_dict = self.get_cloud_request_data(pick_table, 'out')
+                                headers_dict, park_surplus_dict, pickup_queue_dict, phone_out_dict = self.get_phone_request_data(
+                                    pick_table.car_number, pick_table.primary_key, pick_table.unit_id, 'out')
+                                self.push_http_request(self._out_url, out_dict)
+                                print("\n")
                                 print("****************************手机端推送出场****************************" + str(datetime.datetime.now()))
-                                self.push_http_request(self._out_url_phone, request2, headers)
+                                self.push_http_request(self._out_url_phone, phone_out_dict, headers_dict)
+                                print("\n")
+                                print("****************************推送余位****************************" + str(datetime.datetime.now()))
+                                self.push_http_request(self._park_surplus_url, park_surplus_dict, headers_dict)
+                                print("\n")
+                                print("****************************推送排队****************************" + str(datetime.datetime.now()))
+                                self.push_http_request(self._queue_url, pickup_queue_dict, headers_dict)
+                                print("\n")
                                 if statu != message.eNormal:
                                     pick_table.statu.execute_statu = statu
                                     pick_table.statu.statu_description = response
@@ -435,7 +476,7 @@ class CommandChecker:
 
         return pick_table
 
-    def get_request_data(self, table, param):
+    def get_cloud_request_data(self, table, param):
         print(param+":")
         # 创建请求
         msgId = str(uuid.uuid1()) + '@' + table.car_number
@@ -448,6 +489,7 @@ class CommandChecker:
         color = self._plate_color[
             table.car_number_info.plate_color] if table.car_number_info.plate_color in self._plate_color.keys() else \
             self._plate_color['其他']
+        # 入场请求
         if param == 'in':
             data = http_client.HttpRequest.InDate(self._parking_id, table.car_number,
                                                   str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')),
@@ -455,8 +497,10 @@ class CommandChecker:
                                                   table.car_number_info.plate_type, color,
                                                   table.car_number_info.plate_full_image,
                                                   table.car_number_info.plate_clip_image, table.primary_key)
+        # 查询请求
         elif param == 'query':
             data = http_client.HttpRequest.QueryData(table.primary_key, self._parking_id)
+        # 出场请求
         elif param == 'out':
             data = http_client.HttpRequest.OutDate(self._parking_id, table.car_number,
                                                    table.primary_key,
@@ -465,30 +509,59 @@ class CommandChecker:
                                                    table.car_number_info.plate_type, color,
                                                    table.car_number_info.plate_full_image,
                                                    table.car_number_info.plate_clip_image)
-
-            appid_iphone = self._app_id_phone
-            time_iphone = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
-            sign_iphone = appid_iphone + time_iphone + self._appSecret_phone
-            hl_iphone = hashlib.md5()
-            hl_iphone.update(sign_iphone.encode(encoding='utf-8'))
-            sign_iphone = hl_iphone.hexdigest()
-            headers = {
-                "Appid": appid_iphone,
-                "Time": time_iphone,
-                "Sign": sign_iphone
-
-            }
-            data2 = {
-                "parkId": self._parking_id,
-                "licenesePlate": table.car_number,
-                "inRecordId": table.primary_key
-            }
-
         request = http_client.HttpRequest(msgId, AppId, time, sign, data)
-        if param == 'out':
-            return request.__dict__, data2,headers
         return request.__dict__
-
+    def get_phone_request_data(self, car_number,primary_key,unit_id, param):
+        print(param+":")
+        # 创建请求
+        appid_iphone = self._app_id_phone
+        time_iphone = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
+        sign_iphone = appid_iphone + time_iphone + self._appSecret_phone
+        hl_iphone = hashlib.md5()
+        hl_iphone.update(sign_iphone.encode(encoding='utf-8'))
+        sign_iphone = hl_iphone.hexdigest()
+        headers_dict = {
+            "Appid": appid_iphone,
+            "Time": time_iphone,
+            "Sign": sign_iphone
+
+        }
+        print("****************************查询余位****************************" + str(datetime.datetime.now()))
+        total = self.db.query_total_empty_space()[0]['count(*)']
+        large = self.db.query_large_empty_space()[0]['count(*)']
+        small = self.db.query_small_empty_space()[0]['count(*)']
+        park_surplus_dict = {
+            "parkId": self._parking_id,
+            "totalParkSurplus": total,
+            "largeParkSurplus": large,
+            "smallParkSurplus": small
+        }
+        print("****************************查询排队信息****************************" + str(datetime.datetime.now()))
+        command_count = self.db.query_command_queue_count_in_unit(unit_id)[0]['count(*)']
+        pickup_queue_dict = {
+            "licenesePlate": car_number,
+            "inRecordId": primary_key,
+            "garageNo": self.get_unit_str(unit_id),
+            "waitNum": command_count,
+            "remainingTime": command_count * 2
+        }
+        phone_out_dict = {
+            "parkId": self._parking_id,
+            "licenesePlate": car_number,
+            "inRecordId": primary_key
+        }
+        return headers_dict,park_surplus_dict,pickup_queue_dict,phone_out_dict
+    def push_pickqueue(self):
+        while True:
+            for unit in self.chnnId_in.keys():
+                res = self.db.query_queue_condition(unit)
+                for dict in res:
+                    if dict['upload_statu'] is None and dict['row_number() over(order by queue_time)'] == 2:
+                        print("===============================排队为1 推送排队详情=========================" + str(datetime.datetime.now()))
+                        headers_dict, park_surplus_dict, pickup_queue_dict, phone_out_dict = self.get_phone_request_data(dict['car_number'], dict['primary_key'], dict['unit'], 'queue 1')
+                        self.push_http_request(self._queue_url, pickup_queue_dict, headers_dict)
+                        self.db.update_command_queue_upload_statu_in_car_number(dict['car_number'])
+            time.sleep(1)
     def get_unit_str(self, unit):
         if unit == 11:
             return 'A1'

+ 4 - 4
指令检查节点/node.py

@@ -125,7 +125,7 @@ class MyHttpRequestHandler(BaseHTTPRequestHandler):
 
 
 def recv_post():
-    ts = HTTPServer(('192.168.2.101', 8899), MyHttpRequestHandler)
+    ts = HTTPServer(('192.168.2.57', 8899), MyHttpRequestHandler)
     ts.serve_forever()
 
 if __name__ == '__main__':
@@ -155,8 +155,8 @@ if __name__ == '__main__':
         if key.find("measure") >= 0:
             g_rabbitmq.bind_statu_callback(ex,key,checker.receive_measure_info)
 
-    # t1 = threading.Thread(target=recv_post)
+    t1 = threading.Thread(target=recv_post)
     g_rabbitmq.start()
-    # t1.start()
+    t1.start()
     g_rabbitmq.join()
-    # t1.join()
+    t1.join()

+ 23 - 22
管理节点/config.json

@@ -2,20 +2,20 @@
              //  数据库配置
               "db_config": {
                 //数据库IP地址
-                "db_ip": "127.0.0.1",
+                "db_ip": "10.211.11.201",
                 // 端口号
                 "db_port": 3306,
                 // 数据库名
-                "db_name": "project",
+                "db_name": "gy_project",
                 // 用户名
-                "db_user": "root",
+                "db_user": "zx",
                 // 用户密码
                 "db_password": "123456"
               },
               //  rabbitmq配置
               "mq_config": {
                 // rabbitmq服务器ip地址
-                "mq_ip": "192.168.3.200",
+                "mq_ip": "10.211.11.201",
                 // 端口
                 "mq_port": "5672",
                 // 用户名
@@ -24,34 +24,35 @@
                 "mq_password": "123456",
                 //态交换机需要订阅的端口列表  厦门的
                 "mq_statu_exchange_keys": [["statu_ex","dispatch_11_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"]]
+                                            ["statu_ex","dispatch_21_statu_port"]]
               },
   //  车库配置
   "parking_config":{
                       //窗口名称
                       "window_title" : "厦门上古街智能立体停车库 车位管理系统-V1.0",
+                      "process_title" : "贵阳万寿竹路智能停车库停取排队信息",
                       // 车高分级 三级分别限高多少
-                      "grade1" : 1.48,
-                      "grade2" : 1.50,
-                      "grade3" : 2.05,
-                      "grade4" : 1.80,
+                      "grade1" : 1,
+                      "grade2" : 2,
+                      "grade3" : 3,
+                      "grade4" : 4,
                       //行(厦门14行,贵阳10)
-                      "row" : 14,
+                      "row" : 10 ,
                       //列(厦门6列,贵阳12)
-                      "column" : 6,
+                      "column" : 12,
                       //单元号  贵阳项目1-2, 楚天项目1-3,厦门项目11-32
-                      "unit" : 32,
+                      "unit" : 11,
+                      //出入口和控制室占用车位
+                      //              单元号:占用数量
+                      "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]},
                       //层高显示减值
-                      "floor_minus" : 2,
+                      "floor_minus" : 0,
                       //密码
                       "passwd" : "123456",
                       "record_title": [

+ 109 - 172
管理节点/ui/spaceUi.py

@@ -14,25 +14,21 @@ from PyQt5 import QtCore, QtGui, QtWidgets
 class Ui_MainWindow(object):
     def setupUi(self, MainWindow):
         MainWindow.setObjectName("MainWindow")
-        MainWindow.resize(1375, 864)
+        MainWindow.resize(1694, 864)
         MainWindow.setStyleSheet("")
         self.centralwidget = QtWidgets.QWidget(MainWindow)
         self.centralwidget.setObjectName("centralwidget")
-        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
-        self.verticalLayout.setObjectName("verticalLayout")
+        self.horizontalLayout_17 = QtWidgets.QHBoxLayout(self.centralwidget)
+        self.horizontalLayout_17.setObjectName("horizontalLayout_17")
         self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
         self.tabWidget.setObjectName("tabWidget")
         self.parkingspace = QtWidgets.QWidget()
         self.parkingspace.setObjectName("parkingspace")
         self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.parkingspace)
         self.verticalLayout_5.setObjectName("verticalLayout_5")
-        self.verticalLayout_total = QtWidgets.QVBoxLayout()
-        self.verticalLayout_total.setObjectName("verticalLayout_total")
-        self.park_widget = QtWidgets.QWidget(self.parkingspace)
-        self.park_widget.setObjectName("park_widget")
-        self.horizontalLayout = QtWidgets.QHBoxLayout(self.park_widget)
-        self.horizontalLayout.setObjectName("horizontalLayout")
-        self.edit_box = QtWidgets.QWidget(self.park_widget)
+        self.horizontalLayout_20 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_20.setObjectName("horizontalLayout_20")
+        self.edit_box = QtWidgets.QWidget(self.parkingspace)
         self.edit_box.setEnabled(True)
         self.edit_box.setStyleSheet("")
         self.edit_box.setObjectName("edit_box")
@@ -48,17 +44,6 @@ class Ui_MainWindow(object):
         font.setPointSize(23)
         self.unit_comboBox.setFont(font)
         self.unit_comboBox.setObjectName("unit_comboBox")
-        self.unit_comboBox.addItem("")
-        self.unit_comboBox.addItem("")
-        self.unit_comboBox.addItem("")
-        self.unit_comboBox.addItem("")
-        self.unit_comboBox.addItem("")
-        self.unit_comboBox.addItem("")
-        self.unit_comboBox.addItem("")
-        self.unit_comboBox.addItem("")
-        self.unit_comboBox.addItem("")
-        self.unit_comboBox.addItem("")
-        self.unit_comboBox.addItem("")
         self.horizontalLayout_4.addWidget(self.unit_comboBox)
         self.update_unit_btn = QtWidgets.QPushButton(self.show_unit_box)
         self.update_unit_btn.setMinimumSize(QtCore.QSize(0, 35))
@@ -91,9 +76,6 @@ class Ui_MainWindow(object):
         self.data_box.setObjectName("data_box")
         self.gridLayout = QtWidgets.QGridLayout(self.data_box)
         self.gridLayout.setObjectName("gridLayout")
-        self.find_lineEdit = QtWidgets.QLineEdit(self.data_box)
-        self.find_lineEdit.setObjectName("find_lineEdit")
-        self.gridLayout.addWidget(self.find_lineEdit, 0, 1, 1, 1)
         self.key_rbtn = QtWidgets.QRadioButton(self.data_box)
         font = QtGui.QFont()
         font.setPointSize(11)
@@ -102,6 +84,15 @@ class Ui_MainWindow(object):
         self.key_rbtn.setIcon(icon)
         self.key_rbtn.setObjectName("key_rbtn")
         self.gridLayout.addWidget(self.key_rbtn, 1, 0, 1, 1)
+        self.find_btn = QtWidgets.QPushButton(self.data_box)
+        self.find_btn.setStyleSheet("")
+        icon = QtGui.QIcon.fromTheme("./images/1480.png")
+        self.find_btn.setIcon(icon)
+        self.find_btn.setObjectName("find_btn")
+        self.gridLayout.addWidget(self.find_btn, 1, 1, 1, 1)
+        self.find_lineEdit = QtWidgets.QLineEdit(self.data_box)
+        self.find_lineEdit.setObjectName("find_lineEdit")
+        self.gridLayout.addWidget(self.find_lineEdit, 0, 1, 1, 1)
         self.car_number_rbtn = QtWidgets.QRadioButton(self.data_box)
         font = QtGui.QFont()
         font.setPointSize(11)
@@ -111,12 +102,6 @@ class Ui_MainWindow(object):
         self.car_number_rbtn.setChecked(True)
         self.car_number_rbtn.setObjectName("car_number_rbtn")
         self.gridLayout.addWidget(self.car_number_rbtn, 0, 0, 1, 1)
-        self.find_btn = QtWidgets.QPushButton(self.data_box)
-        self.find_btn.setStyleSheet("")
-        icon = QtGui.QIcon.fromTheme("./images/1480.png")
-        self.find_btn.setIcon(icon)
-        self.find_btn.setObjectName("find_btn")
-        self.gridLayout.addWidget(self.find_btn, 1, 1, 1, 1)
         self.verticalLayout_10.addWidget(self.data_box)
         self.detailed_box = QtWidgets.QGroupBox(self.edit_box)
         self.detailed_box.setObjectName("detailed_box")
@@ -128,7 +113,6 @@ class Ui_MainWindow(object):
         self.parking_listWidget.setFont(font)
         self.parking_listWidget.setObjectName("parking_listWidget")
         self.verticalLayout_3.addWidget(self.parking_listWidget)
-        self.verticalLayout_3.setStretch(0, 7)
         self.verticalLayout_10.addWidget(self.detailed_box)
         self.groupBox_4 = QtWidgets.QGroupBox(self.edit_box)
         self.groupBox_4.setAlignment(QtCore.Qt.AlignCenter)
@@ -168,63 +152,42 @@ class Ui_MainWindow(object):
         self.verticalLayout_10.setStretch(3, 8)
         self.verticalLayout_10.setStretch(4, 2)
         self.verticalLayout_10.setStretch(5, 1)
-        self.horizontalLayout.addWidget(self.edit_box)
-        self.unit_gridLayout = QtWidgets.QGridLayout()
-        self.unit_gridLayout.setObjectName("unit_gridLayout")
-        self.horizontalLayout.addLayout(self.unit_gridLayout)
-        self.widget = QtWidgets.QWidget(self.park_widget)
-        self.widget.setMinimumSize(QtCore.QSize(435, 740))
-        self.widget.setObjectName("widget")
-        self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.widget)
+        self.horizontalLayout_20.addWidget(self.edit_box)
+        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
         self.verticalLayout_4.setObjectName("verticalLayout_4")
-        self.groupBox = QtWidgets.QGroupBox(self.widget)
+        self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_9.setObjectName("horizontalLayout_9")
+        self.verticalLayout = QtWidgets.QVBoxLayout()
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.groupBox = QtWidgets.QGroupBox(self.parkingspace)
         sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth())
         self.groupBox.setSizePolicy(sizePolicy)
         self.groupBox.setObjectName("groupBox")
-        self.horizontalLayout_9 = QtWidgets.QHBoxLayout(self.groupBox)
-        self.horizontalLayout_9.setObjectName("horizontalLayout_9")
-        self.verticalLayout_7 = QtWidgets.QVBoxLayout()
-        self.verticalLayout_7.setObjectName("verticalLayout_7")
+        self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.pushButton_3 = QtWidgets.QPushButton(self.groupBox)
+        font = QtGui.QFont()
+        font.setFamily("新宋体")
+        font.setPointSize(20)
+        self.pushButton_3.setFont(font)
+        self.pushButton_3.setStyleSheet("background-color:rgb(0,162,232);")
+        icon = QtGui.QIcon.fromTheme("./images/1480.png")
+        self.pushButton_3.setIcon(icon)
+        self.pushButton_3.setObjectName("pushButton_3")
+        self.gridLayout_2.addWidget(self.pushButton_3, 0, 0, 1, 2)
         self.pushButton_4 = QtWidgets.QPushButton(self.groupBox)
         font = QtGui.QFont()
         font.setFamily("新宋体")
-        font.setPointSize(11)
+        font.setPointSize(20)
         self.pushButton_4.setFont(font)
         self.pushButton_4.setStyleSheet("background-color:rgb(195,195,195);")
         icon = QtGui.QIcon.fromTheme("./images/1480.png")
         self.pushButton_4.setIcon(icon)
         self.pushButton_4.setObjectName("pushButton_4")
-        self.verticalLayout_7.addWidget(self.pushButton_4)
-        self.pushButton_2 = QtWidgets.QPushButton(self.groupBox)
-        font = QtGui.QFont()
-        font.setFamily("新宋体")
-        font.setPointSize(11)
-        self.pushButton_2.setFont(font)
-        self.pushButton_2.setStyleSheet("background-color:rgb(248,239,71)")
-        icon = QtGui.QIcon.fromTheme("./images/1480.png")
-        self.pushButton_2.setIcon(icon)
-        self.pushButton_2.setObjectName("pushButton_2")
-        self.verticalLayout_7.addWidget(self.pushButton_2)
-        self.pushButton = QtWidgets.QPushButton(self.groupBox)
-        font = QtGui.QFont()
-        font.setFamily("新宋体")
-        font.setPointSize(11)
-        self.pushButton.setFont(font)
-        self.pushButton.setStyleSheet("background-color:rgb(255,130,130)")
-        icon = QtGui.QIcon.fromTheme("./images/1480.png")
-        self.pushButton.setIcon(icon)
-        self.pushButton.setObjectName("pushButton")
-        self.verticalLayout_7.addWidget(self.pushButton)
-        self.pushButton_6 = QtWidgets.QPushButton(self.groupBox)
-        font = QtGui.QFont()
-        font.setPointSize(11)
-        self.pushButton_6.setFont(font)
-        self.pushButton_6.setStyleSheet("background-color:rgb(140,100,220);")
-        self.pushButton_6.setObjectName("pushButton_6")
-        self.verticalLayout_7.addWidget(self.pushButton_6)
+        self.gridLayout_2.addWidget(self.pushButton_4, 0, 2, 1, 2)
         self.pushButton_5 = QtWidgets.QPushButton(self.groupBox)
         palette = QtGui.QPalette()
         brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
@@ -374,27 +337,41 @@ class Ui_MainWindow(object):
         self.pushButton_5.setPalette(palette)
         font = QtGui.QFont()
         font.setFamily("新宋体")
-        font.setPointSize(11)
+        font.setPointSize(20)
         self.pushButton_5.setFont(font)
         self.pushButton_5.setStyleSheet("background-color:rgb(102,255,255);")
         self.pushButton_5.setObjectName("pushButton_5")
-        self.verticalLayout_7.addWidget(self.pushButton_5)
-        self.pushButton_3 = QtWidgets.QPushButton(self.groupBox)
+        self.gridLayout_2.addWidget(self.pushButton_5, 1, 0, 1, 2)
+        self.pushButton_2 = QtWidgets.QPushButton(self.groupBox)
         font = QtGui.QFont()
         font.setFamily("新宋体")
-        font.setPointSize(11)
-        self.pushButton_3.setFont(font)
-        self.pushButton_3.setStyleSheet("background-color:rgb(0,162,232);")
+        font.setPointSize(20)
+        self.pushButton_2.setFont(font)
+        self.pushButton_2.setStyleSheet("background-color:rgb(248,239,71)")
         icon = QtGui.QIcon.fromTheme("./images/1480.png")
-        self.pushButton_3.setIcon(icon)
-        self.pushButton_3.setObjectName("pushButton_3")
-        self.verticalLayout_7.addWidget(self.pushButton_3)
-        self.horizontalLayout_9.addLayout(self.verticalLayout_7)
-        self.verticalLayout_6 = QtWidgets.QVBoxLayout()
-        self.verticalLayout_6.setObjectName("verticalLayout_6")
+        self.pushButton_2.setIcon(icon)
+        self.pushButton_2.setObjectName("pushButton_2")
+        self.gridLayout_2.addWidget(self.pushButton_2, 1, 2, 1, 2)
+        self.pushButton_6 = QtWidgets.QPushButton(self.groupBox)
+        font = QtGui.QFont()
+        font.setPointSize(20)
+        self.pushButton_6.setFont(font)
+        self.pushButton_6.setStyleSheet("background-color:rgb(140,100,220);")
+        self.pushButton_6.setObjectName("pushButton_6")
+        self.gridLayout_2.addWidget(self.pushButton_6, 2, 0, 1, 2)
+        self.pushButton = QtWidgets.QPushButton(self.groupBox)
+        font = QtGui.QFont()
+        font.setFamily("新宋体")
+        font.setPointSize(20)
+        self.pushButton.setFont(font)
+        self.pushButton.setStyleSheet("background-color:rgb(255,130,130)")
+        icon = QtGui.QIcon.fromTheme("./images/1480.png")
+        self.pushButton.setIcon(icon)
+        self.pushButton.setObjectName("pushButton")
+        self.gridLayout_2.addWidget(self.pushButton, 2, 2, 1, 2)
         self.pushButton_grade1 = QtWidgets.QPushButton(self.groupBox)
         font = QtGui.QFont()
-        font.setPointSize(14)
+        font.setPointSize(9)
         self.pushButton_grade1.setFont(font)
         self.pushButton_grade1.setLayoutDirection(QtCore.Qt.LeftToRight)
         self.pushButton_grade1.setStyleSheet("text-align:left;")
@@ -403,10 +380,10 @@ class Ui_MainWindow(object):
         self.pushButton_grade1.setIcon(icon)
         self.pushButton_grade1.setIconSize(QtCore.QSize(35, 35))
         self.pushButton_grade1.setObjectName("pushButton_grade1")
-        self.verticalLayout_6.addWidget(self.pushButton_grade1)
+        self.gridLayout_2.addWidget(self.pushButton_grade1, 3, 0, 1, 1)
         self.pushButton_grade2 = QtWidgets.QPushButton(self.groupBox)
         font = QtGui.QFont()
-        font.setPointSize(14)
+        font.setPointSize(9)
         self.pushButton_grade2.setFont(font)
         self.pushButton_grade2.setLayoutDirection(QtCore.Qt.LeftToRight)
         self.pushButton_grade2.setStyleSheet("text-align:left;")
@@ -415,10 +392,10 @@ class Ui_MainWindow(object):
         self.pushButton_grade2.setIcon(icon1)
         self.pushButton_grade2.setIconSize(QtCore.QSize(35, 35))
         self.pushButton_grade2.setObjectName("pushButton_grade2")
-        self.verticalLayout_6.addWidget(self.pushButton_grade2)
+        self.gridLayout_2.addWidget(self.pushButton_grade2, 3, 1, 1, 2)
         self.pushButton_grade3 = QtWidgets.QPushButton(self.groupBox)
         font = QtGui.QFont()
-        font.setPointSize(14)
+        font.setPointSize(9)
         self.pushButton_grade3.setFont(font)
         self.pushButton_grade3.setLayoutDirection(QtCore.Qt.LeftToRight)
         self.pushButton_grade3.setStyleSheet("text-align:left;")
@@ -427,41 +404,48 @@ class Ui_MainWindow(object):
         self.pushButton_grade3.setIcon(icon2)
         self.pushButton_grade3.setIconSize(QtCore.QSize(35, 35))
         self.pushButton_grade3.setObjectName("pushButton_grade3")
-        self.verticalLayout_6.addWidget(self.pushButton_grade3)
-        self.horizontalLayout_9.addLayout(self.verticalLayout_6)
-        self.verticalLayout_4.addWidget(self.groupBox)
-        self.plate_full_image_box = QtWidgets.QGroupBox(self.widget)
-        self.plate_full_image_box.setObjectName("plate_full_image_box")
-        self.gridLayout_2 = QtWidgets.QGridLayout(self.plate_full_image_box)
-        self.gridLayout_2.setObjectName("gridLayout_2")
-        self.plate_full_image_label = QtWidgets.QLabel(self.plate_full_image_box)
-        self.plate_full_image_label.setMinimumSize(QtCore.QSize(0, 355))
-        self.plate_full_image_label.setText("")
-        self.plate_full_image_label.setScaledContents(True)
-        self.plate_full_image_label.setAlignment(QtCore.Qt.AlignCenter)
-        self.plate_full_image_label.setObjectName("plate_full_image_label")
-        self.gridLayout_2.addWidget(self.plate_full_image_label, 0, 0, 1, 1)
-        self.verticalLayout_4.addWidget(self.plate_full_image_box)
-        self.plate_clip_image_box = QtWidgets.QGroupBox(self.widget)
+        self.gridLayout_2.addWidget(self.pushButton_grade3, 3, 3, 1, 1)
+        self.verticalLayout.addWidget(self.groupBox)
+        self.horizontalLayout_9.addLayout(self.verticalLayout)
+        self.plate_clip_image_box = QtWidgets.QGroupBox(self.parkingspace)
         self.plate_clip_image_box.setObjectName("plate_clip_image_box")
-        self.gridLayout_3 = QtWidgets.QGridLayout(self.plate_clip_image_box)
-        self.gridLayout_3.setObjectName("gridLayout_3")
+        self.horizontalLayout = QtWidgets.QHBoxLayout(self.plate_clip_image_box)
+        self.horizontalLayout.setObjectName("horizontalLayout")
         self.plate_clip_image_label = QtWidgets.QLabel(self.plate_clip_image_box)
         self.plate_clip_image_label.setText("")
         self.plate_clip_image_label.setScaledContents(True)
         self.plate_clip_image_label.setAlignment(QtCore.Qt.AlignCenter)
         self.plate_clip_image_label.setObjectName("plate_clip_image_label")
-        self.gridLayout_3.addWidget(self.plate_clip_image_label, 0, 0, 1, 1)
-        self.verticalLayout_4.addWidget(self.plate_clip_image_box)
+        self.horizontalLayout.addWidget(self.plate_clip_image_label)
+        self.horizontalLayout_9.addWidget(self.plate_clip_image_box)
+        self.plate_full_image_box = QtWidgets.QGroupBox(self.parkingspace)
+        self.plate_full_image_box.setObjectName("plate_full_image_box")
+        self.horizontalLayout_18 = QtWidgets.QHBoxLayout(self.plate_full_image_box)
+        self.horizontalLayout_18.setObjectName("horizontalLayout_18")
+        self.plate_full_image_label = QtWidgets.QLabel(self.plate_full_image_box)
+        self.plate_full_image_label.setText("")
+        self.plate_full_image_label.setScaledContents(True)
+        self.plate_full_image_label.setAlignment(QtCore.Qt.AlignCenter)
+        self.plate_full_image_label.setObjectName("plate_full_image_label")
+        self.horizontalLayout_18.addWidget(self.plate_full_image_label)
+        self.horizontalLayout_9.addWidget(self.plate_full_image_box)
+        self.horizontalLayout_9.setStretch(0, 1)
+        self.horizontalLayout_9.setStretch(1, 2)
+        self.horizontalLayout_9.setStretch(2, 2)
+        self.verticalLayout_4.addLayout(self.horizontalLayout_9)
+        self.widget = QtWidgets.QWidget(self.parkingspace)
+        self.widget.setObjectName("widget")
+        self.horizontalLayout_19 = QtWidgets.QHBoxLayout(self.widget)
+        self.horizontalLayout_19.setObjectName("horizontalLayout_19")
+        self.unit_gridLayout = QtWidgets.QGridLayout()
+        self.unit_gridLayout.setObjectName("unit_gridLayout")
+        self.horizontalLayout_19.addLayout(self.unit_gridLayout)
+        self.verticalLayout_4.addWidget(self.widget)
         self.verticalLayout_4.setStretch(0, 1)
-        self.verticalLayout_4.setStretch(1, 6)
-        self.verticalLayout_4.setStretch(2, 3)
-        self.horizontalLayout.addWidget(self.widget)
-        self.horizontalLayout.setStretch(0, 2)
-        self.horizontalLayout.setStretch(1, 5)
-        self.horizontalLayout.setStretch(2, 3)
-        self.verticalLayout_total.addWidget(self.park_widget)
-        self.verticalLayout_5.addLayout(self.verticalLayout_total)
+        self.verticalLayout_4.setStretch(1, 2)
+        self.horizontalLayout_20.addLayout(self.verticalLayout_4)
+        self.horizontalLayout_20.setStretch(1, 1)
+        self.verticalLayout_5.addLayout(self.horizontalLayout_20)
         self.tabWidget.addTab(self.parkingspace, "")
         self.process = QtWidgets.QWidget()
         self.process.setObjectName("process")
@@ -495,9 +479,6 @@ class Ui_MainWindow(object):
         font.setPointSize(44)
         self.process_comboBox.setFont(font)
         self.process_comboBox.setObjectName("process_comboBox")
-        self.process_comboBox.addItem("")
-        self.process_comboBox.addItem("")
-        self.process_comboBox.addItem("")
         self.horizontalLayout_6.addWidget(self.process_comboBox)
         self.update_unit_btn_2 = QtWidgets.QPushButton(self.groupBox_2)
         self.update_unit_btn_2.setMinimumSize(QtCore.QSize(0, 65))
@@ -543,21 +524,6 @@ class Ui_MainWindow(object):
         font.setPointSize(23)
         self.db_comboBox.setFont(font)
         self.db_comboBox.setObjectName("db_comboBox")
-        self.db_comboBox.addItem("")
-        self.db_comboBox.addItem("")
-        self.db_comboBox.addItem("")
-        self.db_comboBox.addItem("")
-        self.db_comboBox.addItem("")
-        self.db_comboBox.addItem("")
-        self.db_comboBox.addItem("")
-        self.db_comboBox.addItem("")
-        self.db_comboBox.addItem("")
-        self.db_comboBox.addItem("")
-        self.db_comboBox.addItem("")
-        self.db_comboBox.addItem("")
-        self.db_comboBox.addItem("")
-        self.db_comboBox.addItem("")
-        self.db_comboBox.addItem("")
         self.horizontalLayout_7.addWidget(self.db_comboBox)
         self.db_find_Button = QtWidgets.QPushButton(self.record_groupBox)
         self.db_find_Button.setMinimumSize(QtCore.QSize(0, 35))
@@ -775,10 +741,10 @@ class Ui_MainWindow(object):
         self.verticalLayout_8.setStretch(0, 1)
         self.verticalLayout_8.setStretch(1, 3)
         self.tabWidget.addTab(self.db_manage, "")
-        self.verticalLayout.addWidget(self.tabWidget)
+        self.horizontalLayout_17.addWidget(self.tabWidget)
         MainWindow.setCentralWidget(self.centralwidget)
         self.menubar = QtWidgets.QMenuBar(MainWindow)
-        self.menubar.setGeometry(QtCore.QRect(0, 0, 1375, 23))
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 1694, 23))
         self.menubar.setObjectName("menubar")
         self.menu = QtWidgets.QMenu(self.menubar)
         self.menu.setObjectName("menu")
@@ -815,66 +781,37 @@ class Ui_MainWindow(object):
         _translate = QtCore.QCoreApplication.translate
         MainWindow.setWindowTitle(_translate("MainWindow", "贵阳碧海花园万寿竹路智能立体停车库 车位管理系统-V1.0"))
         self.show_unit_box.setTitle(_translate("MainWindow", "显示单元"))
-        self.unit_comboBox.setItemText(0, _translate("MainWindow", "A1"))
-        self.unit_comboBox.setItemText(1, _translate("MainWindow", "A2"))
-        self.unit_comboBox.setItemText(2, _translate("MainWindow", "A3"))
-        self.unit_comboBox.setItemText(3, _translate("MainWindow", "A4"))
-        self.unit_comboBox.setItemText(4, _translate("MainWindow", "B1"))
-        self.unit_comboBox.setItemText(5, _translate("MainWindow", "B2"))
-        self.unit_comboBox.setItemText(6, _translate("MainWindow", "B3"))
-        self.unit_comboBox.setItemText(7, _translate("MainWindow", "B4"))
-        self.unit_comboBox.setItemText(8, _translate("MainWindow", "B5"))
-        self.unit_comboBox.setItemText(9, _translate("MainWindow", "C1"))
-        self.unit_comboBox.setItemText(10, _translate("MainWindow", "C2"))
         self.update_unit_btn.setText(_translate("MainWindow", "更改"))
         self.show_box.setTitle(_translate("MainWindow", "显示模式"))
         self.parkingid_rbtn.setText(_translate("MainWindow", "车位号/楼层号"))
         self.car_number_rbtn_2.setText(_translate("MainWindow", "车牌号"))
         self.data_box.setTitle(_translate("MainWindow", "信息查询"))
         self.key_rbtn.setText(_translate("MainWindow", "唯一码"))
-        self.car_number_rbtn.setText(_translate("MainWindow", "车牌号"))
         self.find_btn.setText(_translate("MainWindow", "查找"))
+        self.car_number_rbtn.setText(_translate("MainWindow", "车牌号"))
         self.detailed_box.setTitle(_translate("MainWindow", "车位详细"))
         self.groupBox_4.setTitle(_translate("MainWindow", "  PLC连接状态              数据库连接状态"))
         self.groupBox_3.setTitle(_translate("MainWindow", "库位号"))
         self.unit_label.setText(_translate("MainWindow", "A-1"))
         self.groupBox.setTitle(_translate("MainWindow", "车位说明"))
+        self.pushButton_3.setText(_translate("MainWindow", "出入口"))
         self.pushButton_4.setText(_translate("MainWindow", "空闲车位"))
+        self.pushButton_5.setText(_translate("MainWindow", "取车中"))
         self.pushButton_2.setText(_translate("MainWindow", "占用车位"))
-        self.pushButton.setText(_translate("MainWindow", "故障车位"))
         self.pushButton_6.setText(_translate("MainWindow", "存车中"))
-        self.pushButton_5.setText(_translate("MainWindow", "取车中"))
-        self.pushButton_3.setText(_translate("MainWindow", "出入口"))
+        self.pushButton.setText(_translate("MainWindow", "故障车位"))
         self.pushButton_grade1.setText(_translate("MainWindow", "限高1.48"))
         self.pushButton_grade2.setText(_translate("MainWindow", "限高1.50"))
         self.pushButton_grade3.setText(_translate("MainWindow", "限高2.05"))
-        self.plate_full_image_box.setTitle(_translate("MainWindow", "车辆全景图"))
         self.plate_clip_image_box.setTitle(_translate("MainWindow", "车牌特写图"))
+        self.plate_full_image_box.setTitle(_translate("MainWindow", "车辆全景图"))
         self.tabWidget.setTabText(self.tabWidget.indexOf(self.parkingspace), _translate("MainWindow", "车位管理"))
         self.label.setText(_translate("MainWindow", "上古街智能立体停车库停取车排队信息"))
         self.groupBox_2.setTitle(_translate("MainWindow", "显示单元"))
-        self.process_comboBox.setItemText(0, _translate("MainWindow", "A"))
-        self.process_comboBox.setItemText(1, _translate("MainWindow", "B"))
-        self.process_comboBox.setItemText(2, _translate("MainWindow", "C"))
         self.update_unit_btn_2.setText(_translate("MainWindow", "更改"))
         self.tabWidget.setTabText(self.tabWidget.indexOf(self.process), _translate("MainWindow", "流程监控"))
         self.record_groupBox.setTitle(_translate("MainWindow", "记录查询"))
         self.db_unit_label.setText(_translate("MainWindow", "单元号:  "))
-        self.db_comboBox.setItemText(0, _translate("MainWindow", "A1"))
-        self.db_comboBox.setItemText(1, _translate("MainWindow", "A2"))
-        self.db_comboBox.setItemText(2, _translate("MainWindow", "A3"))
-        self.db_comboBox.setItemText(3, _translate("MainWindow", "A4"))
-        self.db_comboBox.setItemText(4, _translate("MainWindow", "B1"))
-        self.db_comboBox.setItemText(5, _translate("MainWindow", "B2"))
-        self.db_comboBox.setItemText(6, _translate("MainWindow", "B3"))
-        self.db_comboBox.setItemText(7, _translate("MainWindow", "B4"))
-        self.db_comboBox.setItemText(8, _translate("MainWindow", "B5"))
-        self.db_comboBox.setItemText(9, _translate("MainWindow", "C1"))
-        self.db_comboBox.setItemText(10, _translate("MainWindow", "C2"))
-        self.db_comboBox.setItemText(11, _translate("MainWindow", "A"))
-        self.db_comboBox.setItemText(12, _translate("MainWindow", "B"))
-        self.db_comboBox.setItemText(13, _translate("MainWindow", "C"))
-        self.db_comboBox.setItemText(14, _translate("MainWindow", "所有"))
         self.db_find_Button.setText(_translate("MainWindow", "查询"))
         self.park_radioButton.setText(_translate("MainWindow", "存车"))
         self.pick_radioButton.setText(_translate("MainWindow", "取车"))

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 861 - 1020
管理节点/ui/spaceUi.ui


+ 129 - 118
管理节点/window_controller/main_window.py

@@ -33,6 +33,7 @@ import copy
 import async_communication as cmt
 import mytool.db_helper.db_operation as spmng
 
+
 class MainWindow(QMainWindow, sui.Ui_MainWindow):
     # # 取车界面信号
     # signal_dict = pyqtSignal(dict)
@@ -43,24 +44,37 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         self.command_dict = {}
         self.unit_space_dict = None
         self.setupUi(self)
+        self.parking_config = parking_config
+        self.label.setText(self.parking_config['process_title'])
         # 数据存储
-        self.btn_positions = [(i, j) for i in range(parking_config['row'], -1, -1) for j in
-                              range(parking_config['column'])]
+        # 全矩阵
+        self.btn_positions = [(i, j) for i in range(self.parking_config['row']-1, -1, -1) for j in
+                              range(self.parking_config['column'])]
+        # # 奇数矩阵
+        # self.btn_positions1 = [(i, j) for i in range(self.parking_config['row']-1, -1, -1) for j in
+        #                       range(1,self.parking_config['column'],2)]
+        # # 偶数矩阵
+        # 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)]
+
+
         self._dispatch_statu = {}
         self.unit_space_is_init = False
         self.process_is_init = False
-        self.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], '所有': None}
+
+        self.parking_unit_list = self.parking_config['parking_unit_list']
+        self.process_unit_list = self.parking_config['process_unit_list']
+        self.db_unit_list = self.parking_config['db_unit_list']
+
+
         self.label_dict = {}
         self.list_widget_dict = {}
 
-        self.setWindowTitle(parking_config['window_title'])
+        self.setWindowTitle(self.parking_config['window_title'])
         # 锁
         self.data_lock = threading.Lock()
 
         # 配置导入初始化数据库和rabbitmq
-        self.parking_config = parking_config
         self.db = spmng.DBOperation(db_config['db_ip'], db_config['db_port'], db_config['db_name'],
                                     db_config['db_user'], db_config['db_password'])
         self.rabbitmq = cmt.RabbitAsyncCommunicator(mq_config['mq_ip'], mq_config['mq_port'], mq_config['mq_user'],
@@ -76,7 +90,6 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         self.out_date = None
         self.in_date = None
 
-
         # 拓展功能
         self.action_queryBlacklist.triggered.connect(self.btn_query_blacklist)
         self.action_addBlacklist.triggered.connect(self.btn_add_blacklist)
@@ -87,7 +100,11 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         self.action_deleteWhitelist.triggered.connect(self.btn_delete_whitelist)
 
         # 记录表单元号,流程表单元号,车位表单元号
-        self.record_unit = self.db_comboBox.currentText()
+        self.unit_comboBox.addItems(list(self.parking_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_unit = self.db_comboBox.currentText()
         self.process_unit = self.process_comboBox.currentText()
         self.parking_unit = self.unit_comboBox.currentText()
         self.updata_record_btn.clicked.connect(self.updata_record)
@@ -112,7 +129,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         # 数据历史记录默认设置
         self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
         self.tableWidget.itemClicked.connect(self.show_car_image)
-        self.tableWidget.setHorizontalHeaderLabels(parking_config['record_title'])
+        self.tableWidget.setHorizontalHeaderLabels(self.parking_config['record_title'])
         now = datetime.datetime.now()
 
         zero_today = now - datetime.timedelta(hours=now.hour, minutes=now.minute, seconds=now.second,
@@ -129,38 +146,25 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         self.find_btn.clicked.connect(self.find_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.unit = parking_config["unit"]
-        if self.unit == 11 or self.unit == 25 or self.unit == 32:
-            self.in_occupy_space = 2
-            self.out_occupy_space = 2
-        else:
-            self.in_occupy_space = 3
-            self.out_occupy_space = 3
-        self.controlroom_occupy_space = 0
-        key = list(self.unit_list.keys())[list(self.unit_list.values()).index(self.unit)]
-        self.unit_comboBox.setCurrentText(key)
+
+
         # 初始化显示库位高度
         font = QFont()
         font.setFamily('宋体')
         font.setBold(False)
         font.setPointSize(15)
         self.parking_listWidget.setFont(font)
-        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(parking_config['grade1']))
-        self.pushButton_grade2.setText("限高:" + str(parking_config['grade2']))
-        self.pushButton_grade3.setText("限高:" + str(parking_config['grade3']))
 
         # 数据缓存
         self.space_dict = {}
         self.record_all_unit_park_dict = {}
         self.record_all_unit_pick_dict = {}
-        self.record_unit_park_dict = {}
-        self.record_unit_pick_dict = {}
-        self.record_total_unit_park_dict = {11:{},12:{},13:{},14:{},21:{},22:{},23:{},24:{},25:{},31:{},32:{}}
-        self.record_total_unit_pick_dict = {11:{},12:{},13:{},14:{},21:{},22:{},23:{},24:{},25:{},31:{},32:{}}
+        self.db_unit_park_dict = {}
+        self.db_unit_pick_dict = {}
+        self.record_total_unit_park_dict = {11: {}, 12: {}, 13: {}, 14: {}, 21: {}, 22: {}, 23: {}, 24: {}, 25: {},
+                                            31: {}, 32: {}}
+        self.record_total_unit_pick_dict = {11: {}, 12: {}, 13: {}, 14: {}, 21: {}, 22: {}, 23: {}, 24: {}, 25: {},
+                                            31: {}, 32: {}}
 
         self.last_command_dict = {}
 
@@ -190,13 +194,12 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         while self.db_query_isClose is False:
             # 查询车位
             self.data_lock.acquire()
-            self.space_dict = self.db.query_space_in_unit(self.unit)
+            self.space_dict = self.db.query_space_in_unit(self.parking_unit_list[self.parking_unit])
 
             # 查询指令表
-            for unit in self.unit_list[self.process_unit]:
+            for unit in self.process_unit_list[self.process_unit]:
                 self.last_command_dict[unit] = self.db.query_command_all_in_unit_and_sort(unit)
 
-
             self.data_lock.release()
 
             # 数据库更新时间
@@ -214,15 +217,18 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         self.in_date = self.in_dateTimeEdit_2.dateTime().toPyDateTime().strftime("%Y-%m-%d %H:%M:%S")
         self.out_date = self.out_dateTimeEdit_2.dateTime().toPyDateTime().strftime("%Y-%m-%d %H:%M:%S")
         # 更新记录表单元号,流程表单元号,车位表单元号
-        self.record_unit = self.db_comboBox.currentText()
+        self.db_unit = self.db_comboBox.currentText()
         # 检查连接
         self.db_connect_statu = self.check_connect_statu()
         if self.db_connect_statu:
             self.data_lock.acquire()
+            unit = self.parking_unit_list[self.parking_unit]
             # 车位管理
-            self.parkspace_show(self.unit, self.in_occupy_space, self.out_occupy_space)
+            self.parkspace_show(unit, self.parking_config["in_occupy_space"][str(unit)],
+                                self.parking_config["out_occupy_space"][str(unit)],
+                                self.parking_config["controlroom_occupy_space"][str(unit)])
             # # 流程监控
-            self.process_monitoring(self.process_unit)
+            self.process_monitoring(self.process_unit_list[self.process_unit])
 
             self.data_lock.release()
 
@@ -234,22 +240,22 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         self.record_all_unit_pick_dict = self.db.query_pick_count_out_time(self.in_date, self.out_date)
 
         # 当前选中时间内指定单元记录数据
-        if len(self.record_unit) != 1 and self.unit_list[self.record_unit] is not None:
-            self.record_unit_park_dict = self.db.query_park_count_in_time_and_unit(self.in_date, self.out_date,
-                                                                                   self.unit_list[self.record_unit])
-            self.record_unit_pick_dict = self.db.query_pick_count_out_time_and_unit(self.in_date, self.out_date,
-                                                                                    self.unit_list[
-                                                                                        self.record_unit])
+        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_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_list[
+                                                                                        self.db_unit])
 
         # 当前选中时间内指定总单元记录数据
-        if len(self.record_unit) == 1:
-            for unit in self.unit_list[self.record_unit]:
+        if len(self.db_unit) == 1:
+            for unit in self.db_unit_list[self.db_unit]:
                 self.record_total_unit_park_dict[unit] = self.db.query_park_count_in_time_and_unit(self.in_date,
                                                                                                    self.out_date,
                                                                                                    unit)
                 self.record_total_unit_pick_dict[unit] = self.db.query_pick_count_out_time_and_unit(self.in_date,
                                                                                                     self.out_date,
-                                                                                                            unit)
+                                                                                                    unit)
         # # 停车数量记录
         self.show_parkingData()
         self.data_lock.release()
@@ -257,12 +263,13 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
     # 检查数据库连接
     def check_connect_statu(self):
         # 检查调度连接
-        key = "dispatch_%d_statu_port" % self.unit
+        key = "dispatch_%d_statu_port" % self.parking_unit_list[self.parking_unit]
         if (key in self._dispatch_statu) is False or self._dispatch_statu[key].timeout():
             self.plc_statu_led.setChecked(False)
         else:
             statu = self._dispatch_statu[key].statu
             dispatch_node_statu = message.dispatch_node_statu()
+            print(dispatch_node_statu)
             try:
                 tf.Parse(statu, dispatch_node_statu)
             except Exception:
@@ -279,23 +286,17 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         else:
             self.db_statu_led.setChecked(True)
         return self.db_statu_led.isChecked()
+
     # 车位显示
-    def parkspace_show(self, unit, in_occupy_space, out_occupy_space):
+    def parkspace_show(self, unit, in_occupy_space, out_occupy_space, controlroom_occupy_space):
         self.unit_label.setText(self.get_unit(unit))
-        if unit == 31 or unit == 32:
-            self.pushButton_grade1.setIcon(QIcon(QPixmap("./images/grade1.png")))
-            self.pushButton_grade2.setIcon(QIcon(QPixmap("./images/grade1.png")))
-            self.pushButton_grade3.setIcon(QIcon(QPixmap("./images/grade3.png")))
-            self.pushButton_grade1.setText("限高:" + str(self.parking_config['grade4']))
-            self.pushButton_grade2.setText("限高:" + str(self.parking_config['grade4']))
-            self.pushButton_grade3.setText("限高:" + str(self.parking_config['grade3']))
-        else:
-            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.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:
             return
@@ -311,6 +312,11 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
                 is_drawIn = False
                 is_drawOut = 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):
                     btn = QPushButton()
                     font, text_str, stylesheet, tool_tip = self.get_btn_show(park)
@@ -327,8 +333,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
                         self.unit_gridLayout.addWidget(btn, *position, 1, out_occupy_space)
                         is_drawOut = True
                     elif text_str == " 控制室 " and is_drawControlRoom is False:
-                        self.unit_gridLayout.addWidget(btn, *position, 1,
-                                                       self.parking_config['controlroom_occupy_space'])
+                        self.unit_gridLayout.addWidget(btn, *position, 1, controlroom_occupy_space)
                         is_drawControlRoom = True
                     elif text_str != "出   口" and text_str != "入   口" and text_str != " 控制室 ":
                         btn.setContextMenuPolicy(Qt.CustomContextMenu)
@@ -340,7 +345,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
                     if park1 != park2:
                         font, text_str, stylesheet, tool_tip = self.get_btn_show(park2)
                         results = self.findChild(QPushButton, str(park2["table_id"]))
-                        if results is None :
+                        if results is None:
                             return
                         results.setFont(font)
                         results.setText(text_str)
@@ -357,10 +362,11 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
                     results.setText(text_str)
                     results.setStyleSheet(stylesheet)
                     results.setToolTip(tool_tip)
+
     # 流程监控
-    def process_monitoring(self, unit_char):
+    def process_monitoring(self, process_unit_list):
         if self.process_is_init is False:
-            for i in self.unit_list[unit_char]:
+            for i in process_unit_list:
                 self.list_widget_dict[i] = QListWidget(self)
                 self.list_widget_dict[i].setContextMenuPolicy(Qt.CustomContextMenu)
                 self.list_widget_dict[i].customContextMenuRequested.connect(self.custom_right_menu)
@@ -370,7 +376,9 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
 
                 self.label_dict[i] = QLabel(self)
                 # 临时
-                self.label_dict[i].setText(unit_char + "-" + str((i % 10)))
+                # self.label_dict[i].setText(unit_char + "-" + str((i % 10)))
+                self.label_dict[i].setText(self.get_unit(i))
+
                 # self.label_dict[i].setText("停取流程")
 
                 self.label_dict[i].setAlignment(Qt.AlignCenter)
@@ -379,7 +387,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
                 self.unit_horizontalLayout.addWidget(self.label_dict[i])
             self.process_is_init = True
 
-        for i in self.unit_list[unit_char]:
+        for i in process_unit_list:
             if (i in self.last_command_dict.keys()) is False or self.last_command_dict[i] is None:
                 return
             else:
@@ -397,23 +405,25 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
     # 刷新停车数据
     def show_parkingData(self):
         # 有一个数据是空就直接返回
-        if self.record_all_unit_park_dict is None or self.record_all_unit_pick_dict is None or self.record_unit_park_dict is None or \
-                self.record_unit_pick_dict is None or self.record_total_unit_park_dict is None or self.record_total_unit_pick_dict is None:
+        if self.record_all_unit_park_dict is None or self.record_all_unit_pick_dict is None or self.db_unit_park_dict is None or \
+                self.db_unit_pick_dict is None or self.record_total_unit_park_dict is None or self.record_total_unit_pick_dict is None:
             return
-        record_all_unit_park_dict,record_all_unit_pick_dict,record_unit_park_dict,record_unit_pick_dict,record_total_unit_park_dict,record_total_unit_pick_dict = \
-        copy.deepcopy(self.record_all_unit_park_dict),copy.deepcopy(self.record_all_unit_pick_dict),copy.deepcopy(self.record_unit_park_dict),copy.deepcopy(self.record_unit_pick_dict),copy.deepcopy(self.record_total_unit_park_dict),copy.deepcopy(self.record_total_unit_pick_dict)
+        record_all_unit_park_dict, record_all_unit_pick_dict, db_unit_park_dict, db_unit_pick_dict, record_total_unit_park_dict, record_total_unit_pick_dict = \
+            copy.deepcopy(self.record_all_unit_park_dict), copy.deepcopy(self.record_all_unit_pick_dict), copy.deepcopy(
+                self.db_unit_park_dict), copy.deepcopy(self.db_unit_pick_dict), copy.deepcopy(
+                self.record_total_unit_park_dict), copy.deepcopy(self.record_total_unit_pick_dict)
         unit_park_count = unit_pick_count = 0
         all_park_count, all_pick_count = len(record_all_unit_park_dict), len(record_all_unit_pick_dict)
 
         # 当前选中时间内指定总单元记录数据
-        if len(self.record_unit) == 1:
-            for unit in self.unit_list[self.record_unit]:
+        if len(self.db_unit) == 1:
+            for unit in self.db_unit_list[self.db_unit]:
                 unit_park_count = unit_park_count + len(record_total_unit_park_dict[unit])
                 unit_pick_count = unit_pick_count + len(record_total_unit_pick_dict[unit])
 
         # 当前选中时间内指定单元记录数据
-        elif len(self.record_unit) != 1 and self.unit_list[self.record_unit] is not None:
-            unit_park_count, unit_pick_count = len(record_unit_park_dict), len(record_unit_pick_dict)
+        elif len(self.db_unit) != 1 and self.db_unit_list[self.db_unit] is not None:
+            unit_park_count, unit_pick_count = len(db_unit_park_dict), len(db_unit_pick_dict)
         else:
             unit_park_count, unit_pick_count = all_park_count, all_pick_count
 
@@ -496,22 +506,16 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
             self.unit_horizontalLayout.itemAt(i).widget().deleteLater()
         self.process_is_init = False
 
-
     def update_btn_click(self):
-        self.parking_unit = self.unit_comboBox.currentText()
-        if self.unit == self.unit_list[self.parking_unit]:
+        parking_unit = self.unit_comboBox.currentText()
+        if self.parking_unit_list[self.parking_unit] == self.parking_unit_list[parking_unit]:
             return
-        self.unit = self.unit_list[self.parking_unit]
-        if self.unit == 11 or self.unit == 25 or self.unit == 32:
-            self.in_occupy_space = 2
-            self.out_occupy_space = 2
-        else:
-            self.in_occupy_space = 3
-            self.out_occupy_space = 3
+        self.parking_unit = parking_unit
+        unit = self.parking_unit_list[self.parking_unit]
         for i in range(self.unit_gridLayout.count()):
             self.unit_gridLayout.itemAt(i).widget().deleteLater()
         self.data_lock.acquire()
-        self.space_dict = self.db.query_space_in_unit(self.unit)
+        self.space_dict = self.db.query_space_in_unit(unit)
         self.data_lock.release()
 
         self.unit_space_is_init = False
@@ -525,7 +529,6 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         else:
             QMessageBox.critical(None, "提示", "数据库连接断开!", QMessageBox.Ok)  # "退出"代表的是弹出框的标题,"你确认退出.."表示弹出框的内容
 
-
     def park_btn_right_click(self):
         if self.db_connect_statu:
             menu = QMenu(self)
@@ -580,7 +583,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
             table = message.pick_table()
             # table.statu = message.table_statu()
             table.statu.table_process_mod = table_process_mod
-            a =  dict['primary_key']
+            a = dict['primary_key']
             table.primary_key = dict["primary_key"]
             self.rabbitmq.publish("command_ex", "user_pick_command_request_port",
                                   tf.MessageToString(table, as_utf8=True))
@@ -673,25 +676,27 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
             if res is not None and len(res) > 0:
                 blacklist = ""
                 for dict in res:
-                    blacklist = blacklist+str(dict)+"\n\n"
+                    blacklist = blacklist + str(dict) + "\n\n"
                 QMessageBox.question(None, '提示', blacklist,
                                      QMessageBox.Ok)  # "退出"代表的是弹出框的标题,"你确认退出.."表示弹出框的内容
             else:
                 QMessageBox.question(None, '提示', '没有黑名单!',
                                      QMessageBox.Ok)  # "退出"代表的是弹出框的标题,"你确认退出.."表示弹出框的内容
+
     def btn_add_blacklist(self):
         if self.is_input_pwd() is True:
             fullcar = FullcarWindow()
             fullcar.exec()
             if fullcar.get_results() is True:
                 car_number = fullcar.get_text()
-                res = self.db.add_blacklist_in_car_number(car_number, datetime.datetime.now(),None,None)
+                res = self.db.add_blacklist_in_car_number(car_number, datetime.datetime.now(), None, None)
                 if res is not None and res > 0:
                     QMessageBox.question(None, '提示', '黑名单添加成功!',
                                          QMessageBox.Ok)  # "退出"代表的是弹出框的标题,"你确认退出.."表示弹出框的内容
                 else:
                     QMessageBox.question(None, '提示', '黑名单添加失败!',
                                          QMessageBox.Ok)  # "退出"代表的是弹出框的标题,"你确认退出.."表示弹出框的内容
+
     def btn_delete_blacklist(self):
         if self.is_input_pwd() is True:
             fullcar = FullcarWindow()
@@ -718,19 +723,21 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
             else:
                 QMessageBox.question(None, '提示', '没有白名单!',
                                      QMessageBox.Ok)  # "退出"代表的是弹出框的标题,"你确认退出.."表示弹出框的内容
+
     def btn_add_whitelist(self):
         if self.is_input_pwd() is True:
             fullcar = FullcarWindow()
             fullcar.exec()
             if fullcar.get_results() is True:
                 car_number = fullcar.get_text()
-                res = self.db.add_whitelist_in_car_number(car_number, datetime.datetime.now(),None,None)
+                res = self.db.add_whitelist_in_car_number(car_number, datetime.datetime.now(), None, None)
                 if res is not None and res > 0:
                     QMessageBox.question(None, '提示', '白名单添加成功!',
                                          QMessageBox.Ok)  # "退出"代表的是弹出框的标题,"你确认退出.."表示弹出框的内容
                 else:
                     QMessageBox.question(None, '提示', '黑名单删除失败!',
                                          QMessageBox.Ok)  # "退出"代表的是弹出框的标题,"你确认退出.."表示弹出框的内容
+
     def btn_delete_whitelist(self):
         if self.is_input_pwd() is True:
             fullcar = FullcarWindow()
@@ -751,11 +758,10 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
             fullcar.exec()
             if fullcar.get_results() is True:
                 remark = fullcar.get_text()
-                res = self.db.update_space_remark_in_space_id(dict['id'],remark)
+                res = self.db.update_space_remark_in_space_id(dict['id'], remark)
                 if res > 0:
                     QMessageBox.question(None, '提示', '车位添加备注成功!',
-                                            QMessageBox.Ok)  # "退出"代表的是弹出框的标题,"你确认退出.."表示弹出框的内容
-
+                                         QMessageBox.Ok)  # "退出"代表的是弹出框的标题,"你确认退出.."表示弹出框的内容
 
     def get_btn_show(self, park):
 
@@ -772,8 +778,8 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
             text_str = " 控制室 "
             font.setBold(True)
         # elif park["statu"] == 10 and park["remark"] is not None:
-            # text_str = park["remark"][0:4]
-            # font.setPointSize(20)
+        # text_str = park["remark"][0:4]
+        # 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():
             text_str = park["car_number"]
@@ -786,6 +792,18 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         background_color = ""
         background_image = ""
 
+
+
+        # 设置背景图
+        if park["height_level"] == self.parking_config['grade1']:
+            background_image = "background-image: url(./images/grade1.png);"
+        elif park["height_level"] == self.parking_config['grade2']:
+            background_image = "background-image: url(./images/grade2.png);"
+        elif park["height_level"] == self.parking_config['grade3']:
+            background_image = "background-image: url(./images/grade3.png);"
+        elif park["height_level"] == self.parking_config['grade4']:
+            background_image = "background-image: url(./images/grade1.png);"
+
         # 故障
         if park["statu"] == 10:
             background_color = "background-color:rgb(255,130,130);"
@@ -804,18 +822,9 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         # 出入口
         elif park["statu"] == 6 or park["statu"] == 7 or park["statu"] == 8:
             background_color = "background-color:rgb(0,162,232);"
+            background_image = ""
         # elif park["statu"] == 0 and park["remark"] is not None:
         #     background_color = "background-color:rgb(255,130,130);"
-
-        # 设置背景图
-        if park["height"] == self.parking_config['grade1']:
-            background_image = "background-image: url(./images/grade1.png);"
-        elif park["height"] == self.parking_config['grade2']:
-            background_image = "background-image: url(./images/grade2.png);"
-        elif park["height"] == self.parking_config['grade3']:
-            background_image = "background-image: url(./images/grade3.png);"
-        elif park["height"] == self.parking_config['grade4']:
-            background_image = "background-image: url(./images/grade1.png);"
         stylesheet = background_color + "pressed{padding-top:2px;padding-left:2px;};" + background_image + "background-repeat:no-repeat;"
         for key in park.keys():
             if park[key] is None:
@@ -852,15 +861,15 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         if self.db_connect_statu is False:
             QMessageBox.critical(None, "提示", "数据库连接断开!", QMessageBox.Ok)  # "退出"代表的是弹出框的标题,"你确认退出.."表示弹出框的内容
             return
-        if self.unit_list[self.record_unit] == None:
+        if self.db_unit_list[self.db_unit] == 0:
             unit_sql = ""
-        elif type(self.unit_list[self.record_unit]) != int:
+        elif type(self.db_unit_list[self.db_unit]) != int:
             unit_sql = "and ("
-            for i in self.unit_list[self.record_unit]:
+            for i in self.db_unit_list[self.db_unit]:
                 unit_sql = unit_sql + "unit_id=%d or " % i
             unit_sql = unit_sql[:-3] + ")"
         else:
-            unit_sql = "and (unit_id = %s)" % self.unit_list[self.record_unit]
+            unit_sql = "and (unit_id = %s)" % self.db_unit_list[self.db_unit]
 
         in_datatime = self.in_dateTimeEdit.dateTime().toPyDateTime()
         out_datatime = self.out_dateTimeEdit.dateTime().toPyDateTime()
@@ -922,6 +931,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
                                                  QMessageBox.Ok)  # "退出"代表的是弹出框的标题,"你确认退出.."表示弹出框的内容
         except Exception as e:
             pass
+
     def is_input_pwd(self, tipstr=None):
         if self.is_pwd is False:
             # 组装显示信息
@@ -948,7 +958,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         except Exception:
             parkspace.table_id = -1
 
-        show_str =""
+        show_str = ""
         if dict['type'] == 1:  # 存车指令
             item.setBackground(QColor(185, 240, 240))
             if (dict['statu'] == 0):  # 排队
@@ -963,7 +973,8 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
             elif (dict['statu'] == 3):  # 已完成
                 item.setForeground(QColor('red'))
                 show_str = dict['car_number'] + " 故障!"
-            show_str = "存 %d入 %d出 %d号车位 %s %s " % (dict["import_id"],dict["export_id"],parkspace.table_id,show_str,str(dict["queue_time"].time()))
+            show_str = "存 %d入 %d出 %d号车位 %s %s " % (
+            dict["import_id"], dict["export_id"], parkspace.table_id, show_str, str(dict["queue_time"].time()))
 
         elif dict['type'] == 2:  # 取车指令
             item.setBackground(QColor(250, 240, 200))
@@ -979,7 +990,8 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
             elif (dict['statu'] == 3):  # 已完成
                 item.setForeground(QColor('red'))
                 show_str = dict['car_number'] + " 故障!"
-            show_str = "取 %d入 %d出 %d号车位 %s %s " % (dict["import_id"],dict["export_id"],parkspace.table_id,show_str,str(dict["queue_time"].time()))
+            show_str = "取 %d入 %d出 %d号车位 %s %s " % (
+            dict["import_id"], dict["export_id"], parkspace.table_id, show_str, str(dict["queue_time"].time()))
         item.setText(show_str)
         return item
 
@@ -1041,7 +1053,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         elif unit == 2:
             return 'B'
         elif unit == 11:
-            return 'A1'
+            return 'A'
         elif unit == 12:
             return 'A2'
         elif unit == 13:
@@ -1049,7 +1061,7 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         elif unit == 14:
             return 'A4'
         elif unit == 21:
-            return 'B1'
+            return 'B'
         elif unit == 22:
             return 'B2'
         elif unit == 23:
@@ -1063,4 +1075,3 @@ class MainWindow(QMainWindow, sui.Ui_MainWindow):
         elif unit == 32:
             return 'C2'
         return '未知'
-