From afa21b5294de2eeaab8159ce53e06f5ff53b3ed0 Mon Sep 17 00:00:00 2001
From: cheche <717840555@qq.com>
Date: Mon, 26 Feb 2024 14:14:24 +0800
Subject: [PATCH] =?UTF-8?q?fix=20=E6=B7=BB=E5=8A=A0=E5=88=A4=E6=96=AD?=
=?UTF-8?q?=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Services/Implements/DeviceService.cs | 24 +++++++++++++------
.../Services/Implements/BalanceService.cs | 22 ++++++++++++-----
2 files changed, 33 insertions(+), 13 deletions(-)
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);