Пример #1
0
        public void CreateGrouponParticipation(GrouponParticipationDTO model)
        {
            var activity = _grouponActivityRepository.Get(model.GrouponActivityId);

            if (activity == null)
            {
                throw new Exception("活动内容异常,无法找到指定的活动记录.");
            }

            if (!activity.IsInProcess())
            {
                throw new Exception("活动不在进行中.");
            }

            var objToAdd = new Domains.Aggregates.GrouponParticipation
            {
                BuyCount          = model.BuyCount,
                GrouponActivityId = model.GrouponActivityId,
                OrderId           = model.OrderId,
                ParticipateTime   = DateTime.Now,
                UserId            = model.UserId
            };

            _grouponParticipationRepository.Add(objToAdd);

            _dbUnitOfWork.Commit();

            objToAdd.ConfirmParticipated();
            _eventBus.Commit();
            //using (ITransactionCoordinator coordinator = new TransactionCoordinator(_dbUnitOfWork, _eventBus))
            //{
            //    coordinator.Commit();
            //}
        }
Пример #2
0
        public async Task <GrouponActivityDTO> Get(string id)
        {
            var result = _grouponActivityRepository.Get(id);

            if (result == null)
            {
                return(null);
            }

            var participations = _grouponParticipationRepository.GetFiltered(g => g.GrouponActivityId == id);
            var ps             = new List <GrouponParticipationDTO>();

            foreach (var a in participations)
            {
                var user = await _authServiceProxy.GetUser(a.UserId);

                ps.Add(new GrouponParticipationDTO
                {
                    BuyCount          = a.BuyCount,
                    GrouponActivityId = a.GrouponActivityId,
                    OrderId           = a.OrderId,
                    ParticipateTime   = a.ParticipateTime.ToString("yyyy-MM-dd HH:mm"),
                    UserId            = a.UserId,
                    NickName          = user?.NickName,
                    UserPortraitUrl   = user?.PortraitUrl
                });
            }
            ;

            var creator = await _authServiceProxy.GetUser(result.CreatedBy);

            return(new GrouponActivityDTO
            {
                Id = result.Id,
                Count = result.Count,
                CreatedBy = result.CreatedBy,
                CreatedOn = result.CreatedOn,
                End = result.End,
                ProductId = result.ProductId,
                Start = result.Start,
                Status = result.Status,
                UnitPrice = result.UnitPrice,
                GrouponParticipations = ps,
                CreatorName = creator?.NickName,
                CreatorPortraitUrl = creator?.PortraitUrl
            });
        }
Пример #3
0
        public void Handle(GrouponParticipatedEvent evnt)
        {
            var eventSource = evnt.Source as GrouponParticipation;

            var activity = _grouponActivityRepository.Get(eventSource.GrouponActivityId);

            if (activity == null)
            {
                throw new Exception("找不到指定的活动记录。");
            }

            var buyCount = _grouponParticipationRepository.GetFiltered(o => o.GrouponActivityId == eventSource.GrouponActivityId).Sum(g => g.BuyCount);


            if (buyCount >= activity.Count)
            {
                activity.SetCompleted();
            }

            _grouponActivityRepository.Update(activity);
            _dbUnitOfWork.Commit();

            _bus.Publish(evnt);
        }