Sfoglia il codice sorgente

Merge branch 'ZJZGJ' of http://www.sri-robot.cn:30000/SRI-DINO/Server-py into ZJZGJ

casper 4 mesi fa
parent
commit
544558b980

+ 8 - 2
sri-server-bg01/api/v6/code3000.py

@@ -5,12 +5,18 @@ async def code3001(**sources):
     """
     查询驾驶人员操作记录列表
     """
+    # --- get file name list ---
+    # cfg = config['default']()
+    # upload_file_list = methods.get_file_path_list(cfg.STATIC_PATH)
+    # upload_file_name_list = [i.split('\\')[-1] for i in upload_file_list]
+    # upload_file_uuid_list = [i.split('.')[0] for i in upload_file_name_list]
+
     # # --- check ---
     # if not sources.get('page'):
     #     return dict(code=1, details=f"something is wrong.")
     # elif not sources.get('size'):
     #     return dict(code=2, details=f"something is wrong.")
-    #
+
     # # --- fill d1 ---
     # """
     # VehicleLog: 车辆日志表
@@ -49,7 +55,7 @@ async def code3001(**sources):
     d1 = [
         {
             'uuid': '65dbe96949fbe311a3a01d30',
-            'pid': 'AA112233',
+            'pid': 'AA112233',  # 车牌号
             'start_time_at': methods.now_ts(),
             'end_time_at': methods.now_ts() + (3600 * 8),
             'driver_name': '张三',

+ 3 - 1
sri-server-bg02/lib/MessageListener.py

@@ -18,11 +18,13 @@ save_dir = r'C:\logs'  # sri内网测试环境
 class MessageListener(object):
     """
     """
-    last_log_key = str()
 
     @classmethod
     def run(cls, background_is=True):
 
+        from lib.UserWorkRecord import UserWorkRecord
+        UserWorkRecord.init()
+
         from lib.MessageListenerC001 import subscribe_c001
         # from lib.MessageListenerV001 import subscribe_v001
 

+ 5 - 2
sri-server-bg02/lib/MessageListenerC001.py

@@ -5,6 +5,8 @@ import time
 import json
 import os
 
+from lib.UserWorkRecord import UserWorkRecord
+
 # --- for linux
 # save_dir = f"/home/server/logs"
 
@@ -79,8 +81,9 @@ def method_c001(client, userdata, message):
     #     pass
 
     # --- save ---
-    file_name = methods.now_string('v001-%Y-%m-%d-%H.log')
-    log_file_path = os.path.join(save_dir, file_name)
+    # file_name = methods.now_string('v001-%Y-%m-%d-%H.log')
+    log_uuid = UserWorkRecord.get_log_uuid()
+    log_file_path = os.path.join(save_dir, f'{log_uuid}.log')
     log_dict = json.loads(message.payload)
     log_list = [
 

+ 5 - 2
sri-server-bg02/lib/MessageListenerV001.py

@@ -5,6 +5,8 @@ import time
 import json
 import os
 
+from lib.UserWorkRecord import UserWorkRecord
+
 # --- for linux
 # save_dir = f"/home/server/logs"
 
@@ -29,8 +31,9 @@ def method_v001(client, userdata, message):
     #     methods.debug_log('MessageListener46', f"#out: {out}")
 
     # --- save log ---
-    file_name = methods.now_string('v001-%Y-%m-%d-%H.log')
-    log_file_path = os.path.join(save_dir, file_name)
+    log_uuid = UserWorkRecord.get_log_uuid()
+    # file_name = methods.now_string('v001-%Y-%m-%d-%H.log')
+    log_file_path = os.path.join(save_dir, f'{log_uuid}.log')
     log_dict = json.loads(message.payload)
     log_list = [
 

+ 75 - 0
sri-server-bg02/lib/UserWorkRecord.py

@@ -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'