diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs index 4818fb29..e044f11c 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs @@ -244,13 +244,13 @@ public class DeviceService : IDeviceService .Where(x => x.Type == DeviceTypeEnumType.Attendance && x.Enable) .ToListAsync(); - var offlineNumber = GetOfflineDevicesCount(devices).Count; + var offlineNumber = await GetOfflineDevicesCount(devices); var res = new DeviceNumberResponse { - OfflineNumber = offlineNumber, - TotalNumber = devices.Count(), - OnlineNumber = devices.Count()- offlineNumber + OfflineNumber = offlineNumber.Count, + TotalNumber = devices.Count, + OnlineNumber = devices.Count- offlineNumber.Count }; return res; } @@ -259,12 +259,22 @@ public class DeviceService : IDeviceService /// /// /// - private List GetOfflineDevicesCount(List devices) + private async Task> GetOfflineDevicesCount(List devices) { + var nos = devices.Select(x => x.UniqueNo).ToList(); + var deviceRegistrys = await _dbContext.Queryable() + .Where(x => nos.Contains(x.DeviceUniqueNo)) + .ToListAsync(); + var list = new List(); foreach (var device in devices) { - TimeSpan timeDifference = DateTime.Now - device.ModifiedTime; + var regis = deviceRegistrys.FirstOrDefault(x => x.DeviceUniqueNo == device.UniqueNo); + if (regis == null) + { + continue; + } + TimeSpan timeDifference = DateTime.Now - regis.LastHeartbeatTime; if (timeDifference.TotalSeconds > (device.HeartbeatInterval * 3)) { list.Add(device); @@ -297,7 +307,7 @@ public class DeviceService : IDeviceService .ToListAsync(); //离线 - var offDevices = GetOfflineDevicesCount(devices); + var offDevices =await GetOfflineDevicesCount(devices); var offids = offDevices.Select(x => x.Id).ToList(); if (request.IsOnAndOff) diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs index e4e1e6f6..ac23c1cd 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs @@ -554,7 +554,7 @@ public class BalanceService : IBalanceService .Where(x => x.Type == DeviceTypeEnumType.Meal && x.Enable) .ToListAsync(); - var offCount = GetOfflineDevicesCount(devices).Count; + var offCount = await GetOfflineDevicesCount(devices); var places = await _dbContext.Queryable() .ToListAsync(); @@ -581,9 +581,9 @@ public class BalanceService : IBalanceService var res = new ConsumeNumberResponse { - Total = devices.Count(), - OffNumber = offCount, - PlaceNumber = places.Count(), + Total = devices.Count, + OffNumber = offCount.Count, + PlaceNumber = places.Count, ConsumerableNumber = consumerable, DailyNumber = monthlyCount != 0 ? Math.Abs((int)Math.Ceiling(monthlySpending / monthlyCount)) : 0, Days = days, @@ -598,12 +598,22 @@ public class BalanceService : IBalanceService /// /// /// - private List GetOfflineDevicesCount(List devices) + private async Task> GetOfflineDevicesCount(List devices) { + var nos = devices.Select(x => x.UniqueNo).ToList(); + var deviceRegistrys = await _dbContext.Queryable() + .Where(x => nos.Contains(x.DeviceUniqueNo)) + .ToListAsync(); + var list = new List(); foreach (var device in devices) { - TimeSpan timeDifference = DateTime.Now - device.ModifiedTime; + var regis = deviceRegistrys.FirstOrDefault(x => x.DeviceUniqueNo == device.UniqueNo); + if (regis == null) + { + continue; + } + TimeSpan timeDifference = DateTime.Now - regis.LastHeartbeatTime; if (timeDifference.TotalSeconds > (device.HeartbeatInterval * 3)) { list.Add(device);