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(); } }
/// <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()); }
public async Task ProcessCustomerRechargedEvent(CustomerRechargedEvent eventDto) { eventDto.EventTarget = nameof(ProcessCustomerRechargedEvent); var hasProcessed = await _tracker.HasProcessedAsync(eventDto); if (!hasProcessed) { await _customerSrv.ProcessRechargingAsync(eventDto, _tracker); } }
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); }