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 <Result <TradeRecord> > CreateTradeRecordAsync(string houseId, string sellerId, string buyerId, string description = null) { Result check = await _tradeCenterDomainService.CanTradeAsync(houseId); if (!check.Succeed) { return(Result <TradeRecord> .Fail(check.Message)); } TradeRecord tradeRecord = new TradeRecord(houseId, sellerId, buyerId, description); _tradeRecordRepository.Add(tradeRecord); if (await _unitOfWork.CommitAsync()) { // send event to house and wait await _publisher.Publish(new HouseTradedEvent(houseId, buyerId), PublishStrategy.ParallelNoWait); } return(Result <TradeRecord> .Success(tradeRecord)); }
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 void Add(TradeRecord obj) { _tradeRecordRepository.Add(obj); }