chandubbbb Ответов: 2

Сравнение времени данных с параллельным списком словарей не дает правильного подсчета , в то время как тот же список баз данных дает правильный подсчет в 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

Вам нужно предоставить более подробную информацию и объяснить, где происходит ошибка. Где именно собираются подсчеты и чем они отличаются?

2 Ответов

Рейтинг:
2

pkfox

Что говорит вам отладчик ? Никто не будет копаться во всем этом коде для вас - приложите больше усилий, чтобы точно определить проблему


chandubbbb

не видя кода, как может кто-то помочь? и никаких исключений. но граф не такой
совпадение с базой данных одно.

Рейтинг:
1

pkfox

Пройдите через свой код в отладчике и посмотрите на значения по ходу работы - вы говорите, что данные идентичны, но это, очевидно, не так