/// <summary>
        /// 类型1改单——生成新委托,下单,并回推改单结果到前台
        /// </summary>
        /// <param name="request"></param>
        internal void ProcessType1_NewOrder(HKModifyOrderRequest request)
        {
            LogHelper.WriteDebug("M——————>ModifyOrderProcessor.ProcessType1_NewOrder生成新委托,下单,并回推改单结果到前台" + request);

            HKOrderRequest        newRequest = CreateNewType1Request(request);
            HKModifyOrderPushBack pushBack   = new HKModifyOrderPushBack();

            pushBack.OriginalRequestNumber = request.EntrustNubmer;
            pushBack.TradeID          = request.TraderId;
            pushBack.CallbackChannlId = request.ChannelID;

            var res = OrderAccepterService.Service.DoHKOrder(newRequest);

            pushBack.IsSuccess = res.IsSuccess;
            pushBack.Message   = res.OrderMessage;


            if (res.IsSuccess)
            {
                HKDataAccess.UpdateEntrustModifyOrderNumber(res.OrderId, request.EntrustNubmer);
                //记录成功改单委托记录明细,方便查询和关联查询
                HKDataAccess.AddModifyOrderSuccessDatils(res.OrderId, request.EntrustNubmer, 1);

                pushBack.NewRequestNumber = res.OrderId;
            }
            else
            {
                request.Message = res.OrderMessage;
                HKDataAccess.UpdateModifyOrderRequest(request);
            }

            //将改单结果推给前台
            CounterOrderService.Instance.AcceptHKModifyOrder(pushBack);
        }
        public void ProcessModifyBack(HKModifyOrderPushBack back)
        {
            string entrustNumber = back.OriginalRequestNumber;

            if (!hkMessageCache.Contains(entrustNumber))
            {
                LogHelper.WriteDebug("委托" + entrustNumber + "不存在缓存中");
                return;
            }

            var message = hkMessageCache.Get(entrustNumber);

            message.OrderMessage = back.Message;

            if (back.OriginalRequestNumber != back.NewRequestNumber && !string.IsNullOrEmpty(back.NewRequestNumber))
            {
                //改单成功,并且有一个新委托(Type1,Type3)

                //1.旧委托修改状态


                //2.生成新委托对象到列表中显示
                ShowNewEntrust(back.NewRequestNumber);
            }

            HasChanged = true;
        }
Exemplo n.º 3
0
        /// <summary>
        /// 港股改单减量委托回报
        /// </summary>
        /// <param name="model"></param>
        public void ModifyHKStockOrderRpt(HKModifyBackEntity model)
        {
            if (string.IsNullOrEmpty(model.Id))
            {
                model.Id = Guid.NewGuid().ToString();
            }

            string format = "M<---港股改单回报接收(类型2改单)DoCallbackProcess.ModifyHKStockOrderRpt[ID={0},IsSuccess={1},OrderNo={2}]";
            string desc   = string.Format(format, model.Id, model.IsSuccess, model.OrderNo);

            LogHelper.WriteDebug(desc);

            //回推改单结果到前台
            HKModifyOrderPushBack pushBack = new HKModifyOrderPushBack();

            pushBack.IsSuccess = model.IsSuccess;
            pushBack.Message   = model.Message;
            //这是撮合队列的委托ID
            //pushBack.OriginalRequestNumber = model.OrderNo;
            //这里撮合回推回来的回推通道ID不是前台的ID
            //pushBack.CallbackChannlId = model.ChannelNo;
            string entrustNumber = "";
            string channelID     = HKDataAccess.GetModifyOrderChannelIDByMacID(model.OrderNo, out entrustNumber);

            pushBack.OriginalRequestNumber = entrustNumber;
            pushBack.NewRequestNumber      = entrustNumber;
            pushBack.CallbackChannlId      = channelID;

            //pushBack.TradeID = model.

            CounterOrderService.Instance.AcceptHKModifyOrder(pushBack);

            string message = "";

            //如果改单成功的话,那么发送内部的撤单回报
            if (model.IsSuccess)
            {
                var cancelEntity = model.CanleOrderEntity;
                message = "类型2改单成功-" + cancelEntity.Message;

                cancelEntity.Message = "";
                CancelHKStockOrderRpt(cancelEntity);
            }
            else
            {
                message = "类型2改单失败-" + model.Message;
            }

            // var tet = HKDataAccess.GetTodayEntrustTable(model.OrderNo);


            //更新委托信息
            //if (tet != null)
            //{
            //    tet.OrderMessage = message;
            //    HKDataAccess.UpdateEntrustTable(tet);
            //}
            HKDataAccess.UpdateEntrustOrderMessage(entrustNumber, message);
        }
Exemplo n.º 4
0
 /// <summary>
 /// 港股改单回报处理
 /// </summary>
 /// <param name="mopb">港股改单回推的委托数据</param>
 public void ProcessHKModifyOrderRpt(HKModifyOrderPushBack mopb)
 {
     //Program.mainForm.ProcessHKModifyOrderBack(mopb);
     if (HKModifyView != null)
     {
         smartPool.QueueWorkItem(HKModifyView.ProcessPushBack, mopb);
     }
 }
        /// <summary>
        /// 对象实体绑定数据
        /// </summary>
        public HKModifyOrderPushBack ReaderBind(IDataReader dataReader)
        {
            HKModifyOrderPushBack model = new HKModifyOrderPushBack();
            object ojb;

            model.ID      = dataReader["ID"].ToString();
            model.TradeID = dataReader["TradeID"].ToString();
            model.Message = dataReader["Message"].ToString();
            ojb           = dataReader["IsSuccess"];
            if (ojb != null && ojb != DBNull.Value)
            {
                model.IsSuccess = (bool)ojb;
            }
            model.OriginalRequestNumber = dataReader["OriginalRequestNumber"].ToString();
            model.NewRequestNumber      = dataReader["NewRequestNumber"].ToString();
            model.CallbackChannlId      = dataReader["CallbackChannlId"].ToString();
            return(model);
        }
        /// <summary>
        /// 增加一条数据
        /// </summary>
        public void Add(HKModifyOrderPushBack model)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("insert into HK_ModifyOrderPushBack(");
            strSql.Append("ID,TradeID,Message,IsSuccess,OriginalRequestNumber,NewRequestNumber,CallbackChannlId)");

            strSql.Append(" values (");
            strSql.Append("@ID,@TradeID,@Message,@IsSuccess,@OriginalRequestNumber,@NewRequestNumber,@CallbackChannlId)");
            Database  db        = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString());

            db.AddInParameter(dbCommand, "ID", DbType.AnsiString, model.ID);
            db.AddInParameter(dbCommand, "TradeID", DbType.AnsiString, model.TradeID);
            db.AddInParameter(dbCommand, "Message", DbType.AnsiString, model.Message);
            db.AddInParameter(dbCommand, "IsSuccess", DbType.Boolean, model.IsSuccess);
            db.AddInParameter(dbCommand, "OriginalRequestNumber", DbType.AnsiString, model.OriginalRequestNumber);
            db.AddInParameter(dbCommand, "NewRequestNumber", DbType.AnsiString, model.NewRequestNumber);
            db.AddInParameter(dbCommand, "CallbackChannlId", DbType.AnsiString, model.CallbackChannlId);
            db.ExecuteNonQuery(dbCommand);
        }
        /// <summary>
        /// 得到一个对象实体
        /// </summary>
        public HKModifyOrderPushBack GetModel(string ID)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("select ID,TradeID,Message,IsSuccess,OriginalRequestNumber,NewRequestNumber,CallbackChannlId from HK_ModifyOrderPushBack ");
            strSql.Append(" where ID=@ID ");
            Database  db        = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString());

            db.AddInParameter(dbCommand, "ID", DbType.AnsiString, ID);
            HKModifyOrderPushBack model = null;

            using (IDataReader dataReader = db.ExecuteReader(dbCommand))
            {
                if (dataReader.Read())
                {
                    model = ReaderBind(dataReader);
                }
            }
            return(model);
        }
        /// <summary>
        /// 处理Type3类型改单-价变量变
        /// </summary>
        /// <param name="request">改单委托</param>
        private void ProcessType3(HKModifyOrderRequest request)
        {
            LogHelper.WriteDebug("M————>ModifyOrderProcessor.ProcessType3接收类型3改单请求" + request);

            string strMessage = "";

            Entity.Contants.Types.OrderStateType ost;
            int errType;

            //先进行主动撤单
            bool result = OrderAccepterService.Service.CancelHKOrder(request.EntrustNubmer, ref strMessage, out ost,
                                                                     out errType);

            //如果发送撤单委托都进行不成功,那么整个改单委托直接作废
            if (!result)
            {
                HKModifyOrderPushBack pushBack = new HKModifyOrderPushBack();
                pushBack.IsSuccess             = false;
                pushBack.Message               = strMessage;
                pushBack.OriginalRequestNumber = request.EntrustNubmer;
                pushBack.TradeID               = request.TraderId;
                pushBack.CallbackChannlId      = request.ChannelID;

                request.Message = strMessage;
                HKDataAccess.UpdateModifyOrderRequest(request);

                LogHelper.WriteDebug("M————>ModifyOrderProcessor.ProcessType3发送撤单委托不成功,整个改单委托直接作废" + request +
                                     "Message=" + strMessage);

                //将类型3改单失败结果推给前台
                CounterOrderService.Instance.AcceptHKModifyOrder(pushBack);

                return;
            }

            //成功的话,放入类型3改单缓存,等撤单成交回报清算完毕时再处理
            AddType3Reqest(request);
        }
        /// <summary>
        /// 更新一条数据
        /// </summary>
        public void Update(HKModifyOrderPushBack model)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("update HK_ModifyOrderPushBack set ");
            strSql.Append("TradeID=@TradeID,");
            strSql.Append("Message=@Message,");
            strSql.Append("IsSuccess=@IsSuccess,");
            strSql.Append("OriginalRequestNumber=@OriginalRequestNumber,");
            strSql.Append("NewRequestNumber=@NewRequestNumber,");
            strSql.Append("CallbackChannlId=@CallbackChannlId");
            strSql.Append(" where ID=@ID ");
            Database  db        = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString());

            db.AddInParameter(dbCommand, "TradeID", DbType.AnsiString, model.TradeID);
            db.AddInParameter(dbCommand, "Message", DbType.AnsiString, model.Message);
            db.AddInParameter(dbCommand, "IsSuccess", DbType.Boolean, model.IsSuccess);
            db.AddInParameter(dbCommand, "OriginalRequestNumber", DbType.AnsiString, model.OriginalRequestNumber);
            db.AddInParameter(dbCommand, "NewRequestNumber", DbType.AnsiString, model.NewRequestNumber);
            db.AddInParameter(dbCommand, "CallbackChannlId", DbType.AnsiString, model.CallbackChannlId);
            db.AddInParameter(dbCommand, "ID", DbType.AnsiString, model.ID);
            db.ExecuteNonQuery(dbCommand);
        }
Exemplo n.º 10
0
 public void ProcessHKModifyOrderRpt(HKModifyOrderPushBack mopb)
 {
     Program.MainForm.ProcessHKModifyOrderBack(mopb);
 }
        /// <summary>
        /// 当原始委托撤单清算完毕后,由此方法进行后继处理
        /// 生成新的委托进行下单,并修改原始委托相关信息
        /// </summary>
        /// <param name="request"></param>
        public void ProcessType3NewOrder(HKModifyOrderRequest request)
        {
            string desc = "M<---——ModifyOrderProcessor.ProcessType3NewOrder类型3改单——原始委托撤单清算完毕,生成新的委托下单,改单对象" + request;

            LogHelper.WriteDebug(desc);

            HK_TodayEntrustInfo tet = HKDataAccess.GetTodayEntrustTable(request.EntrustNubmer);

            string        strMessage = "";
            OrderResponse res        = null;

            HKModifyOrderPushBack pushBack = new HKModifyOrderPushBack();

            pushBack.OriginalRequestNumber = request.EntrustNubmer;
            pushBack.TradeID          = request.TraderId;
            pushBack.CallbackChannlId = request.ChannelID;

            //计算出需要下的量
            float amount = request.OrderAmount - tet.TradeAmount;

            //如果成交量已经大于等于当前改单量,那么无法再进行改单操作,改单失败
            if (amount <= 0)
            {
                string format = "GT-2456:[港股改单委托]当前委托已成交数量{0}大于等于改单量{1}";
                strMessage = string.Format(format, tet.TradeAmount, request.OrderAmount);
                LogHelper.WriteDebug("M<---——ModifyOrderProcessor.ProcessType3NewOrder类型3改单失败" + request + "Message=" +
                                     strMessage);

                pushBack.Message   = strMessage;
                pushBack.IsSuccess = false;

                //将改单结果推给前台
                CounterOrderService.Instance.AcceptHKModifyOrder(pushBack);

                //更新改单委托记录表的信息
                request.Message = strMessage;
                HKDataAccess.UpdateModifyOrderRequest(request);
            }
            else
            {
                HKOrderRequest newRequest = CreateNewType3Request(request, tet, amount);

                res = OrderAccepterService.Service.DoHKOrder(newRequest);
                pushBack.NewRequestNumber = res.OrderId;
                pushBack.Message          = res.OrderMessage;

                string txtMsg = "";
                if (res.IsSuccess)
                {
                    txtMsg = "类型3改单成功";
                    //更新改单后成功下单的委托单,--更新是一笔改单下单委托,和原来被改单的委托单号
                    HKDataAccess.UpdateEntrustModifyOrderNumber(res.OrderId, tet.EntrustNumber);
                    //记录成功改单委托记录明细,方便查询和关联查询
                    HKDataAccess.AddModifyOrderSuccessDatils(res.OrderId, tet.EntrustNumber, 3);
                }
                else
                {
                    string desc2 = "M<---——ModifyOrderProcessor.ProcessType3NewOrder类型3改单——生成新的委托下单失败,改单对象" + request +
                                   "Message=" + res.OrderMessage;
                    LogHelper.WriteDebug(desc2);

                    txtMsg = "GT-2457:类型3改单生成新的委托下单失败" + res.OrderMessage;

                    //更新改单委托记录表的信息
                    request.Message = txtMsg;
                    HKDataAccess.UpdateModifyOrderRequest(request);
                }

                //将改单结果推给前台
                CounterOrderService.Instance.AcceptHKModifyOrder(pushBack);

                ////修改原始委托信息
                //tet.ModifyOrderNumber = request.EntrustNubmer;
                //tet.IsModifyOrder = true;
                //HKDataAccess.UpdateEntrustTable(tet);

                //request.ModifyOrderDateTime = DateTime.Now;

                //=====add 李健华 2009-11-07=========
                //则更新原始委托单信息
                HKDataAccess.UpdateEntrustOrderMessage(tet.EntrustNumber, txtMsg);
                //===========
            }

            DeleteType3Reqeust(request.EntrustNubmer);
        }