From ab662be5c523b75c1bd28fc6bfcab2872b9623b3 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期四, 12 六月 2025 15:22:06 +0800
Subject: [PATCH] bug修复

---
 trade/trade_manager.py |   83 ++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 81 insertions(+), 2 deletions(-)

diff --git a/trade/trade_manager.py b/trade/trade_manager.py
index c56e4f6..56ab205 100644
--- a/trade/trade_manager.py
+++ b/trade/trade_manager.py
@@ -4,12 +4,14 @@
 """
 # 浜ゆ槗绠$悊鍣�
 import copy
+import json
 
+from code_attribute import gpcode_manager
 from db import redis_manager_delegate as redis_manager
+from db.mysql_data_delegate import Mysqldb
 from db.redis_manager_delegate import RedisUtils
 from log_module import async_log_util
 from trade import trade_constant
-
 
 from log_module.log import *
 from utils import import_util, tool, huaxin_util
@@ -163,6 +165,83 @@
     # 璁剧疆浜ゆ槗璐︽埛鐨勫彲鐢ㄩ噾棰�
 
 
+@tool.singleton
+class DealCodesManager:
+    """
+    鎴愪氦浠g爜绠$悊
+    """
+    __db = 12
+
+    # 鎴愪氦浠g爜鐨勮鍗曚俊鎭細{浠g爜:{浜ゆ槗id:(閲忥紝浠锋牸锛岀郴缁熻鍗曞彿)}}
+
+    def __init__(self):
+        self.musql = Mysqldb()
+        self.__deal_code_orders_info = {}
+        self.redis_manager = redis_manager.RedisManager(12)
+        # 涓嬭繃鍗曠殑鏉垮潡浠g爜
+        self.__place_order_plate_codes_info = {}
+        self.__load_data()
+
+    def __get_redis(self):
+        return self.redis_manager.getRedis()
+
+    def __load_data(self):
+        # 涓嶇畻鎵撴澘鐨勬暟鎹�
+        sql = f"select tradeID,securityID, orderSysID,price,volume from hx_trade_deal_record where `direction` = '0' and tradingDay = '{tool.get_now_date_str('%Y%m%d')}'"
+        results = self.musql.select_all(sql)
+        if results:
+            for r in results:
+                self.add_deal_order(r[1], r[4], round(float(r[3]), 2), r[0], r[2])
+
+        val = RedisUtils.get(self.__get_redis(), "place_order_plate_codes_info")
+        if val:
+            self.__place_order_plate_codes_info = json.loads(val)
+
+    def add_deal_order(self, code, volume, price, trade_id, order_sys_id):
+        """
+        娣诲姞鎴愪氦澶у崟
+        @param code:
+        @param volume:
+        @param price:
+        @param trade_id:
+        @param order_sys_id:
+        @return:
+        """
+        pre_price = gpcode_manager.CodePrePriceManager().get_price_pre_cache(code)
+        if pre_price and round((price - pre_price) / pre_price, 4) > 0.08 * (tool.get_limit_up_rate(code) - 1) * 10:
+            # 瑙嗕负鎵撴澘涔板叆锛屼笉澶勭悊鏁版嵁
+            return
+        if code not in self.__deal_code_orders_info:
+            self.__deal_code_orders_info[code] = {}
+        if trade_id in self.__deal_code_orders_info[code]:
+            return
+        self.__deal_code_orders_info[code][trade_id] = (volume, price, order_sys_id)
+
+    def get_deal_codes(self):
+        if not self.__deal_code_orders_info:
+            return set()
+        return set(self.__deal_code_orders_info.keys())
+
+    def place_order(self, plate, code):
+        """
+        涓嬪崟
+        @param plate:
+        @param code:
+        @return:
+        """
+        if plate not in self.__place_order_plate_codes_info:
+            self.__place_order_plate_codes_info[plate] = []
+        if code not in self.__place_order_plate_codes_info[plate]:
+            self.__place_order_plate_codes_info[plate].append(code)
+        RedisUtils.setex_async(self.__db, "place_order_plate_codes_info", tool.get_expire(),
+                               json.dumps(self.__place_order_plate_codes_info))
+
+    def get_place_order_plate_codes(self):
+        return self.__place_order_plate_codes_info
+
+
 __CodesTradeStateManager = CodesTradeStateManager()
 
-
+if __name__ == "__main__":
+    codes = DealCodesManager().get_codes()
+    print(codes)

--
Gitblit v1.8.0