From 59fba698b03a51a8da5b56a919ebbf94d4784f74 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 06 一月 2023 15:06:27 +0800
Subject: [PATCH] 买入策略修改

---
 gpcode_manager.py |  142 +++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 118 insertions(+), 24 deletions(-)

diff --git a/gpcode_manager.py b/gpcode_manager.py
index 9a0f239..95d7d2a 100644
--- a/gpcode_manager.py
+++ b/gpcode_manager.py
@@ -1,24 +1,20 @@
 """
 鑲$エ浠g爜绠$悊鍣�
 """
+import code
 import json
 import random
 import time
 
-import authority
-import global_util
+import client_manager
 import redis_manager
 import tool
-import juejin
-import data_process
 import decimal
 
 __redisManager = redis_manager.RedisManager(0)
 
 
-def set_gp_list(gpset):
-    # 鑾峰彇鍩烘湰淇℃伅
-    code_datas = juejin.JueJinManager.get_gp_latest_info(gpset)
+def __parse_codes_data(code_datas):
     codes = []
     name_codes = {}
     for _data in code_datas:
@@ -30,7 +26,11 @@
                 codes.append(code)
                 # 淇濆瓨浠g爜瀵瑰簲鐨勫悕绉�
                 name_codes[name] = code
+    return codes, name_codes
 
+
+def set_gp_list(code_datas):
+    codes, name_codes = __parse_codes_data(code_datas)
     redis_instance = __redisManager.getRedis()
     # 鍒犻櫎涔嬪墠鐨�
     redis_instance.delete("gp_list")
@@ -38,6 +38,21 @@
     for d in codes:
         redis_instance.sadd("gp_list", d)
     redis_instance.set("gp_list_names", json.dumps(name_codes))
+
+
+# 鏂板浠g爜
+def add_gp_list(code_datas):
+    redis_instance = __redisManager.getRedis()
+    codes, name_codes = __parse_codes_data(code_datas)
+    for d in codes:
+        redis_instance.sadd("gp_list", d)
+    old_name_codes = get_name_codes()
+    if old_name_codes is None:
+        old_name_codes = name_codes
+    else:
+        for key in name_codes:
+            old_name_codes[key] = name_codes[key]
+    redis_instance.set("gp_list_names", json.dumps(old_name_codes))
 
 
 # 鑾峰彇鍚嶇О瀵瑰簲鐨勪唬鐮�
@@ -48,6 +63,18 @@
         return None
     val = json.loads(val)
     return val.get(name)
+
+
+def get_code_name(code):
+    redis_instance = __redisManager.getRedis()
+    val = redis_instance.get("gp_list_names")
+    if not val:
+        return None
+    val = json.loads(val)
+    for key in val:
+        if val[key] == code:
+            return key
+    return None
 
 
 def get_name_codes():
@@ -63,8 +90,6 @@
 def set_limit_up_list(gpset):
     if gpset is None:
         return
-    # 淇濆瓨鍒板唴瀛樹腑
-    global_util.add_limit_up_codes(gpset)
     # 鑾峰彇鍩烘湰淇℃伅
     redis_instance = __redisManager.getRedis()
     # 鍒犻櫎涔嬪墠鐨�
@@ -126,9 +151,23 @@
     redis_instance.setex("price-pre-{}".format(code), tool.get_expire(), str(price))
 
 
+__limit_up_price_dict = {}
+
+
 # 鑾峰彇娑ㄥ仠浠�
 def get_limit_up_price(code):
+    # 璇诲彇鍐呭瓨涓殑鍊�
+    if code in __limit_up_price_dict:
+        return __limit_up_price_dict[code]
     price = get_price_pre(code)
+    if price is None:
+        return None
+    limit_up_price = tool.to_price(decimal.Decimal(str(price)) * decimal.Decimal("1.1"))
+    __limit_up_price_dict[code] = limit_up_price
+    return limit_up_price
+
+
+def get_limit_up_price_by_preprice(price):
     if price is None:
         return None
     return tool.to_price(decimal.Decimal(str(price)) * decimal.Decimal("1.1"))
@@ -182,6 +221,39 @@
 def set_listen_code_by_pos(client_id, pos, code):
     redis_instance = __redisManager.getRedis()
     redis_instance.setex("listen_code-{}-{}".format(client_id, pos), tool.get_expire(), code)
+    # 鍚屾鐩戝惉鐨勪唬鐮侀泦鍚�
+    __sync_listen_codes_pos()
+
+
+# 鍚屾鐩戝惉浠g爜浣嶇疆淇℃伅
+def __sync_listen_codes_pos():
+    redis_instance = __redisManager.getRedis()
+    # 鑾峰彇宸茬粡姝e湪鐩戝惉鐨勪唬鐮�
+    keys = redis_instance.keys("code_listen_pos-*")
+    codes_set = set()
+    for key in keys:
+        codes_set.add(key.replace("code_listen_pos-", ""))
+
+    keys = redis_instance.keys("listen_code-*-*")
+
+    for key in keys:
+        result = redis_instance.get(key)
+        if result:
+            # 绉婚櫎闇�瑕佹坊鍔犵殑浠g爜
+            codes_set.discard(result)
+            client_id_, pos_, code_ = int(key.split("-")[1]), int(key.split("-")[2]), result
+            key_ = "code_listen_pos-{}".format(code_)
+            val = redis_instance.get(key_)
+            if val is None:
+                redis_instance.setex(key_, tool.get_expire(), json.dumps((client_id_, pos_)))
+            else:
+                val = json.loads(val)
+                if val[0] != client_id_ or val[1] != pos_:
+                    redis_instance.setex(key_, tool.get_expire(), json.dumps((client_id_, pos_)))
+
+    # 绉婚櫎娌℃湁鐩戝惉鐨勪唬鐮�
+    for code_ in codes_set:
+        redis_instance.delete(code_)
 
 
 # 鍒濆鍖栦綅缃�
@@ -196,7 +268,7 @@
 def get_can_listen_pos(client_id=0):
     client_ids = []
     if client_id <= 0:
-        client_ids = data_process.getValidL2Clients()
+        client_ids = client_manager.getValidL2Clients()
     else:
         client_ids.append(client_id)
     random.shuffle(client_ids)
@@ -229,23 +301,33 @@
 # 鑾峰彇姝e湪鐩戝惉鐨勪唬鐮佺殑浣嶇疆
 def get_listen_code_pos(code):
     redis_instance = __redisManager.getRedis()
-    keys = redis_instance.keys("listen_code-*-*")
-    for key in keys:
-        result = redis_instance.get(key)
-        if result is not None and code == result:
-            return key.split("-")[1], key.split("-")[2]
-    return None, None
+    val = redis_instance.get("code_listen_pos-{}".format(code))
+    if val is None:
+        return None, None
+    val = json.loads(val)
+    return val[0], val[1]
 
 
 # 鏄惁姝e湪鐩戝惉
 def is_listen(code):
+    redis_instance = __redisManager.getRedis()
+    val = redis_instance.get("code_listen_pos-{}".format(code))
+    if val is None:
+        return False
+    else:
+        return True
+    # codes = get_listen_codes()
+    # return codes.__contains__(code)
+
+
+def is_listen_old(code):
     codes = get_listen_codes()
     return codes.__contains__(code)
 
 
 # 鐩戝惉鏄惁婊′簡
 def is_listen_full():
-    clients = data_process.getValidL2Clients()
+    clients = client_manager.getValidL2Clients()
     codes = get_listen_codes()
     return len(codes) >= 8 * len(clients)
 
@@ -262,17 +344,29 @@
     redis_instance.setex("gp_operate-{}".format(code), 30, "1")
 
 
+# 鎵归噺璁剧疆姝e湪鎿嶄綔鐨勪唬鐮�
+def set_operates(codes):
+    redis_instance = __redisManager.getRedis()
+    for code in codes:
+        redis_instance.setex("gp_operate-{}".format(code), 30, "1")
+
+
 # 绉婚櫎姝e湪鎿嶄綔鐨勪唬鐮�
 def rm_operate(code):
     redis_instance = __redisManager.getRedis()
     redis_instance.delete("gp_operate-{}".format(code))
 
 
+# 鎵归噺绉婚櫎姝e湪鎿嶄綔鐨勪唬鐮�
+def rm_operates(codes):
+    redis_instance = __redisManager.getRedis()
+    for code in codes:
+        redis_instance.delete("gp_operate-{}".format(code))
+
+
 if __name__ == '__main__':
-    # print(get_can_listen_pos(0))
-    # print(get_listen_codes())
-    # print(is_listen_full())
-    # print(is_listen("002271"))
-    # print(get_listen_code_pos("002272"))
-    code = get_listen_code_by_pos(2, 7)
-    print(code)
+    _start = time.time()
+    redis_instance = __redisManager.getRedis()
+    val = redis_instance.get("code_listen_pos-{}".format("603786"))
+    print(json.loads(val))
+    print((time.time() - _start) * 1000)

--
Gitblit v1.8.0