From 00e0f3113d462669837c3eba174d8b5d978f5126 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期三, 27 十二月 2023 17:35:58 +0800
Subject: [PATCH] 输出api修改

---
 third_data/data_server.py |   53 +++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 47 insertions(+), 6 deletions(-)

diff --git a/third_data/data_server.py b/third_data/data_server.py
index 65a3bc6..f9ca98b 100644
--- a/third_data/data_server.py
+++ b/third_data/data_server.py
@@ -7,9 +7,9 @@
 from http.server import BaseHTTPRequestHandler
 import dask
 
-from code_attribute.gpcode_manager import BlackListCodeManager
+from code_attribute.gpcode_manager import BlackListCodeManager, CodePrePriceManager
 from log_module.log import logger_system, logger_debug, logger_kpl_limit_up
-from utils import global_util, tool, data_export_util
+from utils import global_util, tool, data_export_util, init_data_util
 from code_attribute import gpcode_manager
 from log_module import log, log_analyse, log_export
 from l2 import code_price_manager, l2_data_util, l2_data_manager_new, cancel_buy_strategy, transaction_progress
@@ -49,6 +49,8 @@
     __industry_cache_dict = {}
     __latest_limit_up_codes_set = set()
     __data_process_thread_pool = concurrent.futures.ThreadPoolExecutor(max_workers=10)
+    # 浠g爜鐨勬定骞�
+    __code_limit_rate_dict = {}
 
     # 绂佺敤鏃ュ織杈撳嚭
     def log_message(self, format, *args):
@@ -515,6 +517,26 @@
                 response_data = json.dumps({"code": 1, "msg": "璇蜂笂浼燾ode"})
 
         elif url.path == "/get_last_trade_day_reasons":
+            # 璁$畻骞冲潎娑ㄥ箙
+            def get_limit_rate_list(codes):
+                if not codes:
+                    return []
+                need_request_codes = set()
+                if tool.trade_time_sub(tool.get_now_time_str(), "09:30:00") < 0:
+                    need_request_codes |= set(codes)
+                else:
+                    now_time = time.time()
+                    for c in codes:
+                        if c not in self.__code_limit_rate_dict:
+                            need_request_codes.add(c)
+                        elif now_time - self.__code_limit_rate_dict[c][1] >  60:
+                            need_request_codes.add(c)
+                if need_request_codes:
+                    _limit_rate_list = HistoryKDatasUtils.get_codes_limit_rate(list(need_request_codes))
+                    for d in _limit_rate_list:
+                        self.__code_limit_rate_dict[d[0]] = (d[1], time.time())
+                return [(c_, self.__code_limit_rate_dict[c_][0]) for c_ in codes]
+
             # 鑾峰彇涓婁釜浜ゆ槗鏃ョ殑鐩稿悓娑ㄥ仠鍘熷洜鐨勪唬鐮佷俊鎭�
             ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()])
             code = ps_dict["code"]
@@ -535,18 +557,36 @@
                 datas = self.__kplDataManager.get_from_file_cache(kpl_util.KPLDataType.LIMIT_UP, day)
                 # (浠g爜,鍚嶇О,棣栨娑ㄥ仠鏃堕棿,鏈�杩戞定鍋滄椂闂�,鍑犳澘,娑ㄥ仠鍘熷洜,鏉垮潡,瀹為檯娴侀��,涓诲姏鍑�棰�,娑ㄥ仠鍘熷洜浠g爜,娑ㄥ仠鍘熷洜浠g爜鏁伴噺)
                 yesterday_result_list = []
+                percent_rate = 0
                 if datas:
+                    yesterday_codes = set()
                     for d in datas:
-                        if d[5] == reason and d[0] != code:
-                            # (浠g爜,鍚嶇О)
-                            yesterday_result_list.append((d[0], d[1]))
+                        if d[5] == reason:
+                            yesterday_codes.add(d[0])
+                    # 鑾峰彇娑ㄥ箙
+                    limit_rate_list = get_limit_rate_list(yesterday_codes)
+                    limit_rate_dict = {}
+                    if limit_rate_list:
+                        total_rate = 0
+                        for d in limit_rate_list:
+                            limit_rate_dict[d[0]] = d[1]
+                            total_rate += d[1]
+                        percent_rate = round(total_rate / len(limit_rate_list), 2)
+
+                    for d in datas:
+                        if d[5] == reason:
+                            yesterday_codes.add(d[0])
+                            if d[0] != code:
+                                # (浠g爜,鍚嶇О, 娑ㄥ箙)
+                                yesterday_result_list.append((d[0], d[1], limit_rate_dict.get(d[0])))
+
                 current_limit_up_list = kpl_data_manager.KPLLimitUpDataRecordManager.latest_origin_datas
                 current_result_list = []
                 if current_limit_up_list:
                     for c in current_limit_up_list:
                         if c[5] == reason and c[0] != code:
                             current_result_list.append((c[0], c[1]))
-                response_data = json.dumps({"code": 0, "data": {"reason": reason,
+                response_data = json.dumps({"code": 0, "data": {"reason": reason, "reason_rate": percent_rate,
                                                                 "data": {"yesterday": yesterday_result_list,
                                                                          "current": current_result_list}}})
             else:
@@ -638,6 +678,7 @@
                                 logger_debug.exception(e)
                 kpl_data_manager.KPLLimitUpDataRecordManager.save_record(tool.get_now_date_str(), result_list_)
                 self.__kplDataManager.save_data(type_, result_list_)
+
         # 灏�"姒傚康"浜屽瓧鏇挎崲鎺�
         data = json.loads(json.dumps(data).replace("姒傚康", ""))
         type_ = data["type"]

--
Gitblit v1.8.0