/// <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);
        }
示例#2
0
 /// <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));
 }
示例#3
0
        /// <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);
            }
        }
示例#4
0
        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);
        }
示例#5
0
        /// <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);
        }
示例#9
0
        //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);
        }
示例#10
0
 /// <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);
        }
示例#12
0
        /// <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);
            }
        }
示例#13
0
        /// <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;
        }
示例#15
0
        /// <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);
        }
示例#16
0
        /// <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);
        }
示例#19
0
        /// <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;
            }

            //其他的保持原有状态
        }
示例#20
0
        /// <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);
        }
示例#22
0
        /// <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);
        }
示例#23
0
        /// <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);
        }