From cbe19ea6066a600cbd0b5110db5d43f8252d14a8 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期四, 13 六月 2024 11:23:53 +0800
Subject: [PATCH] L撤成交进度相关改进

---
 code_attribute/code_volumn_manager.py |   82 ++++++++++++++++++++++++++++++++++-------
 1 files changed, 68 insertions(+), 14 deletions(-)

diff --git a/code_attribute/code_volumn_manager.py b/code_attribute/code_volumn_manager.py
index 0849d48..3c046c8 100644
--- a/code_attribute/code_volumn_manager.py
+++ b/code_attribute/code_volumn_manager.py
@@ -7,24 +7,29 @@
 # yesterday 鏄ㄥぉ鐨勯噺
 import json
 
-from db.redis_manager import RedisUtils
+from code_attribute import gpcode_manager
+from db.redis_manager_delegate import RedisUtils
+from log_module import async_log_util
 from utils import global_util, tool
-from db import redis_manager
+from db import redis_manager_delegate as redis_manager
 from log_module.log import logger_day_volumn
 
+__db = 0
 __redis_manager = redis_manager.RedisManager(0)
 
 
 # 璁剧疆鍘嗗彶閲�
-def set_histry_volumn(code, max60, yesterday, max60_day=''):
+def set_histry_volumn(code, max60, yesterday, max60_day, max60_day_count):
     redis = __redis_manager.getRedis()
-    global_util.max60_volumn[code] = (max60, max60_day)
+    global_util.max60_volumn[code] = (max60, max60_day, max60_day_count)
     global_util.yesterday_volumn[code] = yesterday
     try:
-        RedisUtils.setex(redis, "volumn_max60-{}".format(code), tool.get_expire(), json.dumps((max60, max60_day)), auto_free=False)
-        RedisUtils.setex(redis, "volumn_yes-{}".format(code), tool.get_expire(), yesterday, auto_free=False)
+        RedisUtils.setex_async(0, "volumn_max60-{}".format(code), tool.get_expire(),
+                               json.dumps((max60, max60_day, max60_day_count)),
+                               auto_free=False)
+        RedisUtils.setex_async(0, "volumn_yes-{}".format(code), tool.get_expire(), yesterday, auto_free=False)
     finally:
-        redis.connection_pool.disconnect()
+        RedisUtils.realse(redis)
 
 
 # 鑾峰彇鍘嗗彶閲�
@@ -41,7 +46,7 @@
             yesterday = RedisUtils.get(redis, "volumn_yes-{}".format(code), auto_free=False)
         return max60, yesterday
     finally:
-        redis.connection_pool.disconnect()
+        RedisUtils.realse(redis)
 
 
 __today_volumn_cache = {}
@@ -51,13 +56,26 @@
 
 # 璁剧疆浠婃棩閲�
 def set_today_volumn(code, volumn):
-    logger_day_volumn.info("code:{} volumn:{}".format(code, volumn))
+    async_log_util.info(logger_day_volumn, "code:{} volumn:{}".format(code, volumn))
     global_util.today_volumn[code] = volumn
     # 鏈�1000鎵嬬殑鍙樺寲鎵嶄繚瀛�
     if code in __today_volumn_cache and volumn - __today_volumn_cache[code] < 100000:
         return
     __today_volumn_cache[code] = volumn
-    RedisUtils.setex( __redis_manager.getRedis(), "volumn_today-{}".format(code), tool.get_expire(), volumn)
+    RedisUtils.setex(__redis_manager.getRedis(), "volumn_today-{}".format(code), tool.get_expire(), volumn)
+
+
+# datas:[(code, volumn)]
+def set_today_volumns(datas):
+    for d in datas:
+        code, volumn = d
+        async_log_util.info(logger_day_volumn, "code:{} volumn:{}".format(code, volumn))
+        global_util.today_volumn[code] = volumn
+        # 鏈�1000鎵嬬殑鍙樺寲鎵嶄繚瀛�
+        if code in __today_volumn_cache and volumn - __today_volumn_cache[code] < 100000:
+            continue
+        __today_volumn_cache[code] = volumn
+        RedisUtils.setex_async(__db, "volumn_today-{}".format(code), tool.get_expire(), volumn)
 
 
 # 鑾峰彇浠婃棩閲�
@@ -69,15 +87,28 @@
 
 
 # 鑾峰彇閲忔瘮锛堜粖鏃ラ噺/max(60澶╂渶澶ч噺,鏄ㄦ棩閲�)锛�
-def get_volume_rate(code, with_info=False):
+# 灏嗘�诲崠閲忚绠楀湪鍐�
+def get_volume_rate(code, total_sell_volume=0, with_info=False):
     today = get_today_volumn(code)
     max60, yesterday = get_histry_volumn(code)
     if today is None or max60 is None or yesterday is None:
-        raise Exception("鑾峰彇閲忓け璐�")
-    rate = round(int(today) / max(int(max60[0]), int(yesterday)), 2)
+        raise Exception(f"鑾峰彇閲忓け璐�:{code}")
+    rate = round((int(today) + total_sell_volume) / max(int(max60[0]), int(yesterday)), 2)
     if not with_info:
         return rate
     return rate, (today, max(int(max60[0]), int(yesterday)))
+
+
+# 鑾峰彇閲忓弬鑰冩棩鏈�
+# 杩斿洖(鍙傝�冮噺鏃ユ湡,璺濅粖鐨勪氦鏄撴棩涓暟)
+def get_volume_refer_date(code):
+    max60, yesterday = get_histry_volumn(code)
+    if max60 is None or yesterday is None:
+        raise Exception("鑾峰彇澶辫触")
+    if int(max60[0]) >= int(yesterday):
+        return max60[1], max60[2]
+    else:
+        return "涓婁釜浜ゆ槗鏃�", 0
 
 
 # 鑾峰彇閲忔瘮绱㈠紩
@@ -120,7 +151,30 @@
                 code = k.split("-")[1]
                 global_util.yesterday_volumn[code] = RedisUtils.get(redis, k, auto_free=False)
     finally:
-        redis.connection_pool.disconnect()
+        RedisUtils.realse(redis)
+
+
+__reference_volume_as_money_y_dict = {}
+
+
+def get_reference_volume_as_money_y(code):
+    """
+    杩斿洖鍙傝�冮噺浠婃棩瀵瑰簲鐨勯噾棰濓紙鍗曚綅涓轰嚎锛�
+    @param code:
+    @return:
+    """
+    if code in __reference_volume_as_money_y_dict:
+        return __reference_volume_as_money_y_dict.get(code)
+    max60, yesterday = get_histry_volumn(code)
+    if max60:
+        num = max60[0]
+        limit_up_price = gpcode_manager.get_limit_up_price(code)
+        if limit_up_price:
+            money_y = round((num * float(limit_up_price)) / 1e8, 1)
+            __reference_volume_as_money_y_dict[code] = money_y
+            return money_y
+    # 榛樿涓�5浜�
+    return 5
 
 
 if __name__ == "__main__":

--
Gitblit v1.8.0