Сравнение времени данных с параллельным списком словарей не дает правильного подсчета , в то время как тот же список баз данных дает правильный подсчет в C#?
В приложении GPS мы получаем данные каждые 10 секунд с каждого устройства.мы отображения количества устройств, как для бездорожья, двигаясь, остановился и не работает
предположим что никаких данных с устройства за последние 5 минут нет мы помечаем их как не работающие,
мы также обновляем данные устройства в параллельном словаре и базе данных.
при подсчете внедорожных, движущихся, остановленных и не работающих устройств мы используем параллельный словарь, но неработающий счетчик устройств всегда ошибочен. но когда мы подсчитываем, используя данные базы данных, подсчет правильный. и параллельные данные словаря, и данные базы данных-это одно и то же.
Пожалуйста, загляните в него, любое предложение будет оценено по достоинству
Что я уже пробовал:
try { if (latestLocations.ContainsKey(IMEI)) { CompletePointInfo previousPointData = latestLocations[IMEI]; if (completepointinfo.point.DeviceTime >= previousPointData.point.DeviceTime || OffRoadKey == 1) { DateTime curetDateTime = DateTime.Now.AddMinutes(-5); //Pushing the latest data to Memory latestLocations.AddOrUpdate(IMEI, completepointinfo, (key, oldcompletepoint) => completepointinfo); var pointStatus = completepointinfo.pointstatusinfo; string devicemotionstatus = string.Empty; if (OffRoadVehilcesList.ContainsKey(completepointinfo.VehicleNo)) devicemotionstatus = "OffRoad"; else if (completepointinfo.point.DeviceTime.Value < curetDateTime || completepointinfo.point.DeviceTime.Value == null) devicemotionstatus = "NotWorking"; else if (completepointinfo.point.ACC.Value && completepointinfo.point.Speed > 0 && completepointinfo.point.DeviceTime.Value >= curetDateTime) devicemotionstatus = "Moving"; else if (completepointinfo.point.DeviceTime.Value >= curetDateTime) devicemotionstatus = "stoppedOrstaying"; //Dashboard Counts #region SignalR Responses DashBoardRepsonse deviceStatusCount = new DashBoardRepsonse(); //Dashboard Counts foreach (var user in AssamGVKHub.connectedUsersWithSelectedDevice) { var userDeviceList = user.Value; var userConnectionId = user.Key; int movingCount = 0, idleCount = 0, offRoadcount = 0, stoppedcount = 0; if (userDeviceList.Contains(IMEI)) { //Parallel.ForEach(userDeviceList, (e) => userDeviceList.ForEach(e => { CompletePointInfo latestPoint = null; if (latestLocations.ContainsKey(e)) { //latestPoint = list.Where(a => a.point.IMEI == e).FirstOrDefault(); latestPoint = latestLocations1[e]; if (latestPoint != null && latestPoint.point.ACC != null) { if (GeoFenceController.OffRoadVehilcesList.ContainsKey(latestPoint.VehicleNo)) offRoadcount++; else if (latestPoint.point.DeviceTime.Value < curetDateTime) stoppedcount++; else if (latestPoint.point.ACC.Value && latestPoint.point.Speed > 0 && latestPoint.point.DeviceTime.Value >= curetDateTime)//&& latestPoint.point.DeviceTime.Value.AddMinutes(5) >= DateTime.Now) movingCount++; //If Engine(Acc) is ON, latest speed is > 0 & received the data in the last 5 minutes then device is moving else if (latestPoint.point.DeviceTime.Value >= curetDateTime) idleCount++; //If Engine(Acc) is ON, latest speed is = 0 then the device is idel } } }); deviceStatusCount.total = userDeviceList.Count; deviceStatusCount.OffRoad = offRoadcount; deviceStatusCount.moving = movingCount; deviceStatusCount.idle = idleCount; deviceStatusCount.stopped = stoppedcount; _dashboardHub.Clients.Client(userConnectionId).VehicleStats(deviceStatusCount); } } //Dashboard Markers _dashboardHub.Clients.All.updateMarkerStatus(new { Lat = completepointinfo.point.Latitude, Lng = completepointinfo.point.Longitude, Status = devicemotionstatus, Imei = completepointinfo.point.IMEI, VehicleNo = completepointinfo.VehicleNo, CurrentSpeed = completepointinfo.point.Speed, DeviceDate = completepointinfo.point.DeviceTime, ReceivedDate = completepointinfo.point.Inserted_Date, SegmentName = completepointinfo.vehicleBaseLocation, DistrictName = completepointinfo.DistrictName, vehicleCounts = deviceStatusCount }); #endregion SignalR Responses
Richard MacCutchan
Вам нужно предоставить более подробную информацию и объяснить, где происходит ошибка. Где именно собираются подсчеты и чем они отличаются?