/// <summary> /// End point to get FordonPasssage /// </summary> /// <param name="request">XElement containing Start, End and location EPC</param> /// <returns>Fordonspassage Element</returns> public XElement GetFordonPassage(XElement request) { //Instansiera klinter för services EpcisEventServiceClient eventClient = new EpcisEventServiceClient(); NamingServiceClient namingClient = new NamingServiceClient(); //Kolla så att requestens element är valida XElement response = GetResponseInfoAndCheckRequest(request); if(response.Element("Svarsinformation").Element("Svarskod").Value != "OK") { return response; } //Inputvariabler definieras DateTime start = (DateTime)request.Element("Start"); DateTime end = (DateTime)request.Element("End"); string epc = (string)request.Element("EPC"); int sida; int resultatPerSida; if(request.Elements("Sida").Any()) { sida = (int)request.Element("Sida"); } else { sida = 1; } if(request.Elements("ResultatPerSida").Any()) { resultatPerSida = (int)request.Element("ResultatPerSida"); } else { resultatPerSida = 10; } //Hämta events XNamespace ns = "urn:epcglobal:epcis:xsd:1"; IEnumerable<XElement> result = eventClient.GetEvents(start, end, epc); eventClient.Close(); List<XElement> objEvents = new List<XElement>(); //Hämta ut OjbectEventelement foreach (XElement epcisdoc in result) { objEvents.AddRange(epcisdoc.Elements("EPCISBody").Elements("EventList").Elements("ObjectEvent")); } //Hämta antalet träffar int hits = objEvents.Count(); //Skip och take för pagination int skip = (sida - 1) * resultatPerSida; objEvents = objEvents.Skip(skip).Take(resultatPerSida).ToList(); XElement fordonsPassager = new XElement("FordonsPassager"); //int antalSidor = (int)Math.Ceiling((decimal)((int)hits / resultatPerSida)); int antalSidor; if(hits % resultatPerSida == 0) { antalSidor = hits / resultatPerSida; } else { antalSidor = (int)Math.Floor((double)hits / (double)resultatPerSida) + 1; } //Hämta alla locations, går snabbare än att hämta varje // XElement locations = namingClient.GetAllLocations().Element("Locations"); XElement location = GetLocationFromEpc(epc); namingClient.Close(); //Iterera igenom events för att populera resposne foreach(XElement objEvent in objEvents) { //Hämta location data //XElement location = locations.Elements("Location").Where(l => l.Element("Epc").Value == (objEvent.Element("readPoint").Element("id").Value)).First(); //Skapa fordonspassageelementet fordonsPassager.Add(new XElement("FordonsPassage", GetVehicleFromEpc(objEvent.Element("epcList").Element("epc").Value), location, new XElement("Tid", objEvent.Element("eventTime").Value) )); } //Lägg till fordonspassage i responseobjektet response.Add(fordonsPassager); response.Element("Svarsinformation").Add( new XElement("Sida", sida), new XElement("Träffar", hits), new XElement("AntalSidor", antalSidor), new XElement("ResultatPerSida", resultatPerSida) ); return response; }