UserWorkRecord.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from hub import methods, Global
  2. import threading
  3. import time
  4. import json
  5. import os
  6. class UserWorkRecord(object):
  7. """
  8. """
  9. users = dict() # {<user_uuid>: {log_uuid: <UserWorkRecordList.uuid>, start_at, end_at}}
  10. @classmethod
  11. def init(cls):
  12. """初始化"""
  13. for item in Global.mdb.get_all('UserWorkRecordList', sort_field=[('start_at', -1)]):
  14. if item.get('user_uuid') not in cls.users:
  15. cls.users[item.get('user_uuid')] = {
  16. 'log_uuid': str(item.get('_id')),
  17. 'start_at': item.get('start_at'),
  18. 'end_at': item.get('end_at'),
  19. }
  20. if item.get('user_uuid') in cls.users:
  21. continue
  22. @classmethod
  23. def get_log_uuid(cls, user_uuid, log_time):
  24. """
  25. UserWorkRecordList: 用户操作记录
  26. UserWorkRecordList.uuid: 记录标识
  27. UserWorkRecordList.user_uuid: 用户标识
  28. UserWorkRecordList.start_at: 操作开始时间
  29. UserWorkRecordList.end_at: 操作结束时间
  30. """
  31. # --- check ---
  32. if not user_uuid or not log_time:
  33. methods.debug_log(f"UserWorkRecord|40", f"#error40")
  34. return 'error40'
  35. # --- check ---
  36. r1 = user_uuid not in cls.users
  37. r2 = log_time > cls.users[user_uuid].get('end_at') + 600 # 距离上次操作间隔600s,当做新的记录
  38. if r1 or r2:
  39. # --- add ---
  40. data = {
  41. 'user_uuid': user_uuid,
  42. 'start_at': log_time,
  43. 'end_at': log_time,
  44. }
  45. log_uuid = Global.mdb.add('UserWorkRecordList')
  46. # --- update ---
  47. cls.users[user_uuid] = {
  48. 'log_uuid': log_uuid,
  49. 'start_at': log_time,
  50. 'end_at': log_time,
  51. }
  52. return log_uuid
  53. # --- check --- 距离上次操作间隔300s,更新一下结束时间
  54. if log_time > cls.users[user_uuid].get('end_at') + 300:
  55. # --- update ---
  56. log_uuid = ls.users[user_uuid].get('log_uuid')
  57. Global.mdb.update_one_by_id('UserWorkRecordList', log_uuid, {'end_at': log_time})
  58. # --- update ---
  59. cls.users[user_uuid]['end_at'] = log_time
  60. return log_uuid
  61. # --- check ---
  62. methods.debug_log(f"UserWorkRecord|74", f"#error74")
  63. return 'error74'