private void BeginSaveAribtrageOrder() { while (m_saveQueue.Count > 0) { USeArbitrageOrder arbitrageOrder = m_saveQueue.Dequeue(); Debug.Assert(arbitrageOrder != null); try { m_dataAccessor.SaveUSeArbitrageOrder(arbitrageOrder); } catch (Exception ex) { m_eventLogger.WriteError("保存套利单信息失败," + ex.Message); } } }
public static void TestOrder() { USeArbitrageOrder order = new USeArbitrageOrder(); //ArbiOrder基础参数 order.BrokerId = "9000"; order.TraderIdentify = Guid.NewGuid(); order.Account = "090952"; order.State = ArbitrageOrderState.Closed; order.CreateTime = DateTime.Now; order.FinishTime = DateTime.Now; //order.OpenArgument = CreateOpenArg(); //order.CloseArgument = CreateCloseArg(); order.CloseTaskGroup = CreateTaskGroup(); USeDataAccessor dataAccessor = new USeDataAccessor(); dataAccessor.SaveUSeArbitrageOrder(order); }
/// <summary> /// 处理异常委托单。 /// </summary> /// <returns></returns> private bool PorcessErrorOrderBook() { //m_checkErrorOrderBook = true; //return true; string text = string.Empty; try { //1.读取所有未完成套利单信息 List <USeArbitrageOrder> arbitrageOrderList = m_dataAccessor.GetUnfinishArbitrageOrders(m_loginUser.BrokerId, m_loginUser.Account); text = string.Format("读取[{0}]所有未完成套利单信息成功,共计{1}个套利单", m_loginUser, arbitrageOrderList.Count); m_eventLogger.WriteInformation(text); //2.检查是否有异常套利单 Dictionary <Guid, ErrorArbitrageOrder> errorArbitrageOrderDic = new Dictionary <Guid, ErrorArbitrageOrder>(); List <ErrorUSeOrderBook> errorOrderBookList = new List <ErrorUSeOrderBook>(); foreach (USeArbitrageOrder arbitrageOrder in arbitrageOrderList) { ErrorArbitrageOrder errorArbitrageOrder = CheckErrorArbitrageOrder(arbitrageOrder); if (errorArbitrageOrder.HasError) { errorArbitrageOrderDic.Add(arbitrageOrder.TraderIdentify, errorArbitrageOrder); errorOrderBookList.AddRange(errorArbitrageOrder.ErrorOrderBooks); } if (errorArbitrageOrder.HasChanged) { //有变更先记录到文件 m_dataAccessor.SaveUSeArbitrageOrder(errorArbitrageOrder.ArbitrageOrder); } } text = string.Format("[{0}]有{1}个异常套利单共计{2}条委托回报需人工介入", m_loginUser, errorArbitrageOrderDic.Count, errorOrderBookList.Count); m_eventLogger.WriteError(text); //3.人工处理异常套利单 if (errorOrderBookList.Count > 0) { ErrorOrderBookProcessForm errorOrderBookForm = new ErrorOrderBookProcessForm(errorOrderBookList); if (DialogResult.Yes != errorOrderBookForm.ShowDialog()) { return(false); } List <ErrorUSeOrderBook> checkBookList = errorOrderBookForm.Result; Debug.Assert(checkBookList.Count == errorOrderBookList.Count); foreach (ErrorUSeOrderBook checkOrderBook in checkBookList) { Debug.Assert(checkOrderBook.OrderBook.IsFinish); ErrorArbitrageOrder errorArbitrageOrder = null; if (errorArbitrageOrderDic.TryGetValue(checkOrderBook.TradeIdentify, out errorArbitrageOrder) == false) { Debug.Assert(false); continue; } OrderBookUpdateResult updateResult = errorArbitrageOrder.ArbitrageOrder.UpdateOrderBook(checkOrderBook.OrderBook); Debug.Assert(updateResult != null); if (updateResult != null) { updateResult.Task.UpdateTaskState(); errorArbitrageOrder.ArbitrageOrder.UpdataArbitrageOrderState(); } } foreach (ErrorArbitrageOrder errorArbitageOrder in errorArbitrageOrderDic.Values) { m_dataAccessor.SaveUSeArbitrageOrder(errorArbitageOrder.ArbitrageOrder); } } m_checkErrorOrderBook = true; return(true); } catch (Exception ex) { text = "异常单处理失败," + ex.Message; m_eventLogger.WriteError(text); throw new ApplicationException(text); } }