From fb47d36048e94b9a506d5c153e3dd19a01e37df1 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期一, 30 十月 2023 16:30:27 +0800
Subject: [PATCH] bug修复

---
 gui.py |  303 +++++++++++++++++++++++++++++++++-----------------
 1 files changed, 200 insertions(+), 103 deletions(-)

diff --git a/gui.py b/gui.py
index 92fd2f8..af2c0b4 100644
--- a/gui.py
+++ b/gui.py
@@ -3,27 +3,31 @@
 """
 from tkinter import *
 from tkinter.messagebox import *
+
+import numpy
 import tkintertable
 
 import win32gui
 
-import data_export_util
+from db.redis_manager_delegate import RedisUtils
+from utils import data_export_util
 import multiprocessing
 
-import log
-from db import mysql_data, redis_manager
+from log_module import log, log_export
+from db import mysql_data_delegate as mysql_data, redis_manager_delegate as redis_manager
 import server
-import settings
-from juejin import JueJinManager
-from l2_code_operate import L2CodeOperate
+from config import settings
+from ths.l2_code_operate import L2CodeOperate
 from trade.l2_trade_factor import L2TradeFactorUtil
 from ocr import ocr_server
+from third_data import data_server, kpl_data_manager, kpl_util
 
 from server import *
 import l2.l2_data_util
 
 # 璇诲彇server杩涚▼鐨勬秷鎭�
 from trade.trade_data_manager import CodeActualPriceProcessor
+from ui.my_widget import FlatButton
 
 
 def __read_server_pipe(pipe):
@@ -56,6 +60,11 @@
     t1.setDaemon(True)
     t1.start()
 
+    t1 = threading.Thread(target=createDataServer)
+    # 鍚庡彴杩愯
+    t1.setDaemon(True)
+    t1.start()
+
     laddr = "", 9001
     tcpserver = MyThreadingTCPServer(laddr, MyBaseRequestHandle, pipe_juejin=pipe_juejin)  # 娉ㄦ剰锛氬弬鏁版槸MyBaseRequestHandle
     # tcpserver.handle_request()  # 鍙帴鍙椾竴涓鎴风杩炴帴
@@ -64,13 +73,16 @@
 
 def createOCRServer():
     print("create OCRServer")
-    laddr = "", 9002
-    tcpserver = ocr_server.MyThreadingTCPServer(laddr, ocr_server.MyBaseRequestHandle)
+    tcpserver = ocr_server.run("", 9002)
     tcpserver.serve_forever()
 
 
-def startJueJin(pipe):
-    juejin.JueJinManager(pipe).start()
+def createDataServer():
+    print("create OCRServer")
+    tcpserver = data_server.run("", 9004)
+    tcpserver.serve_forever()
+
+
 
 
 class GUI:
@@ -80,7 +92,7 @@
         gs_gui_pipe, gs_server_pipe = multiprocessing.Pipe()
 
         self.serverProcess = multiprocessing.Process(target=createServer, args=(p1, gs_server_pipe,))
-        self.jueJinProcess = multiprocessing.Process(target=startJueJin, args=(p2,))
+        self.jueJinTradeProcess = multiprocessing.Process(target=trade_juejin.run)
         self.ocrServerProcess = multiprocessing.Process(target=createOCRServer)
 
         self.p1 = p1
@@ -90,11 +102,12 @@
         self.codeActualPriceProcessor = CodeActualPriceProcessor()
         # L2鏄剧ず
         self.l2_codes = {}
+        self.selected_client = {}
         # 鑾峰彇l2鐨勫鎴风鍒楄〃
         clients = authority.get_l2_clients()
         for client_id in clients:
             self.l2_codes[client_id] = []
-            for i in range(0, 8):
+            for i in range(0, constant.L2_CODE_COUNT_PER_DEVICE):
                 code = gpcode_manager.get_listen_code_by_pos(client_id, i)
                 self.l2_codes[client_id].append(code)
 
@@ -112,10 +125,10 @@
             time.sleep(0.1)
 
     def run(self):
-        # TODO
-        self.jueJinProcess.start()
         self.serverProcess.start()
         self.ocrServerProcess.start()
+        self.jueJinTradeProcess.start()
+
         L2CodeOperate.get_instance()
         # 瀹㈡埛绔槦鍒楁搷浣�
         process = multiprocessing.Process(target=L2CodeOperate.run())
@@ -140,22 +153,22 @@
             for i in range(0, len(content)):
                 text.tag_add('error', "{}.{}".format(line, i))
 
-        def sync_target_codes():
-            server.sync_target_codes_to_ths()
-
         def click():
             text.delete('1.0', END)
 
             # 楠岃瘉redis
+            redis = redis_manager.RedisManager().getRedis()
             try:
-                redis = redis_manager.RedisManager().getRedis()
-                redis.set("test", "1")
-                redis.delete("test")
+
+                RedisUtils.set( redis,"test", "1",auto_free=False)
+                RedisUtils.delete(redis, "test", auto_free=False)
                 text.insert(END, "redis杩炴帴鎴愬姛锛乗n")
             except:
                 error = "redis杩炴帴澶辫触...\n"
                 text.insert(END, error)
                 _set_error_color(text, 1, error)
+            finally:
+                RedisUtils.realse(redis)
             # 楠岃瘉mongodb
             try:
                 counts = mysql_data.Mysqldb().select_one("select count(*) from clients")
@@ -202,23 +215,19 @@
         text = Text(frame, height=100, undo=True)
         text.place(x=0, y=40)
 
-        btn = Button(frame, text="杩愯鐜妫�娴�", command=click)
+        btn = FlatButton(frame, text="杩愯鐜妫�娴�", command=click)
         btn.place(x=5, y=5)
-
-        btn = Button(frame, text="鍚屾THS鐩爣鏍囩殑", command=sync_target_codes)
-        btn.place(x=100, y=5)
 
         frame.grid(row=1, column=2)
 
     # 缁樺埗寮�鐩樺墠鐨勬暟鎹噯澶囨儏鍐�
     def __draw_pre_data_check(self, frame):
         def refresh_close_price_data():
-            redis = redis_manager.RedisManager(0).getRedis()
-            count = len(redis.keys("price-pre-*"))
+            count = len(RedisUtils.keys(redis_manager.RedisManager(0).getRedis(), "price-pre-*"))
             sv_num.set("鑾峰彇鍒版敹鐩樹环鏁伴噺锛歿}".format(count))
 
         def re_get_close_price():
-            juejin.re_set_price_pres(gpcode_manager.get_gp_list())
+            inited_data.re_set_price_pres(gpcode_manager.get_gp_list())
 
         def get_limit_up_codes_win():
             width = 500
@@ -292,47 +301,59 @@
                 index += 1
             table.redraw()
 
-        btn = Button(frame, text="鍒锋柊鏀剁洏浠�", command=refresh_close_price_data)
-        btn.place(x=5, y=150)
+        # 鍒锋柊寮�鐩樺暒鏁版嵁
+        def refresh_kpl_data():
+            kpl_data_manager.KPLDataManager().get_data(kpl_util.KPLDataType.LIMIT_UP)
+            kpl_data_manager.KPLDataManager().get_data(kpl_util.KPLDataType.OPEN_LIMIT_UP)
+            kpl_data_manager.KPLDataManager().get_data(kpl_util.KPLDataType.BEST_FENG_KOU)
+            kpl_data_manager.KPLDataManager().get_data(kpl_util.KPLDataType.FENG_KOU)
+            kpl_data_manager.KPLDataManager().get_data(kpl_util.KPLDataType.FENG_XIANG)
 
+        start_y = 225
+        btn = FlatButton(frame, text="鍒锋柊鏀剁洏浠�", command=refresh_close_price_data)
+        btn.place(x=5, y=start_y)
 
         sv_num = StringVar(value="鑾峰彇鍒版敹鐩樹环鏁伴噺锛氭湭鐭�")
         cl = Label(frame, textvariable=sv_num, bg="#DDDDDD", fg="#666666")
-        cl.place(x=5, y=180)
+        cl.place(x=5, y=start_y + 30)
 
-        btn = Button(frame, text="閲嶆柊鑾峰彇鏀剁洏浠�", command=re_get_close_price)
-        btn.place(x=150, y=150)
-
-        btn = Button(frame, text="浠婃棩娑ㄥ仠", command=get_limit_up_codes_win)
-        btn.place(x=300, y=150)
+        btn = FlatButton(frame, text="閲嶆柊鑾峰彇鏀剁洏浠�", command=re_get_close_price)
+        btn.place(x=80, y=start_y)
+        kpl_data = Label(text="娑ㄥ仠锛歕n鐐告澘锛歕n鏈�寮猴細\n椋庡悜锛歕n椋庡彛锛�", bg="#DDDDDD", fg="#666666")
+        kpl_data.place(x=190, y=start_y)
 
         trade_win_datas = []
         # draw_trade_buy_win(360, 140)
         table_width = 300
-        table_height = 90
+        table_height = 95
         _frame = Frame(frame, {"height": table_height, "width": table_width, "bg": "#DDDDDD"})
 
         table = tkintertable.TableCanvas(_frame, data={"row0": {'浠g爜': '', '娑ㄥ箙': '', '绐楀彛鍙ユ焺': ''}}, read_only=True,
                                          width=table_width, height=table_height, thefont=('寰蒋闆呴粦', 9), cellwidth=100,
                                          rowheaderwidth=20)
         table.show()
-        _frame.place(x=380-12, y=130)
+        _frame.place(x=450, y=start_y)
         refresh_trade_buy_win_data()
         refresh_close_price_data()
 
-        btn = Button(frame, text="鍒锋柊", command=refresh_trade_buy_win_data,height=1)
-        btn.place(x=730-12, y=130)
+        btn = FlatButton(frame, text="鍒锋柊", command=refresh_trade_buy_win_data)
+        btn.place(x=450 - 35, y=start_y)
 
         def re_distribute_buy_win():
             try:
-                juejin.distribute_buy_win()
+                if tool.trade_time_sub(tool.get_now_time_str(), "09:30:00") > 0:
+                    raise Exception("鍙兘9:30涔嬪墠閲嶆柊鍒嗛厤绐楀彛")
+                datas = HistoryKDatasUtils.get_codes_limit_rate(gpcode_manager.get_gp_list())
+                matrix = numpy.array(datas)
+                codes = matrix[:, 0].tolist()
+                trade_gui.re_distribute_buy_win(codes)
                 refresh_trade_buy_win_data()
                 showinfo("鎻愮ず", "鍒嗛厤瀹屾垚")
             except Exception as e:
                 showerror("鍒嗛厤鍑洪敊", str(e))
 
-        btn = Button(frame, text="閲嶆柊鍒嗛厤绐楀彛", command=re_distribute_buy_win, height=1)
-        btn.place(x=730-12, y=165)
+        btn = FlatButton(frame, text="閲嶆柊鍒嗛厤绐楀彛", command=re_distribute_buy_win)
+        btn.place(x=450 - 83, y=start_y + 30)
 
     # 缁樺埗浜ゆ槗鐘舵��
     def __draw_trade_state(self, frame):
@@ -345,16 +366,30 @@
                 normal = False
             try:
                 trade_gui.THSGuiTrade.checkEnv()
-                cl_win.configure(text="姝e父", foreground="#008000")
+                cancel_win_num = trade_gui.THSGuiTrade.getCancelBuyWins()
+                cl_win.configure(text=f"姝e父({len(cancel_win_num)})", foreground="#008000")
             except Exception as e:
                 normal = False
                 cl_win.configure(text="寮傚父:{}".format(str(e)), foreground="#FF7F27")
 
             try:
-                juejin_length = JueJinManager.get_listen_codes_lenth()
+                juejin_length = 0
                 codes_length = len(gpcode_manager.get_gp_list())
                 cl_codes.configure(text="{}/{}".format(juejin_length, codes_length), foreground="#008000")
             except Exception as e:
+                pass
+
+            # 鑾峰彇鏉垮潡鐘舵��
+            try:
+                ths_dead = client_manager.getTHSState(7)
+                if ths_dead is None:
+                    cl_block.configure(text="绂荤嚎", foreground="#FF7F27")
+                elif ths_dead:
+                    normal = False
+                    cl_block.configure(text="绂荤嚎", foreground="#FF7F27")
+                else:
+                    cl_block.configure(text="鍦ㄧ嚎", foreground="#008000")
+            except:
                 pass
 
             try:
@@ -386,7 +421,7 @@
 
             # 鑾峰彇鏈夋晥鐨凩2瀹㈡埛绔暟閲�
             l2_client_count = client_manager.getValidL2Clients()
-            if len(l2_client_count) < 2:
+            if len(l2_client_count) < 6:
                 normal = False
 
             # 鐘舵�佹湁闂锛岄渶瑕佹姤璀�
@@ -403,9 +438,9 @@
                     pass
                 time.sleep(2)
 
-        start_y = 230
+        start_y = 285
 
-        btn = Button(frame, text="鍒锋柊鐘舵��", command=refresh_data)
+        btn = FlatButton(frame, text="鍒锋柊鐘舵��", command=refresh_data)
         btn.place(x=10, y=start_y)
 
         auo_refresh = IntVar()
@@ -422,24 +457,29 @@
         cl_queue.place(x=100, y=y_)
 
         cl = Label(frame, text="浜ゆ槗绐楀彛鐘舵�侊細", bg="#DDDDDD")
-        cl.place(x=200, y=y_)
+        cl.place(x=170, y=y_)
         cl_win = Label(frame, text="鏈煡", bg="#DDDDDD")
-        cl_win.place(x=300, y=y_)
+        cl_win.place(x=270, y=y_)
+
+        cl = Label(frame, text="鏉垮潡鐘舵�侊細", bg="#DDDDDD")
+        cl.place(x=320, y=y_)
+        cl_block = Label(frame, text="鏈煡", bg="#DDDDDD")
+        cl_block.place(x=380, y=y_)
 
         cl = Label(frame, text="鎺橀噾浠g爜鍥炶皟鏁伴噺锛�", bg="#DDDDDD")
-        cl.place(x=350, y=y_)
+        cl.place(x=300, y=y_ + 20)
         cl_codes = Label(frame, text="鏈煡", bg="#DDDDDD")
-        cl_codes.place(x=450, y=y_)
+        cl_codes.place(x=410, y=y_ + 20)
 
         cl = Label(frame, text="涔�1浠g爜鏁伴噺锛�", bg="#DDDDDD")
-        cl.place(x=500, y=y_)
+        cl.place(x=10, y=y_ + 20)
         cl_buy_1 = Label(frame, text="鏈煡", bg="#DDDDDD")
-        cl_buy_1.place(x=580, y=y_)
+        cl_buy_1.place(x=10 + 90, y=y_ + 20)
 
         cl = Label(frame, text="鐜颁环浠g爜鏁伴噺锛�", bg="#DDDDDD")
-        cl.place(x=620, y=y_)
+        cl.place(x=170, y=y_ + 20)
         cl_price_count = Label(frame, text="鏈煡", bg="#DDDDDD")
-        cl_price_count.place(x=700, y=y_)
+        cl_price_count.place(x=170 + 100, y=y_ + 20)
 
         refresh_data()
         # 娣诲姞鏇存柊绾跨▼
@@ -472,7 +512,7 @@
                 else:
                     client_state[client_id].configure(text="(绂荤嚎锛氭湭鐭P)", foreground="#999999")
 
-                for i in range(0, 8):
+                for i in range(0, constant.L2_CODE_COUNT_PER_DEVICE):
                     code = gpcode_manager.get_listen_code_by_pos(client_id, i)
                     data_count = l2_data_util.get_l2_latest_data_number(code)
                     if data_count is None:
@@ -487,8 +527,7 @@
                     else:
                         code_labels[client_id][i].configure(foreground="#999999")
 
-        def check(event):
-            client = (event.widget["command"])
+        def check(client):
             msg_list = []
             try:
                 result = get_client_env_state(client)
@@ -544,7 +583,7 @@
             win.resizable(height=False, width=False)
             text = Text(win, height=100, undo=True)
             text.place(x=0, y=30)
-            btn = Button(win, text="涓�閿慨澶�", command=repair)
+            btn = FlatButton(win, text="涓�閿慨澶�", command=repair)
             btn.place(x=0, y=0)
 
             line = 0
@@ -563,15 +602,49 @@
             win.mainloop()
 
         def init():
-            juejin.everyday_init()
+            inited_data.everyday_init()
 
         def set_accept_l2():
             settings.set_accept_l2(accept_l2.get())
 
+        def pop_menu(event):
+            self.selected_client = event.widget["command"]
+            menu.post(event.x_root, event.y_root)
+
+        def ths_test_speed():
+            if self.selected_client is None:
+                showwarning("璀﹀憡", "鏈�変腑瀹㈡埛绔�")
+                return
+            try:
+                server.repair_ths_main_site(self.selected_client)
+                showinfo("鎻愮ず", "鍚岃姳椤烘祴閫熷畬鎴�")
+            except Exception as e:
+                showerror("閿欒", str(e))
+
+        def check_env():
+            if self.selected_client is None:
+                showwarning("璀﹀憡", "鏈�変腑瀹㈡埛绔�")
+                return
+            check(self.selected_client)
+
         width = 800
-        height = 290
+        height = 360
         frame = Frame(root, {"height": height, "width": width, "bg": "#DDDDDD"})
-        cl = Label(frame, text="L2閲囬泦鐘舵��", bg="#DDDDDD")
+        trade_info = ""
+        for_color = "#008000"
+        if constant.TEST:
+            trade_info += "娴嬭瘯鐜"
+            for_color = "#FF7F27"
+        else:
+            trade_info += "姝e紡鐜"
+        trade_info += " "
+        if constant.TRADE_ENABLE:
+            trade_info += "鍒濆鍏佽浜ゆ槗"
+        else:
+            trade_info += "鍒濆绂佹浜ゆ槗"
+            for_color = "#FF7F27"
+
+        cl = Label(frame, text=f"{trade_info}", bg="#DDDDDD", foreground=f"{for_color}")
         cl.place(x=5, y=5)
 
         accept_l2 = IntVar()
@@ -583,10 +656,10 @@
         else:
             accept_l2.set(0)
 
-        btn = Button(frame, text="姣忔棩鍒濆鍖�", command=init)
+        btn = FlatButton(frame, text="姣忔棩鍒濆鍖�", command=init)
         btn.place(x=width - 250, y=5)
 
-        btn = Button(frame, text="鍒锋柊鏁版嵁", command=refresh_data)
+        btn = FlatButton(frame, text="鍒锋柊鏁版嵁", command=refresh_data)
         btn.place(x=width - 150, y=5)
         auo_refresh = IntVar()
         ch1 = Checkbutton(frame, text='鑷姩鍒锋柊', variable=auo_refresh, onvalue=1, offvalue=0, background="#DDDDDD",
@@ -598,29 +671,38 @@
         code_sv_map = {}
         code_labels = {}
         client_state = {}
-        for key in self.l2_codes:
 
-            client_lb = Label(frame, text="璁惧:{}".format(key), background="#DDDDDD")
+        # 鍙抽敭鑿滃崟
+        menu = Menu(frame,
+                    tearoff=False,
+                    # bg="black",
+                    )
+        menu.add_command(label="鐜妫�娴�", command=check_env)
+        menu.add_command(label="鍚岃姳椤烘祴閫�", command=ths_test_speed)
+
+        device_index = 0
+        for key in self.l2_codes:
+            device_index += 1
+            client_lb = Label(frame, text="璁惧:{} ID:{}".format(device_index, key), background="#DDDDDD")
             client_lb.place(x=38, y=40 + l2_client_count * 30)
-            btn = Button(frame, text="妫�娴�", command=key)
-            btn.bind('<Button-1>', check)
+            btn = FlatButton(frame, text="妫�娴�", command=key)
+            btn.bind('<Button-3>', lambda event: pop_menu(event))
             btn.place(x=5, y=35 + l2_client_count * 30)
 
-            client_state_lb = Label(frame, text="(鏈煡)", background="#DDDDDD", font=('寰蒋闆呴粦', 8))
-            client_state_lb.place(x=80, y=40 + l2_client_count * 30)
+            client_state_lb = Label(frame, text="(鏈煡)", padx=0, pady=0, background="#DDDDDD", font=('寰蒋闆呴粦', 8))
+            client_state_lb.place(x=112, y=40 + l2_client_count * 30)
             client_state[key] = client_state_lb
-
             code_sv_map[key] = []
             code_labels[key] = []
-            for i in range(0, 8):
+            for i in range(0, constant.L2_CODE_COUNT_PER_DEVICE):
                 sv = StringVar(value=self.l2_codes[key][i])
                 code_sv_map[key].append(sv)
-                cframe = Frame(frame, {"height": 23, "width": 70, "bg": "#FFFFFF"})
+                cframe = Frame(frame, {"height": 23, "width": 80, "bg": "#FFFFFF"})
                 code_label = Label(cframe, textvariable=sv, background="#FFFFFF", foreground="#FF0000")
                 code_labels[key].append(code_label)
 
                 code_label.place(x=0, y=0)
-                cframe.place(x=200 + i * 75, y=40 + l2_client_count * 30)
+                cframe.place(x=250 + i * 85, y=40 + l2_client_count * 30)
             l2_client_count += 1
         # 娣诲姞鏇存柊绾跨▼
         t1 = threading.Thread(target=lambda: update_data())
@@ -641,7 +723,7 @@
                 time.sleep(1)
 
         def refresh_data():
-            money = trade_manager.get_available_money()
+            money = trade_manager.AccountAvailableMoneyManager().get_available_money()
             if money is not None:
                 sv_trade_money.set(money)
             else:
@@ -680,16 +762,17 @@
             index = 0
             for data in datas:
                 table_trade.model.addRow()
-                table_trade.model.setValueAt(data["code"], index, 0)
-                table_trade.model.setValueAt(data["time"], index, 1)
-                table_trade.model.setValueAt(data["num"], index, 2)
-                table_trade.model.setValueAt(data["price"], index, 3)
-                table_trade.model.setValueAt(data["money"], index, 4)
-                table_trade.model.setValueAt(data["trade_num"], index, 5)
                 if int(data["type"]) > 0:
-                    table_trade.model.setValueAt("鍗栧嚭", index, 6)
+                    table_trade.model.setValueAt("鍗栧嚭", index, 0)
                 else:
-                    table_trade.model.setValueAt("涔板叆", index, 6)
+                    table_trade.model.setValueAt("涔板叆", index, 0)
+                table_trade.model.setValueAt(data["code"], index, 1)
+                table_trade.model.setValueAt(data["time"], index, 2)
+                table_trade.model.setValueAt(data["num"], index, 3)
+                table_trade.model.setValueAt(data["price"], index, 4)
+                table_trade.model.setValueAt(data["money"], index, 5)
+                table_trade.model.setValueAt(data["trade_num"], index, 6)
+
                 index += 1
             table_trade.redraw()
 
@@ -717,7 +800,7 @@
         cl = Label(frame, textvariable=sv_trade_money, bg="#DDDDDD", fg="#666666")
         cl.place(x=190, y=5)
 
-        btn = Button(frame, text="鍒锋柊鏁版嵁", command=refresh_data)
+        btn = FlatButton(frame, text="鍒锋柊鏁版嵁", command=refresh_data)
         btn.place(x=width - 150, y=5)
         auo_refresh = IntVar()
         ch1 = Checkbutton(frame, text='鑷姩鍒锋柊', variable=auo_refresh, onvalue=1, offvalue=0, background="#DDDDDD",
@@ -760,12 +843,12 @@
         cl.place(x=width - 70, y=30)
 
         trade_datas = {}
-        trade_datas["row{}".format(0)] = {'璇佸埜浠g爜': '', '鎴愪氦鏃堕棿': '', '鎴愪氦鏁伴噺': '', '鎴愪氦鍧囦环': '', '鎴愪氦閲戦': '',
-                                          '鍚堝悓缂栧彿': '', '鎿嶄綔': ''}
+        trade_datas["row{}".format(0)] = {'鏂瑰悜': '', '璇佸埜浠g爜': '', '鎴愪氦鏃堕棿': '', '鎴愪氦鏁伴噺': '', '鎴愪氦鍧囦环': '', '鎴愪氦閲戦': '',
+                                          '鍚堝悓缂栧彿': ''}
 
         table_frame = Frame(frame, {"height": table_height, "width": table_width, "bg": "#DDDDDD"})
         table_frame.place(x=width / 2, y=52)
-        table_trade = create_table(table_frame, trade_datas, 90)
+        table_trade = create_table(table_frame, trade_datas, 70)
         table_trade.show()
 
         frame.grid(row=2, column=1, padx=5, pady=5, rowspan=2)
@@ -784,7 +867,7 @@
             if len(account.strip()) < 1 or len(sid.strip()) < 1 or len(token.strip()) < 1:
                 showinfo('鎻愮ず', "鏁版嵁涓嶅畬鏁�")
                 return
-            juejin.setAccountInfo(account, sid, token)
+            inited_data.setAccountInfo(account, sid, token)
             showinfo('鎻愮ず', "璁剧疆鎴愬姛")
 
         # 璁剧疆鎺橀噾淇℃伅
@@ -810,13 +893,13 @@
         entry = Entry(frame, textvariable=token_var, width=30)
         entry.place(x=left + 60, y=top + 60)
 
-        btn = Button(frame, text="璁剧疆鎺橀噾鍙傛暟", command=click)
+        btn = FlatButton(frame, text="璁剧疆鎺橀噾鍙傛暟", command=click)
         btn.place(x=left + 60, y=top + 90)
         # frame.place(x=260,y=10)
         frame.grid(row=0, column=2, pady=5, padx=5)
 
         # 璁剧疆鍙傛暟
-        account, sid, token = juejin.getAccountInfo()
+        account, sid, token = inited_data.getAccountInfo()
         account_var.set(account)
         sid_var.set(sid)
         token_var.set(token)
@@ -861,10 +944,10 @@
 
         def export_l2_data_origin(code):
             redis = redis_manager.RedisManager(1).getRedis()
-            keys = redis.keys("big_data-{}-*".format(code))
             try:
+                keys = RedisUtils.keys(redis, "big_data-{}-*".format(code), auto_free=False)
                 for k in keys:
-                    datas = redis.get(k)
+                    datas = redis.get(k, auto_free=False)
                     datas = json.loads(datas)
                     _t = k.split("-")[2]
                     k = time.strftime("%Y_%m_%d_%H_%M_%S_", time.localtime(float(_t) / 1000))
@@ -872,6 +955,8 @@
                     data_export_util.export_l2_data_origin(code, datas, k)
             except Exception as e1:
                 showerror("瀵煎嚭澶辫触", str(e1))
+            finally:
+                RedisUtils.realse(redis)
 
             showinfo("鎻愮ず", "瀵煎嚭瀹屾垚")
 
@@ -882,6 +967,15 @@
         def clear_l2(code):
             self.gs_gui_pipe.send(json.dumps({"type": "clear_l2", "data": {"code": code}}))
             pass
+
+        # 绂佹浠g爜
+        def cancel_order(code_):
+            try:
+                l2.l2_data_util.load_l2_data(code_, True)
+                l2_data_manager_new.L2TradeDataProcessor.cancel_buy(code_, "鎵嬪姩鎾ら攢")
+                showinfo("鎻愮ず", "鎾ゅ崟鎴愬姛")
+            except Exception as e:
+                showwarning("鎻愮ず", "鎾ゅ崟鎴愬姛寮傚父" + str(e))
 
         frame = Frame(root, {"height": 280, "width": 300, "bg": "#DDDDDD"})
         frame.grid(row=2, column=2, rowspan=2, pady=5)
@@ -905,37 +999,40 @@
         code = Entry(frame)
         code.place(x=50, y=70)
 
-        btn = Button(frame, text="璁剧疆浠g爜", command=lambda: setGPCode(ep_client.get(), ep.get(), code.get()), )
+        btn = FlatButton(frame, text="璁剧疆浠g爜", command=lambda: setGPCode(ep_client.get(), ep.get(), code.get()), )
         btn.place(x=10, y=100)
 
-        btn = Button(frame, text="淇L2鏁版嵁", command=lambda: L2CodeOperate.get_instance().repaire_l2_data(code.get()))
+        btn = FlatButton(frame, text="淇L2鏁版嵁", command=lambda: L2CodeOperate.get_instance().repaire_l2_data(code.get()))
         btn.place(x=70
                   , y=100)
 
-        btn = Button(frame, text="瀵煎嚭L2鏁版嵁", command=lambda: export_l2_data(code.get()))
+        btn = FlatButton(frame, text="瀵煎嚭L2鏁版嵁", command=lambda: export_l2_data(code.get()))
         btn.place(x=145, y=100)
 
-        btn = Button(frame, text="瀵煎嚭L2鍘熷鏁版嵁", command=lambda: export_l2_data_origin(code.get()))
+        btn = FlatButton(frame, text="瀵煎嚭L2鍘熷鏁版嵁", command=lambda: export_l2_data_origin(code.get()))
         btn.place(x=220, y=100)
 
-        btn = Button(frame, text="鑾峰彇m鍊�", command=lambda: compute_m(code.get()))
+        btn = FlatButton(frame, text="鑾峰彇m鍊�", command=lambda: compute_m(code.get()))
         btn.place(x=10, y=130)
 
-        btn = Button(frame, text="瀵煎嚭浜ゆ槗鏃ュ織", command=lambda: log.export_l2_log(code.get()))
+        btn = FlatButton(frame, text="瀵煎嚭浜ゆ槗鏃ュ織", command=lambda: log_export.export_l2_log(code.get()))
         btn.place(x=80, y=130)
 
-        btn = Button(frame, text="娓呯┖l2鏁版嵁", command=lambda: clear_l2(code.get()))
+        btn = FlatButton(frame, text="娓呯┖l2鏁版嵁", command=lambda: clear_l2(code.get()))
         btn.place(x=150, y=130)
 
+        btn = FlatButton(frame, text="鎾ら攢鎸傚崟", command=lambda: cancel_order(code.get()))
+        btn.place(x=230, y=130)
+
         # 浜ゆ槗鎸夐挳
-        btn = Button(frame, textvariable=btntext, command=startJueJinGui)
+        btn = FlatButton(frame, textvariable=btntext, command=startJueJinGui)
         btn.place(x=10, y=160)
         btntext.set("鍚姩鎺橀噾")
 
-        btn = Button(frame, text="閲嶆柊璁㈤槄琛屾儏", command=resub)
+        btn = FlatButton(frame, text="閲嶆柊璁㈤槄琛屾儏", command=resub)
         btn.place(x=10, y=190)
 
-        btn = Button(frame, text="鍒锋柊绐楀彛鍙ユ焺", command=refresh_hwnds)
+        btn = FlatButton(frame, text="鍒锋柊绐楀彛鍙ユ焺", command=refresh_hwnds)
         btn.place(x=200, y=190)
 
     def create_gui(self):
@@ -951,7 +1048,7 @@
         self.__draw_trade_data(root)
         self.__draw_test(root)
 
-        root.geometry("1120x600")
+        root.geometry("1120x660")
         root.mainloop()
 
 

--
Gitblit v1.8.0