/// <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); }
public string GetOrderListByDriver([FromBody] GetOrderListByDriverRequest request) { var result = new MapServices(_context).GetOrderListByDriver(request); return(JsonConvert.SerializeObject(result)); }