示例#1
0
        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);
            }
        }
示例#2
0
        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);
        }