public async Task Process(CustomerRechargedEvent eto)
        {
            using (var trans = _uow.GetDbContextTransaction())
            {
                var transLog = await _cusTranlog.FindAsync(eto.Data.TransactionLogId);

                if (transLog == null || transLog.ExchageStatus == "20")
                {
                    return;
                }

                var finance = await _cusFinanceReop.FindAsync(eto.Data.CustomerId);

                var newBalance = finance.Balance + eto.Data.Amount;

                transLog.ExchageStatus  = "20";
                transLog.ChangingAmount = finance.Balance;
                transLog.ChangedAmount  = newBalance;


                await _cusFinanceReop.UpdateAsync(new CusFinance()
                {
                    Id = finance.Id, Balance = newBalance
                }, UpdatingProps <CusFinance>(t => t.Balance));

                await _cusTranlog.UpdateAsync(transLog, UpdatingProps <CusTransactionLog>(t => t.ExchageStatus, t => t.ChangingAmount, t => t.ChangedAmount));

                _uow.Commit();
            }
        }
Beispiel #2
0
    /// <summary>
    /// 处理充值
    /// </summary>
    /// <param name="eventDto"></param>
    /// <param name="tracker"></param>
    /// <returns></returns>
    public async Task <AppSrvResult> ProcessRechargingAsync(CustomerRechargedEvent eventDto, IMessageTracker tracker)
    {
        var customerId       = eventDto.Data.CustomerId;
        var amount           = eventDto.Data.Amount;
        var transactionLogId = eventDto.Data.TransactionLogId;

        var transLog = await _cusTransactionLogRepo.FindAsync(transactionLogId, noTracking : false);

        if (transLog is null)
        {
            return(AppSrvResult());
        }

        var finance = await _cusFinaceRepo.FindAsync(customerId, noTracking : false);

        var originalBalance = finance.Balance;
        var newBalance      = originalBalance + amount;

        finance.Balance = newBalance;
        await _cusFinaceRepo.UpdateAsync(finance);

        transLog.ExchageStatus  = ExchageStatusEnum.Finished;
        transLog.ChangingAmount = originalBalance;
        transLog.ChangedAmount  = newBalance;
        await _cusTransactionLogRepo.UpdateAsync(transLog);

        await tracker?.MarkAsProcessedAsync(eventDto);

        return(AppSrvResult());
    }
Beispiel #3
0
    public async Task ProcessCustomerRechargedEvent(CustomerRechargedEvent eventDto)
    {
        eventDto.EventTarget = nameof(ProcessCustomerRechargedEvent);
        var hasProcessed = await _tracker.HasProcessedAsync(eventDto);

        if (!hasProcessed)
        {
            await _customerSrv.ProcessRechargingAsync(eventDto, _tracker);
        }
    }
Beispiel #4
0
 public async Task ProcessCustomerRechargedEvent(CustomerRechargedEvent eto)
 {
     using var scope = _services.CreateScope();
     var appSrv = scope.ServiceProvider.GetRequiredService <ICustomerAppService>();
     await appSrv.ProcessRechargingAsync(eto.Data.TransactionLogId, eto.Data.CustomerId, eto.Data.Amount);
 }