/// <summary> /// 得到一个对象实体 /// <param name="entrustNumber"></param> /// </summary> public HK_TodayEntrustInfo GetModel(string entrustNumber) { HK_TodayEntrustInfo model = null; try { StringBuilder strSql = new StringBuilder(); strSql.Append("select EntrustNumber,PortfolioLogo,EntrustPrice,EntrustAmount,Code,TradeAmount,TradeAveragePrice,CancelAmount,CancelLogo,BuySellTypeID,HoldAccount,CapitalAccount,OrderStatusID,OrderPriceType,OrderMessage,CurrencyTypeID,TradeUnitID,CallbackChannlID,McOrderID,HasDoneProfit,OfferTime,EntrustTime,IsModifyOrder,ModifyOrderNumber from HK_TodayEntrust "); strSql.Append(" where EntrustNumber=@EntrustNumber "); Database db = DatabaseFactory.CreateDatabase(); DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString()); db.AddInParameter(dbCommand, "EntrustNumber", DbType.AnsiString, entrustNumber); using (IDataReader dataReader = db.ExecuteReader(dbCommand)) { if (dataReader.Read()) { model = ReaderBind(dataReader); } } } catch (Exception ex) { LogHelper.WriteError("获取数据异常", ex); return(null); } return(model); }
/// <summary> /// 构建港股委托单 /// </summary> /// <param name="order"></param> /// <param name="originalOrder"></param> /// <param name="strHoldingAccount"></param> /// <param name="strCapitalAccount"></param> /// <param name="iCurType"></param> /// <param name="strMessage"></param> /// <returns></returns> public static string BuildHKOrder(ref HK_TodayEntrustInfo order, HKOrderRequest originalOrder, string strHoldingAccount, string strCapitalAccount, int iCurType, ref string strMessage) { return(BuildHKOrder(ref order, originalOrder, strHoldingAccount, strCapitalAccount, iCurType, false, "", ref strMessage)); }
/// <summary> /// 更新港股委托单状态和信息 /// </summary> /// <param name="stockOrder">委托单</param> public static void UpdateHKOrderStatusAndMessage(HK_TodayEntrustInfo stockOrder) { try { string msg = stockOrder.OrderMessage; if (msg.Length > 50) { msg = msg.Substring(0, 49); } string format = "update HK_TodayEntrust set orderstatusid={0}, OrderMessage='{1}' where entrustnumber='{2}'"; string sql = string.Format(format, stockOrder.OrderStatusID, msg, stockOrder.EntrustNumber); //DataRepository.Provider.ExecuteNonQuery(CommandType.Text, sql); DbHelperSQL.ExecuteSql(sql); //var sxtetp = new SqlXhTodayEntrustTableProvider(TransactionFactory.RC_ConnectionString, true, // string.Empty); //sxtetp.Update(stockOrder); } catch (Exception ex) { LogHelper.WriteError(ex.Message, ex); } }
private static HK_TodayEntrustInfo ConvertHistoryEntrustTable(HK_HistoryEntrustInfo tet) { HK_TodayEntrustInfo tet2 = new HK_TodayEntrustInfo(); tet2.BuySellTypeID = tet.BuySellTypeID; //tet2.CallbackChannlID = tet. tet2.CancelAmount = tet.CancelAmount; //tet2.CancelLogo = tet.ca tet2.CapitalAccount = tet.CapitalAccount; tet2.CurrencyTypeID = tet.CurrencyTypeID; tet2.EntrustAmount = tet.EntrustMount; tet2.EntrustNumber = tet.EntrustNumber; tet2.EntrustPrice = tet.EntrustPrice; tet2.EntrustTime = tet.EntrustTime; tet2.HasDoneProfit = tet.HasDoneProfit; //tet2.IsMarketValue = tet.IsMarketValue; tet2.OrderPriceType = tet.OrderPriceType; tet2.McOrderID = tet.McOrderID; tet2.OfferTime = tet.OfferTime; tet2.OrderMessage = tet.OrderMessage; tet2.OrderStatusID = tet.OrderStatusID; tet2.PortfolioLogo = tet.PortfolioLogo; tet2.Code = tet.Code; tet2.HoldAccount = tet.HoldAccount; tet2.TradeAmount = tet.TradeAmount; tet2.TradeAveragePrice = tet.TradeAveragePrice; tet2.TradeUnitID = tet.TradeUnitID; tet2.IsModifyOrder = tet.IsModifyOrder; tet2.ModifyOrderNumber = tet.ModifyOrderNumber; return(tet2); }
/// <summary> /// 更新港股委托单状态,撤单专用,当前状态为最终状态时不更新 /// </summary> /// <param name="stockOrder">委托单</param> public static void UpdateHKOrderStatus_Cancel(HK_TodayEntrustInfo stockOrder) { //如果状态时废单,部撤,已撤,已成,那么代表是最终状态 int a = (int)Types.OrderStateType.DOSCanceled; int b = (int)Types.OrderStateType.DOSPartRemoved; int c = (int)Types.OrderStateType.DOSRemoved; int d = (int)Types.OrderStateType.DOSDealed; //如果状态是已报待撤、部成待撤,那么也不需要更新状态 int e = (int)Types.OrderStateType.DOSRequiredRemoveSoon; int f = (int)Types.OrderStateType.DOSPartDealRemoveSoon; try { string format = "UPDATE HK_TodayEntrust set orderstatusid={0} where entrustnumber='{1}'"; format += " and OrderStatusId<>{2} and OrderStatusId<>{3} and OrderStatusId<>{4} and OrderStatusId<>{5}"; format += " and OrderStatusId<>{6} and OrderStatusId<>{7}"; string sql = string.Format(format, stockOrder.OrderStatusID, stockOrder.EntrustNumber, a, b, c, d, e, f); DbHelperSQL.ExecuteSql(sql); } catch (Exception ex) { LogHelper.WriteError(ex.Message, ex); } }
/// <summary> /// 更新一条数据 /// <param name="model"></param> /// </summary> public void Update(HK_TodayEntrustInfo model) { StringBuilder strSql = new StringBuilder(); strSql.Append("update HK_TodayEntrust set "); strSql.Append("EntrustPrice=@EntrustPrice,"); strSql.Append("PortfolioLogo=@PortfolioLogo,"); strSql.Append("EntrustAmount=@EntrustAmount,"); strSql.Append("Code=@Code,"); strSql.Append("TradeAmount=@TradeAmount,"); strSql.Append("TradeAveragePrice=@TradeAveragePrice,"); strSql.Append("CancelAmount=@CancelAmount,"); strSql.Append("CancelLogo=@CancelLogo,"); strSql.Append("BuySellTypeID=@BuySellTypeID,"); strSql.Append("HoldAccount=@HoldAccount,"); strSql.Append("CapitalAccount=@CapitalAccount,"); strSql.Append("OrderStatusID=@OrderStatusID,"); strSql.Append("OrderPriceType=@OrderPriceType,"); strSql.Append("OrderMessage=@OrderMessage,"); strSql.Append("CurrencyTypeID=@CurrencyTypeID,"); strSql.Append("TradeUnitID=@TradeUnitID,"); strSql.Append("CallbackChannlID=@CallbackChannlID,"); strSql.Append("McOrderID=@McOrderID,"); strSql.Append("HasDoneProfit=@HasDoneProfit,"); strSql.Append("OfferTime=@OfferTime,"); strSql.Append("EntrustTime=@EntrustTime,"); strSql.Append("IsModifyOrder=@IsModifyOrder,"); strSql.Append("ModifyOrderNumber=@ModifyOrderNumber"); strSql.Append(" where EntrustNumber=@EntrustNumber "); Database db = DatabaseFactory.CreateDatabase(); DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString()); db.AddInParameter(dbCommand, "EntrustNumber", DbType.AnsiString, model.EntrustNumber); db.AddInParameter(dbCommand, "PortfolioLogo", DbType.AnsiString, model.PortfolioLogo); db.AddInParameter(dbCommand, "EntrustPrice", DbType.Decimal, model.EntrustPrice); db.AddInParameter(dbCommand, "EntrustAmount", DbType.Int32, model.EntrustAmount); db.AddInParameter(dbCommand, "Code", DbType.AnsiString, model.Code); db.AddInParameter(dbCommand, "TradeAmount", DbType.Int32, model.TradeAmount); db.AddInParameter(dbCommand, "TradeAveragePrice", DbType.Decimal, model.TradeAveragePrice); db.AddInParameter(dbCommand, "CancelAmount", DbType.Int32, model.CancelAmount); db.AddInParameter(dbCommand, "CancelLogo", DbType.Boolean, model.CancelLogo); db.AddInParameter(dbCommand, "BuySellTypeID", DbType.Int32, model.BuySellTypeID); db.AddInParameter(dbCommand, "HoldAccount", DbType.AnsiString, model.HoldAccount); db.AddInParameter(dbCommand, "CapitalAccount", DbType.AnsiString, model.CapitalAccount); db.AddInParameter(dbCommand, "OrderStatusID", DbType.Int32, model.OrderStatusID); db.AddInParameter(dbCommand, "OrderPriceType", DbType.Int32, model.OrderPriceType); db.AddInParameter(dbCommand, "OrderMessage", DbType.AnsiString, model.OrderMessage); db.AddInParameter(dbCommand, "CurrencyTypeID", DbType.Int32, model.CurrencyTypeID); db.AddInParameter(dbCommand, "TradeUnitID", DbType.Int32, model.TradeUnitID); db.AddInParameter(dbCommand, "CallbackChannlID", DbType.AnsiString, model.CallbackChannlID); db.AddInParameter(dbCommand, "McOrderID", DbType.AnsiString, model.McOrderID); db.AddInParameter(dbCommand, "HasDoneProfit", DbType.Decimal, model.HasDoneProfit); db.AddInParameter(dbCommand, "OfferTime", DbType.DateTime, model.OfferTime); db.AddInParameter(dbCommand, "EntrustTime", DbType.DateTime, model.EntrustTime); db.AddInParameter(dbCommand, "IsModifyOrder", DbType.Boolean, model.IsModifyOrder); db.AddInParameter(dbCommand, "ModifyOrderNumber", DbType.AnsiString, model.ModifyOrderNumber); db.ExecuteNonQuery(dbCommand); }
/// <summary> /// 依据港股委托单号获取委托单对象 /// </summary> /// <param name="strEntrustId"></param> /// <returns></returns> public static HK_TodayEntrustInfo GetHKEntrustEntity(string strEntrustId) { HK_TodayEntrustInfo result = null; HK_TodayEntrustDal hkTodayEntrustDal = new HK_TodayEntrustDal(); result = hkTodayEntrustDal.GetModel(strEntrustId); return(result); }
/// <summary> /// 依据港股委托单号获取委托单对象 /// </summary> /// <param name="strEntrustId"></param> /// <param name="tm"></param> /// <returns></returns> public static HK_TodayEntrustInfo GetHKEntrustEntity(string strEntrustId, ReckoningTransaction tm) { HK_TodayEntrustInfo result = null; HK_TodayEntrustDal hkTodayEntrustDal = new HK_TodayEntrustDal(); result = hkTodayEntrustDal.GetModel(strEntrustId);//TODO:trans return(result); }
//public static string GetTraderIdByFundAccount(string strFundAccountId) //{ // string result = string.Empty; // UA_UserAccountAllocationTableDal dal = new UA_UserAccountAllocationTableDal(); // if (!string.IsNullOrEmpty(strFundAccountId)) // { // //var userAccounts = // // DataRepository.UaUserAccountAllocationTableProvider.GetByUserAccountDistributeLogo(strFundAccountId); // var userAccount = AccountManager.Instance.GetUserByAccount(strFundAccountId); // if (userAccount != null) // { // result = userAccount.UserID; // } // else // { // userAccount = dal.GetModel(strFundAccountId); // if (userAccount != null) // result = userAccount.UserID; // } // } // return result; //} #region 港股更新 /// <summary> /// 更新港股委托单 /// </summary> /// <param name="stockOrder">委托单</param> public static bool UpdateHKOrder(HK_TodayEntrustInfo stockOrder) { bool isSuccess = false; HK_TodayEntrustDal dal = new HK_TodayEntrustDal(); try { // var sxtetp = new SqlXhTodayEntrustTableProvider(TransactionFactory.RC_ConnectionString, true, // string.Empty); //sxtetp.Update(stockOrder); //===update 李健华 2009-11-08 此更新报盘时更,所以使用更新不包括是否为改单这两个字段 //dal.Update(stockOrder); dal.UpdateNoIsModifyOrder(stockOrder); //======= isSuccess = true; } catch (Exception ex) { LogHelper.WriteDebug("OrderOfferDataLogic.UpdateHKOrder改使用企业库执行第1次" + ex.Message); } //使用企业库执行第1次 if (!isSuccess) { try { // XhTodayEntrustTableDao.Update(stockOrder); dal.Update(stockOrder); isSuccess = true; } catch (Exception ex) { LogHelper.WriteDebug("OrderOfferDataLogic.UpdateHKOrder使用企业库执行第2次" + ex.Message); } } //使用企业库执行第2次 if (!isSuccess) { try { // XhTodayEntrustTableDao.Update(stockOrder); dal.Update(stockOrder); isSuccess = true; } catch (Exception ex) { LogHelper.WriteError("OrderOfferDataLogic.UpdateHKOrder彻底失败!", ex); } } return(isSuccess); }
/// <summary> /// 更新港股委托单状态 /// </summary> /// <param name="stockOrder">委托单</param> public static void UpdateHKOrderStatus(HK_TodayEntrustInfo stockOrder) { try { string format = "update HK_TodayEntrust set orderstatusid={0} where entrustnumber='{1}'"; string sql = string.Format(format, stockOrder.OrderStatusID, stockOrder.EntrustNumber); DbHelperSQL.ExecuteSql(sql); } catch (Exception ex) { LogHelper.WriteError(ex.Message, ex); } }
/// <summary> /// 卖持仓检查 /// </summary> /// <param name="strMessage"></param> /// <param name="hkEntrustInfo"></param> /// <param name="request"></param> /// <returns></returns> private bool PO_HoldValidate_Sell(ref string strMessage, HK_TodayEntrustInfo hkEntrustInfo, HKOrderRequest request) { bool result = false; strMessage = "GT-2420:[港股改单委托检验]卖持仓检查,无持仓--港股改单委托失败"; //var ahtMemory = MemoryDataManager.HKHoldMemoryList.GetByHoldAccountAndCurrencyType(HoldingAccount, Code, // CurrencyType); //if (ahtMemory == null) //{ var ahtMemory = HKCommonLogic.GetHoldMemoryTable(hkEntrustInfo.HoldAccount, hkEntrustInfo.Code, hkEntrustInfo.CurrencyTypeID); //} if (ahtMemory == null || ahtMemory.Data == null) { return(false); } var aht = ahtMemory.Data; int position = Convert.ToInt32(aht.AvailableAmount); //真正的可用量是要减去真正的改单量增加或者减少量 //而真正的改单量增加量为=现在改单委托量-原委托量; int nowAddAmount = Convert.ToInt32(request.OrderAmount) - hkEntrustInfo.EntrustAmount; //不能直接把冻结量加上,因为冻结量可能不为本单的冻结量,可能还有别的单下的冻结量 position = position + hkEntrustInfo.EntrustAmount - hkEntrustInfo.TradeAmount; //则当前的真正的可用持仓量为 position = position - nowAddAmount; //持仓帐户是否存在判断 //result = ValidateCenter.ValidateHKMinVolumeOfBusiness(request, position, ref strMessage); HKStockMinVolumeOfBusinessCommand command = new HKStockMinVolumeOfBusinessCommand(BreedClassID, position); result = command.Validate(request, ref strMessage); if (!result) { strMessage += "--港股改单委托失败"; } if (result) { strMessage = ""; } return(result); }
/// <summary> /// 检查是否有超过数据库限制长度的字段 /// </summary> /// <param name="tet"></param> private static void CheckEntrustLength(HK_TodayEntrustInfo tet) { if (tet.PortfolioLogo.Length > 25) { string format1 = "CheckEntrustLength[PortfolioLogo={0}]"; string desc1 = string.Format(format1, tet.PortfolioLogo); LogHelper.WriteDebug(desc1); tet.PortfolioLogo = tet.PortfolioLogo.Substring(0, 25); } if (tet.HoldAccount.Length > 20) { string format1 = "CheckEntrustLength[StockAccount={0}]"; string desc1 = string.Format(format1, tet.HoldAccount); LogHelper.WriteDebug(desc1); tet.HoldAccount = tet.HoldAccount.Substring(0, 20); } if (tet.CapitalAccount.Length > 20) { string format1 = "CheckEntrustLength[CapitalAccount={0}]"; string desc1 = string.Format(format1, tet.CapitalAccount); LogHelper.WriteDebug(desc1); tet.CapitalAccount = tet.CapitalAccount.Substring(0, 20); } if (tet.OrderMessage.Length > 100) { string format1 = "CheckEntrustLength[OrderMessage={0}]"; string desc1 = string.Format(format1, tet.OrderMessage); LogHelper.WriteDebug(desc1); tet.OrderMessage = tet.OrderMessage.Substring(0, 100); } if (tet.CallbackChannlID.Length > 50) { string format1 = "CheckEntrustLength[CallbackChannlId={0}]"; string desc1 = string.Format(format1, tet.CallbackChannlID); LogHelper.WriteDebug(desc1); tet.CallbackChannlID = tet.CallbackChannlID.Substring(0, 50); } if (tet.McOrderID.Length > 100) { string format1 = "CheckEntrustLength[McOrderId={0}]"; string desc1 = string.Format(format1, tet.McOrderID); LogHelper.WriteDebug(desc1); tet.McOrderID = tet.McOrderID.Substring(0, 100); } }
/// <summary> /// 更新委托表(带事务) /// </summary> /// <param name="tet">委托表</param> /// <param name="db"></param> /// <param name="transaction"></param> /// <returns>是否成功</returns> public static bool UpdateEntrustTable(HK_TodayEntrustInfo tet, Database db, DbTransaction transaction) { try { HK_TodayEntrustDal dal = new HK_TodayEntrustDal(); dal.Update(tet, db, transaction); } catch (Exception ex) { LogHelper.WriteError(ex.Message, ex); return(false); } return(true); }
public void InsertModifyBack(HK_TodayEntrustInfo tet) { HKMessage message = new HKMessage(); message.BuySell = tet.BuySellTypeID == (int)GTA.VTS.Common.CommonObject.Types.TransactionDirection.Buying ? "买" : "卖"; message.CapitalAccount = tet.CapitalAccount; message.Code = tet.Code; message.EntrustAmount = tet.EntrustAmount.ToString(); message.EntrustNumber = tet.EntrustNumber; message.EntrustPrice = tet.EntrustPrice.ToString(); message.IsModifyOrder = "是"; message.ModifyOrderNumber = tet.ModifyOrderNumber; switch (tet.OrderPriceType) { case (int)Types.HKPriceType.LO: message.EntrustType = "限价单"; break; case (int)Types.HKPriceType.ELO: message.EntrustType = "增强限价单"; break; case (int)Types.HKPriceType.SLO: message.EntrustType = "特别限价单"; break; } message.OrderMessage = tet.OrderMessage; message.OrderStatus = Utils.GetOrderStateMsg(tet.OrderStatusID); message.TradeAmount = tet.TradeAmount.ToString(); message.TradeTime = ""; listLock.EnterWriteLock(); try { hkMessageList.Add(message); } finally { listLock.ExitWriteLock(); } hkMessageCache.Add(message.EntrustNumber, message); HasChanged = true; }
/// <summary> /// 根据委托单号获取委托,先在当日中查找,找不到再到历史中查找,转换成当日委托实体 /// </summary> /// <param name="entrustNumber">委托单号</param> /// <returns>今日委托</returns> public static HK_TodayEntrustInfo GetAllEntrustTable(string entrustNumber) { HK_TodayEntrustInfo tet = null; tet = GetTodayEntrustTable(entrustNumber); if (tet == null) { var tet2 = GetHistoryEntrustTable(entrustNumber); if (tet2 != null) { tet = ConvertHistoryEntrustTable(tet2); } } return(tet); }
/// <summary> /// 根据委托单号获取今日委托 /// </summary> /// <param name="entrustNumber">委托单号</param> /// <returns>今日委托</returns> public static HK_TodayEntrustInfo GetTodayEntrustTable(string entrustNumber) { HK_TodayEntrustInfo tet = null; HK_TodayEntrustDal dal = new HK_TodayEntrustDal(); try { tet = dal.GetModel(entrustNumber); } catch (Exception ex) { LogHelper.WriteError(ex.Message, ex); } return(tet); }
private HKOrderRequest CreateNewType3Request(HKModifyOrderRequest request, HK_TodayEntrustInfo tet, float amount) { HKOrderRequest newRequest = new HKOrderRequest(); newRequest.BuySell = (Types.TransactionDirection)tet.BuySellTypeID; newRequest.ChannelID = tet.CallbackChannlID; newRequest.Code = request.Code; newRequest.FundAccountId = request.FundAccountId; newRequest.OrderAmount = amount; newRequest.OrderPrice = request.OrderPrice; newRequest.OrderUnitType = (Types.UnitType)tet.TradeUnitID; newRequest.OrderWay = Types.HKPriceType.LO; newRequest.PortfoliosId = tet.PortfolioLogo; newRequest.TraderId = request.TraderId; newRequest.TraderPassword = request.TraderPassword; return(newRequest); }
/// <summary> /// 增加一条数据 /// <param name="model"></param> /// </summary> public void Add(HK_TodayEntrustInfo model) { StringBuilder strSql = new StringBuilder(); strSql.Append("insert into HK_TodayEntrust("); strSql.Append("EntrustNumber,PortfolioLogo,EntrustPrice,EntrustAmount,Code,TradeAmount,TradeAveragePrice,CancelAmount,CancelLogo,BuySellTypeID,HoldAccount,CapitalAccount,OrderStatusID,OrderPriceType,OrderMessage,CurrencyTypeID,TradeUnitID,CallbackChannlID,McOrderID,HasDoneProfit,OfferTime,EntrustTime,IsModifyOrder,ModifyOrderNumber)"); strSql.Append(" values ("); strSql.Append("@EntrustNumber,@PortfolioLogo,@EntrustPrice,@EntrustAmount,@Code,@TradeAmount,@TradeAveragePrice,@CancelAmount,@CancelLogo,@BuySellTypeID,@HoldAccount,@CapitalAccount,@OrderStatusID,@OrderPriceType,@OrderMessage,@CurrencyTypeID,@TradeUnitID,@CallbackChannlID,@McOrderID,@HasDoneProfit,@OfferTime,@EntrustTime,@IsModifyOrder,@ModifyOrderNumber)"); Database db = DatabaseFactory.CreateDatabase(); DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString()); db.AddInParameter(dbCommand, "EntrustNumber", DbType.AnsiString, model.EntrustNumber); db.AddInParameter(dbCommand, "PortfolioLogo", DbType.AnsiString, model.PortfolioLogo); db.AddInParameter(dbCommand, "EntrustPrice", DbType.Decimal, model.EntrustPrice); db.AddInParameter(dbCommand, "EntrustAmount", DbType.Int32, model.EntrustAmount); db.AddInParameter(dbCommand, "Code", DbType.AnsiString, model.Code); db.AddInParameter(dbCommand, "TradeAmount", DbType.Int32, model.TradeAmount); db.AddInParameter(dbCommand, "TradeAveragePrice", DbType.Decimal, model.TradeAveragePrice); db.AddInParameter(dbCommand, "CancelAmount", DbType.Int32, model.CancelAmount); db.AddInParameter(dbCommand, "CancelLogo", DbType.Boolean, model.CancelLogo); db.AddInParameter(dbCommand, "BuySellTypeID", DbType.Int32, model.BuySellTypeID); db.AddInParameter(dbCommand, "HoldAccount", DbType.AnsiString, model.HoldAccount); db.AddInParameter(dbCommand, "CapitalAccount", DbType.AnsiString, model.CapitalAccount); db.AddInParameter(dbCommand, "OrderStatusID", DbType.Int32, model.OrderStatusID); db.AddInParameter(dbCommand, "OrderPriceType", DbType.Int32, model.OrderPriceType); db.AddInParameter(dbCommand, "OrderMessage", DbType.AnsiString, model.OrderMessage); db.AddInParameter(dbCommand, "CurrencyTypeID", DbType.Int32, model.CurrencyTypeID); db.AddInParameter(dbCommand, "TradeUnitID", DbType.Int32, model.TradeUnitID); db.AddInParameter(dbCommand, "CallbackChannlID", DbType.AnsiString, model.CallbackChannlID); db.AddInParameter(dbCommand, "McOrderID", DbType.AnsiString, model.McOrderID); db.AddInParameter(dbCommand, "HasDoneProfit", DbType.Decimal, model.HasDoneProfit); db.AddInParameter(dbCommand, "OfferTime", DbType.DateTime, model.OfferTime); db.AddInParameter(dbCommand, "EntrustTime", DbType.DateTime, model.EntrustTime); db.AddInParameter(dbCommand, "IsModifyOrder", DbType.Boolean, model.IsModifyOrder); db.AddInParameter(dbCommand, "ModifyOrderNumber", DbType.AnsiString, model.ModifyOrderNumber); db.ExecuteNonQuery(dbCommand); }
/// <summary> /// 处理撤单委托状态 /// </summary> /// <param name="tet">委托表</param> public static void ProcessCancelOrderStatus(HK_TodayEntrustInfo tet) { //未报,待报,已报的单,做废单处理 if (tet.OrderStatusID == (int)Types.OrderStateType.DOSUnRequired || tet.OrderStatusID == (int)Types.OrderStateType.DOSRequiredSoon || tet.OrderStatusID == (int)Types.OrderStateType.DOSIsRequired) { tet.OrderStatusID = (int)Types.OrderStateType.DOSCanceled; } //已报待撤的单:默认撤单成功,改状态为已撤 else if (tet.OrderStatusID == (int)Types.OrderStateType.DOSRequiredRemoveSoon) { tet.OrderStatusID = (int)Types.OrderStateType.DOSRemoved; } //部成,部成待撤的单:默认撤单成功,改状态为部撤 else if (tet.OrderStatusID == (int)Types.OrderStateType.DOSPartDealRemoveSoon || tet.OrderStatusID == (int)Types.OrderStateType.DOSPartDealed) { tet.OrderStatusID = (int)Types.OrderStateType.DOSPartRemoved; } //其他的保持原有状态 }
/// <summary> /// 构建港股委托单 /// </summary> /// <param name="order"></param> /// <param name="originalOrder"></param> /// <param name="strHoldingAccount"></param> /// <param name="strCapitalAccount"></param> /// <param name="iCurType"></param> /// <param name="modifyOrderNumber">原始委托单号</param> /// <param name="strMessage"></param> /// <param name="isModifyOrder">是否是改单</param> /// <returns></returns> public static string BuildHKOrder(ref HK_TodayEntrustInfo order, HKOrderRequest originalOrder, string strHoldingAccount, string strCapitalAccount, int iCurType, bool isModifyOrder, string modifyOrderNumber, ref string strMessage) { if (order == null) { order = new HK_TodayEntrustInfo(); } order.EntrustNumber = BuildHKOrderNo(); order.CurrencyTypeID = iCurType; order.TradeUnitID = (int)originalOrder.OrderUnitType; order.EntrustAmount = (int)originalOrder.OrderAmount; order.EntrustPrice = Convert.ToDecimal(originalOrder.OrderPrice); order.EntrustTime = DateTime.Now; order.OfferTime = DateTime.Now; order.OrderPriceType = (int)originalOrder.OrderWay; order.BuySellTypeID = (int)originalOrder.BuySell; order.OrderStatusID = (int)Types.OrderStateType.DOSUnRequired; if (strHoldingAccount == null) { strHoldingAccount = ""; } order.HoldAccount = strHoldingAccount.Trim(); if (strCapitalAccount == null) { strCapitalAccount = ""; } order.CapitalAccount = strCapitalAccount.Trim(); if (originalOrder.PortfoliosId == null) { originalOrder.PortfoliosId = ""; } order.PortfolioLogo = originalOrder.PortfoliosId.Trim(); if (originalOrder.Code == null) { originalOrder.Code = ""; } order.Code = originalOrder.Code.Trim(); order.TradeAmount = 0; order.TradeAveragePrice = 0; order.CancelAmount = 0; order.CancelLogo = true; if (originalOrder.ChannelID == null) { originalOrder.ChannelID = ""; } order.CallbackChannlID = originalOrder.ChannelID.Trim(); order.IsModifyOrder = isModifyOrder; order.ModifyOrderNumber = modifyOrderNumber; order.OrderMessage = ""; order.McOrderID = ""; CheckEntrustLength(order); #if (DEBUG) LogHelper.WriteDebug("HKCommonLogic.BuildHKOrder:" + order); #endif HK_TodayEntrustDal dal = new HK_TodayEntrustDal(); dal.Add(order); return(order.EntrustNumber); }
/// <summary> /// 对象实体绑定数据 /// <param name="dataReader"></param> /// </summary> public HK_TodayEntrustInfo ReaderBind(IDataReader dataReader) { HK_TodayEntrustInfo model = new HK_TodayEntrustInfo(); object ojb; model.EntrustNumber = dataReader["EntrustNumber"].ToString(); model.PortfolioLogo = dataReader["PortfolioLogo"].ToString(); ojb = dataReader["EntrustPrice"]; if (ojb != null && ojb != DBNull.Value) { model.EntrustPrice = (decimal)ojb; } ojb = dataReader["EntrustAmount"]; if (ojb != null && ojb != DBNull.Value) { model.EntrustAmount = (int)ojb; } model.Code = dataReader["Code"].ToString(); ojb = dataReader["TradeAmount"]; if (ojb != null && ojb != DBNull.Value) { model.TradeAmount = (int)ojb; } ojb = dataReader["TradeAveragePrice"]; if (ojb != null && ojb != DBNull.Value) { model.TradeAveragePrice = (decimal)ojb; } ojb = dataReader["CancelAmount"]; if (ojb != null && ojb != DBNull.Value) { model.CancelAmount = (int)ojb; } ojb = dataReader["CancelLogo"]; if (ojb != null && ojb != DBNull.Value) { model.CancelLogo = (bool)ojb; } ojb = dataReader["BuySellTypeID"]; if (ojb != null && ojb != DBNull.Value) { model.BuySellTypeID = (int)ojb; } model.HoldAccount = dataReader["HoldAccount"].ToString(); model.CapitalAccount = dataReader["CapitalAccount"].ToString(); ojb = dataReader["OrderStatusID"]; if (ojb != null && ojb != DBNull.Value) { model.OrderStatusID = (int)ojb; } ojb = dataReader["OrderPriceType"]; if (ojb != null && ojb != DBNull.Value) { model.OrderPriceType = (int)ojb; } model.OrderMessage = dataReader["OrderMessage"].ToString(); ojb = dataReader["CurrencyTypeID"]; if (ojb != null && ojb != DBNull.Value) { model.CurrencyTypeID = (int)ojb; } ojb = dataReader["TradeUnitID"]; if (ojb != null && ojb != DBNull.Value) { model.TradeUnitID = (int)ojb; } model.CallbackChannlID = dataReader["CallbackChannlID"].ToString(); model.McOrderID = dataReader["McOrderID"].ToString(); ojb = dataReader["HasDoneProfit"]; if (ojb != null && ojb != DBNull.Value) { model.HasDoneProfit = (decimal)ojb; } ojb = dataReader["OfferTime"]; if (ojb != null && ojb != DBNull.Value) { model.OfferTime = (DateTime)ojb; } ojb = dataReader["EntrustTime"]; if (ojb != null && ojb != DBNull.Value) { model.EntrustTime = (DateTime)ojb; } ojb = dataReader["IsModifyOrder"]; if (ojb != null && ojb != DBNull.Value) { model.IsModifyOrder = (bool)ojb; } model.ModifyOrderNumber = dataReader["ModifyOrderNumber"].ToString(); return(model); }
/// <summary> /// 构建港股成交回报 /// </summary> /// <param name="tet"></param> /// <param name="sdbe"></param> /// <param name="xhcr"></param> /// <param name="dealCapital"></param> /// <param name="tm"></param> /// <returns></returns> public static HK_TodayTradeInfo BuildHKDealRpt(HK_TodayEntrustInfo tet, HKDealBackEntity sdbe, HKCostResult xhcr, decimal dealCapital, ReckoningTransaction tm) { string result = string.Empty; //成交回报实体 var hkDealRpt = new HK_TodayTradeInfo(); //xhDealrpt.TradeNumber = this.BuildXHDealOrderNo(); hkDealRpt.TradeNumber = sdbe.ID; //不再自己构建id,使用成交回报的id,一一对应 //成交时间 hkDealRpt.TradeTime = sdbe.DealTime; //成交价 hkDealRpt.TradePrice = sdbe.DealPrice; //成交单位 hkDealRpt.TradeUnitId = tet.TradeUnitID; //成交量 hkDealRpt.TradeAmount = Convert.ToInt32(sdbe.DealAmount); //股东代码 hkDealRpt.HoldAccount = tet.HoldAccount; //资金帐户 hkDealRpt.CapitalAccount = tet.CapitalAccount; //成交回报类型 hkDealRpt.TradeTypeId = (int)Types.DealRptType.DRTDealed; //现货名称 hkDealRpt.Code = tet.Code; //印花税 hkDealRpt.StampTax = xhcr.StampDuty; //佣金 hkDealRpt.Commission = xhcr.Commision; //过户费 hkDealRpt.TransferAccountFee = xhcr.TransferToll; //交易系统使用费 hkDealRpt.TradingSystemUseFee = xhcr.TradeSystemFees; //交易手续费用(只有港股才有) hkDealRpt.TradeProceduresFee = xhcr.PoundageSingleValue; //监管费 hkDealRpt.MonitoringFee = xhcr.MonitoringFee; //结算费 hkDealRpt.ClearingFee = xhcr.ClearingFees; //委托价格 hkDealRpt.EntrustPrice = tet.EntrustPrice; //成交金额 hkDealRpt.TradeCapitalAmount = dealCapital; // xhDealrpt.TradePrice*xhDealrpt.TradeAmount;//TODO:是否正确?没有算比例 //投组标识 hkDealRpt.PortfolioLogo = tet.PortfolioLogo; //货币类型 hkDealRpt.CurrencyTypeId = tet.CurrencyTypeID; //买卖方向 hkDealRpt.BuySellTypeId = tet.BuySellTypeID; hkDealRpt.EntrustNumber = tet.EntrustNumber; HK_TodayTradeDal hkTodayTradeDal = new HK_TodayTradeDal(); if (hkTodayTradeDal.Exists(hkDealRpt.TradeNumber)) { string format = "BuildHKDealRpt数据库已经存在TradeNumber={0}"; string desc = string.Format(format, hkDealRpt.TradeNumber); LogHelper.WriteDebug(desc); //xhDealrpt = xhTodayTradeTableDal.GetModel(xhDealrpt.TradeNumber); return(null); } try { hkTodayTradeDal.Add(hkDealRpt, tm); } catch (Exception ex) { LogHelper.WriteError(ex.Message, ex); hkDealRpt = null; } return(hkDealRpt); }
/// <summary> /// 构建港股撤单成交回报 /// </summary> /// <param name="tet"></param> /// <param name="rde"></param> /// <param name="tm"></param> /// <param name="trade"></param> /// <param name="isInternalCancel"></param> /// <returns></returns> public static string BuildHKCancelRpt(HK_TodayEntrustInfo tet, CancelOrderEntity rde, ReckoningTransaction tm, out HK_TodayTradeInfo trade, bool isInternalCancel) { string result = string.Empty; //当为价格错误的撤单时,直接作为废单,不记录到数据库中。 if (rde.OrderVolume == -1) { trade = null; return(result); } //成交回报实体 var hkDealrpt = new HK_TodayTradeInfo(); //xhDealrpt.TradeNumber = this.BuildXHDealOrderNo(); hkDealrpt.TradeNumber = rde.Id; //不再自己构建id,使用撤单回报的id,一一对应 //成交时间 hkDealrpt.TradeTime = DateTime.Now; //成交价 hkDealrpt.TradePrice = 0; //成交单位 hkDealrpt.TradeUnitId = tet.TradeUnitID; //成交量 hkDealrpt.TradeAmount = Convert.ToInt32(rde.OrderVolume); //股东代码 hkDealrpt.HoldAccount = tet.HoldAccount; //资金帐户 hkDealrpt.CapitalAccount = tet.CapitalAccount; //成交回报类型 if (isInternalCancel) { hkDealrpt.TradeTypeId = (int)Types.DealRptType.DRTInternalCanceled; } else { hkDealrpt.TradeTypeId = (int)Types.DealRptType.DRTCanceled; } //现货名称 hkDealrpt.Code = tet.Code; //印花税 hkDealrpt.StampTax = 0; //佣金 hkDealrpt.Commission = 0; //过户费 hkDealrpt.TransferAccountFee = 0; //交易系统使用费 hkDealrpt.TradingSystemUseFee = 0; //监管费 hkDealrpt.MonitoringFee = 0; hkDealrpt.ClearingFee = 0; //委托价格 hkDealrpt.EntrustPrice = tet.EntrustPrice; //成交金额 hkDealrpt.TradeCapitalAmount = hkDealrpt.TradePrice * hkDealrpt.TradeAmount; //投组标识 hkDealrpt.PortfolioLogo = tet.PortfolioLogo; //货币类型 hkDealrpt.CurrencyTypeId = tet.CurrencyTypeID; //买卖方向 hkDealrpt.BuySellTypeId = tet.BuySellTypeID; hkDealrpt.EntrustNumber = tet.EntrustNumber; HK_TodayTradeDal hkTodayTradeDal = new HK_TodayTradeDal(); hkTodayTradeDal.Add(hkDealrpt, tm); result = hkDealrpt.TradeNumber; trade = hkDealrpt; return(result); }
/// <summary> /// 根据改单请求和改单类型,改单委托的买卖方向,检验相关验证方法 /// </summary> /// <param name="hkModifyOrder"></param> /// <param name="modifyType"></param> /// <param name="entrusInfo"></param> /// <param name="strMessage"></param> /// <returns></returns> public bool Validate(HKModifyOrderRequest hkModifyOrder, HK_TodayEntrustInfo entrusInfo, int breedClassID, ref string strMessage) { BreedClassID = breedClassID; bool reust = false; int modifyType = 0; //改单类型 #region 判断改单类型 //未注报 if (entrusInfo.OrderStatusID == (int)Types.OrderStateType.DOSUnRequired) { modifyType = 1; } //已报、部成 if (entrusInfo.OrderStatusID == (int)Types.OrderStateType.DOSIsRequired || entrusInfo.OrderStatusID == (int)Types.OrderStateType.DOSPartDealed) { if ((decimal)hkModifyOrder.OrderPrice == entrusInfo.EntrustPrice && hkModifyOrder.OrderAmount < entrusInfo.EntrustAmount) { modifyType = 2; } else { modifyType = 3; } } #endregion if (modifyType == 0) { strMessage = "GT-2250:[港股改单委托验证]当前委托无法改单"; return(false); } #region 为适用之前的方法组装下单请求实体 HKOrderRequest request = new HKOrderRequest(); request.Code = hkModifyOrder.Code; request.ChannelID = hkModifyOrder.ChannelID; request.BuySell = (CommonObject.Types.TransactionDirection)entrusInfo.BuySellTypeID; request.OrderAmount = hkModifyOrder.OrderAmount; request.OrderPrice = hkModifyOrder.OrderPrice; request.FundAccountId = entrusInfo.CapitalAccount; request.OrderUnitType = (GTA.VTS.Common.CommonObject.Types.UnitType)entrusInfo.TradeUnitID; request.OrderWay = (GTA.VTS.Common.CommonObject.Types.HKPriceType)entrusInfo.OrderPriceType; #endregion #region 1.零股检验 //零股检验 HKStockZeroVolumeOfBusinessCommand zerovolume = new HKStockZeroVolumeOfBusinessCommand(BreedClassID); reust = zerovolume.Validate(request, ref strMessage); if (!reust) { return(false); } #endregion #region 2.单笔最大委托量检验命令 //单笔最大委托量检验命令 HKStockMaxLeaveQuantityRangeValueCommand maxLeave = new HKStockMaxLeaveQuantityRangeValueCommand(BreedClassID); reust = maxLeave.Validate(request, ref strMessage); if (!reust) { return(false); } #endregion #region 3.不是第二种类型量减的并且价格有改动的验证最小变动价格 //不是第二种类型量减的并且价格有改动的验证最小变动价格 if (modifyType != 2 && (decimal)hkModifyOrder.OrderPrice != entrusInfo.EntrustPrice) { HKStockMinChangePriceValueCommand minChange = new HKStockMinChangePriceValueCommand(BreedClassID); reust = minChange.Validate(request, ref strMessage); if (!reust) { return(false); } } #endregion #region 委托量有所改变则验证相关持仓(宋涛1116:此处不需要进行校验,等待原委托撤单成功后,由新单校验处检验) ////if (modifyType != 2) //{ //if (hkModifyOrder.OrderAmount != entrusInfo.EntrustAmount) //{ // if (entrusInfo.BuySellTypeID == (int)Types.TransactionDirection.Buying) // { // reust = PO_HoldValidate_Buy(ref strMessage, entrusInfo, request); // } // else // { // reust = PO_HoldValidate_Sell(ref strMessage, entrusInfo, request); // } // if (!reust) // { // return false; // } //} ////} //不考虑持仓量,只考虑委托最小单位的验证 HKModifyStockMinVolumeOfBusinessCommand minVolume = new HKModifyStockMinVolumeOfBusinessCommand(BreedClassID); reust = minVolume.Validate(request, ref strMessage); if (!reust) { return(false); } #endregion return(true); }
public OrderResponse Process(HKModifyOrderRequest hkOrder) { LogHelper.WriteDebug("M——>ModifyOrderProcessor.Process接收改单入口" + hkOrder); bool canModifyOrder = false; OrderResponse orResult = new OrderResponse(); string strErrorMessage = ""; //hkOrder.ID = HKCommonLogic.BuildHKOrderNo(); hkOrder.ID = Guid.NewGuid().ToString(); #region 原始单位及成交量转换 var code = hkOrder.Code; var oriUnitType = hkOrder.OrderUnitType; decimal scale; Types.UnitType matchUnitType; bool canConvert = OrderAccepter.ConvertUnitType(Types.BreedClassTypeEnum.HKStock, code, oriUnitType, out scale, out matchUnitType); if (!canConvert) { strErrorMessage = @"GT-2450:[港股委托]无法进行行情单位转换."; goto EndProcess; } LogHelper.WriteDebug("委托单:" + hkOrder.EntrustNubmer + "当前改单获取到的转换倍数为: " + scale); hkOrder.OrderUnitType = matchUnitType; hkOrder.OrderAmount = hkOrder.OrderAmount * (float)scale; #endregion //记录改单操作记录数据 bool canSave = HKDataAccess.AddHKModifyOrderRequest(hkOrder); if (!canSave) { strErrorMessage = @"GT-2451:[港股改单委托]无法保持改单委托,请查看错误日志."; LogHelper.WriteInfo(strErrorMessage + "," + hkOrder); goto EndProcess; } #region 校验 if ((string.IsNullOrEmpty(hkOrder.TraderId) && string.IsNullOrEmpty(hkOrder.FundAccountId))) { strErrorMessage = @"GT-2452:[港股改单委托]交易员ID或资金帐户无效."; LogHelper.WriteInfo(strErrorMessage + "," + hkOrder); goto EndProcess; } //柜台委托时间判断 if (!ValidateCenter.IsCountTradingTime(Types.BreedClassTypeEnum.HKStock, hkOrder.Code, ref strErrorMessage)) { LogHelper.WriteInfo("ModifyOrderProcessor.Process" + strErrorMessage); string oriMsg = "当前时间不接受委托"; if (strErrorMessage.Length > 0) { oriMsg = strErrorMessage; } strErrorMessage = @"GT-2453:[港股改单委托]" + oriMsg; LogHelper.WriteInfo(strErrorMessage + "," + hkOrder); goto EndProcess; } HK_TodayEntrustInfo tet = HKDataAccess.GetTodayEntrustTable(hkOrder.EntrustNubmer); if (tet == null) { strErrorMessage = "GT-2454:[港股改单委托]无委托对象信息"; LogHelper.WriteInfo(strErrorMessage + "," + hkOrder); goto EndProcess; } if ((float)tet.EntrustPrice == hkOrder.OrderPrice && tet.EntrustAmount == (int)hkOrder.OrderAmount) { strErrorMessage = "GT-2455:[港股改单委托]无效改单,改单量、改单价与原始委托相同"; LogHelper.WriteInfo(strErrorMessage + "," + hkOrder); goto EndProcess; } //港股改单规则检验,这里有些与真实下单有些重复,但这样可以提高改单的成功率 if (!McValidater.GetInstance().ValidateHKModifyOrderRule(hkOrder, tet, ref strErrorMessage)) { LogHelper.WriteInfo(strErrorMessage + "," + hkOrder); goto EndProcess; } #endregion //未报 if (tet.OrderStatusID == (int)Entity.Contants.Types.OrderStateType.DOSUnRequired) { ProcessType1(hkOrder); canModifyOrder = true; goto EndProcess; } #region 已报、部成 if (tet.OrderStatusID == (int)Entity.Contants.Types.OrderStateType.DOSIsRequired || tet.OrderStatusID == (int)Entity.Contants.Types.OrderStateType.DOSPartDealed) { //如果不在交易时间内,那么直接到缓存中删除原来的委托,生成新委托 if (!ValidateCenter.IsMatchTradingTime(Types.BreedClassTypeEnum.HKStock, hkOrder.Code)) { strErrorMessage = "GT-2456:[港股改单委托]不在交易时间内"; LogHelper.WriteInfo(strErrorMessage + "," + hkOrder); goto EndProcess; } if ((decimal)hkOrder.OrderPrice == tet.EntrustPrice && hkOrder.OrderAmount < tet.EntrustAmount) { ProcessType2(hkOrder); canModifyOrder = true; } else { ProcessType3(hkOrder); canModifyOrder = true; goto EndProcess; } } #endregion EndProcess: //结束 if (canModifyOrder) { hkOrder.ModifyOrderDateTime = DateTime.Now; orResult.OrderDatetime = DateTime.Now; } else { int type = 0; bool canGetErrorCode = Utils.GetErrorCode(strErrorMessage, out type); if (canGetErrorCode) { orResult.ErrorType = type; } hkOrder.Message = strErrorMessage; orResult.OrderMessage = strErrorMessage; } //更新改单委托 HKDataAccess.UpdateModifyOrderRequest(hkOrder); orResult.IsSuccess = canModifyOrder; orResult.OrderId = hkOrder.ID; return(orResult); }
/// <summary> /// 买持仓检查 /// </summary> /// <param name="strMessage"></param> /// <param name="hkEntrustInfo"></param> /// <param name="request"></param> /// <returns></returns> private bool PO_HoldValidate_Buy(ref string strMessage, HK_TodayEntrustInfo hkEntrustInfo, HKOrderRequest request) { bool result = false; strMessage = ""; int position = 0; decimal freezeAmount = 0; //var ahtMemory = MemoryDataManager.HKHoldMemoryList.GetByAccountHoldLogoId(HoldingAccountId); //if (ahtMemory == null) //{ var ahtMemory = HKCommonLogic.GetHoldMemoryTable(hkEntrustInfo.HoldAccount, hkEntrustInfo.Code, hkEntrustInfo.CurrencyTypeID); //} if (ahtMemory != null && ahtMemory.Data != null) { var aht = ahtMemory.Data; position = Convert.ToInt32(aht.AvailableAmount); freezeAmount = aht.FreezeAmount; } else { position = 0; freezeAmount = 0; } HKStockMinVolumeOfBusinessCommand command = new HKStockMinVolumeOfBusinessCommand(BreedClassID, position); result = command.Validate(request, ref strMessage); // if (ValidateCenter.ValidateHKMinVolumeOfBusiness(request, position, ref strMessage)) if (result) { //获取持仓限制 Decimal pLimit = MCService.GetPositionLimit(request.Code, CommonObject.Types.BreedClassTypeEnum.HKStock).PositionValue; //可用持仓+冻结量+委托量<持仓限制 //这里是改单,所以要把之前的委托减去 result = pLimit >= position + freezeAmount + Convert.ToDecimal(request.OrderAmount - hkEntrustInfo.EntrustAmount); if (!result) { strMessage = "GT-2419:[港股改单委托验证]可用持仓+冻结量+委托量<持仓限制--港股改单委托失败"; } } else { strMessage += "--港股改单委托失败"; } //成功时需要清空错误信息。 if (result) { strMessage = ""; } return(result); }
/// <summary> /// 构造器 /// </summary> /// <param name="original"></param> public HkTodayEntrustEx(HK_TodayEntrustInfo original) { OriginalEntity = original; }
/// <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); }