public override async Task Handle(TradeRollbackDto input) { await HandleAsync(input, async() => { //获取交易对象 var trade = await tradeRepository.GetAsync(x => x.UserId == input.UserId); if (trade == null) { throw new ApplicationException("没有找到账户交易信息!"); } //执行款项变更 trade.OperationBalance(input.TotalPrice); //添加交易流水 var record = new TradeRecordFactory().Create(trade.Id, input.TotalPrice); using (var tran = transaction.BeginTransaction()) { //仓储添加 tradeRepository.Update(trade); tradeRecordRepository.Add(record); //工作单元持久化 await tradeRepository.SaveAsync(); tran.Commit(); } }); }
public async Task <IActionResult> GetByIdAsync(int id) { Trade trade; try { trade = await _tradeRepository.GetAsync(id); } catch (InvalidOperationException e) { _logger.LogInformation(e, $"Found no trade entry with id: {id}."); return(NotFound(e.Message)); } _logger.LogInformation("Fetched trade.", trade); return(Ok(trade)); }
public override async Task <BaseApiResult <MyAccountResponse> > Query(MyAccountBalanceDto input) { return(await HandleAsync(input, async() => { var trade = await tradeRepository.GetAsync(x => x.UserId == input.UserId); if (trade == null) { throw new ApplicationException("没有找到账户资金信息!"); } var result = new MyAccountResponse() { Balance = trade?.Balance ?? 0, Records = (await recordRepository.GetManyAsync(x => x.TradeId == trade.Id)).OrderByDescending(x => x.TradeTime).Select(x => new BalanceRecord() { Content = $"{(x.TradeType==TradeTypeEnum.Recharge?"充值":"扣款")}{x.Amount}元", Time = x.TradeTime }).ToList() }; return result; })); }
public async Task <BaseApiResult <bool> > Excute(AccountRechargeDto input) { return(await HandleAsync(input, async() => { //获取交易对象 var trade = await tradeRepository.GetAsync(x => x.UserId == input.UserId); if (trade == null) { throw new ApplicationException("没有找到账户交易信息!"); } //执行款项变更 trade.OperationBalance(input.RechargeBalance); //获取用户状态 var userState = (await getUserState.Query(new BaseAuthDto() { UserId = input.UserId })).Data; //添加交易流水 var record = new TradeRecordFactory().Create(trade.Id, input.RechargeBalance); //规约校验 if (await new AccountRechargeCreateSpecification((UserStateEnum)userState.State).SatisfiedBy(trade)) { using (var tran = transaction.BeginTransaction()) { //仓储添加 tradeRepository.Update(trade); tradeRecordRepository.Add(record); //工作单元持久化 await tradeRepository.SaveAsync(); tran.Commit(); return true; } } return false; })); }
public Task <IReadOnlyList <Trade> > GetAsync(DateTime startDate, DateTime endDate) { return(_tradeRepository.GetAsync(startDate, endDate)); }
public Task <IReadOnlyCollection <Trade> > GetTradesAsync(DateTime startDate, DateTime endDate, int limit) { return(_tradeRepository.GetAsync(startDate, endDate, limit)); }