コード例 #1
0
        public JsonResult GetDistanceGoogle(string prevToLat, string prevToLng, string currFromLat, string currFromLng)
        {
            var origin = new GoogleMapPoint {
                Lat = Convert.ToDouble(prevToLat), Lng = Convert.ToDouble(prevToLng)
            };
            var destination = new GoogleMapPoint {
                Lat = Convert.ToDouble(currFromLat), Lng = Convert.ToDouble(currFromLng)
            };

            var dataGoogle = _googleService.GetDistance(origin, destination);

            return(Json(dataGoogle, JsonRequestBehavior.AllowGet));
        }
コード例 #2
0
        private List <Request> WarningProcess(Request entity, out WarningInfoVo warningInfoVo)
        {
            warningInfoVo = null;
            var listRequestDatetimeNow =
                _requestRepository.GetListRequestByCourier(entity.Id, entity.CourierId.GetValueOrDefault());

            //if (listRequestDatetimeNow.Count == 0)
            //{
            //    return new List<Request> {entity};
            //}
            //With Create

            if (entity.Id == 0)
            {
                listRequestDatetimeNow.Add(entity);
            }
            //With Update
            else
            {
                Func <Request, bool> condition = o => o.Id == entity.Id;
                if (listRequestDatetimeNow.FirstOrDefault(condition) != null)
                {
                    listRequestDatetimeNow.First(condition).LocationFrom = entity.LocationFrom;
                    listRequestDatetimeNow.First(condition).LocationTo   = entity.LocationTo;
                    listRequestDatetimeNow.First(condition).SendingTime  = entity.SendingTime;
                    listRequestDatetimeNow.First(condition).StartTime    = entity.StartTime;
                    listRequestDatetimeNow.First(condition).EndTime      = entity.EndTime;
                    listRequestDatetimeNow.First(condition).NoteRequests = entity.NoteRequests;
                }
                else
                {
                    var obj = _requestRepository.GetById(entity.Id);
                    if (obj != null)
                    {
                        obj.LocationFrom = entity.LocationFrom;
                        obj.LocationTo   = entity.LocationTo;
                        obj.SendingTime  = entity.SendingTime;
                        obj.StartTime    = entity.StartTime;
                        obj.EndTime      = entity.EndTime;
                        obj.NoteRequests = entity.NoteRequests;
                        obj.CourierId    = entity.CourierId;
                        listRequestDatetimeNow.Add(obj);
                    }
                }
            }
            listRequestDatetimeNow = listRequestDatetimeNow.Where(o => o.StartTime > DateTime.UtcNow).OrderBy(o => o.StartTime).ToList();

            Request preivousRequest = null;

            foreach (var item in listRequestDatetimeNow)
            {
                if (preivousRequest != null)
                {
                    //if (item.Id == entity.Id)
                    //{
                    //    Location locationFrom = _locationRepository.GetById(item.LocationFrom);
                    //    Location locationTo = _locationRepository.GetById(item.LocationTo);
                    //    DateTime datetimeRank;
                    //    var origin = new GoogleMapPoint { Lat = preivousRequest.LocationToObj.Lat.GetValueOrDefault(), Lng = preivousRequest.LocationToObj.Lng.GetValueOrDefault() };
                    //    var destination = new GoogleMapPoint { Lat = locationFrom.Lat.GetValueOrDefault(), Lng = locationFrom.Lng.GetValueOrDefault() };

                    //    var dataGoogle = _googleService.GetDistance(origin, destination);
                    //    if (dataGoogle.status == "OK")
                    //    {
                    //        if (dataGoogle.rows[0].elements[0].status == "OK")
                    //        {
                    //            item.DistanceEndFrom = dataGoogle.rows[0].elements[0].distance.value;
                    //            item.TimeEndFrom = dataGoogle.rows[0].elements[0].duration.value;
                    //            datetimeRank = preivousRequest.EndTime.AddMinutes((int)((item.TimeEndFrom.GetValueOrDefault() + item.EstimateTime.GetValueOrDefault()) / 60));
                    //            item.IsWarning = datetimeRank > item.EndTime; //|| datetimeRank < item.StartTime;
                    //        }
                    //    }
                    //}
                    //else if (preivousRequest.Id == entity.Id)
                    //{
                    //    Location locationTo = _locationRepository.GetById(item.LocationTo);
                    //    DateTime datetimeRank;
                    //    var origin = new GoogleMapPoint { Lat = locationTo.Lat.GetValueOrDefault(), Lng = locationTo.Lng.GetValueOrDefault() };
                    //    var destination = new GoogleMapPoint { Lat = item.LocationFromObj.Lat.GetValueOrDefault(), Lng = item.LocationFromObj.Lng.GetValueOrDefault() };
                    //    var dataGoogle = _googleService.GetDistance(origin, destination);
                    //    if (dataGoogle.status == "OK")
                    //    {
                    //        item.DistanceEndFrom = dataGoogle.rows[0].elements[0].distance.value;
                    //        item.TimeEndFrom = dataGoogle.rows[0].elements[0].duration.value;
                    //        datetimeRank = preivousRequest.EndTime.AddMinutes((int)((item.TimeEndFrom.GetValueOrDefault() + item.EstimateTime.GetValueOrDefault()) / 60));
                    //        item.IsWarning = datetimeRank > item.EndTime;//|| datetimeRank < item.StartTime;
                    //    }
                    //}

                    Location locationFrom = _locationRepository.GetById(item.LocationFrom);
                    Location locationTo   = _locationRepository.GetById(item.LocationTo);
                    DateTime datetimeRank;
                    //get location to privious
                    var previousLocationTo = _locationRepository.GetById(preivousRequest.LocationTo);

                    var origin = new GoogleMapPoint {
                        Lat = previousLocationTo.Lat.GetValueOrDefault(), Lng = previousLocationTo.Lng.GetValueOrDefault()
                    };
                    var destination = new GoogleMapPoint {
                        Lat = locationFrom.Lat.GetValueOrDefault(), Lng = locationFrom.Lng.GetValueOrDefault()
                    };

                    var dataGoogle = _googleService.GetDistance(origin, destination);
                    if (dataGoogle.status == "OK")
                    {
                        if (dataGoogle.rows[0].elements[0].status == "OK")
                        {
                            item.DistanceEndFrom = dataGoogle.rows[0].elements[0].distance.value;
                            item.TimeEndFrom     = dataGoogle.rows[0].elements[0].duration.value;
                            datetimeRank         = preivousRequest.EndTime.AddMinutes((int)((item.TimeEndFrom.GetValueOrDefault() + item.EstimateTime.GetValueOrDefault()) / 60));
                            item.IsWarning       = datetimeRank > item.EndTime; //|| datetimeRank < item.StartTime;
                        }
                    }
                }
                else
                {
                    //if (listRequestDatetimeNow.Count == 1)
                    //{
                    //    DateTime datetimeRank;
                    //    datetimeRank = item.SendingTime.GetValueOrDefault().AddMinutes((int)(item.EstimateTime.GetValueOrDefault() / 60));
                    //    item.IsWarning = datetimeRank > item.EndTime; //|| datetimeRank < item.StartTime;
                    //    var locationFrom = _locationRepository.GetById(item.LocationFrom);
                    //    var locationTo = _locationRepository.GetById(item.LocationTo);
                    //}
                    item.IsWarning = false;
                }
                preivousRequest = item;
            }

            return(listRequestDatetimeNow);
        }
コード例 #3
0
        public ActionResult Create(RequestParameter parameters)
        {
            var viewModel = MapFromClientParameters(parameters);
            var entity    = viewModel.MapTo <Request>();

            if (entity.CourierId > 0)
            {
                var courier = _userService.GetById(entity.CourierId.GetValueOrDefault());
                if (courier.IsActive == false)
                {
                    throw new Exception("Cannot assign request to inactive courier");
                }
            }

            if (entity.IsStat == true)
            {
                entity.Status      = (int)StatusRequest.Sent;
                entity.SendingTime = DateTime.UtcNow;
            }
            else
            {
                entity.Status = (int)StatusRequest.NotSent;
            }
            entity.RequestNo = _staticValueService.GetNewRequestNumber();

            //Tinh estimate distance, estimate time
            var estimateDistance = 0;
            var estimateTime     = 0;

            if (entity.LocationFrom > 0 && entity.LocationTo > 0)
            {
                var fromLocation = _locationService.GetById(entity.LocationFrom);
                var fromPoint    = new GoogleMapPoint
                {
                    Lat = fromLocation.Lat.GetValueOrDefault(),
                    Lng = fromLocation.Lng.GetValueOrDefault()
                };

                var toLocation = _locationService.GetById(entity.LocationTo);
                var toPoint    = new GoogleMapPoint
                {
                    Lat = toLocation.Lat.GetValueOrDefault(),
                    Lng = toLocation.Lng.GetValueOrDefault()
                };
                var dataGoogle = _googleService.GetDistance(fromPoint, toPoint);
                if (dataGoogle.status == "OK")
                {
                    if (dataGoogle.rows[0].elements[0].status == "OK")
                    {
                        estimateDistance = dataGoogle.rows[0].elements[0].distance.value;
                        estimateTime     = dataGoogle.rows[0].elements[0].duration.value;
                    }
                }
            }

            entity.EstimateDistance = estimateDistance;
            entity.EstimateTime     = estimateTime;
            Request savedEntity;

            using (var transaction = new TransactionScope())
            {
                savedEntity = MasterFileService.Add(entity);
                if (viewModel.SharedViewModel is DashboardRequestShareViewModel)
                {
                    var holdingRequestId = ((DashboardRequestShareViewModel)viewModel.SharedViewModel).HoldingRequestId;
                    if (holdingRequestId.GetValueOrDefault() > 0)
                    {
                        _holdingRequestService.DeleteById(holdingRequestId.GetValueOrDefault());
                    }
                }
                transaction.Complete();
            }

            if (savedEntity != null)
            {
                return(Json(new { savedEntity.WarningInfo, savedEntity.Id }, JsonRequestBehavior.DenyGet));
            }
            return(Json(1, JsonRequestBehavior.DenyGet));
        }