Esempio n. 1
0
        /// <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));
        }
Esempio n. 2
0
        //[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), ""));
        }
Esempio n. 3
0
        /// <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());
        }
Esempio n. 4
0
        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), ""));
        }
Esempio n. 5
0
        /// <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));
        }