fix 修改离线设备判断逻辑

This commit is contained in:
cheche
2024-02-26 10:14:36 +08:00
parent 90641ebdc7
commit 5e29f013b8
3 changed files with 80 additions and 10 deletions

View File

@@ -241,24 +241,43 @@ public class DeviceService : IDeviceService
public async Task<DeviceNumberResponse> GetDeviceNumberAsync()
{
var devices = await _dbContext.Queryable<DeviceEntity>()
.Where(x => x.Type == DeviceTypeEnumType.Attendance)
.Where(x => x.Type == DeviceTypeEnumType.Attendance && x.Enable)
.ToListAsync();
var onlineNumber = devices.Where(x => x.Enable).Count();
var offlineNumber = devices.Where(x => x.Enable == false).Count();
var offlineNumber = GetOfflineDevicesCount(devices).Count;
var res = new DeviceNumberResponse
{
OnlineNumber = onlineNumber,
{
OfflineNumber = offlineNumber,
TotalNumber = devices.Count()
TotalNumber = devices.Count(),
OnlineNumber = devices.Count()- offlineNumber
};
return res;
}
/// <summary>
/// 获取离线设备
/// </summary>
/// <param name="devices"></param>
/// <returns></returns>
private List<DeviceEntity> GetOfflineDevicesCount(List<DeviceEntity> devices)
{
var list = new List<DeviceEntity>();
foreach (var device in devices)
{
TimeSpan timeDifference = DateTime.Now - device.ModifiedTime;
if (timeDifference.TotalSeconds > (device.HeartbeatInterval * 3))
{
list.Add(device);
}
}
return list;
}
public async Task<Pagination<DevicePageResponse>> GetAttendanceTotalAsync(AttendanceTotalRequest request)
{
var page = await _dbContext.Queryable<DeviceEntity>()
.LeftJoin<DeviceTemplateEntity>((d, dt) => d.TemplateCode == dt.Code)
.Where(d => d.Type == DeviceTypeEnumType.Attendance)
.Where(d => d.Type == DeviceTypeEnumType.Attendance && d.Enable)
.Select((d, dt) => new DevicePageResponse
{
FuncsStr = d.Funcs.ToString(),
@@ -273,9 +292,39 @@ public class DeviceService : IDeviceService
public async Task<Pagination<DevicePageResponse>> GetAttendanceOfflineAsync(DeviceOnlineAndofflineRequest request)
{
var devices = await _dbContext.Queryable<DeviceEntity>()
.Where(x => x.Type == DeviceTypeEnumType.Attendance && x.Enable)
.ToListAsync();
//离线
var offDevices = GetOfflineDevicesCount(devices);
var offids = offDevices.Select(x => x.Id).ToList();
if (request.IsOnAndOff)
{
//离线
var offpage = await _dbContext.Queryable<DeviceEntity>()
.LeftJoin<DeviceTemplateEntity>((d, dt) => d.TemplateCode == dt.Code)
.Where(d => d.Type == DeviceTypeEnumType.Attendance && d.Enable)
.Where(d => offids.Contains(d.Id))
.Select((d, dt) => new DevicePageResponse
{
FuncsStr = d.Funcs.ToString(),
Brand = dt.Brand,
Type = d.Type,
}, true)
.ToPageListAsync(request);
return offpage;
}
//在线
var ids = devices.Select(x => x.Id).ToList();
List<long> onids = ids.Except(offids).ToList();
var page = await _dbContext.Queryable<DeviceEntity>()
.LeftJoin<DeviceTemplateEntity>((d, dt) => d.TemplateCode == dt.Code)
.Where(d => d.Type == DeviceTypeEnumType.Attendance && d.Enable == request.IsOnAndOff)
.Where(d => d.Type == DeviceTypeEnumType.Attendance && d.Enable)
.Where(d => onids.Contains(d.Id))
.Select((d, dt) => new DevicePageResponse
{
FuncsStr = d.Funcs.ToString(),

View File

@@ -551,10 +551,10 @@ public class BalanceService : IBalanceService
public async Task<ConsumeNumberResponse> GetConsumeNumberAsync()
{
var devices = await _dbContext.Queryable<DeviceEntity>()
.Where(x => x.Type == DeviceTypeEnumType.Meal)
.Where(x => x.Type == DeviceTypeEnumType.Meal && x.Enable)
.ToListAsync();
var offCount = devices.Where(x => x.Enable == false).Count();
var offCount = GetOfflineDevicesCount(devices).Count;
var places = await _dbContext.Queryable<BusinessPlaceEntity>()
.ToListAsync();
@@ -592,6 +592,26 @@ public class BalanceService : IBalanceService
return res;
}
/// <summary>
/// 获取离线设备
/// </summary>
/// <param name="devices"></param>
/// <returns></returns>
private List<DeviceEntity> GetOfflineDevicesCount(List<DeviceEntity> devices)
{
var list = new List<DeviceEntity>();
foreach (var device in devices)
{
TimeSpan timeDifference = DateTime.Now - device.ModifiedTime;
if (timeDifference.TotalSeconds > (device.HeartbeatInterval * 3))
{
list.Add(device);
}
}
return list;
}
private async Task<List<ConsumptionTrendResponse>> GetConsumptionTrendsAsync(ConsumptionTrendEnumType type)
{
var bs = await _dbContext.Queryable<BalanceRecordEntity>()

View File

@@ -75,6 +75,7 @@ public class ApkFIileService : IApkFIileService
.Where(x => x.ProductCode == productCode)
.Select<ApkFileResponse>()
.FirstAsync();
info.ThrowIfNull($"产品{productCode}下没有apk存在");
var url =await RequestDownloadFile(info.Name);
var host = Configuration["MinIO:Endpoint"];