Example #1
0
        /// <summary>
        /// 2.3 从转账交易聚合根,收到转账交易已取消的领域事件,通知银行账户聚合根释放在途交易。
        /// </summary>
        /// <param name="context">事件处理上下文</param>
        /// <param name="event">交易信息已准备就绪的领域事件</param>
        public void OnDomainEvent(IDomainEventingContext context, TransferTransactionCancelledDomainEvent @event)
        {
            var sourceAccount = @event.SourceAccount;
            var sinkAccount   = @event.SinkAccount;

            if (!sourceAccount.Validated)
            {
                context.PublishDomainCommand(new FreeTransferAccountTransactionDomainCommand(sourceAccount.Id, @event.AggregateRootId));
            }

            if (!sinkAccount.Validated)
            {
                context.PublishDomainCommand(new FreeTransferAccountTransactionDomainCommand(sinkAccount.Id, @event.AggregateRootId));
            }
        }
        public async Task OnDomainEventAsync(IDomainEventingContext context, TransferTransactionCancelledDomainEvent @event, CancellationToken token = default)
        {
            var updateWithdrawSql = $"UPDATE `{Tables.AccountOutTransactions}` SET `Status`=@Status,`Message`=@Message WHERE `Id`=@TransactionId;";
            var updateDepositSql  = $"UPDATE `{Tables.AccountInTransactions}` SET `Status`=@Status,`Message`=@Message WHERE `Id`=@TransactionId;";

            var po = new
            {
                TransactionId = @event.AggregateRootId.Id,
                Status        = @event.Status.ToString(),
                Message       = @event.Message.SetEmptyStringWhenNull()
            };

            await _db.ExecuteAsync(updateWithdrawSql, po, token);

            await _db.ExecuteAsync(updateDepositSql, po, token);
        }