From 7093bbad9379116c432e4da278a40cc86303c76f Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期四, 02 十一月 2023 11:30:24 +0800 Subject: [PATCH] bug修复 --- data_server.py | 190 ++--------------------------------------------- 1 files changed, 10 insertions(+), 180 deletions(-) diff --git a/data_server.py b/data_server.py index 98dfb29..4bb5715 100644 --- a/data_server.py +++ b/data_server.py @@ -16,13 +16,12 @@ from third_data.kpl_util import KPLPlatManager, KPLDataType from trade import trade_manager from trade.l2_trade_util import BlackListCodeManager -from utils import tool, global_util, kp_client_msg_manager +from utils import tool, global_util, kp_client_msg_manager, hosting_api_util from utils.history_k_data_util import HistoryKDatasUtils import urllib.parse as urlparse from urllib.parse import parse_qs - class DataServer(BaseHTTPRequestHandler): @@ -39,7 +38,6 @@ # 绮鹃��,琛屼笟鏁版嵁缂撳瓨 __jingxuan_cache_dict = {} __industry_cache_dict = {} - def __get_limit_up_list(self): # 缁熻鐩墠涓烘鐨勪唬鐮佹定鍋滄暟閲忥紙鍒嗘定鍋滃師鍥狅級 @@ -261,185 +259,17 @@ def do_GET(self): path = self.path url = urlparse.urlparse(path) - 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}}) - elif url.path == "/get_score_info": - start_time = time.time() - ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()]) - 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) - 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"]: - self.__blocks_dict[code] = (time.time(), data["kpl_code_info"]["plate"]) - - response_data = json.dumps({"code": 0, "data": data}) - print("get_score_info 鑰楁椂锛�", time.time() - start_time) - - # 鑾峰彇璇勫垎淇℃伅 - pass - elif url.path == "/kpl/get_limit_up_list": + if url.path == "/kpl/get_limit_up_list": response_data = self.__get_limit_up_list() - - elif url.path == "/kpl/get_plate_info": + self.send_response(200) + # 鍙戠粰璇锋眰瀹㈡埛绔殑鍝嶅簲鏁版嵁 + self.send_header('Content-type', 'application/json') + self.end_headers() + self.wfile.write(response_data.encode()) + else: ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()]) - response_data = self.__get_plate_info(ps_dict) - - elif url.path == "/kpl/get_market_data": - # 鑾峰彇鏉垮潡淇℃伅 - ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()]) - type_ = int(ps_dict['type']) - result = [] - if type_ == 0: - # 琛屼笟锛屼富鍔涘噣棰濆�掑簭 - result = kpl_api.getMarketIndustryRealRankingInfo(True) - result = kpl_util.parseMarketIndustry(result) - elif type_ == 1: - # 琛屼笟锛屼富鍔涘噣棰濋『搴� - result = kpl_api.getMarketIndustryRealRankingInfo(False) - result = kpl_util.parseMarketIndustry(result) - elif type_ == 2: - # 绮鹃�夛紝涓诲姏鍑�棰濆�掑簭 - result = kpl_api.getMarketJingXuanRealRankingInfo(True) - result = kpl_util.parseMarketJingXuan(result) - elif type_ == 3: - # 绮鹃�夛紝涓诲姏鍑�棰濋『搴� - result = kpl_api.getMarketJingXuanRealRankingInfo(False) - result = kpl_util.parseMarketJingXuan(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) - now_limit_up_codes = set([d[0] for d in now_limit_up_codes_info]) - # 鑾峰彇鍘嗗彶娑ㄥ仠 - record_limit_up_datas = KPLLimitUpDataRecordManager.total_datas - if not record_limit_up_datas: - KPLLimitUpDataRecordManager.load_total_datas() - record_limit_up_datas = KPLLimitUpDataRecordManager.total_datas - - codes_info = [] - for d in record_limit_up_datas: - if d[2] != plate: - continue - # 浠g爜,鍚嶇О,娑ㄥ仠鏃堕棿,鏄惁鐐告澘,鏄惁鎯充拱,鏄惁宸茬粡涓嬭繃鍗� - codes_info.append( - [d[3], d[4], tool.to_time_str(int(d[5])), 1 if d[3] not in now_limit_up_codes else 0, 0, 0]) - codes_info.sort(key=lambda x: x[2]) - # 鏌ヨ鏄惁涓烘兂涔板崟 - want_codes = gpcode_manager.WantBuyCodesManager().list_code() - for code_info in codes_info: - code_info[4] = 1 if code_info[0] in want_codes else 0 - # 鑾峰彇浠g爜鐘舵�� - if trade_manager.CodesTradeStateManager().get_trade_state(code_info[0]) != trade_manager.TRADE_STATE_NOT_TRADE: - code_info[5] = 1 - - 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: - trade_state = trade_manager.CodesTradeStateManager().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: - # TODO 鑾峰彇H鎾ゆ暟鎹� - 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 = HistoryKDatasUtils.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 = [] - if datas: - 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) - # 鍙戠粰璇锋眰瀹㈡埛绔殑鍝嶅簲鏁版嵁 - self.send_header('Content-type', 'application/json') - self.end_headers() - self.wfile.write(response_data.encode()) + result = hosting_api_util.get_from_data_server(url.path, ps_dict) + self.__send_response(result) def do_POST(self): path = self.path -- Gitblit v1.8.0