Пример #1
0
 /// <summary>
 /// 检查是否在配送范围
 /// </summary>
 /// <param name="model"></param>
 /// <param name="shop"></param>
 /// <param name="shopTakeOutInfo"></param>
 public static void CheckIsInScope(this MemberAddress model, Shop shop, ShopTakeOutInfo toInfo)
 {
     if (!toInfo.IsInScope(shop, model.Latitude.Value, model.Longitude.Value))
     {
         throw new Exception("当前位置不在商家配送范围内");
     }
 }
Пример #2
0
        /// <summary>
        /// 外卖是否可以用
        /// </summary>
        /// <param name="to"></param>
        /// <param name="shop"></param>
        /// <param name="lat"></param>
        /// <param name="lng"></param>
        /// <returns></returns>
        public static ShopTakeOutStatus CanUsed(this ShopTakeOutInfo to, Shop shop, double lat, double lng)
        {
            if (!to.IsUseTakeOut)
            {
                throw new Exception("抱歉,商家未启动外卖功能");
            }
            if (!to.IsOpen)
            {
                return(ShopTakeOutStatus.在营业状态);
            }
            bool isInScope = to.IsInScope(shop, lat, lng);

            if (!isInScope)
            {
                return(ShopTakeOutStatus.在配送范围内);
            }
            if (!to.StartTime.HasValue || !to.EndTime.HasValue)
            {
                return(ShopTakeOutStatus.未设置外卖时间);
            }
            if (!isInOpenTime(to.StartTime.Value, to.EndTime.Value))
            {
                return(ShopTakeOutStatus.在外卖时段内);
            }
            return(ShopTakeOutStatus.可用);
        }
Пример #3
0
        public APIResult GetShopTakeOutInfo([FromBody] GetShopTakeOutInfoArgsModel args)
        {
            if (!args.ShopId.HasValue)
            {
                throw new Exception("ShopID不能为空");
            }

            //权限判定
            CheckShopActor(args.ShopId.Value, ShopActorType.超级管理员);

            var model = db.Query <ShopTakeOutInfo>()
                        .Where(m => !m.IsDel)
                        .Where(m => m.ShopId == args.ShopId.Value)
                        .FirstOrDefault();

            if (model == null)
            {
                DateTime now = DateTime.Now;
                model = new ShopTakeOutInfo()
                {
                    IsUseTakeOut         = false,
                    BoxFee               = 0,
                    DeliveryFee          = 0,
                    IsOpen               = false,
                    AddTime              = now,
                    AutoPrint            = true,
                    AddIp                = GetIp(),
                    Area                 = 0,
                    AutoTakeOrdre        = true,
                    MinAmount            = 0,
                    StartTime            = now,
                    EndTime              = now.AddHours(3),
                    ShopId               = args.ShopId.Value,
                    TakeDistributionType = args.TakeDistributionType,
                    IsDel                = false
                };
                db.Add(model);
                db.SaveChanges();
            }
            string startTime = model.StartTime?.ToString("HH:mm:ss");
            string endTime   = model.EndTime?.ToString("HH:mm:ss");

            return(Success(new
            {
                model.AutoTakeOrdre,
                BoxFee = model.BoxFee / 100d,
                DeliveryFee = model.DeliveryFee / 100d,
                model.Id,
                model.IsOpen,
                model.ShopId,
                model.IsUseTakeOut,
                MinAmount = model.MinAmount / 100d,
                startTime,
                endTime,
                scope = model.Area,
                TakeDistributionType = model.TakeDistributionType
            }));
        }
Пример #4
0
        /// <summary>
        /// 是否在配送范围内
        /// </summary>
        /// <param name="to"></param>
        /// <param name="shop"></param>
        /// <param name="lat"></param>
        /// <param name="lng"></param>
        /// <returns></returns>
        public static bool IsInScope(this ShopTakeOutInfo to, Shop shop, double lat, double lng)
        {
            //int distance = BaiduMapUtil.GetDistance(new Tuple<double, double>(shop.Latitude.Value, shop.Longitude.Value)
            //    , new Tuple<double, double>(lat, lng));

            //if (distance == -1) throw new Exception("获取距离失败");
            int distance = (int)Math.Floor(LatLngUtil.GetDistance(shop.Longitude.Value, shop.Latitude.Value, lng, lat));

            return(distance <= to.Area);
        }
Пример #5
0
        /// <summary>
        /// 是否在配送范围内
        /// </summary>
        /// <param name="to"></param>
        /// <param name="shop"></param>
        /// <param name="lat"></param>
        /// <param name="lng"></param>
        /// <returns></returns>
        public static bool IsInScope(this ShopTakeOutInfo to, Shop shop, double lat, double lng)
        {
            int distance = BaiduMapUtil.GetDistance(new Tuple <double, double>(shop.Latitude.Value, shop.Longitude.Value)
                                                    , new Tuple <double, double>(lat, lng));

            if (distance == -1)
            {
                throw new Exception("获取距离失败");
            }

            return(distance <= to.Area);
        }
Пример #6
0
        /// <summary>
        /// 检查是否在配送范围
        /// </summary>
        /// <param name="model"></param>
        /// <param name="db"></param>
        /// <param name="shop"></param>
        public static void CheckIsInScope(this MemberAddress model, ShopDbContext db, Shop shop)
        {
            ShopTakeOutInfo toInfo = db.Query <ShopTakeOutInfo>()
                                     .Where(m => !m.IsDel)
                                     .Where(m => m.ShopId == shop.Id)
                                     .FirstOrDefault();

            if (toInfo == null)
            {
                throw new Exception("外卖基础设置不存在");
            }
            model.CheckIsInScope(shop, toInfo);
        }
Пример #7
0
        public APIResult SetShopTakeOutInfo([FromBody] SetShopTakeOutInfoArgsModel args)
        {
            if (args.ShopId == 0)
            {
                throw new Exception("ShopID不能为空");
            }

            //权限判定
            CheckShopActor(args.ShopId, ShopActorType.超级管理员);

            var model = db.Query <ShopTakeOutInfo>()
                        .Where(m => !m.IsDel)
                        .Where(m => m.ShopId == args.ShopId)
                        .FirstOrDefault();

            if (model == null)
            {
                model = new ShopTakeOutInfo()
                {
                    ShopId               = args.ShopId,
                    AutoPrint            = args.AutoPrint,
                    AutoTakeOrdre        = args.AutoTakeOrdre,
                    Area                 = args.scope,
                    BoxFee               = (int)Math.Floor(args.BoxFee * 100),
                    DeliveryFee          = (int)Math.Floor(args.DeliveryFee * 100),
                    MinAmount            = (int)Math.Floor(args.MinAmount * 100),
                    AddIp                = GetIp(),
                    StartTime            = args.StartTime,
                    EndTime              = args.EndTime,
                    AddTime              = DateTime.Now,
                    TakeDistributionType = args.TakeDistributionType
                };
                db.AddTo(model);
            }
            else
            {
                model.AutoPrint            = args.AutoPrint;
                model.AutoTakeOrdre        = args.AutoTakeOrdre;
                model.Area                 = args.scope;
                model.BoxFee               = (int)Math.Floor(args.BoxFee * 100);
                model.DeliveryFee          = (int)Math.Floor(args.DeliveryFee * 100);
                model.MinAmount            = (int)Math.Floor(args.MinAmount * 100);
                model.StartTime            = args.StartTime;
                model.EndTime              = args.EndTime;
                model.TakeDistributionType = args.TakeDistributionType;
            }
            db.SaveChanges();
            return(Success(model));
        }