|
@@ -1,9 +1,16 @@
|
|
|
from flask import Flask
|
|
|
+import datetime
|
|
|
+
|
|
|
+from conf import Config
|
|
|
|
|
|
from tool.login import create_uid
|
|
|
+from tool.type_ import *
|
|
|
+
|
|
|
+from core.garbage import GarbageType
|
|
|
+
|
|
|
+from sql import DBBit
|
|
|
from sql.db import DB
|
|
|
from sql.user import find_user_by_name, find_user_by_id
|
|
|
-from tool.type_ import *
|
|
|
from . import views
|
|
|
|
|
|
|
|
@@ -14,12 +21,36 @@ class WebUser:
|
|
|
self._uid = create_uid(name, passwd)
|
|
|
else:
|
|
|
self._uid = uid
|
|
|
+ self.score = "0"
|
|
|
+ self.reputation = "0"
|
|
|
+ self.rubbish = "0"
|
|
|
+ self.group = "NormalUser"
|
|
|
self.is_anonymous = False
|
|
|
|
|
|
+ def update_info(self):
|
|
|
+ user = views.auth_website.get_user_by_id(self._uid)
|
|
|
+ if user is None:
|
|
|
+ return
|
|
|
+ if user.is_manager():
|
|
|
+ self.group = "ManagerUser"
|
|
|
+ self.score = "0"
|
|
|
+ self.reputation = "0"
|
|
|
+ self.rubbish = "0"
|
|
|
+ else:
|
|
|
+ self.group = "NormalUser"
|
|
|
+ res = user.get_info()
|
|
|
+ self.score = res.get('score', '0')
|
|
|
+ self.reputation = res.get('reputation', '0')
|
|
|
+ self.rubbish = res.get('rubbish', '0')
|
|
|
+
|
|
|
@property
|
|
|
def name(self):
|
|
|
return self._name
|
|
|
|
|
|
+ @property
|
|
|
+ def uid(self):
|
|
|
+ return self._uid[:Config.tk_show_uid_len]
|
|
|
+
|
|
|
@property
|
|
|
def is_active(self):
|
|
|
return views.auth_website.load_user_by_id(self._uid) is not None
|
|
@@ -31,6 +62,9 @@ class WebUser:
|
|
|
def get_id(self):
|
|
|
return self._uid
|
|
|
|
|
|
+ def get_garbage_list(self):
|
|
|
+ return views.auth_website.get_user_garbage_list(self._uid, limit=20)
|
|
|
+
|
|
|
|
|
|
class AuthWebsite:
|
|
|
def __init__(self, app: Flask, db: DB):
|
|
@@ -49,3 +83,31 @@ class AuthWebsite:
|
|
|
return None
|
|
|
name = user.get_name()
|
|
|
return WebUser(name, uid=uid)
|
|
|
+
|
|
|
+ def get_user_garbage_list(self, uid: uid_t, limit: int):
|
|
|
+ cur = self._db.search(columns=["UseTime", "Location", "GarbageType", "CheckResult"],
|
|
|
+ table="garbage",
|
|
|
+ where=f"UserID='{uid}'",
|
|
|
+ limit=limit)
|
|
|
+ if cur is None or cur.rowcount == 0:
|
|
|
+ return None
|
|
|
+ res = []
|
|
|
+ for i in range(cur.rowcount):
|
|
|
+ re: Tuple[datetime.datetime, str, bytes, Optional[bytes]] = cur.fetchone()
|
|
|
+ t = re[0].strftime("%Y-%m-%d %H:%M:%S")
|
|
|
+ loc = re[1]
|
|
|
+ type_ = GarbageType.GarbageTypeStrList_ch[int(re[2])]
|
|
|
+ if re[3] is None:
|
|
|
+ result = "待确定"
|
|
|
+ result_class = 'wait'
|
|
|
+ elif re[3] == DBBit.BIT_1:
|
|
|
+ result = "投放正确"
|
|
|
+ result_class = 'pass'
|
|
|
+ else:
|
|
|
+ result = "投放错误"
|
|
|
+ result_class = 'fail'
|
|
|
+ res.append((t, loc, type_, result, result_class))
|
|
|
+ return res
|
|
|
+
|
|
|
+ def get_user_by_id(self, uid: uid_t):
|
|
|
+ return find_user_by_id(uid, self._db)
|