예제 #1
0
 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;
     }));
 }
예제 #4
0
 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;
     }));
 }
예제 #5
0
 public Task <IReadOnlyList <Trade> > GetAsync(DateTime startDate, DateTime endDate)
 {
     return(_tradeRepository.GetAsync(startDate, endDate));
 }
예제 #6
0
 public Task <IReadOnlyCollection <Trade> > GetTradesAsync(DateTime startDate, DateTime endDate, int limit)
 {
     return(_tradeRepository.GetAsync(startDate, endDate, limit));
 }