From 8b848e8a9fa242b39f92f3a28faf89be10a6e456 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 17 三月 2023 17:43:32 +0800
Subject: [PATCH] 首板策略优化

---
 gpcode_manager.py |   55 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 47 insertions(+), 8 deletions(-)

diff --git a/gpcode_manager.py b/gpcode_manager.py
index b1099a8..df508e6 100644
--- a/gpcode_manager.py
+++ b/gpcode_manager.py
@@ -11,6 +11,8 @@
 import tool
 import decimal
 
+from ths import l2_listen_pos_health_manager
+
 __redisManager = redis_manager.RedisManager(0)
 
 
@@ -80,7 +82,7 @@
         return val.get(name)
 
     @classmethod
-    def add_first_code_name(cls, code,name):
+    def add_first_code_name(cls, code, name):
         val = cls.__get_redis().get("gp_list_names_first")
         if not val:
             return None
@@ -153,6 +155,36 @@
             return True
         else:
             return False
+
+
+# 鎯宠涔扮殑浠g爜
+class WantBuyCodesManager:
+    redisManager = redis_manager.RedisManager(0)
+    __redis_key = "want_buy_codes"
+
+    @classmethod
+    def __get_redis(cls):
+        return cls.redisManager.getRedis()
+
+    @classmethod
+    def clear(cls):
+        cls.__get_redis().delete(cls.__redis_key)
+
+    @classmethod
+    def add_code(cls, code):
+        cls.__get_redis().sadd(cls.__redis_key, code)
+
+    @classmethod
+    def remove_code(cls, code):
+        cls.__get_redis().srem(cls.__redis_key, code)
+
+    @classmethod
+    def is_in(cls, code):
+        return cls.__get_redis().sismember(cls.__redis_key, code)
+
+    @classmethod
+    def list_code(cls):
+        return cls.__get_redis().smembers(cls.__redis_key)
 
 
 def __parse_codes_data(code_datas):
@@ -480,12 +512,13 @@
         client_ids = client_manager.getValidL2Clients()
     else:
         client_ids.append(client_id)
-    random.shuffle(client_ids)
+    # random.shuffle(client_ids)
+    available_positions = []
     for client_id in client_ids:
         redis_instance = __redisManager.getRedis()
         k = "listen_code-{}-*".format(client_id)
         keys = redis_instance.keys(k)
-        random.shuffle(keys)
+        # random.shuffle(keys)
         codes = []
         for key in keys:
             index = key.split("-")[-1]
@@ -493,10 +526,9 @@
                 continue
             result = redis_instance.get(key)
             if result is None or len(result) == 0:
-                return client_id, int(key.replace("listen_code-{}-".format(client_id), ""))
+                available_positions.append((client_id, int(key.replace("listen_code-{}-".format(client_id), ""))))
             else:
                 codes.append((key, result))
-
         # 鏌ヨ鏄惁鏈夐噸澶嶇殑浠g爜
         codes_set = set()
         count = 0
@@ -505,6 +537,15 @@
             codes_set.add(code[1])
             if len(codes_set) < count:
                 return client_id, int(code[0].replace("listen_code-{}-".format(client_id), ""))
+
+    if available_positions:
+        # 鑾峰彇鍋ュ悍鐘舵��
+        available_positions_health_states = l2_listen_pos_health_manager.list_health_state(available_positions)
+        available_positions.sort(key=lambda x: available_positions_health_states[x], reverse=True)
+        # 鍙栫1涓暟鎹�
+        return available_positions[0][0], available_positions[0][1]
+
+
 
     return None, None
 
@@ -591,6 +632,4 @@
 
 
 if __name__ == '__main__':
-    print(get_free_listen_pos_count())
-    print(get_name_code("鍗庤剦绉戞妧"))
-    print(get_name_codes())
+    print(get_can_listen_pos())

--
Gitblit v1.8.0