From 751183dcd74207a50834cacc575f0dfccb41658c Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期二, 06 六月 2023 18:13:05 +0800
Subject: [PATCH] 交易优化,看盘接口完善

---
 third_data/data_server.py |   99 ++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 89 insertions(+), 10 deletions(-)

diff --git a/third_data/data_server.py b/third_data/data_server.py
index b1fa9a3..5b99222 100644
--- a/third_data/data_server.py
+++ b/third_data/data_server.py
@@ -1,4 +1,5 @@
 import base64
+import http
 import json
 import logging
 import socketserver
@@ -10,14 +11,15 @@
 import global_util
 import gpcode_manager
 import log
+import log_analyse
 import tool
 from l2 import code_price_manager
 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
-from third_data.kpl_data_manager import KPLDataManager, KPLLimitUpDataRecordManager, KPLPlatManager, \
+from third_data.code_plate_key_manager import RealTimeKplMarketData, KPLPlateForbiddenManager
+from third_data.kpl_data_manager import KPLDataManager, KPLLimitUpDataRecordManager, \
     KPLCodeLimitUpReasonManager
-from third_data.kpl_util import KPLDataType
+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
@@ -32,10 +34,14 @@
     __IgnoreCodeManager = IgnoreCodeManager()
     __KPLPlatManager = KPLPlatManager()
     __KPLCodeLimitUpReasonManager = KPLCodeLimitUpReasonManager()
+    __KPLPlateForbiddenManager = KPLPlateForbiddenManager()
     # 鍘嗗彶鏉垮潡
     __history_plates_dict = {}
     # 鏉垮潡
     __blocks_dict = {}
+    # 绮鹃��,琛屼笟鏁版嵁缂撳瓨
+    __jingxuan_cache_dict = {}
+    __industry_cache_dict = {}
 
     def __get_limit_up_list(self):
         # 缁熻鐩墠涓烘鐨勪唬鐮佹定鍋滄暟閲忥紙鍒嗘定鍋滃師鍥狅級
@@ -89,10 +95,13 @@
         for r in reason_changes:
             if r[0] not in reason_changes_dict:
                 reason_changes_dict[r[0]] = r[1]
+        # 缁熻鏈�杩戜笅鍗曞姩浣滃弽棣�
+        order_reasons_dict = log_analyse.get_cant_order_reasons_dict()
+        kpl_can_buy_reasons_dict = log_analyse.get_kpl_can_buy_reasons_dict()
 
         for d in total_datas:
             code = d[3]
-            # (浠g爜, 鍚嶇О, 娑ㄥ仠鐘舵��(0 - 鏃犵姸鎬� 1-娑ㄥ仠 2-鐐告澘), 榫欏嚑, 棣栨澘, 鍒嗗��, 娑ㄥ仠鏃堕棿, 鍘熷洜, 鐩稿悓鍘熷洜浠g爜鏁伴噺, 鑷敱娴侀��, 娑ㄥ仠鍘熷洜鏄惁鍙樺寲)
+            # (浠g爜, 鍚嶇О, 娑ㄥ仠鐘舵��(0 - 鏃犵姸鎬� 1-娑ㄥ仠 2-鐐告澘), 榫欏嚑, 棣栨澘, 鍒嗗��, 娑ㄥ仠鏃堕棿, 鍘熷洜, 鐩稿悓鍘熷洜浠g爜鏁伴噺, 鑷敱娴侀��, 娑ㄥ仠鍘熷洜鏄惁鍙樺寲,娑ㄥ仠鍘熷洜鐨勬祦鍏ュ噣棰�,涓嬪崟绠�浠�)
             limit_up_state = 0
             if code in limit_up_dict:
                 if limit_up_dict[code][0]:
@@ -104,9 +113,33 @@
                 score = score_dict[code]
             if code in ignore_codes:
                 continue
+
+            # 娑ㄥ仠鍘熷洜鐨勫噣娴佸叆閲戦
+            reason = d[2]
+            reason_money = ''
+            if reason in self.__jingxuan_cache_dict:
+                reason_money = output_util.money_desc(self.__jingxuan_cache_dict[reason][3])
+            elif reason in self.__industry_cache_dict:
+                reason_money = output_util.money_desc(self.__industry_cache_dict[reason][3])
+
+            # 鍖归厤涓嬪崟鍙嶉
+            order_desc = ''
+            order_reason = order_reasons_dict.get(code)
+            kpl_can_buy_reason = kpl_can_buy_reasons_dict.get(code)
+            if order_reason and kpl_can_buy_reason:
+                if int(order_reason[0].replace(":", "").replace(".", "")) > int(
+                        kpl_can_buy_reason[0].replace(":", "").replace(".", "")):
+                    order_desc = f"涓嶏細{order_reason[1]}"
+                else:
+                    order_desc = f"涔帮細{kpl_can_buy_reason[1]}"
+            elif order_reason:
+                order_desc = f"涓嶏細{order_reason[1]}"
+            elif kpl_can_buy_reason:
+                order_desc = f"涔帮細{kpl_can_buy_reason[1]}"
+
             fresult.append((code, d[4], limit_up_state, f"榫檣rank_dict.get(code)}", d[12], score,
                             output_util.time_format(int(d[5])), d[2], d[10], output_util.money_desc(d[13]),
-                            reason_changes_dict.get(code)))
+                            reason_changes_dict.get(code), reason_money, order_desc))
         response_data = json.dumps({"code": 0, "data": {"limit_up_count": len(limit_up_codes),
                                                         "open_limit_up_count": len(open_limit_up_codes),
                                                         "limit_up_reason_statistic": limit_up_reason_statistic_info,
@@ -235,12 +268,20 @@
         response_data = ""
         if url.path == "/get_kpl_data":
             best_feng_kou = self.__kplDataManager.get_data(kpl_util.KPLDataType.BEST_FENG_KOU)
+            if not best_feng_kou:
+                best_feng_kou = []
             best_feng_kou = best_feng_kou[:22]
             feng_kou = self.__kplDataManager.get_data(kpl_util.KPLDataType.FENG_KOU)
+            if not feng_kou:
+                feng_kou = []
             feng_kou = feng_kou[:22]
             industry_rank = self.__kplDataManager.get_data(kpl_util.KPLDataType.INDUSTRY_RANK)
+            if not industry_rank:
+                industry_rank = []
             industry_rank = industry_rank[:22]
             feng_xiang = self.__kplDataManager.get_data(kpl_util.KPLDataType.FENG_XIANG)
+            if not feng_xiang:
+                feng_xiang = []
             feng_xiang = feng_xiang[:22]
             response_data = json.dumps({"code": 0, "data": {"best_feng_kou": best_feng_kou, "feng_kou": feng_kou,
                                                             "industry_rank": industry_rank, "feng_xiang": feng_xiang}})
@@ -249,12 +290,14 @@
             code = ps_dict['code']
             name = ps_dict.get('name')
 
-            data = code_info_output.get_output_params(code)
+            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"])
-            self.__blocks_dict[code] = (time.time(), data["kpl_code_info"]["plate"])
+            if "plate" in data["kpl_code_info"]:
+                self.__blocks_dict[code] = (time.time(), data["kpl_code_info"]["plate"])
 
             response_data = json.dumps({"code": 0, "data": data})
             # 鑾峰彇璇勫垎淇℃伅
@@ -287,14 +330,47 @@
                 # 绮鹃�夛紝涓诲姏鍑�棰濋『搴�
                 result = kpl_api.getMarketJingXuanRealRankingInfo(False)
                 result = kpl_util.parseMarketJingXuan(result)
-
-            response_data = json.dumps({"code": 0, "data": result})
+            forbidden_plates = self.__KPLPlateForbiddenManager.list_all()
+            fresult = []
+            for d in result:
+                if type_ == 2 or type_ == 3:
+                    self.__jingxuan_cache_dict[d[1]] = d
+                elif type_ == 0 or type_ == 1:
+                    self.__industry_cache_dict[d[1]] = d
+                d = list(d)
+                d.append(1 if d[1] in forbidden_plates else 0)
+                fresult.append(d)
+            response_data = json.dumps({"code": 0, "data": fresult})
         elif url.path == "/kpl/add_ignore_code":
             ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()])
             code = ps_dict['code']
             type_ = ps_dict['type']
             self.__IgnoreCodeManager.ignore_code(type_, code)
             response_data = json.dumps({"code": 0})
+        elif url.path == "/kpl/forbidden_plate":
+            ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()])
+            plate = ps_dict["plate"]
+            # 鍔犲叆绂佹
+            self.__KPLPlateForbiddenManager.save_plate(plate)
+            response_data = json.dumps({"code": 0})
+        elif url.path == "/kpl/get_plate_codes":
+            # 鑾峰彇娑ㄥ仠鍘熷洜涓嬮潰鐨勪唬鐮�
+            ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()])
+            plate = ps_dict["plate"]
+            # 鑾峰彇鏉垮潡涓嬬殑浠g爜
+            # 缁熻鐩墠涓烘鐨勪唬鐮佹定鍋滄暟閲忥紙鍒嗘定鍋滃師鍥狅級
+            now_limit_up_codes_info = self.__kplDataManager.get_data(KPLDataType.LIMIT_UP)
+            codes_info = []
+            for d in now_limit_up_codes_info:
+                if d[5] != plate:
+                    continue
+                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})
+
 
         self.send_response(200)
         # 鍙戠粰璇锋眰瀹㈡埛绔殑鍝嶅簲鏁版嵁
@@ -395,10 +471,13 @@
         params = json.loads(_str)
         return params
 
+class ThreadedHTTPServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
+    pass
 
 def run(addr, port):
     handler = DataServer
-    httpd = socketserver.TCPServer((addr, port), handler)
+    # httpd = socketserver.TCPServer((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