Преглед на файлове

feat: 重构异常处理

SongZihuan преди 3 години
родител
ревизия
7c33d47704
променени са 17 файла, в които са добавени 164 реда и са изтрити 348 реда
  1. 2 10
      core/garbage.py
  2. 12 30
      core/user.py
  3. 0 17
      equipment/scan_garbage.py
  4. 0 17
      equipment/scan_user.py
  5. 58 55
      main.py
  6. 5 0
      setup.py
  7. 1 0
      sql/__init__.py
  8. 2 6
      sql/base_db.py
  9. 0 1
      sql/db.py
  10. 34 63
      sql/garbage.py
  11. 2 15
      sql/mysql_db.py
  12. 2 21
      sql/user.py
  13. 1 20
      tk_ui/admin.py
  14. 0 4
      tk_ui/event.py
  15. 11 20
      tk_ui/ranking.py
  16. 16 50
      tk_ui/station.py
  17. 18 19
      tk_ui/station_event.py

+ 2 - 10
core/garbage.py

@@ -5,10 +5,6 @@ from tool.time_ import HGSTime, hgs_time_t
 from tool.location import HGSLocation, hgs_location_t
 
 
-class GarbageBagNotUse(Exception):
-    pass
-
-
 class GarbageType:
     GarbageTypeStrList: List = ["", "recyclable", "kitchen", "hazardous", "other"]
     GarbageTypeStrList_ch: List = ["", "可回收", "厨余", "有害", "其他"]
@@ -109,25 +105,21 @@ class GarbageBag:
     def get_user(self) -> uid_t:
         try:
             self._lock.acquire()
+            assert self._have_use
             user = self._user
-            have_use = self._have_use
         finally:
             self._lock.release()
 
-        if not have_use:
-            raise GarbageBagNotUse
         return user
 
     def get_type(self):
         try:
             self._lock.acquire()
+            assert self._have_use
             type_ = self._type
-            have_use = self._have_use
         finally:
             self._lock.release()
 
-        if not have_use:
-            raise GarbageBagNotUse
         return type_
 
     def config_use(self, garbage_type: enum, use_time: hgs_time_t, user: uid_t, location: hgs_location_t):

+ 12 - 30
core/user.py

@@ -7,19 +7,7 @@ from tool.time_ import HGSTime
 from .garbage import GarbageBag, GarbageType
 
 
-class UserException(Exception):
-    pass
-
-
-class UserNotSupportError(UserException):
-    pass
-
-
-class UserNotScoreException(UserException):
-    pass
-
-
-class UserRubbishException(UserException):
+class UserNotSupportError(Exception):
     pass
 
 
@@ -204,7 +192,7 @@ class NormalUser(User):
             self._lock.acquire()
             if self._score + score < 0:
                 self._score = 0
-                raise UserNotScoreException
+                return 0
 
             self._score += score
             score = self._score
@@ -216,12 +204,9 @@ class NormalUser(User):
         try:
             self._lock.acquire()
             if self._rubbish > conf.max_rubbish_week:
-                try:
-                    self.add_score(-3)
-                except UserNotScoreException:
-                    raise UserRubbishException
+                self.add_score(-3)
             elif self._rubbish > conf.limit_rubbish_week:
-                raise UserRubbishException
+                return False
 
             if garbage.is_use() or garbage.is_check()[0]:
                 return False
@@ -249,18 +234,15 @@ class ManagerUser(User):
             garbage.config_check(right, self._uid)
             user.evaluate(right)
 
-            try:
-                if right:
-                    if garbage.get_type() == GarbageType.recyclable:
-                        user.add_score(3)
-                    elif garbage.get_type() == GarbageType.kitchen or garbage.get_type() == GarbageType.hazardous:
-                        user.add_score(2)
-                    else:
-                        user.add_score(1)
+            if right:
+                if garbage.get_type() == GarbageType.recyclable:
+                    user.add_score(3)
+                elif garbage.get_type() == GarbageType.kitchen or garbage.get_type() == GarbageType.hazardous:
+                    user.add_score(2)
                 else:
-                    user.add_score(-4)
-            except UserNotScoreException:
-                ...
+                    user.add_score(1)
+            else:
+                user.add_score(-4)
         finally:
             self._lock.release()
 

+ 0 - 17
equipment/scan_garbage.py

@@ -70,20 +70,3 @@ def write_all_gid_qr(path: str, db: DB, where: str = "") -> List[Tuple[str]]:
         if make_gid_image(res[0], path_):
             re_list.append((path_,))
     return re_list
-
-
-if __name__ == '__main__':
-    mysql_db = DB()
-    capture = HGSCapture()
-    qr_capture = HGSQRCoder(capture)
-    write_all_gid_qr("gid", mysql_db)
-    while True:
-        capture.get_image()
-        qr_data = qr_capture.get_qr_code()
-        if qr_data is not None:
-            gar = scan_garbage(qr_data, mysql_db)
-            if gar is not None:
-                print(gar)
-        if capture.show_image(1) == ord('q'):
-            break
-

+ 0 - 17
equipment/scan_user.py

@@ -78,20 +78,3 @@ def write_all_uid_qr(path: str, db: DB, name="nu", where: str = "") -> List[str]
         if make_uid_image(res[0], res[1], path_):
             re_list.append(path_)
     return re_list
-
-
-if __name__ == '__main__':
-    mysql_db = DB()
-    capture = HGSCapture()
-    qr_capture = HGSQRCoder(capture)
-    write_all_uid_qr("uid", mysql_db)
-    while True:
-        capture.get_image()
-        qr_data = qr_capture.get_qr_code()
-        if qr_data is not None:
-            usr = scan_user(qr_data, mysql_db)
-            if usr is not None:
-                print(usr)
-        if capture.show_image(1) == ord('q'):
-            break
-

+ 58 - 55
main.py

@@ -6,74 +6,77 @@
 """
 
 import sys
+import os
 
 import conf
 from conf.args import p_args
 
-program_name = p_args.program[0]
-if program_name == "setup":  # setup程序不需要数据库链接等操作
-    import os
-    import sys
 
-    __main = os.path.dirname(os.path.abspath(__file__))
-    res = os.system(f"{sys.executable} {os.path.join(__main, 'setup.py')} "
-                    f"--mysql_url={conf.mysql_url} "
-                    f"--mysql_name={conf.mysql_name} "
-                    f"--mysql_passwd={conf.mysql_passwd} "
-                    f"--program=setup")
-    if res != 0:
-        print("初始化程序加载失败", file=sys.stderr)
-        exit(1)
-    exit(0)
+def can_not_load(name):
+    print(f"无法加载 {name} 模块, 该系统可能不存在", file=sys.stderr)
 
-from sql.db import DB
 
-mysql = DB()
+def main():
+    program_name = p_args.program[0]
+    if program_name == "setup":  # setup程序不需要数据库链接等操作
+        __main = os.path.dirname(os.path.abspath(__file__))
+        res = os.system(f"{sys.executable} {os.path.join(__main, 'setup.py')} "
+                        f"--mysql_url={conf.mysql_url} "
+                        f"--mysql_name={conf.mysql_name} "
+                        f"--mysql_passwd={conf.mysql_passwd} "
+                        f"--program=setup")
+        if res != 0:
+            print("初始化程序加载失败", file=sys.stderr)
+            exit(1)
+        exit(0)
 
+    from sql.db import DB
 
-def can_not_load(name):
-    print(f"无法加载 {name} 模块, 该系统可能不存在", file=sys.stderr)
+    mysql = DB()
 
+    if program_name == "garbage":
+        try:
+            from equipment.scan import HGSCapture, HGSQRCoder
+            import tk_ui.station as garbage_station
+        except ImportError:
+            can_not_load("垃圾站系统")
+            sys.exit(1)
 
-if program_name == "garbage":
-    try:
-        from equipment.scan import HGSCapture, HGSQRCoder
-        import tk_ui.station as garbage_station
-    except ImportError:
-        can_not_load("垃圾站系统")
-        sys.exit(1)
+        cap = HGSCapture()
+        qr = HGSQRCoder(cap)
+        station = garbage_station.GarbageStation(mysql, cap, qr)
+        station.mainloop()
+    elif program_name == "ranking":
+        try:
+            import tk_ui.ranking as ranking_station
+        except ImportError:
+            can_not_load("排行榜系统")
+            sys.exit(1)
 
-    cap = HGSCapture()
-    qr = HGSQRCoder(cap)
-    station = garbage_station.GarbageStation(mysql, cap, qr)
-    station.mainloop()
-elif program_name == "ranking":
-    try:
-        import tk_ui.ranking as ranking_station
-    except ImportError:
-        can_not_load("排行榜系统")
-        sys.exit(1)
+        station = ranking_station.RankingStation(mysql)
+        station.mainloop()
+    elif program_name == "manager":
+        try:
+            import tk_ui.admin as admin_station
+        except ImportError:
+            can_not_load("管理员系统")
+            sys.exit(1)
 
-    station = ranking_station.RankingStation(mysql)
-    station.mainloop()
-elif program_name == "manager":
-    try:
-        import tk_ui.admin as admin_station
-    except ImportError:
-        can_not_load("管理员系统")
-        sys.exit(1)
+        station = admin_station.AdminStation(mysql)
+        station.mainloop()
+    elif program_name == "ranking_website":
+        try:
+            from app import rank as rank_web
+        except ImportError:
+            can_not_load("在线排行榜服务")
+            sys.exit(1)
 
-    station = admin_station.AdminStation(mysql)
-    station.mainloop()
-elif program_name == "ranking_website":
-    try:
-        from app import rank as rank_web
-    except ImportError:
-        can_not_load("在线排行榜服务")
+        web, app = rank_web.creat_ranking_website(mysql)
+        web.run()
+    else:
+        can_not_load(program_name)
         sys.exit(1)
 
-    web, app = rank_web.creat_ranking_website(mysql)
-    web.run()
-else:
-    can_not_load(program_name)
-    sys.exit(1)
+
+if __name__ == '__main__':
+    main()

+ 5 - 0
setup.py

@@ -2,6 +2,11 @@ import os
 import sys
 import warnings
 
+print("是否执行初始化程序?执行初始化程序会令你丢失所有数据.")
+res = input("[Y/n]")
+if res != 'Y':
+    exit(0)
+
 try:
     __import__("pip")
 except ImportError:

+ 1 - 0
sql/__init__.py

@@ -0,0 +1 @@
+from .base_db import DBBit, DBCloseException  # 导入必要的内容

+ 2 - 6
sql/base_db.py

@@ -5,15 +5,11 @@ class DBException(Exception):
     ...
 
 
-class DBDataException(Exception):
+class DBDoneException(DBException):
     ...
 
 
-class DBCloseException(Exception):
-    ...
-
-
-class DBDoneException(Exception):
+class DBCloseException(DBException):
     ...
 
 

+ 0 - 1
sql/db.py

@@ -1,5 +1,4 @@
 import conf
-from .base_db import DBBit, DBException, DBCloseException, DBDataException, DBDoneException  # 导入必要的内容
 
 if conf.database.upper() == 'MYSQL':
     try:

+ 34 - 63
sql/garbage.py

@@ -1,14 +1,11 @@
 import time
-from sql.db import DB, DBBit, DBDataException, DBDoneException
+from . import DBBit
+from .db import DB
 from tool.type_ import *
-from tool.time_ import HGSTime, mysql_time, time_from_mysql
+from tool.time_ import mysql_time, time_from_mysql
 from core.garbage import GarbageBag, GarbageType
 
 
-class GarbageDBException(DBDataException):
-    ...
-
-
 def update_garbage_type(where: str, type_: int, db: DB) -> int:
     if len(where) == 0:
         return -1
@@ -228,42 +225,37 @@ def update_garbage(garbage: GarbageBag, db: DB) -> bool:
     gid = garbage.get_gid()
     info = garbage.get_info()
 
-    try:
-        if garbage.is_check()[0]:
-            db.done_(f"UPDATE garbage SET "
-                     f"Flat = 2,"
-                     f"UserID = '{info['user']}',"
-                     f"UseTime = {time_from_mysql(info['use_time'])},"
-                     f"GarbageType = {info['type']},"
-                     f"Location = '{info['loc']}',"
-                     f"CheckResult = {info['check']},"
-                     f"CheckerID = '{info['checker']}',"
-                     f"WHERE GarbageID = {gid};")
-        elif garbage.is_use():
-            db.done_(f"UPDATE garbage SET "
-                     f"Flat = 1,"
-                     f"UserID = '{info['user']}',"
-                     f"UseTime = {time_from_mysql(info['use_time'])},"
-                     f"GarbageType = {info['type']},"
-                     f"Location = '{info['loc']}',"
-                     f"CheckResult = NULL,"
-                     f"CheckerID = NULL,"
-                     f"WHERE GarbageID = {gid};")
-        else:
-            db.done_(f"UPDATE garbage SET "
-                     f"Flat = 0,"
-                     f"UserID = NULL,"
-                     f"UseTime = NULL,"
-                     f"GarbageType = NULL,"
-                     f"Location = NULL,"
-                     f"CheckResult = NULL,"
-                     f"CheckerID = NULL,"
-                     f"WHERE GarbageID = {gid};")
-    except DBDoneException:
-        return False
-    finally:
-        db.done_commit()
-    return True
+    if garbage.is_check()[0]:
+        res = db.done(f"UPDATE garbage SET "
+                      f"Flat = 2,"
+                      f"UserID = '{info['user']}',"
+                      f"UseTime = {time_from_mysql(info['use_time'])},"
+                      f"GarbageType = {info['type']},"
+                      f"Location = '{info['loc']}',"
+                      f"CheckResult = {info['check']},"
+                      f"CheckerID = '{info['checker']}',"
+                      f"WHERE GarbageID = {gid};")
+    elif garbage.is_use():
+        res = db.done(f"UPDATE garbage SET "
+                      f"Flat = 1,"
+                      f"UserID = '{info['user']}',"
+                      f"UseTime = {time_from_mysql(info['use_time'])},"
+                      f"GarbageType = {info['type']},"
+                      f"Location = '{info['loc']}',"
+                      f"CheckResult = NULL,"
+                      f"CheckerID = NULL,"
+                      f"WHERE GarbageID = {gid};")
+    else:
+        res = db.done(f"UPDATE garbage SET "
+                      f"Flat = 0,"
+                      f"UserID = NULL,"
+                      f"UseTime = NULL,"
+                      f"GarbageType = NULL,"
+                      f"Location = NULL,"
+                      f"CheckResult = NULL,"
+                      f"CheckerID = NULL,"
+                      f"WHERE GarbageID = {gid};")
+    return res is not None
 
 
 def create_new_garbage(db: DB) -> Optional[GarbageBag]:
@@ -361,24 +353,3 @@ def del_all_garbage_scan(db: DB) -> int:
     if cur is None:
         return -1
     return cur.rowcount
-
-
-if __name__ == '__main__':
-    mysql_db = DB()
-    bag = create_new_garbage(mysql_db)
-    print(bag)
-    bag.config_use(GarbageType.recyclable, HGSTime(), "1e1d30a1f9b78c8fa852d19b4cfaee79", "HuaDu")
-    update_garbage(bag, mysql_db)
-    print(bag)
-
-    bag = find_garbage(bag.get_gid(), mysql_db)
-    print(bag)
-
-    bag.config_check(True, "048529ca5c6accf594b74e6f73ee1bf0")
-    update_garbage(bag, mysql_db)
-    print(bag)
-
-    bag = find_garbage(bag.get_gid(), mysql_db)
-    print(bag)
-
-    print(count_garbage_by_time("1e1d30a1f9b78c8fa852d19b4cfaee79", mysql_db))

+ 2 - 15
sql/mysql_db.py

@@ -1,7 +1,7 @@
 import pymysql
 import threading
 from conf import mysql_url, mysql_name, mysql_passwd
-from .base_db import Database, DBException, DBCloseException
+from .base_db import Database, DBCloseException
 from tool.type_ import *
 
 
@@ -56,7 +56,6 @@ class MysqlDB(Database):
             self._cursor.execute(sql)
         except pymysql.MySQLError:
             self._db.rollback()
-            raise
             return None
         finally:
             self._db.commit()
@@ -71,6 +70,7 @@ class MysqlDB(Database):
             self._cursor.execute(sql)
         except pymysql.MySQLError:
             self._db.rollback()
+            return None
         finally:
             self._lock.release()
         return self._cursor
@@ -81,16 +81,3 @@ class MysqlDB(Database):
             self._db.commit()
         finally:
             self._lock.release()
-
-
-if __name__ == '__main__':
-    # 测试程序
-    mysql_db = MysqlDB()
-    mysql_db.search("SELECT * FROM user;")
-    res_ = mysql_db.get_cursor().fetchall()
-    print(res_)
-
-    mysql_db.search("SELECT * FROM user WHERE UserID = 0;")
-    res_ = mysql_db.get_cursor().fetchall()
-    print(res_)
-    mysql_db.close()

+ 2 - 21
sql/user.py

@@ -1,6 +1,7 @@
 import csv
 
-from .db import DB, DBBit
+from . import DBBit
+from .db import DB
 from tool.type_ import *
 from tool.login import create_uid, randomPassword
 from tool.time_ import mysql_time
@@ -234,23 +235,3 @@ def creat_auto_user_from_csv(path, db: DB) -> List[User]:
                 res.append(user)
     return res
 
-
-if __name__ == '__main__':
-    mysql_db = DB()
-    name_ = 'Huan12'
-    usr = find_user_by_name(name_, "123", mysql_db)
-    if usr is None:
-        usr = create_new_user(name_, "123", "12345678900", False, mysql_db)
-    print(usr)
-
-    for i in range(9):
-        usr.evaluate(False)
-        print(usr)
-
-    for i in range(1):
-        usr.evaluate(True)
-        print(usr)
-
-    update_user(usr, mysql_db)
-    usr = find_user_by_name(name_, "123", mysql_db)
-    print(usr)

+ 1 - 20
tk_ui/admin.py

@@ -26,18 +26,6 @@ from tool.tk import make_font
 from tool.type_ import *
 
 
-class AdminStationException(Exception):
-    ...
-
-
-class CreateGarbageError(AdminStationException):
-    ...
-
-
-class CreateUserError(AdminStationException):
-    ...
-
-
 class AdminStationBase(TkEventMain, metaclass=abc.ABCMeta):
     """
     AdminStation基类
@@ -57,8 +45,7 @@ class AdminStationBase(TkEventMain, metaclass=abc.ABCMeta):
         re = []
         for _ in range(num):
             gar = create_new_garbage(self._db)
-            if gar is None:
-                raise CreateGarbageError
+            assert gar
             if path is not None:
                 res = write_gid_qr(gar.get_gid(), path, self._db)
                 re.append(res)
@@ -668,9 +655,3 @@ class AdminStation(AdminStationBase):
 
     def exit_win(self):
         self._window.destroy()
-
-
-if __name__ == '__main__':
-    mysql_db = DB()
-    station_ = AdminStation(mysql_db)
-    station_.mainloop()

+ 0 - 4
tk_ui/event.py

@@ -6,10 +6,6 @@ import conf
 from tool.type_ import *
 
 
-class TkEventException(Exception):
-    ...
-
-
 class TkEventBase(metaclass=abc.ABCMeta):
     """
     Tkinter 子线程任务

+ 11 - 20
tk_ui/ranking.py

@@ -8,18 +8,6 @@ from tool.tk import make_font
 from sql.db import DB
 
 
-class RankingStationException(Exception):
-    ...
-
-
-class RankingError(RankingStationException):
-    ...
-
-
-class RankingPageError(RankingStationException):
-    ...
-
-
 class RankingStationBase(metaclass=abc.ABCMeta):
     """
     RankingStation基类
@@ -133,6 +121,12 @@ class RankingStationBase(metaclass=abc.ABCMeta):
         self.rank_count = self.rank_count
         res, self.rank = self.get_rank(0)
 
+        if not res:
+            self.set_next_btn(False)
+            self.set_prev_btn(False)
+            self.show_rank([])
+            return
+
         self.show_rank(self.rank[0])
 
         self.set_prev_btn(True)
@@ -382,8 +376,11 @@ class RankingStation(RankingStationBase):
             self.rank_label[i].place(relx=0.04, rely=rely, relwidth=0.92, relheight=relheight)
 
     def show_rank(self, rank_info: List[Tuple[int, uname_t, uid_t, score_t, score_t, Optional[str]]]):
-        self.__set_rank_info(rank_info)
-        self.rank_title_var.set("排行榜")
+        if len(rank_info) == 0:
+            self.rank_title_var.set("排行榜无数据")
+        else:
+            self.__set_rank_info(rank_info)
+            self.rank_title_var.set("排行榜")
 
     def rank_auto(self, auto):
         super(RankingStation, self).rank_auto(auto)
@@ -426,9 +423,3 @@ class RankingStation(RankingStationBase):
 
     def mainloop(self):
         self.window.mainloop()
-
-
-if __name__ == '__main__':
-    mysql_db = DB()
-    station = RankingStation(mysql_db)
-    station.mainloop()

+ 16 - 50
tk_ui/station.py

@@ -13,7 +13,7 @@ from tool.type_ import *
 from tool.tk import set_tk_disable_from_list, make_font
 
 from core.user import User, UserNotSupportError
-from core.garbage import GarbageBag, GarbageType, GarbageBagNotUse
+from core.garbage import GarbageBag, GarbageType
 
 from sql.db import DB
 from sql.user import update_user, find_user_by_id
@@ -24,26 +24,6 @@ from equipment.scan import HGSCapture, HGSQRCoder
 from .event import TkEventMain
 
 
-class GarbageStationException(Exception):
-    ...
-
-
-class ControlNotLogin(GarbageStationException):
-    ...
-
-
-class ThrowGarbageError(GarbageStationException):
-    ...
-
-
-class CheckGarbageError(GarbageStationException):
-    ...
-
-
-class RankingUserError(GarbageStationException):
-    ...
-
-
 class GarbageStationBase(TkEventMain, metaclass=abc.ABCMeta):
     """
     GarbageStation基类
@@ -107,23 +87,17 @@ class GarbageStationBase(TkEventMain, metaclass=abc.ABCMeta):
             return False
         return True
 
-    def __check_user(self):
-        if not self.check_user():
-            raise ControlNotLogin
-        self._user_last_time = time.time()
-
     def __check_normal_user(self):
-        self.__check_user()
-        if self._user.is_manager():
+        if self.check_user() and self._user.is_manager():
             raise UserNotSupportError
 
     def __check_manager_user(self):
-        self.__check_user()
+        assert self.check_user()
         if not self._user.is_manager():
             raise UserNotSupportError
 
     def get_user_info(self):
-        self.__check_user()
+        assert self.check_user()
         return self._user.get_info()
 
     def get_uid_no_update(self):
@@ -155,28 +129,27 @@ class GarbageStationBase(TkEventMain, metaclass=abc.ABCMeta):
         self.show_msg("登录", "登录成功", show_time=3.0)
         return True  # 登录
 
-    def throw_garbage_core(self, garbage: GarbageBag, garbage_type: enum):
-        self.__check_normal_user()
+    def throw_garbage_core(self, garbage: GarbageBag, garbage_type: enum) -> int:
+        if not self.__check_normal_user():
+            return -1
         if not self._user.throw_rubbish(garbage, garbage_type, self._loc):
-            self.show_warning("垃圾投放", "垃圾投放失败", show_time=3.0)
-            raise ThrowGarbageError
+            return -2
         update_garbage(garbage, self._db)
         update_user(self._user, self._db)
-        self.show_msg("垃圾投放", "垃圾投放成功", show_time=3.0)
+        return 0
 
-    def check_garbage_core(self, garbage: GarbageBag, check_result: bool):
-        self.__check_manager_user()
+    def check_garbage_core(self, garbage: GarbageBag, check_result: bool) -> int:
+        if not self.__check_normal_user():
+            return -1
         user = find_user_by_id(garbage.get_user(), self._db)
         if user is None:
-            self.show_warning("垃圾检测", "垃圾袋还未使用", show_time=3.0)
-            raise GarbageBagNotUse
+            return -2
         if not self._user.check_rubbish(garbage, check_result, user):
-            self.show_warning("垃圾检测", "垃圾检测提结果交失败", show_time=3.0)
-            raise CheckGarbageError
+            return -3
         update_garbage(garbage, self._db)
         update_user(self._user, self._db)
         update_user(user, self._db)
-        self.show_msg("垃圾检测", "垃圾检测提结果交成功", show_time=3.0)
+        return 0
 
     def ranking(self, limit: int = 0, order_by: str = 'DESC') -> list[Tuple[uid_t, uname_t, score_t, score_t]]:
         """
@@ -197,7 +170,7 @@ class GarbageStationBase(TkEventMain, metaclass=abc.ABCMeta):
                                f"ORDER BY Reputation {order_by}, Score {order_by} "
                                f"{limit}"))
         if cur is None:
-            raise RankingUserError
+            return []
         return list(cur.fetchall())
 
     def to_get_garbage_type(self, garbage: GarbageBag):
@@ -1265,10 +1238,3 @@ class GarbageStation(GarbageStationBase):
     def exit_win(self):
         self._window.destroy()
 
-
-if __name__ == '__main__':
-    mysql_db = DB()
-    capture = HGSCapture()
-    qr_capture = HGSQRCoder(capture)
-    station_ = GarbageStation(mysql_db, capture, qr_capture)
-    station_.mainloop()

+ 18 - 19
tk_ui/station_event.py

@@ -135,12 +135,7 @@ class ThrowGarbageEvent(StationEventBase):
     """
 
     def func(self, garbage: GarbageBag, garbage_type: enum):
-        try:
-            self.station.throw_garbage_core(garbage, garbage_type)
-        except (tk_station.ThrowGarbageError, UserNotSupportError, tk_station.ControlNotLogin):
-            return False
-        else:
-            return True
+        return self.station.throw_garbage_core(garbage, garbage_type)
 
     def __init__(self, gb_station):
         super().__init__(gb_station, "垃圾投放")
@@ -156,9 +151,13 @@ class ThrowGarbageEvent(StationEventBase):
         return not self.thread.is_alive()
 
     def done_after_event(self):
-        self.thread.join()
-        if not self.thread.result:
-            self.station.show_warning("操作失败", "垃圾袋投放失败")
+        res = self.thread.wait_event()
+        if res == -1:
+            self.station.show_warning("垃圾投放", "管理员用户不得投放垃圾", show_time=3.0)
+        elif res == -2:
+            self.station.show_warning("垃圾投放", "垃圾投放失败", show_time=3.0)
+        else:
+            self.station.show_warning("操作成功", "垃圾袋完成投放")
 
 
 class CheckGarbageEvent(StationEventBase):
@@ -167,13 +166,7 @@ class CheckGarbageEvent(StationEventBase):
     """
 
     def func(self, garbage: GarbageBag, check: bool):
-        try:
-            self.station.check_garbage_core(garbage, check)
-        except (tk_station.ThrowGarbageError, UserNotSupportError,
-                tk_station.ControlNotLogin, tk_station.CheckGarbageError):
-            return False
-        else:
-            return True
+        return self.station.check_garbage_core(garbage, check)
 
     def __init__(self, gb_station):
         super().__init__(gb_station, "检测垃圾袋")
@@ -187,6 +180,12 @@ class CheckGarbageEvent(StationEventBase):
         return not self.thread.is_alive()
 
     def done_after_event(self):
-        self.thread.join()
-        if not self.thread.result:
-            self.station.show_warning("操作失败", "垃圾袋检测失败")
+        res = self.thread.wait_event()
+        if res == -1:
+            self.station.show_warning("垃圾投放", "非管理员用户不得检查垃圾", show_time=3.0)
+        elif res == -2:
+            self.station.show_warning("垃圾检测", "垃圾袋还未使用", show_time=3.0)
+        elif res == -3:
+            self.station.show_warning("垃圾检测", "垃圾检测提结果交失败", show_time=3.0)
+        else:
+            self.station.show_msg("垃圾检测", "垃圾检测提结果交成功", show_time=3.0)