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(); }
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)); }
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)); }
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)); }
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); }
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)); }
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)); }