Пример #1
0
        public void AddListRequestForService(IList <Request> listRequest)
        {
            var currentDate = DateTime.UtcNow;

            foreach (var req in listRequest)
            {
                var req1 = req;
                if (!_requestRepository.CheckExist(
                        p =>
                        p.CreatedOn.Value.Year == currentDate.Year && p.CreatedOn.Value.Month == currentDate.Month &&
                        p.CreatedOn.Value.Day == currentDate.Day &&
                        p.HistoryScheduleId == req1.HistoryScheduleId))
                {
                    req.RequestNo = _staticValueService.GetNewRequestNumber();

                    //Tinh estimate distance, estimate time
                    var estimateDistance = 0;
                    var estimateTime     = 0;
                    if (req.LocationFrom > 0 && req.LocationTo > 0)
                    {
                        var fromLocation = _locationRepository.GetById(req.LocationFrom);
                        var fromPoint    = new GoogleMapPoint
                        {
                            Lat = fromLocation.Lat.GetValueOrDefault(),
                            Lng = fromLocation.Lng.GetValueOrDefault()
                        };

                        var toLocation = _locationRepository.GetById(req.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;
                            }
                        }
                    }
                    req.EstimateTime     = estimateTime;
                    req.EstimateDistance = estimateDistance;
                    Repository.Add(req);
                    var courier = _courierRepository.GetById(req.CourierId.GetValueOrDefault()).User;

                    _systemEventRepository.Add(EventMessage.RequestCreated,
                                               new Dictionary <EventMessageParam, string>()
                    {
                        { EventMessageParam.Request, req.RequestNo },
                        { EventMessageParam.Courier, courier.LastName + " " + courier.FirstName + (string.IsNullOrEmpty(courier.MiddleName) ? "" : " " + courier.MiddleName) },
                    });
                }
            }
            Repository.Commit();
        }
Пример #2
0
        public GoogleGetDistance GetDistance(GoogleMapPoint origin, GoogleMapPoint destination)
        {
            var originString      = string.Format("{0},{1}", origin.Lat, origin.Lng);
            var destinationString = string.Format("{0},{1}", destination.Lat, destination.Lng);

            var requestUrl = string.Format("https://maps.googleapis.com/maps/api/distancematrix/json?origins={0}&destinations={1}", originString, destinationString);
            var client     = new WebClient();
            var result     = client.DownloadString(requestUrl);

            return(JsonConvert.DeserializeObject <GoogleGetDistance>(result));
        }
Пример #3
0
        public GoogleMapResultObject GetDirection(GoogleMapPoint origin, GoogleMapPoint destination)
        {
            var originString      = string.Format("{0},{1}", origin.Lat, origin.Lng);
            var destinationString = string.Format("{0},{1}", destination.Lat, destination.Lng);

            var requestUrl = string.Format("http://maps.google.com/maps/api/directions/json?origin={0}&destination={1}&sensor=false", originString, destinationString);

            var client = new WebClient();
            var result = client.DownloadString(requestUrl);

            return(JsonConvert.DeserializeObject <GoogleMapResultObject>(result));
        }
Пример #4
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));
        }
Пример #5
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);
        }
Пример #6
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));
        }
Пример #7
0
        public JsonResult Update(RequestParameter parameters)
        {
            var viewModel = MapFromClientParameters(parameters);

            byte[] lastModified = null;
            var    error        = "";
            var    newCourier   = ((DashboardRequestShareViewModel)viewModel.SharedViewModel).CourierId;
            var    entity       = MasterFileService.GetById(viewModel.SharedViewModel.Id);

            if (entity != null && entity.Status != (int)StatusRequest.NotSent)
            {
                error = string.Format(SystemMessageLookup.GetMessage("RequestCannotUpdate"), entity.Status.GetNameByValue <StatusRequest>());
            }
            else
            {
                if (entity.CourierId > 0 && newCourier != entity.CourierId)
                {
                    var courier = _userService.GetById(entity.CourierId.GetValueOrDefault());
                    if (courier.IsActive == false)
                    {
                        throw new Exception("Cannot assign request to inactive courier");
                    }
                }
                var mappedEntity = viewModel.MapPropertiesToInstance(entity);
                if (mappedEntity.IsStat == true)
                {
                    mappedEntity.Status      = (int)StatusRequest.Sent;
                    mappedEntity.SendingTime = DateTime.UtcNow;
                }
                else
                {
                    mappedEntity.Status = (int)StatusRequest.NotSent;
                }

                //Tinh estimate distance, estimate time
                var estimateDistance = 0;
                var estimateTime     = 0;
                if (entity != null && 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;
                        }
                    }
                }

                mappedEntity.EstimateDistance = estimateDistance;
                mappedEntity.EstimateTime     = estimateTime;

                lastModified = MasterFileService.Update(mappedEntity).LastModified;
            }
            return(Json(new { entity.WarningInfo, entity.Id, LastModified = lastModified, Error = error }, JsonRequestBehavior.DenyGet));
        }