/// <summary>
 /// 从有效定单列表中移除指定的有效定单
 /// </summary>
 /// <param name="orderData">要移除的有效定单</param>
 private void RemoveMarketOrderData(MarketOrderData orderData)
 {
     if (_dpObj.CheckAccess())
         TradeOrderInfo.TdOrderList.Remove(orderData);
     else
         _dpObj.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
             new MarketOrderDataDelegate(RemoveMarketOrderData),
             orderData);
 }
        /// <summary>
        /// 添加一个有效定单到有效定单列表,并为其赋值它所属的商品信息类
        /// </summary>
        /// <param name="orderData">要添加的有效定单</param>
        private void AddMarketOrderData(MarketOrderData orderData)
        {
            ProductInformation productInfo = GetProductInfoByName(orderData.ProductName);
            orderData.OwnedProduct = productInfo;

            if (_dpObj.CheckAccess())
                MarketOrderList.Add(orderData);
            else
                _dpObj.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
                    new MarketOrderDataDelegate(AddMarketOrderData),
                    orderData);
        }
 /// <summary>
 /// 有效定单入库限制 马友春
 /// </summary>
 /// <param name="selectedMarketOrder">选中的某个定单</param>
 public void ModifyOrderAllowStore(MarketOrderData selectedMarketOrder)
 {
     bool allowStoreFlag = selectedMarketOrder.AllowStore;
     ModifyOrderAllowStoreWindow wnd = new ModifyOrderAllowStoreWindow()
     {
         Owner = Application.Current.MainWindow,
         DataContext = selectedMarketOrder,
     };
     wnd.Closed += (sender, args) =>
     {
         if (wnd.DialogResult == true)
         {
             BackgroundWorker worker = new BackgroundWorker();
             worker.DoWork += (s, e) =>
             {
                 int allowStore = selectedMarketOrder.AllowStore ? 1 : 0;
                 e.Result = _businessService.ModifyOrderAllowStore((int)_accType, _loginID, selectedMarketOrder.TradeAccount, selectedMarketOrder.OrderID, allowStore);
             };
             worker.RunWorkerCompleted += (s, e) =>
             {
                 ErrType err = e.Result as ErrType;
                 if (err != GeneralErr.Success)
                 {
                     //Todo:重新窗口状态待处理
                     // wnd.RevertWindowState();
                     MessageBox.Show(err.ErrMsg, err.ErrTitle, MessageBoxButton.OK, MessageBoxImage.Warning);
                 }
                 else
                 {
                     wnd.Close();
                     string msg = "订单能否入库状态修改成功";
                     MessageBox.Show(msg, "提示", MessageBoxButton.OK, MessageBoxImage.Information);
                 }
             };
             worker.RunWorkerAsync();
         }
         else
         {
             selectedMarketOrder.AllowStore = allowStoreFlag;
         }
     };
     wnd.ShowDialog();
 }
        /// <summary>
        /// 有效定单入库
        /// </summary>
        /// <param name="selectedMarketOrder">选中的某个有效定单</param>
        public void WarehousingMarketOrder(MarketOrderData selectedMarketOrder)
        {
            OrderChangedWindow wnd = new OrderChangedWindow(OrderChangedWindowType.Warehousing)
            {
                Owner = Application.Current.MainWindow,
                DataContext = selectedMarketOrder,
            };
            wnd.OrderChanged += (sender, args) =>
            {
                BackgroundWorker worker = new BackgroundWorker();
                worker.DoWork += (s, e) =>
                {
                    //这里应该先获取该定单对应的用户,然后进行平仓信息的验证,主要是平仓数量有效数据位的判断
                    //ValidationResult result = ChargebackOrderValidation( args.OrderChangedInfo, 先获取该定单对应的用户 );

                    int userType = ToUserType(_accType);
                    e.Result = _tradeService.WarehousingOrder(_loginID, userType, args.OrderChangedInfo);
                };
                worker.RunWorkerCompleted += (s, e) =>
                {
                    ErrType err = e.Result as ErrType;
                    if (err != GeneralErr.Success)
                    {
                        wnd.RevertWindowState();
                        MessageBox.Show(err.ErrMsg, err.ErrTitle, MessageBoxButton.OK, MessageBoxImage.Warning);
                    }
                    else
                    {
                        wnd.Close();
                        string msg = string.Format("入库操作成功,数量:{0}", args.OrderChangedInfo.Count);
                        MessageBox.Show(msg, "提示", MessageBoxButton.OK, MessageBoxImage.Information);

                        //根据结果对定单进行处理,如果定单数量为0,则移除该定单。
                        selectedMarketOrder.OrderQuantity -= args.OrderChangedInfo.Count;
                        if (selectedMarketOrder.OrderQuantity == 0)
                            RemoveMarketOrderData(selectedMarketOrder);
                    }
                };
                worker.RunWorkerAsync();
            };
            wnd.ShowDialog();
        }
        /// <summary>
        /// 有效定单平仓
        /// </summary>
        /// <param name="selectedMarketOrder">选中的某个有效定单</param>
        public void ChargebackMarketOrder(MarketOrderData selectedMarketOrder)
        {
            OrderChangedWindow wnd = new OrderChangedWindow(OrderChangedWindowType.Chargeback)
            {
                Owner = Application.Current.MainWindow,
                DataContext = selectedMarketOrder,
                
            };
            wnd.OrderChanged += (sender, args) =>
            {
                BackgroundWorker worker = new BackgroundWorker();
                worker.DoWork += (s, e) =>
                {
                    //这里应该先获取该定单对应的用户,然后进行平仓信息的验证,主要是平仓数量有效数据位的判断
                    //ValidationResult result = ChargebackOrderValidation( args.OrderChangedInfo, 先获取该定单对应的用户 );

                    int userType = ToUserType(_accType);
                    e.Result = _tradeService.ChargebackOrder(_loginID, userType, args.OrderChangedInfo);
                };
                worker.RunWorkerCompleted += (s, e) =>
                {
                    ErrType err = e.Result as ErrType;
                    if (err != GeneralErr.Success)
                    {
                        MessageBox.Show(err.ErrMsg, err.ErrTitle, MessageBoxButton.OK, MessageBoxImage.Warning);
                        wnd.RevertWindowState();
                    }
                    else
                    {
                        wnd.Close();
                        StringBuilder sbStr = new StringBuilder();
                        string orderTypeStr = selectedMarketOrder.OrderType == TRANSACTION_TYPE.Order ? "买涨" : "买跌";
                        sbStr.Append("订单号\t\t\t商品\t类型\t订单价");
                        sbStr.Append(string.Format("{0}\t{1}\t{2}\t{3}", selectedMarketOrder.OrderID, selectedMarketOrder.ProductName, orderTypeStr, selectedMarketOrder.OrderPrice));
                        sbStr.Append("\r\n\r\n");
                        sbStr.Append(string.Format("平仓\t{0}\t于价位:{1}", args.OrderChangedInfo.Count,
                            args.OrderChangedInfo.RealTimePrice));
                        MessageBox.Show(sbStr.ToString(), "提示", MessageBoxButton.OK, MessageBoxImage.Information);

                        //根据结果对定单进行处理,如果定单数量为0,则移除该定单。
                        selectedMarketOrder.OrderQuantity -= args.OrderChangedInfo.Count;
                        if (selectedMarketOrder.OrderQuantity == 0)
                            RemoveMarketOrderData(selectedMarketOrder);
                    }
                };
                worker.RunWorkerAsync();
            };
            wnd.ShowDialog();
        }
        /// <summary>
        /// 买跌检测[买跌单] 
        /// 定单类型为买跌时有效
        /// </summary>
        /// <param name="selData"></param>
        public void RecordRealWeight(MarketOrderData selData)
        {

            RecordRealWeightWindow window = new RecordRealWeightWindow()
            {
                Owner = Application.Current.MainWindow,
                DataContext = this,
                
            };
            if (window.ShowDialog() == true)
            {
                if (selData.TotalWeight < window.RealWeight)
                    MessageBox.Show("您输入的重量大于您的库存", "提示信息", MessageBoxButton.OK, MessageBoxImage.Error);
                else
                {
                    ErrType err = _businessService.RecordRealWeight(selData.OrderID, window.RealWeight, _loginID, (int)_accType);
                    if (err.Err == ERR.SUCCESS)
                    {
                        selData.AllowStore = true;
                        MessageBox.Show("您可以入库了", "提示信息", MessageBoxButton.OK, MessageBoxImage.Information);
                    }
                    else
                        MessageBox.Show(err.ErrMsg, err.ErrTitle, MessageBoxButton.OK, MessageBoxImage.Information);
                }
              
            }
        }