|
@@ -0,0 +1,75 @@
|
|
|
+from hub import methods, Global
|
|
|
+
|
|
|
+import threading
|
|
|
+import time
|
|
|
+import json
|
|
|
+import os
|
|
|
+
|
|
|
+
|
|
|
+class UserWorkRecord(object):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ users = dict() # {<user_uuid>: {log_uuid: <UserWorkRecordList.uuid>, start_at, end_at}}
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def init(cls):
|
|
|
+ """初始化"""
|
|
|
+
|
|
|
+ for item in Global.mdb.get_all('UserWorkRecordList', sort_field=[('start_at', -1)]):
|
|
|
+
|
|
|
+ if item.get('user_uuid') not in cls.users:
|
|
|
+ cls.users[item.get('user_uuid')] = {
|
|
|
+ 'log_uuid': str(item.get('_id')),
|
|
|
+ 'start_at': item.get('start_at'),
|
|
|
+ 'end_at': item.get('end_at'),
|
|
|
+ }
|
|
|
+ if item.get('user_uuid') in cls.users:
|
|
|
+ continue
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def get_log_uuid(cls, user_uuid, log_time):
|
|
|
+ """
|
|
|
+ UserWorkRecordList: 用户操作记录
|
|
|
+ UserWorkRecordList.uuid: 记录标识
|
|
|
+ UserWorkRecordList.user_uuid: 用户标识
|
|
|
+ UserWorkRecordList.start_at: 操作开始时间
|
|
|
+ UserWorkRecordList.end_at: 操作结束时间
|
|
|
+ """
|
|
|
+ # --- check ---
|
|
|
+ if not user_uuid or not log_time:
|
|
|
+ methods.debug_log(f"UserWorkRecord|40", f"#error40")
|
|
|
+ return 'error40'
|
|
|
+
|
|
|
+ # --- check ---
|
|
|
+ r1 = user_uuid not in cls.users
|
|
|
+ r2 = log_time > cls.users[user_uuid].get('end_at') + 600 # 距离上次操作间隔600s,当做新的记录
|
|
|
+ if r1 or r2:
|
|
|
+ # --- add ---
|
|
|
+ data = {
|
|
|
+ 'user_uuid': user_uuid,
|
|
|
+ 'start_at': log_time,
|
|
|
+ 'end_at': log_time,
|
|
|
+ }
|
|
|
+ log_uuid = Global.mdb.add('UserWorkRecordList')
|
|
|
+
|
|
|
+ # --- update ---
|
|
|
+ cls.users[user_uuid] = {
|
|
|
+ 'log_uuid': log_uuid,
|
|
|
+ 'start_at': log_time,
|
|
|
+ 'end_at': log_time,
|
|
|
+ }
|
|
|
+ return log_uuid
|
|
|
+
|
|
|
+ # --- check --- 距离上次操作间隔300s,更新一下结束时间
|
|
|
+ if log_time > cls.users[user_uuid].get('end_at') + 300:
|
|
|
+ # --- update ---
|
|
|
+ log_uuid = ls.users[user_uuid].get('log_uuid')
|
|
|
+ Global.mdb.update_one_by_id('UserWorkRecordList', log_uuid, {'end_at': log_time})
|
|
|
+
|
|
|
+ # --- update ---
|
|
|
+ cls.users[user_uuid]['end_at'] = log_time
|
|
|
+ return log_uuid
|
|
|
+
|
|
|
+ # --- check ---
|
|
|
+ methods.debug_log(f"UserWorkRecord|74", f"#error74")
|
|
|
+ return 'error74'
|