Ejemplo n.º 1
0
        /// <summary>
        /// 司机获取订单列表
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public GetOrderListByDriverResponse GetOrderListByDriver(GetOrderListByDriverRequest request)
        {
            var response = new GetOrderListByDriverResponse()
            {
                StateCode = 201,
                ResultMsg = "查无数据"
            };

            if (request == null || request.FromLat == null || request.FromLat == "" || request.FromLng == "" || request.FromLng == null ||
                request.ToLat == null || request.ToLat == "" || request.ToLng == "" || request.ToLng == null || request.Date == null || request.Date == "")
            {
                response.ResultMsg = "请求参数异常,请稍后重试";
                return(response);
            }

            //获取所有的符合条件的订单
            var orderList = new OrderServices(_context).GetAllWaiting(new WaitingOrderRequest()
            {
                sex       = request.SexType,
                startDate = request.Date,
                isSingle  = request.IsSingle,
                userId    = request.UserId
            });

            if (orderList == null || orderList.Count <= 0)
            {
                response.ResultMsg = "查无数据";
                return(response);
            }

            //获取司机路线和距离
            var drivingInfo = GetDrivingInfo(new GetDrivingInfoResquest()
            {
                FromLocation = request.FromLat + "," + request.FromLng,
                ToLocation   = request.ToLat + "," + request.ToLng
            });

            if (drivingInfo == null || drivingInfo.status != 0 || drivingInfo.result.routes == null || drivingInfo.result.routes.Count <= 0)
            {
                response.ResultMsg = "查无数据";
                return(response);
            }

            List <Task> taskFororders = new List <Task>();

            foreach (var item in orderList)
            {
                taskFororders.Add(Task.Factory.StartNew(() =>
                {
                    var isCan = false;
                    var dis   = 0m;
                    if (drivingInfo.result.routes.FirstOrDefault().distance < item.info.distance)
                    {
                        //如果小于乘客,则去查询乘客路线
                        var userInfo = GetDrivingInfo(new GetDrivingInfoResquest()
                        {
                            FromLocation = item.info.startLat + "," + item.info.startLon,
                            ToLocation   = item.info.endLat + "," + item.info.endLon
                        });
                        if (userInfo == null || userInfo.status != 0 || userInfo.result.routes == null || userInfo.result.routes.Count <= 0)
                        {
                            return;
                        }

                        var coors = GetlatlngInfoList(userInfo.result.routes.FirstOrDefault().polyline);

                        List <Task> tasks = new List <Task>();
                        var isCan1        = false;
                        var isCan2        = false;
                        var location1     = "";
                        var location2     = "";
                        tasks.Add(Task.Factory.StartNew(() =>
                        {
                            var result = GetCanTakeitResult(request.FromLat + "," + request.FromLng, coors);
                            isCan1     = result.result;
                            location1  = result.location;
                        }));
                        tasks.Add(Task.Factory.StartNew(() =>
                        {
                            var result = GetCanTakeitResult(request.ToLat + "," + request.ToLng, coors);
                            isCan2     = result.result;
                            location2  = result.location;
                        }));

                        Task.WhenAll(tasks.ToArray()).Wait();

                        var disInfo = GetDrivingInfo(new GetDrivingInfoResquest()
                        {
                            FromLocation = location1,
                            ToLocation   = location2
                        });
                        if (userInfo != null && userInfo.status == 0 && userInfo.result.routes != null && userInfo.result.routes.Count > 0)
                        {
                            dis = userInfo.result.routes.FirstOrDefault().distance;
                        }

                        isCan = isCan1 && isCan2;
                    }
                    else
                    {
                        var coors         = GetlatlngInfoList(drivingInfo.result.routes.FirstOrDefault().polyline);
                        List <Task> tasks = new List <Task>();
                        var isCan1        = false;
                        var isCan2        = false;
                        var location1     = "";
                        var location2     = "";
                        tasks.Add(Task.Factory.StartNew(() =>
                        {
                            var result = GetCanTakeitResult(item.info.startLat + "," + item.info.startLon, coors);
                            isCan1     = result.result;
                            location1  = result.location;
                        }));
                        tasks.Add(Task.Factory.StartNew(() =>
                        {
                            var result = GetCanTakeitResult(item.info.endLat + "," + item.info.endLon, coors);
                            isCan2     = result.result;
                            location2  = result.location;
                        }));

                        Task.WhenAll(tasks.ToArray()).Wait();

                        var disInfo = GetDrivingInfo(new GetDrivingInfoResquest()
                        {
                            FromLocation = location1,
                            ToLocation   = location2
                        });
                        if (disInfo != null && disInfo.status == 0 && disInfo.result.routes != null && disInfo.result.routes.Count > 0)
                        {
                            dis = disInfo.result.routes.FirstOrDefault().distance;
                        }
                        isCan = isCan1 && isCan2;
                    }

                    if (isCan)
                    {
                        var tempDis = 0m;
                        if (item.info.distance > 0)
                        {
                            tempDis = Convert.ToDecimal((dis / item.info.distance).ToString("0.##")) > 95m ? 90m : Convert.ToDecimal((dis / item.info.distance).ToString("0.##"));
                        }
                        var empStation = "";
                        switch (item.extension.empStation)
                        {
                        case 0:
                            empStation = "研发"; break;

                        case 1:
                            empStation = "运营"; break;

                        case 2:
                            empStation = "产品"; break;

                        case 3:
                            empStation = "商务"; break;

                        case 4:
                            empStation = "客服"; break;

                        case 5:
                            empStation = "设计"; break;
                        }

                        response.OrderList.Add(new OrderListByDriver()
                        {
                            Id          = item.info.id,
                            SexType     = Convert.ToInt32(item.info.sex),
                            IsSingle    = Convert.ToInt32(item.extension.isSingle),
                            Date        = item.info.startDateTime.ToString("yyyy-MM-dd HH:mm"),
                            FromPlace   = item.info.startPoint,
                            Money       = item.info.orderAmount,
                            PeopleCount = item.info.passengerNum,
                            ToPlace     = item.info.endPoint,
                            PhoneNumber = item.extension.phoneNumber,
                            Name        = item.extension.passengerName,
                            Percent     = tempDis,
                            EmpStation  = empStation
                        });
                    }
                }));
            }
            Task.WhenAll(taskFororders.ToArray()).Wait();
            response.OrderList = response.OrderList.OrderByDescending(m => m.Percent).ToList();
            response.StateCode = 200;
            response.ResultMsg = "查询成功";

            return(response);
        }
Ejemplo n.º 2
0
        public string GetOrderListByDriver([FromBody] GetOrderListByDriverRequest request)
        {
            var result = new MapServices(_context).GetOrderListByDriver(request);

            return(JsonConvert.SerializeObject(result));
        }