fix role,user查看; 设备状态

This commit is contained in:
2024-02-22 15:32:24 +08:00
parent a197a0bfea
commit 82f942ed13
7 changed files with 78 additions and 12 deletions

View File

@@ -1,6 +1,8 @@
using Dlhis.Basic.Device.Request;
using Dlhis.Basic.Device.Response;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Canteen.Entities;
using Dlhis.Entity.Canteen.Enums;
using Dlhis.Entity.Device.Entities;
using Dlhis.Entity.Device.Enums;
using Kurisu.AspNetCore.Scope;
@@ -11,7 +13,6 @@ using Kurisu.SqlSugar.Attributes;
using Kurisu.SqlSugar.Extensions;
using Kurisu.SqlSugar.Services;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
@@ -40,9 +41,51 @@ public class DeviceService : IDeviceService
}, true)
.ToPageListAsync(request);
var now = DateTime.Now;
var deviceUniqueNos = page.Data.Select(x => x.UniqueNo).ToList();
var balanceRecords = await _dbContext.Queryable<BalanceRecordEntity>().Where(x => x.Type == BalanceRecordTypeEnumType.Out)
.Where(x => deviceUniqueNos.Contains(x.DeviceInfo))
.ToListAsync();
var deviceRegistries = await _dbContext.Queryable<DeviceRegistryEntity>()
.LeftJoin<DeviceEntity>((x, d) => x.DeviceUniqueNo == d.UniqueNo)
.Where(x => deviceUniqueNos.Contains(x.DeviceUniqueNo))
.Select((x, d) => new
{
d.HeartbeatInterval,
x.LastHeartbeatTime,
x.DeviceUniqueNo,
})
.ToListAsync();
page.Data.ForEach(device =>
{
device.Amount = balanceRecords.Sum(x => x.Amount);
device.UserCount = balanceRecords.DistinctBy(x => x.UserCode).Count();
var r = deviceRegistries.FirstOrDefault(x => x.DeviceUniqueNo == device.UniqueNo);
if (r == null)
{
device.IsOnline = false;
}
else
{
if (r.HeartbeatInterval <= 0)
{
device.IsOnline = true;
}
else
{
device.IsOnline = r.LastHeartbeatTime.AddSeconds(r.HeartbeatInterval * 3) >= now;
}
}
});
return page;
}
[Transactional]
public async Task SaveAsync(DeviceSaveRequest request)
{
@@ -288,7 +331,7 @@ public class DeviceService : IDeviceService
dbContext.Client.CurrentConnectionConfig.ConnectionString = logConnectionString;
var logs = await dbContext.Queryable<ApiLogEntity>()
.WhereIF(!request.message.IsEmpty(), x => x.Message.Contains(request.message))
.WhereIF(!level.IsEmpty(),x => x.Level == level)
.WhereIF(!level.IsEmpty(), x => x.Level == level)
.Select<ApiLogResponse>()
.ToPageListAsync(request);
return logs;