From d1bf04791ad095b17660a1f383b7a12f0a59b1d1 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期三, 26 四月 2023 19:15:06 +0800
Subject: [PATCH] 优化H撤/融入网页看盘页面/开盘啦数据应用

---
 output/code_info_output.py |  449 ++++++++++++++++++++++++-------------------------------
 1 files changed, 195 insertions(+), 254 deletions(-)

diff --git a/output/code_info_output.py b/output/code_info_output.py
index c22d906..61dd105 100644
--- a/output/code_info_output.py
+++ b/output/code_info_output.py
@@ -19,12 +19,15 @@
 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 hot_block_data_process
+from third_data import kpl_data_manager, kpl_util
 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
+from jinja2 import Environment, FileSystemLoader
 
 base_output_content = {}
+
+__kplDataManager = kpl_data_manager.KPLDataManager()
 
 
 def __get_base_html_content():
@@ -40,113 +43,38 @@
     return f"<head><style>{base_output_content['css']}</style></head>"
 
 
-def __format_data(code_info, score_info, buy_params_info, xgb_code_info, xgb_infos, codes_score, trade_info):
-    html = __get_base_html_content()
-    html += "<body>"
-    html += f"<h2>{code_info[1]} {code_info[0]}    ({code_info[2]})</h2><br>"
-
-    if score_info:
-        html += "<b>-----涔板墠璇勫垎-------</b><br>"
-        score_types = ["鎹㈡墜閲忚兘", "绔炰环寮哄害", "璧勯噾鍔涘害", "鏃ョ嚎褰㈡��", "鍘嗗彶鑲℃��", "鏉垮潡鐑害", "涓婃澘鏃堕棿", "甯傚�煎ぇ灏�", "鑲′环澶у皬"]
-        html += "<table>"
-        for i in range(0, len(score_info[1])):
-            html += f"<tr><td>{score_types[i]}</td><td>{score_info[1][i]}</td><td>{score_info[2][i]}</td></tr>"
-        html += f"<tr><td><b>璇勫垎姹傚拰锛�</td><td>{score_info[0]}</b></td><td></td></tr>"
-        html += f"</table><br>"
-    html += "\n"
-    if buy_params_info:
-        html += "<b><br>-----浜ゆ槗鍙傛暟-------<br></b><table>"
-        titles = ["涔板叆鎰忔効", "瀹夊叏绗旀暟", "鍔ㄦ�丮鍊�", "涔板墠澶у崟", "鎴愪氦杩涘害", "涔板叆淇″彿", "涔板叆鎵ц浣�"]
-        for i in range(0, len(titles)):
-            html += f"<tr><td>{titles[i]}锛�</td><td>{buy_params_info[i]}</td></tr>"
-        html += "</table><br>"
-    html += "\n"
-    if xgb_code_info:
-        html += "<b><br>-----閫夎偂瀹�---------<br></b>"
-        xgb_code_info_dates = ["浠婂ぉ", "鏄ㄥぉ", "鍓嶅ぉ", "涔嬪墠"]
-        for i in range(0, len(xgb_code_info)):
-            if xgb_code_info[i]:
-                html += f"{xgb_code_info_dates[i]}锛�<br>"
-                for info in xgb_code_info[i]:
-                    if i == 0:
-                        html += f"銆�<font color='red'>{info[0]}</font>銆戯紝鍏便��<font color='red'>{info[1]}</font>銆戝彧绁ㄦ定鍋�<br>绗��<font color='red'>{info[2]}</font>銆戞定鍋滐紝鐜颁环銆�<font color='red'>{info[3]}</font>銆戝厓锛屾定骞呫��<font color='red'>{info[4]}</font>銆�<br><br>"
-                    else:
-                        html += f"銆恵info[0]}銆戯紝鍏便�恵info[1]}銆戝彧绁ㄦ定鍋�<br>绗�恵info[2]}銆戞定鍋滐紝鐜颁环銆恵info[3]}銆戝厓锛屾定骞呫�恵info[4]}銆�<br><br>"
-    html += "\n"
-    if codes_score[0]:
-        html += "<b>-----涓诲姩涔板叆-------</b><br>"
-        html += "<table>"
-        for i in range(0, len(codes_score[0])):
-            if i % 3 == 0:
-                html += "<tr>"
-            html += f"<td><font color='red'>{'*' if codes_score[0][i][3] else ''}{codes_score[0][i][1]}({codes_score[0][i][0]}):{codes_score[0][i][2]}</font></td>"
-            if i % 3 == 2 or i == len(codes_score[0]) - 1:
-                html += "</tr>"
-        html += "</table><br>\n"
-
-    if codes_score[1]:
-        html += "<b>-----琚姩涔板叆-------</b><br>"
-        html += "<table>"
-        for i in range(0, len(codes_score[1])):
-            if i % 3 == 0:
-                html += "<tr>"
-            html += f"<td><font color='#000080'>{'*' if codes_score[1][i][3] else ''}{codes_score[1][i][1]}({codes_score[1][i][0]}):{codes_score[1][i][2]}</font></td>"
-            if i % 3 == 2 or i == len(codes_score[1]) - 1:
-                html += "</tr>"
-        html += "</table><br>\n"
-
-    if codes_score[2] and False:
-        html += "<b>-----涓嶄拱鍏�-------</b><br>"
-        html += "<table>"
-        for i in range(0, len(codes_score[2])):
-            if i % 4 == 0:
-                html += "<tr>"
-            html += f"<td>{codes_score[2][i][1]}:{codes_score[2][i][2]}</td>"
-            if i % 4 == 3 or i == len(codes_score[1]) - 1:
-                html += "</tr>"
-        html += "</table><br>\n"
-
-    if trade_info:
-        html += "<b>-----浠婃棩鎸傛挙璁板綍-------</b><br>"
-        html += "<br>浠婃棩鏄惁鐐告澘锛�"
-        if trade_info[0] is not None:
-            html += f"鐐告澘-{trade_info[0]}"
-        else:
-            html += f"鏈偢鏉�"
-        if trade_info[1]:
-            html += "<table>"
-            for i in range(0, len(trade_info[1])):
-                if i % 2 == 0:
-                    html += "<tr>"
-                html += f"<td>{trade_info[1][i]}</td>"
-                if i % 2 == 1 or i == len(codes_score[0]) - 1:
-                    html += "</tr>"
-            html += "</table><br>"
-        html += "<br>\n"
-
-    if xgb_infos:
-        html += "<b><br>-----甯傚満鐑害-------<br></b><table>"
-        for info in xgb_infos:
-            html += f"<tr><td>{info[0]}<br><div style=''>{info[1]}</div></td></tr>"
-        html += "</table>"
-    html += "<br><br>"
-    html += "</body>"
-    return html
+def render(params):
+    env = Environment(loader=FileSystemLoader('D:/workspace/trade/output'))
+    css = env.get_template('css/index.css')
+    params["css"] = css.render()
+    template = env.get_template('index.html')
+    html_content = template.render(params)
+    return html_content
 
 
 def get_output_html(code):
+    def money_desc(money):
+        if money > 100000000:
+            return f"{round(money / 100000000, 2)}浜�"
+        else:
+            return f"{round(money / 10000, 2)}涓�"
+
+    params = {
+        "base_url": "http://192.168.3.252/kp/",
+    }
+
     day = tool.get_now_date_str()
     is_target_code = gpcode_manager.FirstCodeManager.is_in_first_record(code)
-    code_extra_infos=[]
+    code_extra_infos = []
     if l2_trade_util.BlackListCodeManager.is_in(code):
         code_extra_infos.append("榛戝悕鍗�")
     if l2_trade_util.WhiteListCodeManager.is_in(code):
         code_extra_infos.append("鐧藉悕鍗�")
     # 鑾峰彇鐧藉悕鍗�,榛戝悕鍗�
-    if trade_manager. gpcode_manager.WantBuyCodesManager.is_in(code):
+    if trade_manager.gpcode_manager.WantBuyCodesManager.is_in(code):
         code_extra_infos.append("鎯充拱鍗�")
+    params["code_name"] = f"{gpcode_manager.get_code_name(code)} {code}  锛坽','.join(code_extra_infos)}锛�"
 
-    code_info = [code, gpcode_manager.get_code_name(code),",".join(code_extra_infos)]
     score_info = None
     buy_params_info = None
     xgb_infos = None
@@ -155,6 +83,7 @@
         l2_data_util.load_l2_data(code)
         total_datas = l2_data_util.local_today_datas.get(code)
     if is_target_code:
+        params["score_data"] = {}
         limit_up_price = gpcode_manager.get_limit_up_price(code)
         limit_up_time = limit_up_time_manager.get_limit_up_time(code)
         volume_rate, volume_info = code_volumn_manager.get_volume_rate(code, True)
@@ -162,22 +91,24 @@
                                                                                     True)
         ################################涔板墠璇勫垎################################
         # ["鎹㈡墜閲忚兘", "绔炰环寮哄害", "璧勯噾鍔涘害", "K绾垮舰鎬�", "鍘嗗彶鑲℃��", "鏉垮潡鐑害", "涓婃澘鏃堕棿", "甯傚�煎ぇ灏�","鑲′环澶у皬"]
-        score_list_new = []
-        score_source_list_new = []
+
         # 鎹㈡墜閲忚兘
-        score_list_new.append(score_list[6])
         # 鑾峰彇褰撳墠閲忎俊鎭�
         max_60, yest = code_volumn_manager.get_histry_volumn(code)
         today = code_volumn_manager.get_today_volumn(code)
-        score_source_list_new.append(
-            f"瀹炴椂閲忋�恵round(int(today) / 1000000, 2)}涓囨墜銆懨峰墠楂橀噺銆恵round(max_60[0] / 1000000, 2)}涓囨墜-{max_60[1]}銆�=銆恵round(score_source_list[6] * 100, 2)}%銆�")
+        params["score_data"]["volume"] = {"score": score_list[6], "now": f"{round(int(today) / 1000000, 2)}",
+                                          "high": {"num": round(max_60[0] / 1000000, 2), "date": max_60[1]},
+                                          "rate": round(score_source_list[6] * 100, 2)}
+
         # 绔炰环寮哄害
-        score_list_new.append(score_list[2])
-        score_source_list_new.append(f"寮�鐩樺暒浠婃棩濮斿仠銆恵score_source_list[2] if score_source_list[2] else 0}涓囥��")
+        params["score_data"]["bidding"] = {"score": score_list[2],
+                                           "money": (score_source_list[2] if score_source_list[2] else 0)}
 
         # 璧勯噾鍔涘害
         deal_indexes = trade.deal_big_money_manager.get_traded_indexes(code)
         deal_info = ""
+        params["score_data"]["deal_big_money"] = {"score": score_list[8], "money": score_source_list[8][0] // 10000,
+                                                  "base_money": score_source_list[8][1] // 10000}
         if deal_indexes:
             temps = []
             for index in deal_indexes:
@@ -186,10 +117,11 @@
             start_index = temps[0]
             end_index = temps[-1]
             deal_info = f"銆恵total_datas[start_index]['val']['time']}&{total_datas[start_index]['val']['num']}鎵�-{total_datas[end_index]['val']['time']}&{total_datas[end_index]['val']['num']}鎵嬨��,"
+            params["score_data"]["deal_big_money"]["start"] = {"time": total_datas[start_index]['val']['time'],
+                                                               "num": total_datas[start_index]['val']['num']}
+            params["score_data"]["deal_big_money"]["end"] = {"time": total_datas[end_index]['val']['time'],
+                                                             "num": total_datas[end_index]['val']['num']}
 
-        score_list_new.append(score_list[8])
-        score_source_list_new.append(
-            f"{deal_info}<br>绱閲戦銆恵score_source_list[8][0] // 10000}涓囥��&鍥哄畾m鍊笺�恵score_source_list[8][1] // 10000}涓囥��")
         # K绾垮舰鎬�
         k_score = 0
         k_source = []
@@ -200,31 +132,31 @@
         for k in range(0, len(score_source_list[3])):
             if k == 0:
                 if score_source_list[3][k][0]:
-                    k_source.append("銆愭定骞呰繃楂樸��")
+                    k_source.append("娑ㄥ箙杩囬珮")
             elif k == 1:
                 if score_source_list[3][k][0]:
-                    k_source.append("銆愮獊鐮村墠楂樸��")
+                    k_source.append("绐佺牬鍓嶉珮")
             elif k == 2:
                 if score_source_list[3][k][0]:
-                    k_source.append("銆愯秴璺岃ˉ娑ㄣ��")
+                    k_source.append("瓒呰穼琛ユ定")
             elif k == 3:
                 if score_source_list[3][k][0]:
-                    k_source.append(f"銆愰�艰繎鍓嶉珮-{score_source_list[3][k][1]}銆�")
+                    k_source.append(f"閫艰繎鍓嶉珮-{score_source_list[3][k][1]}銆�")
             elif k == 4:
                 if score_source_list[3][k][0]:
-                    k_source.append("銆怤瀛楀瀷銆�")
+                    k_source.append("N瀛楀瀷")
             elif k == 5:
                 if score_source_list[3][k][0]:
-                    k_source.append("銆怴瀛楀瀷銆�")
+                    k_source.append("V瀛楀瀷")
             elif k == 6:
                 if not score_source_list[3][k][0]:
-                    k_source.append("銆愪笉婊¤冻浠讳綍褰㈡�併��")
+                    k_source.append("涓嶆弧瓒充换浣曞舰鎬�")
             elif k == 7:
                 if score_source_list[3][k][0]:
-                    k_source.append("銆愬ぉ閲忓ぇ闃炽��")
+                    k_source.append("澶╅噺澶ч槼")
 
-        score_list_new.append(k_score)
-        score_source_list_new.append("/".join(k_source))
+        params["score_data"]["k_form"] = {"score": k_score, "datas": k_source}
+
         # 鍘嗗彶鑲℃��
         nature_score = 0
         nature_source = []
@@ -245,12 +177,10 @@
                 else:
                     nature_source.append(f"鏃犻鏉跨偢鏉�")
 
-        score_list_new.append(nature_score)
-        score_source_list_new.append(",".join(nature_source))
+        params["score_data"]["code_nature"] = {"score": nature_score, "data_desc": ",".join(nature_source)}
 
         # 鏉垮潡鐑害
         hot_block_score = 0
-        hot_block_source = []
         for k in score_list[5]:
             hot_block_score += k
         hot_block_source_data = score_source_list[5]
@@ -271,38 +201,26 @@
                 # 楂樹綅鐗堜俊鎭�
                 "high_block_infos": [],
             }
-            if k == "block_codes_rates_info":
-                hot_block_source.append(f"骞冲潎娑ㄥ箙:銆恵round(hot_block_source_data[k][0]/hot_block_source_data[k][1],2)}%銆�")
-            elif k == "limit_up_codes_count":
-                hot_block_source.append(f"鏉垮潡娑ㄥ仠鏁伴噺:銆恵hot_block_source_data[k]}銆�")
-            elif k == "target_block_info":
-                hot_block_source.append(f"鏉垮潡娑ㄥ箙:銆恵hot_block_source_data[k][1]}%銆�")
-            elif k == "limit_up_index":
-                hot_block_source.append(f"绗�恵hot_block_source_data[k]+1}銆戝彧娑ㄥ仠")
-            elif k == "high_block_infos":
-                for info in hot_block_source_data[k]:
-                    hot_block_source.append(f"{info[0][1]}{info[1]}")
-            if k == "target_block_info":
-                hot_block_source.append(f"銆恵hot_block_source_data[k][0]}銆戞蹇靛嚭鐜般�恵hot_block_source_data[k][2]}銆戞")
-        score_list_new.append(hot_block_score)
-        score_source_list_new.append(",".join(hot_block_source))
+        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']}
 
         # 涓婃澘鏃堕棿
-        score_list_new.append(score_list[7])
-        score_source_list_new.append(f"涓婃澘鏃堕棿銆恵score_source_list[7]}銆�")
+        params["score_data"]["limit_up_time"] = {"score": score_list[7], "time": score_source_list[7]}
         # 甯傚�煎ぇ灏�
-        score_list_new.append(score_list[0])
-        score_source_list_new.append(f"鑷敱甯傚�笺�恵round(score_source_list[0] / 100000000, 2)}浜裤��")
+        params["score_data"]["zyltgb"] = {"score": score_list[0], "value": round(score_source_list[0] / 100000000, 2)}
         # 鑲′环澶у皬
-        score_list_new.append(score_list[1])
-        score_source_list_new.append(f"鐜颁环銆恵score_source_list[1]}銆戝厓")
+        params["score_data"]["limit_up_price"] = {"score": score_list[1], "price": score_source_list[1]}
 
-        score_info = (score, score_list_new, score_source_list_new)
+        params["score_data"]["total_score"] = score
 
         # zyltgb, limit_price, bidding, k_form, code_nature, hot_block, volume_rate, limit_up_time,
         # deal_big_money
 
         ###############################涓嬪崟淇℃伅###############################
+        params["score_data"]["trade_data"] = {}
+
         # 鑾峰彇涔板叆鎰忔効
         volume_rate = score_source_list[6]
         __L2PlaceOrderParamsManager = l2_trade_factor.L2PlaceOrderParamsManager(code, True, volume_rate,
@@ -316,26 +234,23 @@
                                                                                          volume_rate),
                                                                                      ((score, score_list),
                                                                                       score_source_list))
-        buy_params_info = []
         if -1 < __L2PlaceOrderParamsManager.score_index < 3:
-            temp = "<font color='red'>銆愪富鍔ㄤ拱鍏ャ��"
+            params["score_data"]["trade_data"]["start"] = {"desc": "涓诲姩涔板叆"}
             if __L2PlaceOrderParamsManager.score_index == 0:
-                temp += "***"
+                params["score_data"]["trade_data"]["start"]["count"] = 3
             elif __L2PlaceOrderParamsManager.score_index == 1:
-                temp += "**"
+                params["score_data"]["trade_data"]["start"]["count"] = 2
             else:
-                temp += "*"
-            temp += "</font>"
-            buy_params_info.append(temp)
+                params["score_data"]["trade_data"]["start"]["count"] = 1
 
         elif __L2PlaceOrderParamsManager.score_index < 0:
-            buy_params_info.append("銆愪笉鎵ц涔板叆銆�")
+            params["score_data"]["trade_data"]["start"] = {"desc": "涓嶆墽琛屼拱鍏�", "count": 0}
         else:
-            buy_params_info.append("銆愯鍔ㄤ拱鍏ャ��")
+            params["score_data"]["trade_data"]["start"] = {"desc": "琚姩涔板叆", "count": 0}
         # 瀹夊叏绗旀暟
         safe_count = __L2PlaceOrderParamsManager.get_safe_count()
         base_safe_count, min_count, max_count = L2TradeFactorUtil.get_safe_buy_count(code, True)
-        buy_params_info.append(f"鍥哄畾瀹夊叏绗旀暟銆恵base_safe_count}銆戠瑪,琛板噺鍚庡畨鍏ㄧ瑪鏁般�恵safe_count}銆戠瑪")
+        params["score_data"]["trade_data"]["safe_count"] = {"base": base_safe_count, "now": safe_count}
         # 鍔ㄦ�丮鍊�
         m = __L2PlaceOrderParamsManager.get_m_val()
         zyltgb = global_util.zyltgb_map.get(code)
@@ -343,133 +258,103 @@
             global_data_loader.load_zyltgb()
             zyltgb = global_util.zyltgb_map.get(code)
         base_m = L2TradeFactorUtil.get_base_safe_val(zyltgb)
-        buy_params_info.append(f"鍥哄畾M鍊笺�恵base_m / 10000}涓囥�戯紝鍔ㄦ�丮鍊笺�恵m[0] / 10000}涓囥��	")
+        params["score_data"]["trade_data"]["m"] = {"base": base_m // 10000, "now": m[0] // 10000},
         # 涔板墠澶у崟
         big_num = __L2PlaceOrderParamsManager.get_big_num_count()
         base_big_num = __base_L2PlaceOrderParamsManager.get_big_num_count()
-        buy_params_info.append(f"鍥哄畾涔板墠澶у崟銆恵base_big_num}銆戠瑪锛岃“鍑忓悗涔板墠澶у崟銆恵big_num}銆戠瑪")
+        params["score_data"]["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:
-            buy_params_info.append("鏈瘑鍒�")
+            # buy_params_info.append("鏈瘑鍒�")
+            pass
         else:
             data = total_datas[trade_progress]
-            buy_params_info.append(
-                f"銆恵data['val']['time']}銆戙�併�恵data['val']['num']}鎵嬨�戙�併�恵round(data['val']['num'] * float(data['val']['price']) * 100 / 10000, 1)}涓囥��")
+            params["score_data"]["trade_data"]["trade_progress"] = {"time": data['val']['time'],
+                                                                    "num": data['val']['num'], "money": round(
+                    data['val']['num'] * float(data['val']['price']) * 100 / 10000, 1)}
 
         # 涔板叆淇″彿
         buy_single_index, buy_exec_index, compute_index, num, count, max_num_set, volume_rate = l2_data_manager.TradePointManager.get_buy_compute_start_data(
             code)
 
         if buy_single_index is None:
-            buy_params_info.append("鏃犱俊鍙�")
+            # buy_params_info.append("鏃犱俊鍙�")
+            pass
         else:
             data = total_datas[buy_single_index]
-            buy_params_info.append(
-                f"銆恵data['val']['time']}銆戙�併�恵data['val']['num']}鎵嬨�戙�併�恵round(data['val']['num'] * float(data['val']['price']) * 100 / 10000, 1)}涓囥��")
+            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)}
 
         if buy_exec_index is None or buy_exec_index < 0:
-            buy_params_info.append("鏈笅鍗�")
+            # buy_params_info.append("鏈笅鍗�")
+            pass
         else:
             data = total_datas[buy_exec_index]
-            buy_params_info.append(
-                f"銆恵data['val']['time']}銆戙�併�恵data['val']['num']}鎵嬨�戙�併�恵round(data['val']['num'] * float(data['val']['price']) * 100 / 10000, 1)}涓囥��")
+            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)}
 
     ##############################閫夎偂瀹�##################################
-    xgb_code_info = []
-    for i in range(0, 4):
-        xgb_datas = hot_block_data_process.XGBHotBlockDataManager.list_by_code(code, day)
-        datas = []
-        if xgb_datas:
-            for data in xgb_datas:
-                block = data[2]
-                block_datas = hot_block_data_process.XGBHotBlockDataManager.list_by_block(block, day)
-                block_datas = list(block_datas)
-                limit_up_count = 0
-                limit_up_time = None
-                for d in block_datas:
-                    if len(d[4]) > 6:
-                        limit_up_count += 1
-                        if d[3] == code:
-                            limit_up_time = d[4]
 
-                # 鏍规嵁娑ㄥ仠鏃堕棿鎺掑簭
-                block_datas.sort(key=lambda d: (d[4] if len(d[4]) > 6 else '15:00:00'))
-
-                for i in range(len(block_datas)):
-                    if block_datas[i][3] == code:
-                        datas.append(
-                            (block, limit_up_count, (i + 1) if limit_up_time is not None else (limit_up_count + 1),
-                             block_datas[i][5], block_datas[i][6]))
-                        break
-        xgb_code_info.append(datas)
-        day = juejin.JueJinManager.get_previous_trading_date(day)
+    params["xgb_code_infos"] = []
 
     ##############################鐑棬椋庡彛##################################
-    xgb_infos = []
-    xgb_latest_datas = hot_block_data_process.XGBHotBlockDataManager.latest_datas
-    if not xgb_latest_datas:
-        xgb_infos.append('鏆傛湭鑾峰彇鍒版暟鎹�')
-    else:
-        # 鑾峰彇浠婃棩鐨勬墍鏈夋暟鎹�
-        datas_record = hot_block_data_process.XGBHotBlockDataManager.list_all(tool.get_now_date_str())
-        datas_record_dict = {}
-        for data in datas_record:
-            block = data[2]
-            if block not in datas_record_dict:
-                datas_record_dict[block] = []
-            # 浠g爜,浠g爜鍚嶇О,娑ㄥ仠鏃堕棿锛岄娆℃定鍋滄椂闂�
-            datas_record_dict[block].append((data[3], data[9], data[4], data[8], block))
 
-        for block in xgb_latest_datas:
-            limit_up_count = 0
-            codes = datas_record_dict.get(block[0])
-            for code_data in block[2]:
-                if len(code_data[4]) > 6:
-                    limit_up_count += 1
-            # 鑾峰彇鏉垮潡涓殑浠g爜
-            block_codes_set = set()
-            for d in block[2]:
-                _code = d[0][1].split(".")[0]
-                block_codes_set.add(_code)
+    params["xgb_infos"] = []
 
-            if codes:
-                codes_data_html = "<table><tr>"
-                count = 0
-                for code_data in codes:
-                    if code_data[4] != block[0]:
-                        # 涓嶆槸璇ユ澘鍧楁暟鎹�
-                        continue
-                    count += 1
-                    codes_data_html += "<td style = 'text-decoration锛歶nderline;'>"
-                    # 濡傛灉浠g爜娑ㄥ仠鏃堕棿鎴栬�呮病鏈夊湪鏈�鏂扮殑浠g爜涓�
-                    if (len(code_data[2]) < 6 or code_data[0] not in block_codes_set) and len(code_data[3]) > 6:
-                        # 鐐告澘
-                        codes_data_html += f"<font color='#000080'>{code_data[1]}:{code_data[0]}&nbsp;&nbsp;</font>"
-                    elif len(code_data[2]) > 6:
-                        # 娑ㄥ仠
-                        codes_data_html += f"<font color='#FF3232'>{code_data[1]}:{code_data[0]}&nbsp;&nbsp;</font>"
-                    else:
-                        codes_data_html += f"{code_data[1]}:{code_data[0]}&nbsp;&nbsp;"
-                    codes_data_html += "</td>"
-                    if count % 4 == 0:
-                        codes_data_html += "</tr><tr>"
-                codes_data_html += "</tr></table>"
-                _info = (f"***銆恵block[0]}銆戯紝娑ㄥ箙銆恵block[1]}銆戯紝鍏便�恵limit_up_count}銆戜釜娑ㄥ仠", codes_data_html)
-                is_target_block = False
-                if xgb_code_info:
-                    for _code_info in xgb_code_info[0]:
-                        if len(_code_info) > 0 and _code_info[0] == block[0]:
-                            is_target_block = True
-                            break
-                if is_target_block:
-                    xgb_infos.insert(0, _info)
-                else:
-                    xgb_infos.append(_info)
-
+    # 杩斿洖涓诲姩涔�,琚姩涔�,涓嶄拱鐨勫垪琛�(浠g爜, 鍚嶇О, 寰楀垎, 鏄惁娑ㄥ仠)
     codes_score = __load_codes_scores()
+    params["initiative_buy_codes"] = []
+    for d in codes_score[0]:
+        params["initiative_buy_codes"].append(
+            {"name": d[1], "code": d[0], "score": d[2], "limit_up": d[3], "open_limit_up": d[4]})
+
+    params["passive_buy_codes"] = []
+    for d in codes_score[1]:
+        params["passive_buy_codes"].append(
+            {"name": d[1], "code": d[0], "score": d[2], "limit_up": d[3], "open_limit_up": d[4]})
+
     trade_info = __load_trade_record(code, total_datas)
-    return __format_data(code_info, score_info, buy_params_info, xgb_code_info, xgb_infos, codes_score, trade_info)
+    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]})
+
+    if rank_infos:
+        for r in rank_infos:
+            params["kpl_industry_rank"].append({"name": r[1], "money": money_desc(r[2]), "rate": r[3]})
+
+    return render(params)
 
 
 def __load_codes_scores():
@@ -494,12 +379,14 @@
         code_name = gpcode_manager.get_code_name(code)
         # 鑾峰彇鐜颁环锛屽垽鏂槸鍚︽定鍋�
         current_price_info = global_util.cuurent_prices.get(code)
+        limit_up_info = code_price_manager.Buy1PriceManager.get_limit_up_info(code)
         is_limit_up = True
+        open_limit_up = limit_up_info[0] and limit_up_info[1]
         if current_price_info is not None and not current_price_info[1]:
             is_limit_up = False
         else:
             is_limit_up = True
-        scores_list.append((code, code_name, scores[code], is_limit_up))
+        scores_list.append((code, code_name, scores[code], is_limit_up, open_limit_up))
     scores_list.sort(key=lambda x: x[2], reverse=True)
     fscores_list = [[], [], []]
     for score in scores_list:
@@ -520,12 +407,13 @@
     # 鑾峰彇鐐告澘淇℃伅
     limit_up_info = code_price_manager.Buy1PriceManager.get_limit_up_info(code)
     break_time = limit_up_info[1]
-    records =[]
+    records = []
     try:
         records = log.load_buy_score_recod(code)
     except:
         pass
     records_new = []
+    records_new_data = []
     index = 0
     if records:
         try:
@@ -537,6 +425,7 @@
                     index += 1
                     temp = f"绗瑊index}娆′笅鍗曪細銆恵time_}銆�&銆恵data['score']}鍒嗐��,{data.get('desc')}"
                     records_new.append(temp)
+                    records_new_data.append({"type": 1, "index": index, "time": time_, "score": data['score']})
                 elif type == 'S鎾�':
                     # index':378 , 'rate':0.51 , 'target_rate':0.49
                     pass
@@ -556,12 +445,64 @@
                 elif type == '鎾ゅ崟':
                     temp = f"绗瑊index}娆℃挙鍗曪細銆恵time_}銆憑data['msg']}"
                     records_new.append(temp)
+                    records_new_data.append({"type": 0, "time": time_, "desc": data['msg']})
+
         except:
             pass
 
-    return break_time, records_new
+    return break_time, records_new, records_new_data
 
 
 if __name__ == '__main__':
-    st="8澶�3鏉�"
-    print(st[-2:-1])
+    datas = {
+        "base_url": "http://192.168.3.122/kp/",
+        "code_name": "澶╁煙鐢熸�� 002255",
+        "score_data": {"volume": {"score": 20, "now": "12", "high": {"num": "56", "date": "2023-04-13"}},
+                       "bidding": {"score": 10, "money": "4563"},
+                       "deal_big_money": {"score": 10, "money": 0, "base_money": 456.5,
+                                          "start": {"time": "09:00:00", "num": 1456},
+                                          "end": {"time": "09:00:00", "num": 1456}},
+                       "k_form": {"score": 10, "datas": ["鐮村墠楂�", "瓒呰穼琛ユ定", "娑ㄥ箙杩囬珮"]},
+                       "code_nature": {"score": 10, "data_desc": "娑ㄥ仠娆℃暟2娆�"},
+                       "hot_block": {"score": 10, "block_name": "褰辫", "limit_up_count": 10, "open_limit_up_count": 2},
+                       "limit_up_time": {"score": 10, "time": "09:56:00"},
+                       "zyltgb": {"score": 10, "value": "12.5"},
+                       "limit_up_price": {"score": 10, "price": "6.35"},
+                       "total_score": "210"
+                       },
+        "trade_data": {"star": {"desc": "琚姩涔板叆", "count": 0},
+                       "safe_count": {"base": 12, "now": 2},
+                       "m": {"base": 1200, "now": 1000},
+                       "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"}
+                       },
+        "xgb_code_infos": [{"date": "浠婂ぉ", "blocks": [
+            {"name": "褰辫", "limit_up_count": 2, "index": 1, "price": "12.00", "rate": "+10.00%"},
+            {"name": "鏂囨梾", "limit_up_count": 3, "index": 2, "price": "12.00", "rate": "+10.00%"},
+        ]}],
+        "initiative_buy_codes": [
+            {"name": "娴嬭瘯1", "code": "000123", "score": 125, "limit_up": True, "open_limit_up": True},
+            {"name": "娴嬭瘯2", "code": "000123", "score": 125, "limit_up": False, "open_limit_up": True},
+            {"name": "娴嬭瘯2", "code": "000123", "score": 125, "limit_up": False, "open_limit_up": True},
+            {"name": "娴嬭瘯2", "code": "000123", "score": 125, "limit_up": False, "open_limit_up": False}
+        ],
+        "passive_buy_codes": [{"name": "娴嬭瘯1", "code": "000123", "score": 125},
+                              {"name": "娴嬭瘯2", "code": "000123", "score": 125},
+                              {"name": "娴嬭瘯2", "code": "000123", "score": 125},
+                              {"name": "娴嬭瘯2", "code": "000123", "score": 125}
+                              ],
+        "trade_record": {"open_limit_up": "10:00:03", "records": [
+            {"type": 1, "index": 1, "time": "11:00:00", "score": 12},
+            {"type": 0, "time": "11:26:00", "desc": "H鎾ゆ挙鍗�"}
+        ]},
+        "xgb_infos": [{"block": {"name": "娴嬭瘯1", "rate": "+12.00%", "limit_up_count": 10},
+                       "codes": [
+                           {"limit_up": True, "name": "娴嬭瘯浠g爜", "code": "000654"},
+                           {"limit_up": True, "name": "娴嬭瘯浠g爜", "code": "000654"},
+                           {"limit_up": True, "name": "娴嬭瘯浠g爜", "code": "000654"},
+                           {"limit_up": False, "name": "娴嬭瘯浠g爜", "code": "000654"},
+                       ]}]
+    }
+    print(render(datas))

--
Gitblit v1.8.0