/// <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("当前位置不在商家配送范围内"); } }
/// <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.可用); }
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 })); }
/// <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); }
/// <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); }
/// <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); }
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)); }