/// <summary> /// 设置骑手坐标 /// </summary> /// <param name="riderId"></param> /// <param name="lat"></param> /// <param name="lng"></param> public static void SetRiderPosition(int riderId, string lat, string lng, int riderType) { RiderPosition rp = new RiderPosition { riderId = riderId, lat = lat, lng = lng, riderType = riderType }; cache.Set("riderPosition_" + riderId, rp, DateTime.Now.AddDays(TokenInvalidOutTimeDays)); }
//[ValidateModel]-txy public HttpResponseMessage GetSendingOrder(GetSendingOrderReq req) { var tokenStr = req.Token; var userId = Convert.ToInt32(req.userId); var lat = req.lat; var lng = req.lng; Token token = CacheHelper.GetUserToken(tokenStr); if (token == null) { return(ControllerHelper.Instance.JsonResult(400, "token失效")); } if (token.Payload.UserID != userId) { return(ControllerHelper.Instance.JsonResult(400, "token错误")); } var orderId = OrderInfoOper.Instance.GetSendingOrderIdsByUserId(userId); if (orderId == 0) { return(ControllerHelper.Instance.JsonEmptyStr(200, "无配送中订单")); } var list2 = OrderInfoOper.Instance.GetViewByOrderId(orderId); OrderSendingRes res = new OrderSendingRes(list2, lat, lng); var riderId = list2.First().riderId; if (riderId != null) { var rider = RiderInfoOper.Instance.GetById((int)riderId); if (rider.riderType == 2)//如果是自提点,经纬度从数据库里拿 { var rp = new RiderPosition(rider); res.riderInfo = rp; } else { res.riderInfo = CacheHelper.GetRiderPosition((int)riderId, (int)rider.riderType); } } return(ControllerHelper.Instance.JsonResult(200, JsonConvert.SerializeObject(res), "")); }
/// <summary> /// 根据用户位置,区域,菜品,获取周围5千米以内的骑手位置信息 /// /// </summary> /// <param name="foodId"></param> /// <param name="lat"></param> /// <param name="lng"></param> /// <param name="areaId"></param> /// <returns></returns> public int[] GetRiderIdsByFoodId_Position(int foodId, decimal lat, decimal lng, int areaId) { var list = CacheHelper.GetByCondition <RiderStockJoin>("RiderStockJoin", " riderstatus=1 and riderAreaId=" + areaId + " and foodId=" + foodId); int[] riderIds = list.Select(p => (int)p.riderId).Distinct().ToArray(); List <int> r = new List <int>(); foreach (var item in riderIds) { RiderPosition rp = CacheHelper.GetRiderPosition(item); var lat1 = Convert.ToDouble(lat); var lng1 = Convert.ToDouble(lng); var lat2 = Convert.ToDouble(rp.lat); var lng2 = Convert.ToDouble(rp.lng); if (DistanceHelperHere.Distance(lat1, lng1, lat2, lng2) < 5) { r.Add(item); } } return(r.ToArray()); }
public HttpResponseMessage GetRiders(GetRidersReq req) { var lat = Convert.ToDecimal(req.lat); var lng = Convert.ToDecimal(req.lng); var areaId = Convert.ToInt32(req.areaId); var foodId = Convert.ToInt32(req.foodId); var riderIds = RiderStockOper.Instance.GetRiderIdsByFoodId_Position(foodId, lat, lng, areaId); if (riderIds.Count() < 1) { return(ControllerHelper.Instance.JsonEmptyArr(200, "附近无骑手")); } List <RiderPosition> list = new List <RiderPosition>(); foreach (var item in riderIds) { RiderPosition rp = CacheHelper.GetRiderPosition(item); list.Add(rp); } return(ControllerHelper.Instance.JsonResult(200, JsonConvert.SerializeObject(list), "")); }
/// <summary> /// 计算骑手和目的地的距离 /// </summary> /// <param name="riderId"></param> /// <param name="userAddressId"></param> /// <returns></returns> public decimal GetDistance(int riderId, int userAddressId, string lat, string lng) { var list = CacheHelper.GetByCondition <UserAddressView>("UserAddressView", " id=" + userAddressId); var ua = list.First(); var lat1 = 0d; var lng1 = 0d; var lat2 = 0d; var lng2 = 0d; if (ua.riderType != 2) { RiderPosition rp = CacheHelper.GetRiderPosition(riderId); if (rp == null) { return(0); } lat1 = Convert.ToDouble(rp.lat); lng1 = Convert.ToDouble(rp.lng); lat2 = Convert.ToDouble(ua.lat); lng2 = Convert.ToDouble(ua.lng); } else { lat1 = Convert.ToDouble(ua.lat); lng1 = Convert.ToDouble(ua.lng); lat2 = Convert.ToDouble(lat); lng2 = Convert.ToDouble(lng); } var r = DistanceHelperHere.Distance(lat1, lng1, lat2, lng2); var r2 = r.ToString("#0.0"); return(Convert.ToDecimal(r2)); }