Пример #1
0
        public APIResult CreateConglomeration([FromBody] ConglomerationSetUpModel input)
        {
            var conglomerationActivityType = db.ConglomerationActivityType.Find(input.ConglomerationActivityTypeId);
            var conglomerationActivity     = db.ConglomerationActivity.Find(input.ConglomerationActivityId);

            if (conglomerationActivityType.IsDel || conglomerationActivity.IsDel)
            {
                return(Error("记录不存在"));
            }

            if (conglomerationActivity.ActivityEndTime <= DateTime.Now)
            {
                return(Error("活动已经结束"));
            }
            var nowDate = DateTime.Now;
            var strat   = new DateTime(nowDate.Year, nowDate.Month, nowDate.Day, 22, 00, 00);
            var end     = new DateTime(nowDate.Year, nowDate.Month, nowDate.Day, 00, 00, 00);

            if (!(nowDate < strat && nowDate > end))
            {
                return(Error("参团时间必须为0点-22点"));
            }
            input.CurrentMemberNumber = 0;
            input.MemberNumber        = conglomerationActivityType.ConglomerationMembers;
            input.Status   = ConglomerationSetUpStatus.未支付;
            input.EndTime  = DateTime.Now.AddMinutes(conglomerationActivity.ConglomerationCountdown);
            input.MemberId = GetMemberId();
            //input.MemberId = 70;

            var conglomerationSetUp = _mapper.Map <ConglomerationSetUp>(input);

            conglomerationSetUp = db.ConglomerationSetUp.Add(conglomerationSetUp).Entity;
            db.SaveChanges();


            //生成订单
            ShopConglomerationOrderDto shopConglomerationOrderDto = new ShopConglomerationOrderDto()
            {
                AddIp = GetIp(),
                ConglomerationSetUpId = conglomerationSetUp.Id,
                ConglomerationSetUp   = conglomerationSetUp,
                Delivery        = input.Delivery,
                MemberAddressId = input.MemberAddressId,
                //MemberId = 70,
                MemberId = GetMemberId(),
                ShopId   = input.ShopId,
                Type     = input.Type,
                FormId   = input.FormId
            };
            var order = _shopConglomerationOrderServer.Create(db, shopConglomerationOrderDto);

            return(Success(new
            {
                ConglomerationOrderId = order.Id,
                ConglomerationSetUpId = conglomerationSetUp.Id
            }));
        }
Пример #2
0
        /// <summary>
        /// 初始化订单
        /// </summary>
        /// <param name="shopConglomerationOrderDto"></param>
        /// <param name="conglomerationOrder"></param>
        private ConglomerationOrder InitOrderData(ShopDbContext db, ShopConglomerationOrderDto shopConglomerationOrderDto)
        {
            ConglomerationOrder conglomerationOrder = new ConglomerationOrder();

            conglomerationOrder.CreateTime            = DateTime.Now;
            conglomerationOrder.FormId                = shopConglomerationOrderDto.FormId;
            conglomerationOrder.OrderNumber           = OrderCodeGenerator.Generate(OrderCategory.Conglomeration, shopConglomerationOrderDto.ShopId);
            conglomerationOrder.ShopId                = shopConglomerationOrderDto.ShopId;
            conglomerationOrder.Type                  = shopConglomerationOrderDto.Type;
            conglomerationOrder.ConglomerationSetUpId = shopConglomerationOrderDto.ConglomerationSetUpId;
            conglomerationOrder.ShopId                = shopConglomerationOrderDto.ShopId;
            conglomerationOrder.MemberId              = shopConglomerationOrderDto.MemberId;
            conglomerationOrder.AddUser               = $"member{shopConglomerationOrderDto.MemberId}";
            conglomerationOrder.AddIp                 = shopConglomerationOrderDto.AddIp;
            //conglomerationOrder.Amount = shopConglomerationOrderDto.ConglomerationSetUp.ConglomerationActivityType.ConglomerationPrice;
            conglomerationOrder.ConglomerationActivityId = shopConglomerationOrderDto.ConglomerationSetUp.ConglomerationActivityId;
            conglomerationOrder.Status   = ShopOrderStatus.未处理;
            conglomerationOrder.Delivery = shopConglomerationOrderDto.Delivery;
            conglomerationOrder          = db.ConglomerationOrder.Add(conglomerationOrder).Entity;
            db.SaveChanges();
            return(conglomerationOrder);
        }
Пример #3
0
        /// <summary>
        /// 创建订单
        /// </summary>
        /// <returns></returns>
        public ConglomerationOrder Create(ShopDbContext db, ShopConglomerationOrderDto shopConglomerationOrderDto)
        {
            if (shopConglomerationOrderDto.Type.Equals(ConsignmentType.快递))
            {
                var memberAddress = db.Query <MemberAddress>()
                                    .FirstOrDefault(m => !m.IsDel && m.Id.Equals(shopConglomerationOrderDto.MemberAddressId));
                if (memberAddress == null)
                {
                    throw new Exception("请先设置配送地址");
                }
            }
            var conglomerationActivity = db.ConglomerationActivity.Find(shopConglomerationOrderDto.ConglomerationSetUp.ConglomerationActivityId);

            //活动结束时间校验
            if (conglomerationActivity.ActivityEndTime <= DateTime.Now)
            {
                throw new Exception("活动已经结束了");
            }
            DateTime dateBeginTime = new DateTime(DateTime.Now.Year, conglomerationActivity.DeliveryTakeTheirBeginTimeMD.Month, conglomerationActivity.DeliveryTakeTheirBeginTimeMD.Day, conglomerationActivity.DeliveryTakeTheirBeginTimeHM.Hour, conglomerationActivity.DeliveryTakeTheirBeginTimeHM.Minute, conglomerationActivity.DeliveryTakeTheirBeginTimeHM.Second);
            DateTime dateEndTime   = new DateTime(DateTime.Now.Year, conglomerationActivity.DeliveryTakeTheirEndTimeMD.Month, conglomerationActivity.DeliveryTakeTheirEndTimeMD.Day, conglomerationActivity.DeliveryTakeTheirEndTimeHM.Hour, conglomerationActivity.DeliveryTakeTheirEndTimeHM.Minute, conglomerationActivity.DeliveryTakeTheirEndTimeHM.Second);
            ////自提时间校验
            //if (shopConglomerationOrderDto.Type.Equals(ConsignmentType.自提))
            //{
            //    if (!(dateBeginTime <= shopConglomerationOrderDto.Delivery && shopConglomerationOrderDto.Delivery <= dateEndTime))
            //    {
            //        throw new Exception("时间超出范围");
            //    }
            //}
            var conglomerationOrder = InitOrderData(db, shopConglomerationOrderDto);

            conglomerationOrder = TakeOutSetting(db, conglomerationOrder, shopConglomerationOrderDto, conglomerationActivity);
            conglomerationOrder = SelfSetting(db, conglomerationOrder);
            conglomerationOrder = SetAmount(db, conglomerationOrder);
            db.SaveChanges();
            return(conglomerationOrder);
        }
Пример #4
0
        /// <summary>
        /// 快递配置(配送)
        /// </summary>
        /// <param name="db"></param>
        /// <param name="conglomerationOrder"></param>
        /// <returns></returns>
        private ConglomerationOrder TakeOutSetting(ShopDbContext db, ConglomerationOrder conglomerationOrder, ShopConglomerationOrderDto shopConglomerationOrderDto, ConglomerationActivity conglomerationActivity)
        {
            if (conglomerationOrder.Type.Equals(ConsignmentType.快递))
            {
                ConglomerationExpress conglomerationExpress = new ConglomerationExpress();
                conglomerationExpress.CreateTime                = DateTime.Now;
                conglomerationExpress.Delivery                  = conglomerationOrder.Delivery.Value;
                conglomerationExpress.ExpressSingle             = "未发货";
                conglomerationExpress.MemberAddressId           = shopConglomerationOrderDto.MemberAddressId;
                conglomerationExpress.ShopConglomerationOrderId = conglomerationOrder.Id;
                var memberAddress = db.Query <MemberAddress>()
                                    .FirstOrDefault(m => !m.IsDel && m.Id.Equals(conglomerationExpress.MemberAddressId));
                if (memberAddress == null)
                {
                    throw new Exception("请先设置配送地址");
                }
                conglomerationExpress.Address             = $"{ memberAddress.Province}{ memberAddress.City}{ memberAddress.Area}{ memberAddress.Detail}";
                conglomerationExpress.Phone               = memberAddress.Phone;
                conglomerationExpress.Name                = memberAddress.Name;
                conglomerationExpress.Sex                 = memberAddress.Sex;
                conglomerationExpress.ActivityDeliveryFee = conglomerationActivity.ActivityDeliveryFee;
                conglomerationExpress = db.ConglomerationExpress.Add(conglomerationExpress).Entity;
                db.SaveChanges();
                conglomerationOrder.ConglomerationExpressId = conglomerationExpress.Id;
            }

            return(conglomerationOrder);
        }
Пример #5
0
        public APIResult Participation([FromBody] ParticipationModel input)
        {
            var conglomerationSetUp = db.ConglomerationSetUp.Find(input.ConglomerationSetUpId);

            if (conglomerationSetUp == null || conglomerationSetUp.IsDel)
            {
                return(Error("记录不存在"));
            }
            if (conglomerationSetUp.MemberId.Equals(GetMemberId()))
            {
                return(Error("不能参加自己的拼团"));
            }

            var conglomerationActivity = db.ConglomerationActivity.Find(conglomerationSetUp.ConglomerationActivityId);

            if (conglomerationActivity.ActivityEndTime <= DateTime.Now)
            {
                return(Error("活动已经结束"));
            }


            //开始执行逻辑
            if (conglomerationSetUp.EndTime <= DateTime.Now ||
                conglomerationSetUp.CurrentMemberNumber.Equals(conglomerationSetUp.MemberNumber) ||
                conglomerationSetUp.Status.Equals(ConglomerationSetUpStatus.已经成团))
            {
                return(Error("该拼团已经结束"));
            }
            var conglomerationParticipations = db.ConglomerationParticipation.Where(m => !m.IsDel && m.ConglomerationSetUpId.Equals(input.ConglomerationSetUpId));

            if (conglomerationParticipations.Count() >= conglomerationSetUp.MemberNumber)
            {
                return(Error("该拼团已经结束"));
            }
            //获取请求集合
            var list = ShopConglomerationActivityOptions.GetSetupIdAndMemberId(conglomerationSetUp.Id, _logger);

            if ((conglomerationSetUp.MemberNumber - conglomerationSetUp.CurrentMemberNumber) <= list.Count())
            {
                //判断是否还可以加入集合,如果不可以则提示稍后重试
                return(Error("请稍后再试"));
            }
            //否则加入集合
            ShopConglomerationActivityOptions.AddList(list, new ShopConglomerationActivityOptions.RequestModel()
            {
                CreateTime = DateTime.Now, MmeberId = GetMemberId()
            });
            _logger.LogInformation($"==============================添加到请求集合用户ID{GetMemberId()}===============");

            var conglomerationActivityType = db.ConglomerationActivityType.Find(conglomerationSetUp.ConglomerationActivityTypeId);

            //生成订单
            var memberId      = GetMemberId();
            var memberAddress = db.Query <MemberAddress>().FirstOrDefault(m => m.Id.Equals(input.MemberAddressId));

            if (memberAddress == null)
            {
                memberAddress = db.Query <MemberAddress>().FirstOrDefault(m => m.IsUsed);
            }
            ShopConglomerationOrderDto shopConglomerationOrderDto = new ShopConglomerationOrderDto()
            {
                AddIp = GetIp(),
                ConglomerationSetUpId = conglomerationSetUp.Id,
                ConglomerationSetUp   = conglomerationSetUp,
                MemberAddressId       = input.MemberAddressId,
                //MemberId = 70,
                MemberId = memberId,
                ShopId   = input.ShopId,
                Type     = input.Type,
                Name     = memberAddress.Name,
                Phone    = memberAddress.Phone,
                Delivery = input.Delivery,
                FormId   = input.FormId
            };
            var order = _shopConglomerationOrderServer.Create(db, shopConglomerationOrderDto);

            return(Success(new { ConglomerationOrderId = order.Id }));
        }