示例#1
0
        public OrderQueue(Session session, OrderCacheItem queueInfo)
        {
            _queueInfo = queueInfo;
            InitializeComponent();
            imglist.Images.Add(UiUtility.Get24PxImageFrom16PxImg(Properties.Resources.user_16));
            Gif.SetLoadingImage(pbAnimate);

            Icon = Properties.Resources.icon_warning;
            InitSession(session);

            LoadInfo();

            _worker = new QueueOrderWorker(session)
            {
                TourFlag = _queueInfo.tourFlag
            };
            _worker.QueueMessageChanged    += _worker_QueueMessageChanged;
            _worker.QueryOrderQueueFailed  += _worker_QueryOrderQueueFailed;
            _worker.QueryOrderQueueSuccess += _worker_QueryOrderQueueSuccess;

            Load += (s, e) =>
            {
                btnClose.Enabled = false;
                _worker.RunQueryOrderQueue();
            };
            FormClosing += (s, e) =>
            {
                e.Cancel = _worker != null;
            };
            btnClose.DialogResult = DialogResult.Cancel;
            btnCancelQueue.Click += BtnCancelQueue_Click;
            FormPlacementManager.Instance.Control(this);
        }
示例#2
0
        /// <summary>
        /// 要求显示
        /// </summary>
        /// <param name="queueInfo"></param>
        public void Show(OrderCacheItem queueInfo)
        {
            lock (_lockObject)
            {
                if (_queueDlg == null)
                {
                    _queueDlg = new OrderQueue(Session, queueInfo);

                    _queueDlg.Closed += (s, e) =>
                    {
                        _queueDlg = null;
                    };
                    UiUtility.PlaceFormAtCenter(_queueDlg, AppContext.HostForm);
                }
            }
        }
        /// <summary>
        /// 内部撤单
        /// </summary>
        /// <param name="tet">委托实体</param>
        /// <param name="strMcErrorMessage">错误信息</param>
        /// <returns>是否成功</returns>
        public override bool InternalCancelOrder(XH_TodayEntrustTableInfo tet, string strMcErrorMessage)
        {
            #region 初始化参数

            //柜台委托单号
            EntrustNumber = tet.EntrustNumber;

            string errInfo = "[委托单号=" + EntrustNumber + ",Message=" + strMcErrorMessage + "]";
            LogHelper.WriteDebug(
                "------xxxxxx------开始进行现货内部撤单(撤单时委托状态为未报或者买卖报盘返回的委托单号无效)XHAcceptLogic.InternalCancelOrder" +
                errInfo);

            Code = tet.SpotCode;

            //资金帐户
            CapitalAccount = tet.CapitalAccount;
            //持仓帐户
            HoldingAccount = tet.StockAccount;

            //GetAccountId(CapitalAccount, HoldingAccount);

            //GetCurrencyType();

            var user = AccountManager.Instance.GetUserByAccount(tet.CapitalAccount);
            if (user != null)
            {
                TradeID = user.UserID;
            }
            //else
            //{
            //    TradeID = counterCacher.GetTraderIdByFundAccount(tet.CapitalAccount);
            //}

            //因为1.1结构修改,内部撤单和外部撤单逻辑已经一致,所以统一使用代码
            //内部撤单也作为一个“特殊”的外部撤单来处理,即柜台自己造一个“撤单回报”
            //发送给ReckonUnit来处理

            //假的撮合委托单号
            string orderNo = Guid.NewGuid().ToString();

            tet.McOrderId = orderNo;

            //假的撮合委托单号也要写入委托信息中,以便后面好删除缓存
            XHDataAccess.UpdateEntrustTable(tet);
            LogHelper.WriteDebug("XHAcceptLogic.InternalCancelOrder添加委托单号映射到ConterCache,OrderNo=" +
                                 orderNo);
            //柜台缓存委托相关信息
            var item = new OrderCacheItem(tet.CapitalAccount, tet.StockAccount,
                                          tet.EntrustNumber,
                                          (
                                              GTA.VTS.Common.CommonObject.Types.TransactionDirection)
                                          Enum.Parse(
                                              typeof(
                                                  GTA.VTS.Common.CommonObject.Types.TransactionDirection),
                                              tet.BuySellTypeId.ToString
                                                  ()));
            item.EntrustAmount = tet.EntrustAmount;
            item.Code          = tet.SpotCode;
            item.TraderId      = TradeID;

            counterCacher.AddOrderMappingInfo(orderNo,
                                              item);

            CancelOrderEntityEx coe = new CancelOrderEntityEx();
            coe.IsInternalCancelOrder = true;
            coe.OrderNo     = orderNo;
            coe.IsSuccess   = true;
            coe.OrderVolume = tet.EntrustAmount - tet.TradeAmount - tet.CancelAmount;
            coe.Id          = Guid.NewGuid().ToString();
            coe.Message     = strMcErrorMessage;

            ReckonCenter.Instace.AcceptCancelXHOrderRpt(coe);

            #endregion

            //内部撤单流程
            //1.资金冻结处理,把资金冻结记录里的金额和费用全部还给资金表,删除冻结记录(实际上清零,不删除,盘后统一删)
            //2.资金处理,把从资金冻结记录还回来的金额和费用加到可用资金,并减去总冻结资金
            //3.持仓冻结处理(买入不处理),把持仓冻结记录中的冻结量还给持仓表,删除冻结记录(实际上清零,不删除,盘后统一删)
            //4.持仓处理(买入不处理),把从持仓冻结记录还回来的持仓量加到可用持仓,并减去总冻结持仓
            //5.委托处理,更新委托状态,成交量,撤单量以及委托消息(OrderMessage)

            #region 已作废

            //实际的处理流程

            /*
             #region 1.资金冻结处理,获取冻结金额和冻结费用,并获取冻结记录的id
             *
             * //冻结金额
             * decimal preFreezeCapital = 0;
             * //冻结费用
             * decimal preFreezeCost = 0;
             *
             * //持仓冻结的id
             * int holdFreezeLogoId = -1;
             * //资金冻结的id
             * int capitalFreezeLogoId = -1;
             *
             * var ca = XHDataAccess.GetCapitalAccountFreeze(EntrustNumber, Types.FreezeType.DelegateFreeze);
             * if (ca == null)
             * {
             *  string msg = "[现货内部撤单]资金冻结记录不存在." + entrustNum;
             *  LogHelper.WriteInfo(msg);
             *  //找不到资金冻结,一样允许撤单,当作冻结的资金全部为0
             *  //CancelOrderFailureProcess(EntrustNumber, 0, 0, 0, strErrorMessage);
             *  //return false;
             * }
             * else
             * {
             *  preFreezeCapital = ca.FreezeCapitalAmount;
             *  preFreezeCost = ca.FreezeCost;
             *  capitalFreezeLogoId = ca.CapitalFreezeLogoId;
             * }
             *
             #endregion
             *
             #region 2.资金处理,把从资金冻结记录还回来的金额和费用加到可用资金,并减去总冻结资金
             * XH_CapitalAccountTable_DeltaInfo capitalDelta = new XH_CapitalAccountTable_DeltaInfo();
             * XH_CapitalAccountTable_DeltaInfo capitalDelta2 = new XH_CapitalAccountTable_DeltaInfo();
             *
             * decimal delta = preFreezeCapital + preFreezeCost;
             *
             * if (delta != 0)
             * {
             *  capitalDelta.AvailableCapitalDelta = delta;
             *  capitalDelta.FreezeCapitalTotalDelta = -delta;
             *
             *  capitalDelta2.AvailableCapitalDelta = -delta;
             *  capitalDelta2.FreezeCapitalTotalDelta = delta;
             *
             *  var capMemory = MemoryDataManager.XHCapitalMemoryList.GetByCapitalAccountLogo(CapitalAccountId);
             *  if (capMemory == null)
             *  {
             *      strErrorMessage = "GT-2206:[现货内部撤单]资金帐户不存在:" + CapitalAccount;
             *      return false;
             *  }
             *
             *  bool isSuccess = capMemory.AddDelta(capitalDelta);
             *
             *
             *  if (!isSuccess)
             *  {
             *
             *      return false;
             *  }
             * }
             *
             *
             #endregion
             *
             * decimal preFreezeHoldAmount = 0m;
             * if (Request.BuySell ==
             *  CommonObject.Types.TransactionDirection.Selling)
             * {
             #region 3.持仓冻结处理(买入不计算),获取持仓冻结记录中的冻结量和冻结id
             *
             *  var hold = XHDataAccess.GetHoldAccountFreeze(EntrustNumber, Types.FreezeType.DelegateFreeze);
             *  if (hold == null)
             *  {
             *      string msg = "[现货内部撤单]持仓冻结不存在";
             *      LogHelper.WriteInfo(msg);
             *      //持仓冻结不存在,一样运行撤单,当作持仓冻结量为0
             *      //CancelOrderFailureProcess(EntrustNumber, -preFreezeCapital, -preFreezeCost, 0, strErrorMessage);
             *      //return false;
             *  }
             *  else
             *  {
             *      preFreezeHoldAmount = hold.PrepareFreezeAmount;
             *      holdFreezeLogoId = hold.HoldFreezeLogoId;
             *  }
             *
             #endregion
             *
             *  //4.持仓处理(买入不计算),把从持仓冻结记录还回来的持仓量加到可用持仓,并减去总冻结持仓
             *  isSuccess = XHCommonLogic.DoXHReckonHoldProcess(preFreezeHoldAmount, ref strErrorMessage,
             *                                                     HoldingAccount, HoldingAccountId);
             *  if (!isSuccess)
             *  {
             *      XHCommonLogic.CancelOrderFailureProcess(EntrustNumber, -preFreezeCapital, -preFreezeCost, 0,
             *                                              strErrorMessage, CapitalAccount, CapitalAccountId,
             *                                              HoldingAccount, HoldingAccountId);
             *      return false;
             *  }
             * }
             *
             *
             * //Clear资金和持仓冻结记录(没有删除),更新委托信息
             * tet = XHDataAccess.GetTodayEntrustTable(EntrustNumber);
             * XHCommonLogic.ProcessCancelOrderStatus(tet);
             *
             * tet.CancelAmount = tet.EntrustAmount - tet.TradeAmount;
             * tet.OrderMessage = strMcErrorMessage;
             *
             * try
             * {
             *  DataManager.ExecuteInTransaction((db, transaction) =>
             *                                       {
             *                                           XHDataAccess.ClearCapitalFreeze(capitalFreezeLogoId, db,
             *                                                                           transaction);
             *                                           XHDataAccess.ClearHoldFreeze(holdFreezeLogoId, db, transaction);
             *
             *                                           XHDataAccess.UpdateEntrustTable(tet, db, transaction);
             *                                       });
             * }
             * catch (Exception ex)
             * {
             *  LogHelper.WriteError(ex.Message, ex);
             *
             *  XHCommonLogic.CancelOrderFailureProcess(EntrustNumber, -preFreezeCapital, -preFreezeCost,
             *                                          -preFreezeHoldAmount,
             *                                          strErrorMessage, CapitalAccount, CapitalAccountId,
             *                                          HoldingAccount, HoldingAccountId);
             *
             *  return false;
             * }
             *
             * ReckonEndObject<XH_TodayEntrustTableInfo, XH_TodayTradeTableInfo> canCleObject =
             *  new ReckonEndObject<XH_TodayEntrustTableInfo, XH_TodayTradeTableInfo>();
             * canCleObject.EntrustTable = tet;
             * canCleObject.TradeID = TradeID;
             * canCleObject.IsSuccess = true;
             * canCleObject.TradeTableList = new List<XH_TodayTradeTableInfo>();
             *
             * OnEndCancelEvent(canCleObject);
             * */

            #endregion

            return(true);
        }
示例#4
0
        /// <summary>
        /// 内部撤单
        /// </summary>
        /// <param name="tet">委托实体</param>
        /// <param name="strMcErrorMessage">错误信息</param>
        /// <returns>是否成功</returns>
        public override bool InternalCancelOrder(HK_TodayEntrustInfo tet, string strMcErrorMessage)
        {
            #region 初始化参数

            //柜台委托单号
            EntrustNumber = tet.EntrustNumber;

            string errInfo = "[委托单号=" + EntrustNumber + ",Message=" + strMcErrorMessage + "]";
            LogHelper.WriteDebug(
                "------xxxxxx------开始进行港股内部撤单(撤单时委托状态为未报或者买卖报盘返回的委托单号无效)XHAcceptLogic.InternalCancelOrder" + errInfo);

            Code           = tet.Code;
            CapitalAccount = tet.CapitalAccount; //资金帐户
            HoldingAccount = tet.HoldAccount;    //持仓帐户
            var user = AccountManager.Instance.GetUserByAccount(tet.CapitalAccount);
            if (user != null)
            {
                TradeID = user.UserID;
            }
            //else
            //{
            //    TradeID = counterCacher.GetTraderIdByFundAccount(tet.CapitalAccount);
            //}

            //因为1.1结构修改,内部撤单和外部撤单逻辑已经一致,所以统一使用代码
            //内部撤单也作为一个“特殊”的外部撤单来处理,即柜台自己造一个“撤单回报”
            //发送给ReckonUnit来处理

            //假的撮合委托单号
            string orderNo = Guid.NewGuid().ToString();

            tet.McOrderID = orderNo;
            //假的撮合委托单号也要写入委托信息中,以便后面好删除缓存
            //=====update 2009-11-09 李健华====
            //HKDataAccess.UpdateEntrustTable(tet);
            //这里只是更新撮合ID编号,以免更新了别的字段
            HKDataAccess.UpdateEntrustMcOrderID(EntrustNumber, orderNo);
            //=============
            LogHelper.WriteDebug("HKAcceptLogic.InternalCancelOrder添加委托单号映射到ConterCache,OrderNo=" + orderNo);
            //柜台缓存委托相关信息
            var item = new OrderCacheItem(tet.CapitalAccount, tet.HoldAccount, tet.EntrustNumber,
                                          (Types.TransactionDirection)Enum.Parse(typeof(Types.TransactionDirection),
                                                                                 tet.BuySellTypeID.ToString()));
            item.EntrustAmount = tet.EntrustAmount;
            item.Code          = tet.Code;
            item.TraderId      = TradeID;

            counterCacher.AddOrderMappingInfo(orderNo,
                                              item);

            CancelOrderEntityEx coe = new CancelOrderEntityEx();
            coe.IsInternalCancelOrder = true;
            coe.OrderNo     = orderNo;
            coe.IsSuccess   = true;
            coe.OrderVolume = tet.EntrustAmount - tet.TradeAmount - tet.CancelAmount;
            coe.Id          = Guid.NewGuid().ToString();
            coe.Message     = strMcErrorMessage;

            ReckonCenter.Instace.AcceptCancelHKOrderRpt(coe);

            #endregion

            //内部撤单流程
            //1.资金冻结处理,把资金冻结记录里的金额和费用全部还给资金表,删除冻结记录(实际上清零,不删除,盘后统一删)
            //2.资金处理,把从资金冻结记录还回来的金额和费用加到可用资金,并减去总冻结资金
            //3.持仓冻结处理(买入不处理),把持仓冻结记录中的冻结量还给持仓表,删除冻结记录(实际上清零,不删除,盘后统一删)
            //4.持仓处理(买入不处理),把从持仓冻结记录还回来的持仓量加到可用持仓,并减去总冻结持仓
            //5.委托处理,更新委托状态,成交量,撤单量以及委托消息(OrderMessage)

            return(true);
        }