From 6b77c1709908133c040778f5f775432c4ce7efd7 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 09 六月 2023 19:08:44 +0800
Subject: [PATCH] 优化L2卡位分配/增加想买单第一时间加入L2卡位

---
 third_data/data_server.py |   94 +++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 87 insertions(+), 7 deletions(-)

diff --git a/third_data/data_server.py b/third_data/data_server.py
index 5b99222..62d68d5 100644
--- a/third_data/data_server.py
+++ b/third_data/data_server.py
@@ -10,10 +10,12 @@
 
 import global_util
 import gpcode_manager
+import juejin
 import log
 import log_analyse
 import tool
-from l2 import code_price_manager
+from l2 import code_price_manager, l2_data_util
+from l2.cancel_buy_strategy import HourCancelBigNumComputer
 from output.limit_up_data_filter import IgnoreCodeManager
 from third_data import kpl_util, kpl_data_manager, kpl_api
 from third_data.code_plate_key_manager import RealTimeKplMarketData, KPLPlateForbiddenManager
@@ -22,7 +24,7 @@
 from third_data.kpl_util import KPLDataType, KPLPlatManager
 import urllib.parse as urlparse
 from urllib.parse import parse_qs
-from output import code_info_output, limit_up_data_filter, output_util
+from output import code_info_output, limit_up_data_filter, output_util, kp_client_msg_manager
 
 from trade import bidding_money_manager, trade_manager
 from trade.l2_trade_util import BlackListCodeManager
@@ -290,10 +292,9 @@
             code = ps_dict['code']
             name = ps_dict.get('name')
 
-            data = code_info_output.get_output_params(code,self.__jingxuan_cache_dict,self.__industry_cache_dict)
+            data = code_info_output.get_output_params(code, self.__jingxuan_cache_dict, self.__industry_cache_dict)
             if data["code_name"].find("None") > -1 and name:
                 data["code_name"] = f"{name} {code}"
-
 
             self.__history_plates_dict[code] = (time.time(), data["kpl_code_info"]["code_records"])
             if "plate" in data["kpl_code_info"]:
@@ -364,13 +365,88 @@
             for d in now_limit_up_codes_info:
                 if d[5] != plate:
                     continue
-                codes_info.append([d[0],d[1],0])
+                codes_info.append([d[0], d[1], 0])
             # 鏌ヨ鏄惁涓烘兂涔板崟
             want_codes = gpcode_manager.WantBuyCodesManager.list_code()
             for code_info in codes_info:
                 code_info[2] = 1 if code_info[0] in want_codes else 0
-            response_data = json.dumps({"code": 0,"data":codes_info})
+            response_data = json.dumps({"code": 0, "data": codes_info})
+        elif url.path == "/get_h_cancel_data":
+            ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()])
+            code = ps_dict["code"]
+            if code:
+                total_datas = l2_data_util.local_today_datas.get(code)
+                if total_datas is None:
+                    l2_data_util.load_l2_data(code)
+                    total_datas = l2_data_util.local_today_datas.get(code)
 
+                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 or trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS:
+                    hcancel_datas_dict, cancel_indexes_set = HourCancelBigNumComputer.get_watch_index_dict(code)
+                    # 鏍规嵁鏃ュ織璇诲彇瀹炴椂鐨勮绠楁暟鎹�
+                    h_cancel_latest_compute_info = log.get_h_cancel_compute_info(code)
+                    if hcancel_datas_dict:
+                        temp_list = [(k, hcancel_datas_dict[k][0]) for k in hcancel_datas_dict]
+                        canceled_indexs = set([int(k.split("-")[0]) for k in cancel_indexes_set])
+                        temp_list.sort(key=lambda x: x[0])
+                        fdata = {
+                            "computed_info": list(
+                                h_cancel_latest_compute_info) if h_cancel_latest_compute_info else None,
+                            "datas": []}
+                        for i in range(0, len(temp_list)):
+                            temp = temp_list[i]
+                            val = total_datas[temp[0]]["val"]
+                            canceled = temp[0] in canceled_indexs
+                            fdata["datas"].append(
+                                (val["time"], val["num"],
+                                 code_info_output.money_desc(val["num"] * float(val["price"]) * 100),
+                                 (1 if canceled else 0)))
+                        response_data = json.dumps({"code": 0, "data": fdata})
+                    else:
+                        response_data = json.dumps({"code": 1, "msg": "鏃燞鎾ゆ暟鎹�"})
+                else:
+                    response_data = json.dumps({"code": 1, "msg": "鏃燞鎾ゆ暟鎹�"})
+            else:
+                response_data = json.dumps({"code": 1, "msg": "璇蜂笂浼燾ode"})
+
+        elif url.path == "/get_last_trade_day_reasons":
+            # 鑾峰彇涓婁釜浜ゆ槗鏃ョ殑鐩稿悓娑ㄥ仠鍘熷洜鐨勪唬鐮佷俊鎭�
+            ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()])
+            code = ps_dict["code"]
+            day = juejin.JueJinManager.get_previous_trading_date(tool.get_now_date_str())
+            # 鑾峰彇娑ㄥ仠鏁版嵁
+
+            # 鑾峰彇浠g爜鐨勫師鍥�
+            reasons = kpl_data_manager.KPLLimitUpDataRecordManager.list_by_code(code, day)
+            if reasons:
+                reasons = list(reasons)
+                reasons.sort(key=lambda x: x[9])
+                reason = reasons[-1][2]
+                datas = self.__kplDataManager.get_from_file(kpl_util.KPLDataType.LIMIT_UP, day)
+                # (浠g爜,鍚嶇О,棣栨娑ㄥ仠鏃堕棿,鏈�杩戞定鍋滄椂闂�,鍑犳澘,娑ㄥ仠鍘熷洜,鏉垮潡,瀹為檯娴侀��,涓诲姏鍑�棰�,娑ㄥ仠鍘熷洜浠g爜,娑ㄥ仠鍘熷洜浠g爜鏁伴噺)
+                result_list = []
+                for d in datas:
+                    if d[5] == reason and d[0] != code:
+                        # (浠g爜,鍚嶇О)
+                        result_list.append((d[0], d[1]))
+                response_data = json.dumps({"code": 0, "data": {"reason": reason, "data": result_list}})
+            else:
+                response_data = json.dumps({"code": 1, "msg": "鏄ㄦ棩鏈定鍋�"})
+
+        elif url.path == "/pull_kp_client_msg":
+            # 鎷夊彇瀹㈡埛绔秷鎭�
+            ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()])
+            client = ps_dict["client"]
+            msg = kp_client_msg_manager.read_msg(client)
+            if msg:
+                response_data = json.dumps({"code": 0, "data": msg})
+            else:
+                response_data = json.dumps({"code": 1, "msg": "鏆傛棤娑堟伅"})
+        elif url.path == "/list_kp_client_msg":
+            msg_list = kp_client_msg_manager.list_msg_from_local()
+            msg_list.reverse()
+            msg_list = [f"{msg.split('|')[0]}{msg.split('|')[-1].split('-')[1].strip()}" for msg in msg_list]
+            response_data = json.dumps({"code": 0, "data": msg_list})
 
         self.send_response(200)
         # 鍙戠粰璇锋眰瀹㈡埛绔殑鍝嶅簲鏁版嵁
@@ -471,13 +547,17 @@
         params = json.loads(_str)
         return params
 
+
 class ThreadedHTTPServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
     pass
 
+
 def run(addr, port):
+    # 杩愯鐪嬬洏娑堟伅閲囬泦
+    kp_client_msg_manager.run_capture()
     handler = DataServer
     # httpd = socketserver.TCPServer((addr, port), handler)
-    httpd =ThreadedHTTPServer((addr, port), handler)
+    httpd = ThreadedHTTPServer((addr, port), handler)
     print("HTTP server is at: http://%s:%d/" % (addr, port))
     httpd.serve_forever()
 

--
Gitblit v1.8.0