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