From 96dc1a4cc38b588f39387b5a85b9677100e357f1 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期四, 23 三月 2023 23:55:40 +0800
Subject: [PATCH] 首板买入打分机制

---
 third_data/hot_block_data_process.py |  108 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 106 insertions(+), 2 deletions(-)

diff --git a/third_data/hot_block_data_process.py b/third_data/hot_block_data_process.py
index b7af45a..11afd89 100644
--- a/third_data/hot_block_data_process.py
+++ b/third_data/hot_block_data_process.py
@@ -5,6 +5,7 @@
 
 import tool
 from db import redis_manager
+from db import mysql_data
 
 __redisManager = redis_manager.RedisManager(0)
 
@@ -13,8 +14,109 @@
     return __redisManager.getRedis()
 
 
+class XGBHotBlockDataManager:
+    total_datas = []
+    __last_datas={}
+
+    @classmethod
+    def save(cls,day, datas):
+        mysqldb = mysql_data.Mysqldb()
+        # 缁熻浠g爜鎵�灞炴澘鍧�
+        code_block_dict = {}
+        for data in datas:
+            for code_info in data[2]:
+                code = code_info[0].split(".")[0]
+                if not code_block_dict.get(code):
+                    code_block_dict[code] = set()
+                code_block_dict[code].add(data[0])
+
+        for data in datas:
+            for code_info in data[2]:
+                code = code_info[0].split(".")[0]
+                _id = f"{day}_{data[0]}_{code}"
+
+                result = mysqldb.select_one("select count(*) from xgb_hot_block where _id='{}'".format(_id))
+                if not result[0]:
+                    mysqldb.execute(
+                        f"insert into xgb_hot_block(_id,_day,_block_name,_code,_limit_up_time,_price,_rate,_update_time) values('{_id}','{day}','{data[0]}','{code}','{code_info[4]}','{code_info[2]}','{code_info[3]}',now())")
+                else:
+                    # 濡傛灉涓婃鐨勬暟鎹拰杩欐涓�鏍峰氨涓嶆洿鏂帮紝鍚﹀垯闇�瑕佹洿鏂版暟鎹�
+                    if cls.__last_datas.get(_id) != code_info:
+                        # 鏇存柊
+                        mysqldb.execute(f"update xgb_hot_block set _limit_up_time='{code_info[4]}',_price='{code_info[2]}',_rate='{code_info[3]}' where _id='{_id}'")
+                cls.__last_datas[_id] = code_info
+                # 鑾峰彇鍘熸潵鐨勪唬鐮佹墍灞炴澘鍧�,鍒犻櫎涔嬪墠閿欒鐨勬澘鍧�
+                old_datas = XGBHotBlockDataManager.list_by_code(code, day)
+                if old_datas:
+                    for d in old_datas:
+                        if d[2] not in code_block_dict[code]:
+                            mysqldb.execute(f"delete from xgb_hot_block where _id='{d[0]}'")
+        # 灏嗕粖鏃ユ暟鎹鍏ュ埌鍐呭瓨涓�
+        XGBHotBlockDataManager.total_datas = XGBHotBlockDataManager.list_all(tool.get_now_date_str())
+
+    @staticmethod
+    def list_all(day):
+        mysqldb = mysql_data.Mysqldb()
+        return mysqldb.select_all(f"select * from xgb_hot_block where _day='{day}'")
+
+    @staticmethod
+    def list_by_code(code, day):
+        mysqldb = mysql_data.Mysqldb()
+        return mysqldb.select_all(f"select * from xgb_hot_block where _code='{code}' and _day='{day}'")
+
+    @staticmethod
+    def list_by_block(block_name, day):
+        mysqldb = mysql_data.Mysqldb()
+        return mysqldb.select_all(f"select * from xgb_hot_block where _block_name='{block_name}' and _day='{day}'")
+
+
+# 鑾峰彇浠g爜鎵�鍦ㄦ澘鍧椾俊鎭�
+def get_info(code):
+    blocks = get_code_blocks(code)
+
+    target_block = None
+    if blocks:
+        for block in blocks:
+            if block == '鍏憡' or block == '鍏朵粬':
+                continue
+            target_block = block
+            break
+    if not target_block:
+        return None
+
+    limit_up_codes_set = set()
+    for block in latest_datas:
+        if block[0] == target_block:
+            for code_data in block[2]:
+                if len(code_data[4]) > 6:
+                    limit_up_codes_set.add(code_data[0].split('.')[0])
+    limit_up_codes_set.discard(code)
+    limit_up_count = len(limit_up_codes_set)
+
+    total_datas = XGBHotBlockDataManager.total_datas
+    codes = set()
+    for data in total_datas:
+        block = data[2]
+        if block != target_block:
+            continue
+        code = data[3]
+        limit_up_time = data[4]
+        if len(limit_up_time) > 6:
+            codes.add(code)
+    codes.discard(code)
+    codes.difference(limit_up_codes_set)
+    # 鐐告澘涓暟
+    break_size = len(codes)
+    return (limit_up_count,break_size)
+
+
+latest_datas = []
+
+
 # 淇濆瓨鏁版嵁
-def save_datas(datas):
+def save_datas(day, datas):
+    latest_datas = datas
+    XGBHotBlockDataManager.save(day, datas)
     code_block_dict = {}
     block_codes_dict = {}
     for block in datas:
@@ -63,5 +165,7 @@
         block_codes.get(block)
     return None
 
+
 if __name__ == "__main__":
-    print(get_code_blocks("600468"))
\ No newline at end of file
+    XGBHotBlockDataManager.total_datas=XGBHotBlockDataManager.list_all("2023-03-23")
+    get_info('002230')

--
Gitblit v1.8.0