public async Task CompleteAuctionAndGenerateOrder() { var itemsToBeCompletedQuery = _itemAuctioningRepository.GetAll().Where(i => i.Deadline <= DateTime.Now); var random = new Random(); foreach (var itemAuctioning in itemsToBeCompletedQuery) { // get bidding var bidding = await _biddingRepository.GetAll().Where(b => b.ItemId == itemAuctioning.Id) .OrderByDescending(b => b.CreationTime).FirstOrDefaultAsync(); if (bidding == null) { continue; } // get buyer and seller User buyer = null, seller = null; if (bidding.CreatorUserId != null) { buyer = await _userRepository.GetAsync(bidding.CreatorUserId.Value); } if (itemAuctioning.CreatorUserId != null) { seller = await _userRepository.GetAsync(itemAuctioning.CreatorUserId.Value); } // get address var address = await _addressRepository.GetAll().Where(a => a.CreatorUserId.Value == buyer.Id && a.IsDefault).FirstOrDefaultAsync(); // create order if (buyer != null && seller != null) { var order = new OrderWaitingForPayment { Code = DateTime.Now.Ticks + random.Next(0, 99999).ToString().PadLeft(5, '0'), //AddressId = address.Id, Amount = bidding.Price, ItemPriceAmount = bidding.Price, BuyerId = buyer.Id, SellerId = seller.Id, OrderTime = DateTime.Now, ItemId = itemAuctioning.Id }; await _orderRepository.InsertAsync(order); } // change item status var itemComplete = new ItemCompleted { Id = itemAuctioning.Id, Code = itemAuctioning.Code, PillarId = itemAuctioning.PillarId, CategoryId = itemAuctioning.CategoryId, StartPrice = itemAuctioning.StartPrice, StepPrice = itemAuctioning.StepPrice, PriceLimit = itemAuctioning.PriceLimit, StartTime = itemAuctioning.StartTime, Title = itemAuctioning.Title, Description = itemAuctioning.Description, BiddingCount = itemAuctioning.BiddingCount, HighestBiddingPrice = itemAuctioning.HighestBiddingPrice }; await _itemCompleteRepository.InsertAsync(itemComplete); await _itemAuctioningRepository.DeleteAsync(itemAuctioning.Id); } }
public async Task CompleteAuction(EntityDto <Guid> input) { // get bidding var itemAuctioning = await _itemAuctioningRepository.FirstOrDefaultAsync(input.Id); if (itemAuctioning == null) { throw new UserFriendlyException("此ID的货品不存在"); } var bidding = await _biddingRepository.GetAll().Where(b => b.ItemId == itemAuctioning.Id) .OrderByDescending(b => b.CreationTime).FirstOrDefaultAsync(); if (bidding == null) { throw new UserFriendlyException("没有人出价,请手动流拍"); } // get buyer and seller User buyer = null, seller = null; if (bidding.CreatorUserId != null) { buyer = await _userRepository.GetAsync(bidding.CreatorUserId.Value); } if (itemAuctioning.CreatorUserId != null) { seller = await _userRepository.GetAsync(itemAuctioning.CreatorUserId.Value); } // get address var address = await _addressRepository.GetAll().Where(a => a.CreatorUserId.Value == buyer.Id && a.IsDefault).FirstOrDefaultAsync(); // create order var random = new Random(); if (buyer != null && seller != null) { var order = new OrderWaitingForPayment { Code = DateTime.Now.Ticks + random.Next(0, 99999).ToString().PadLeft(5, '0'), BuyerId = buyer.Id, SellerId = seller.Id, AddressId = address.Id, Amount = bidding.Price, ItemPriceAmount = bidding.Price, OrderTime = DateTime.Now, ItemId = itemAuctioning.Id }; await _orderRepository.InsertAsync(order); } // change item status var itemComplete = new ItemCompleted { Id = itemAuctioning.Id, Code = itemAuctioning.Code, PillarId = itemAuctioning.PillarId, CategoryId = itemAuctioning.CategoryId, StartPrice = itemAuctioning.StartPrice, StepPrice = itemAuctioning.StepPrice, PriceLimit = itemAuctioning.PriceLimit, StartTime = itemAuctioning.StartTime, Title = itemAuctioning.Title, Description = itemAuctioning.Description, BiddingCount = itemAuctioning.BiddingCount, HighestBiddingPrice = itemAuctioning.HighestBiddingPrice, Deadline = itemAuctioning.Deadline }; await _itemCompletedRepository.InsertAsync(itemComplete); await _itemAuctioningRepository.DeleteAsync(itemAuctioning.Id); }