From c8b740733f0f9fcf438fc4606eea317011ebd8bd Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 28 四月 2023 16:42:47 +0800
Subject: [PATCH] 看盘页面及相关接口修改

---
 output/code_info_output.py |  178 +++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 125 insertions(+), 53 deletions(-)

diff --git a/output/code_info_output.py b/output/code_info_output.py
index 61dd105..2924830 100644
--- a/output/code_info_output.py
+++ b/output/code_info_output.py
@@ -8,6 +8,7 @@
 # 甯傚満鐑害
 import os
 import sys
+import time
 
 import code_volumn_manager
 import constant
@@ -19,7 +20,8 @@
 import log
 import tool
 from l2 import l2_data_manager, l2_data_util, transaction_progress, l2_data_manager_new, code_price_manager
-from third_data import kpl_data_manager, kpl_util
+from third_data import kpl_data_manager, kpl_util, kpl_api, block_info
+from third_data.kpl_data_manager import KPLLimitUpDataRecordManager, KPLDataManager
 from trade import first_code_score_manager, l2_trade_factor, trade_manager, l2_trade_util
 from trade.l2_trade_factor import L2TradeFactorUtil
 import trade.deal_big_money_manager
@@ -73,6 +75,7 @@
     # 鑾峰彇鐧藉悕鍗�,榛戝悕鍗�
     if trade_manager.gpcode_manager.WantBuyCodesManager.is_in(code):
         code_extra_infos.append("鎯充拱鍗�")
+    params["code"] = code
     params["code_name"] = f"{gpcode_manager.get_code_name(code)} {code}  锛坽','.join(code_extra_infos)}锛�"
 
     score_info = None
@@ -201,7 +204,8 @@
                 # 楂樹綅鐗堜俊鎭�
                 "high_block_infos": [],
             }
-        params["score_data"]["hot_block"] = {"score": hot_block_score,"limit_up_index":hot_block_source_data['limit_up_index']+1,
+        params["score_data"]["hot_block"] = {"score": hot_block_score,
+                                             "limit_up_index": hot_block_source_data['limit_up_index'] + 1,
                                              "block_name": hot_block_source_data['target_block_info'][0],
                                              "limit_up_count": hot_block_source_data['limit_up_codes_count'],
                                              "open_limit_up_count": hot_block_source_data['break_size']}
@@ -219,7 +223,7 @@
         # deal_big_money
 
         ###############################涓嬪崟淇℃伅###############################
-        params["score_data"]["trade_data"] = {}
+        params["trade_data"] = {}
 
         # 鑾峰彇涔板叆鎰忔効
         volume_rate = score_source_list[6]
@@ -235,22 +239,22 @@
                                                                                      ((score, score_list),
                                                                                       score_source_list))
         if -1 < __L2PlaceOrderParamsManager.score_index < 3:
-            params["score_data"]["trade_data"]["start"] = {"desc": "涓诲姩涔板叆"}
+            params["trade_data"]["star"] = {"desc": "涓诲姩涔板叆"}
             if __L2PlaceOrderParamsManager.score_index == 0:
-                params["score_data"]["trade_data"]["start"]["count"] = 3
+                params["trade_data"]["star"]["count"] = 3
             elif __L2PlaceOrderParamsManager.score_index == 1:
-                params["score_data"]["trade_data"]["start"]["count"] = 2
+                params["trade_data"]["star"]["count"] = 2
             else:
-                params["score_data"]["trade_data"]["start"]["count"] = 1
+                params["trade_data"]["star"]["count"] = 1
 
         elif __L2PlaceOrderParamsManager.score_index < 0:
-            params["score_data"]["trade_data"]["start"] = {"desc": "涓嶆墽琛屼拱鍏�", "count": 0}
+            params["trade_data"]["star"] = {"desc": "涓嶆墽琛屼拱鍏�", "count": 0}
         else:
-            params["score_data"]["trade_data"]["start"] = {"desc": "琚姩涔板叆", "count": 0}
+            params["trade_data"]["star"] = {"desc": "琚姩涔板叆", "count": 0}
         # 瀹夊叏绗旀暟
         safe_count = __L2PlaceOrderParamsManager.get_safe_count()
         base_safe_count, min_count, max_count = L2TradeFactorUtil.get_safe_buy_count(code, True)
-        params["score_data"]["trade_data"]["safe_count"] = {"base": base_safe_count, "now": safe_count}
+        params["trade_data"]["safe_count"] = {"base": base_safe_count, "now": safe_count}
         # 鍔ㄦ�丮鍊�
         m = __L2PlaceOrderParamsManager.get_m_val()
         zyltgb = global_util.zyltgb_map.get(code)
@@ -258,11 +262,11 @@
             global_data_loader.load_zyltgb()
             zyltgb = global_util.zyltgb_map.get(code)
         base_m = L2TradeFactorUtil.get_base_safe_val(zyltgb)
-        params["score_data"]["trade_data"]["m"] = {"base": base_m // 10000, "now": m[0] // 10000},
+        params["trade_data"]["m_val"] = {"base": base_m // 10000, "now": m[0] // 10000},
         # 涔板墠澶у崟
         big_num = __L2PlaceOrderParamsManager.get_big_num_count()
         base_big_num = __base_L2PlaceOrderParamsManager.get_big_num_count()
-        params["score_data"]["trade_data"]["big_num"] = {"base": base_big_num, "now": big_num}
+        params["trade_data"]["big_num"] = {"base": base_big_num, "now": big_num}
         # 鎴愪氦杩涘害
         trade_progress, is_default = transaction_progress.TradeBuyQueue().get_traded_index(code)
         if trade_progress is None or trade_progress < 0 or is_default:
@@ -270,8 +274,8 @@
             pass
         else:
             data = total_datas[trade_progress]
-            params["score_data"]["trade_data"]["trade_progress"] = {"time": data['val']['time'],
-                                                                    "num": data['val']['num'], "money": round(
+            params["trade_data"]["trade_progress"] = {"time": data['val']['time'],
+                                                      "num": data['val']['num'], "money": round(
                     data['val']['num'] * float(data['val']['price']) * 100 / 10000, 1)}
 
         # 涔板叆淇″彿
@@ -283,18 +287,33 @@
             pass
         else:
             data = total_datas[buy_single_index]
-            params["score_data"]["trade_data"]["buy_single"] = {"time": data['val']['time'], "num": data['val']['num'],
-                                                                "money": round(data['val']['num'] * float(
-                                                                    data['val']['price']) * 100 / 10000, 1)}
+            params["trade_data"]["buy_single"] = {"time": data['val']['time'], "num": data['val']['num'],
+                                                  "money": round(data['val']['num'] * float(
+                                                      data['val']['price']) * 100 / 10000, 1)}
 
         if buy_exec_index is None or buy_exec_index < 0:
             # buy_params_info.append("鏈笅鍗�")
             pass
         else:
             data = total_datas[buy_exec_index]
-            params["score_data"]["trade_data"]["buy_exec"] = {"time": data['val']['time'], "num": data['val']['num'],
-                                                              "money": round(data['val']['num'] * float(
-                                                                  data['val']['price']) * 100 / 10000, 1)}
+            params["trade_data"]["buy_exec"] = {"time": data['val']['time'], "num": data['val']['num'],
+                                                "money": round(data['val']['num'] * float(
+                                                    data['val']['price']) * 100 / 10000, 1)}
+        params["trade_data"]["trade_state"] = {}
+        trade_state = trade_manager.get_trade_state(code)
+        if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_manager.TRADE_STATE_BUY_DELEGATED:
+            params["trade_data"]["trade_state"]["order"] = True
+            params["trade_data"]["trade_state"]["desc"] = "宸蹭笅鍗�"
+        else:
+            params["trade_data"]["trade_state"]["order"] = False
+            if trade_state == trade_manager.TRADE_STATE_NOT_TRADE:
+                params["trade_data"]["trade_state"]["desc"] = "鏈氦鏄�"
+            elif trade_state == trade_manager.TRADE_STATE_BUY_CANCEL_ING:
+                params["trade_data"]["trade_state"]["desc"] = "鎾ゅ崟涓�"
+            elif trade_state == trade_manager.TRADE_STATE_BUY_CANCEL_SUCCESS:
+                params["trade_data"]["trade_state"]["desc"] = "鎾ゅ崟鎴愬姛"
+            elif trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS:
+                params["trade_data"]["trade_state"]["desc"] = "宸叉垚浜�"
 
     ##############################閫夎偂瀹�##################################
 
@@ -320,39 +339,91 @@
     params["trade_record"] = {"open_limit_up": trade_info[0], "records": trade_info[2]}
 
     ##############################寮�鐩樺暒鐩稿叧淇℃伅##################################
-    params["kpl_industry_rank"] = []
-    params["kpl_best_feng_kou"] = []
-    params["kpl_feng_kou"] = []
-    params["kpl_feng_xiang"] = []
-    best_fengkou = __kplDataManager.get_data(kpl_util.KPLDataType.BEST_FENG_KOU)
-    fengkou = __kplDataManager.get_data(kpl_util.KPLDataType.FENG_KOU)
-    fengxiang = __kplDataManager.get_data(kpl_util.KPLDataType.FENG_XIANG)
-    rank_infos = __kplDataManager.get_data(kpl_util.KPLDataType.INDUSTRY_RANK)
-    # (浠g爜,鍚嶇О,寮哄害,娑ㄥ箙,鐑棬鏉垮潡,鎵�鏈夋澘鍧�)
-    if best_fengkou:
-        for r in best_fengkou:
-            hot_block = "銆�".join(r[4].split("銆�")[:2])
-            params["kpl_best_feng_kou"].append(
-                {"name": r[1], "weight": r[2], "money": money_desc(r[2]), "rate": r[3], "hot_block": hot_block,
-                 "hot_block_all": r[5]})
-    if fengkou:
-        fengkou = fengkou[:30]
-        for r in fengkou:
-            # 甯傚満椋庡彛
-            # (浠g爜,鍚嶇О,娑ㄥ箙,涓诲姏鍑�棰�,椋庡彛姒傚康)
-            params["kpl_feng_kou"].append(
-                {"name": r[1], "money": money_desc(r[3]), "rate": r[2], "block": r[4]})
-    if fengxiang:
-        for r in fengxiang:
-            # 椋庡悜鏍�
-            # (浠g爜, 鍚嶇О, 鐜颁环, 娑ㄥ箙, 鏉垮潡, 300涓囧ぇ鍗曞噣棰�, 涓诲姏鍑�棰�, 鑷敱甯傚��)
-            params["kpl_feng_xiang"].append(
-                {"name": r[1], "money_300w": money_desc(r[5]), "money_main": money_desc(r[6]), "rate": r[3],
-                 "block": r[4]})
+    params["kpl_code_info"] = {}
+    # 鑾峰彇寮�鐩樺暒鏉垮潡
+    plate_info = kpl_api.getStockIDPlate(code)
+    if plate_info:
+        plate_info.sort(key=lambda x: x[2])
+        plate_info.reverse()
+        params["kpl_code_info"]["plate"] = plate_info
 
-    if rank_infos:
-        for r in rank_infos:
-            params["kpl_industry_rank"].append({"name": r[1], "money": money_desc(r[2]), "rate": r[3]})
+    # 鑾峰彇浠g爜鐨勫巻鍙叉定鍋滄暟鎹�
+    params["kpl_code_info"]["code_records"] = KPLLimitUpDataRecordManager.get_latest_infos(code, 4)
+
+    # 鑾峰彇浠婃棩鏉垮潡
+    block = block_info.get_target_block(code, False)
+    if block is None:
+        block = "鏃犳澘鍧�"
+    # 鑾峰彇鏈�杩戠殑4涓氦鏄撴棩
+    today = tool.get_now_date_str()
+    days = []
+    day = today
+    for i in range(3):
+        day = juejin.JueJinManager.get_previous_trading_date(day)
+        days.append(day)
+    days.insert(0, today)
+    # 鑾峰彇杩欏嚑澶╃殑娑ㄥ仠浠g爜
+    kpl_record_datas = {}
+    for d in days:
+        tem_datas = KPLLimitUpDataRecordManager.list_by_block(block, d)
+        tem_datas = list(tem_datas)
+        # 鏍规嵁娑ㄥ仠鏃堕棿鎺掑簭
+        tem_datas.sort(key=lambda x: int(x[5]))
+
+        kpl_record_datas[d] = {"codes": [], "hot_block": block, "index": -1, "limit_up_count": 0}
+        for i in range(len(tem_datas)):
+            temp = tem_datas[i]
+            __code = temp[3]
+            kpl_record_datas[d]["codes"].append(
+                {"name": temp[4], "code": __code, "limit_up": False, "open_limit_up": False,"ss":(__code.find("00")==0 or __code.find("60")==0) })
+            if __code == code:
+                kpl_record_datas[d]["blocks"] = temp[6].split("銆�")
+                kpl_record_datas[d]["index"] = i + 1
+                kpl_record_datas[d]["limit_up_time"] = time.strftime("%H:%M:%S", time.localtime(int(temp[5])))
+    # 鑾峰彇浠婃棩浠g爜鐨勫緱鍒�
+    __score_dict = {}
+    for fs in codes_score:
+        for s in fs:
+            # (寰楀垎,鏄惁娑ㄥ仠)
+            __score_dict[s[0]] = (s[2], s[3])
+    # 鑾峰彇鍒嗗��
+    for d in kpl_record_datas[today]["codes"]:
+        __code = d["code"]
+        if __code in __score_dict:
+            d["score"] = __score_dict[__code][0]
+    # 鑾峰彇鏄惁娑ㄥ仠,缁熻娑ㄥ仠鏁伴噺
+    for d in kpl_record_datas:
+        # 鑾峰彇娑ㄥ仠浠g爜淇℃伅
+        limit_up_datas = __kplDataManager.get_from_file(kpl_util.KPLDataType.LIMIT_UP, d)
+        if limit_up_datas is None:
+            limit_up_datas = []
+        limit_up_codes = set([x[0] for x in limit_up_datas])
+        limit_up_count = 0
+        for code_info in kpl_record_datas[d]["codes"]:
+            __code = code_info["code"]
+            if __code in limit_up_codes:
+                code_info["limit_up"] = True
+                code_info["open_limit_up"] = False
+                limit_up_count += 1
+            else:
+                code_info["limit_up"] = False
+                code_info["open_limit_up"] = True
+        kpl_record_datas[d]["limit_up_count"] = limit_up_count
+
+    block_records = [[key, kpl_record_datas[key]] for key in kpl_record_datas]
+    block_records.sort(key=lambda x: x[0])
+    block_records.reverse()
+    for i in range(len(block_records)):
+        if i == 0:
+            block_records[i][0] = "浠婂ぉ"
+        elif i == 1:
+            block_records[i][0] = "鏄ㄥぉ"
+        elif i == 2:
+            block_records[i][0] = "鍓嶅ぉ"
+        elif i == 3:
+            block_records[i][0] = "涔嬪墠"
+
+    params["kpl_code_info"]["block_records"] = block_records
 
     return render(params)
 
@@ -476,7 +547,8 @@
                        "big_num": {"base": 10, "now": 2},
                        "trade_progress": {"time": "09:12:12", "num": 1111, "money": "12.56"},
                        "buy_single": {"time": "09:12:12", "num": 1111, "money": "12.56"},
-                       "buy_exec": {"time": "09:12:12", "num": 1111, "money": "12.56"}
+                       "buy_exec": {"time": "09:12:12", "num": 1111, "money": "12.56"},
+
                        },
         "xgb_code_infos": [{"date": "浠婂ぉ", "blocks": [
             {"name": "褰辫", "limit_up_count": 2, "index": 1, "price": "12.00", "rate": "+10.00%"},

--
Gitblit v1.8.0