private void Execute(Transaction tran, bool shouldCancelExecute, ExecuteContext oldContext)
        {
            try
            {
                ExecuteContext context = new ExecuteContext(tran.AccountId, tran.Id, ExecuteStatus.Filled, tran.CreateOrderPriceInfo())
                {
                    BookInfo         = oldContext.BookInfo,
                    IsFreeValidation = oldContext.IsFreeValidation
                };

                if (context.Tran.IsPhysical)
                {
                    string errorDetail = string.Empty;
                    if (context.CheckMaxPhysicalValue && PhysicalValueChecker.IsExceedMaxPhysicalValue((PhysicalTransaction)tran, context.TradeDay, out errorDetail))
                    {
                        throw new TransactionServerException(TransactionError.ExceedMaxPhysicalValue, errorDetail);
                    }
                }
                context.Tran.Execute(context);
            }
            catch (TransactionServerException tse)
            {
                tran.Owner.RejectChanges();
                tran.Cancel(tse.ErrorCode.ToCancelReason());
                throw;
            }
            catch
            {
                tran.Owner.RejectChanges();
                tran.Cancel(TransactionError.RuntimeError.ToCancelReason());
                throw;
            }
        }
示例#2
0
        private static void VerifyIsExceedMaxPhysicalValue(Transaction tran, bool checkMaxPhysicalValue)
        {
            string errorDetail = string.Empty;

            if (checkMaxPhysicalValue && PhysicalValueChecker.IsExceedMaxPhysicalValue((PhysicalTransaction)tran, out errorDetail))
            {
                throw new TransactionServerException(TransactionError.ExceedMaxPhysicalValue, errorDetail);
            }
        }
示例#3
0
        private void ExecuteTransaction(ExecuteContext context)
        {
            var tran = context.Tran;

            if (!context.IsBook && tran.IsPhysical && PhysicalShortSellOrderCloser.Default.ShouldExecuteInstallmentOrderWithShortSellOrder(tran))
            {
                PhysicalShortSellOrderCloser.Default.ExecuteInstallmentOrderWithShortSellOrder(context);
            }
            else
            {
                if (context.Tran.IsPhysical)
                {
                    string errorDetail = string.Empty;
                    if (context.CheckMaxPhysicalValue && PhysicalValueChecker.IsExceedMaxPhysicalValue((PhysicalTransaction)tran, context.TradeDay, out errorDetail))
                    {
                        throw new TransactionServerException(TransactionError.ExceedMaxPhysicalValue, errorDetail);
                    }
                }
                context.Tran.Execute(context);
            }
        }