/// <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; }
/// <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); }
/// <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); }
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); }