首页数据
This commit is contained in:
parent
2d9492d4df
commit
d445c36372
|
|
@ -31,6 +31,10 @@
|
||||||
return $"device_status_{sn}";
|
return $"device_status_{sn}";
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// 天气预报
|
||||||
|
/// </summary>
|
||||||
|
public static string Index_Weather = "index_weather";
|
||||||
|
/// <summary>
|
||||||
/// 缓存设备token
|
/// 缓存设备token
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="id"></param>
|
/// <param name="id"></param>
|
||||||
|
|
|
||||||
|
|
@ -18,17 +18,24 @@ namespace LY.App.Controllers
|
||||||
private readonly DeviceManager deviceManager = DeviceManager.Instance;
|
private readonly DeviceManager deviceManager = DeviceManager.Instance;
|
||||||
private readonly PositionService _positionService;
|
private readonly PositionService _positionService;
|
||||||
private readonly RedisService _redisService;
|
private readonly RedisService _redisService;
|
||||||
|
private readonly AlarmService _alarmService;
|
||||||
|
private readonly WeatherService _weatherService;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="deviceService"></param>
|
/// <param name="deviceService"></param>
|
||||||
/// <param name="positionService"></param>
|
/// <param name="positionService"></param>
|
||||||
/// <param name="redisService"></param>
|
/// <param name="redisService"></param>
|
||||||
public HomeController(DeviceService deviceService, PositionService positionService, RedisService redisService)
|
/// <param name="alarmService"></param>
|
||||||
|
/// <param name="weatherService"></param>
|
||||||
|
public HomeController(DeviceService deviceService, PositionService positionService,
|
||||||
|
RedisService redisService, AlarmService alarmService, WeatherService weatherService)
|
||||||
{
|
{
|
||||||
_deviceService = deviceService;
|
_deviceService = deviceService;
|
||||||
_positionService = positionService;
|
_positionService = positionService;
|
||||||
_redisService = redisService;
|
_redisService = redisService;
|
||||||
|
_alarmService = alarmService;
|
||||||
|
_weatherService = weatherService;
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 首页
|
/// 首页
|
||||||
|
|
@ -46,9 +53,17 @@ namespace LY.App.Controllers
|
||||||
item.IsOnline = await _redisService.ExistsAsync(RedisKeyList.DeviceStatus(item.DeviceSN));
|
item.IsOnline = await _redisService.ExistsAsync(RedisKeyList.DeviceStatus(item.DeviceSN));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
var alarmCount = await _redisService.GetOrSetAsync(RedisKeyList.index_data(),
|
||||||
|
async () => await _alarmService.IndexCount(),
|
||||||
|
TimeSpan.FromDays(1));
|
||||||
|
var weather = await _redisService.GetOrSetAsync(RedisKeyList.Index_Weather,
|
||||||
|
async () => await _weatherService.GetWeather(),
|
||||||
|
TimeSpan.FromHours(3));
|
||||||
result.data = new
|
result.data = new
|
||||||
{
|
{
|
||||||
positions
|
positions,
|
||||||
|
alarmCount,
|
||||||
|
weather
|
||||||
};
|
};
|
||||||
return Ok(result);
|
return Ok(result);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,10 @@ namespace LY.App.Model
|
||||||
/// 图片
|
/// 图片
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Img { get; set; }
|
public string Img { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 图片icon
|
||||||
|
/// </summary>
|
||||||
|
public string icon { get; set; }
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -105,6 +109,7 @@ namespace LY.App.Model
|
||||||
/// 图片
|
/// 图片
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Img { get; set; }
|
public string Img { get; set; }
|
||||||
|
public string icon { get; set; }
|
||||||
}
|
}
|
||||||
public class UpdateDevice : AddDevice
|
public class UpdateDevice : AddDevice
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,8 @@ using SqlSugar;
|
||||||
|
|
||||||
namespace LY.App.Model
|
namespace LY.App.Model
|
||||||
{
|
{
|
||||||
public class PositionDeviceDto
|
public class PositionDeviceDto: PositionInfo
|
||||||
{
|
{
|
||||||
public PositionInfo position { get; set; }
|
|
||||||
public List<DeviceItem> Devices { get; set; }
|
public List<DeviceItem> Devices { get; set; }
|
||||||
}
|
}
|
||||||
public class DeviceItem
|
public class DeviceItem
|
||||||
|
|
@ -18,5 +17,10 @@ namespace LY.App.Model
|
||||||
public double Lon { get; set; }
|
public double Lon { get; set; }
|
||||||
public string Model { get; set; }
|
public string Model { get; set; }
|
||||||
public bool IsOnline { get; set; }
|
public bool IsOnline { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 图片icon
|
||||||
|
/// </summary>
|
||||||
|
public string icon { get; set; }
|
||||||
|
public string Img { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,7 @@ string redisConnection = builder.Configuration.GetValue<string>("Redis:Connectio
|
||||||
builder.Services.AddSingleton(new RedisService(redisConnection));
|
builder.Services.AddSingleton(new RedisService(redisConnection));
|
||||||
////注册SignalR
|
////注册SignalR
|
||||||
builder.Services.AddSignalR();
|
builder.Services.AddSignalR();
|
||||||
|
builder.Services.AddHttpClient();
|
||||||
//注册依赖注入
|
//注册依赖注入
|
||||||
builder.Services.ServicesAutoInjectionExtension();
|
builder.Services.ServicesAutoInjectionExtension();
|
||||||
//数据库
|
//数据库
|
||||||
|
|
|
||||||
|
|
@ -163,6 +163,52 @@ namespace LY.App.Service
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
return new ApiResult() { data = items };
|
return new ApiResult() { data = items };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 首页统计
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<Dictionary<string, int>> IndexCount()
|
||||||
|
{
|
||||||
|
Dictionary<string, int> result = new Dictionary<string, int>();
|
||||||
|
// 获取当前日期和时间
|
||||||
|
DateTime currentDate = DateTime.Now;
|
||||||
|
// 获取当天的开始时间
|
||||||
|
DateTime startDate = currentDate.Date;
|
||||||
|
// 获取当天的结束时间(23:59:59)
|
||||||
|
DateTime endDate = currentDate.Date.AddDays(1).AddTicks(-1);
|
||||||
|
//计算当天
|
||||||
|
var todaywaring = await _db.Queryable<Alarm>().SplitTable()
|
||||||
|
.Where(s => s.alarmLevel > 0)
|
||||||
|
.Where(s => s.CreateTime >= startDate && s.CreateTime <= endDate)
|
||||||
|
.GroupBy(s => s.BatchId)
|
||||||
|
.Select(s => s.BatchId).CountAsync();
|
||||||
|
//计算当天处理次数
|
||||||
|
//var todayhandle = _db.Queryable<AttackEntity>()
|
||||||
|
// .Where(s => s.BatchId > 0)
|
||||||
|
// .Where(s => s.CreateTime >= startDate && s.CreateTime <= endDate);
|
||||||
|
//计算总数
|
||||||
|
var totalcount = _db.Queryable<Alarm>().SplitTable()
|
||||||
|
.Where(s => s.alarmLevel > 0)
|
||||||
|
.GroupBy(s => s.BatchId)
|
||||||
|
.Select(s => s.BatchId);
|
||||||
|
//计算处理总数
|
||||||
|
//var totalhandle = _db.Queryable<AttackEntity>()
|
||||||
|
// .Where(x => x.BatchId > 0);
|
||||||
|
//组合查询结果
|
||||||
|
//return new
|
||||||
|
//{
|
||||||
|
// todaywaring = await todaywaring.CountAsync(),
|
||||||
|
// todayhandle =0,
|
||||||
|
// totalcount = await totalcount.CountAsync(),
|
||||||
|
// totalhandle = 0
|
||||||
|
//};
|
||||||
|
result.Add("todaywaring", todaywaring);
|
||||||
|
result.Add("todayhandle", 0);
|
||||||
|
result.Add("totalcount", await totalcount.CountAsync());
|
||||||
|
result.Add("totalhandle", 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 分页
|
/// 分页
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -141,14 +141,10 @@ namespace LY.App.Service
|
||||||
.Where(s => positionIds.Contains(s.PositionId))
|
.Where(s => positionIds.Contains(s.PositionId))
|
||||||
.Where(s => s.IsDeleted == false)
|
.Where(s => s.IsDeleted == false)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
List<PositionDeviceDto> result = new List<PositionDeviceDto>();
|
List<PositionDeviceDto> result = query.Adapt<List<PositionDeviceDto>>();
|
||||||
foreach (var item in query)
|
foreach (var item in result)
|
||||||
{
|
{
|
||||||
result.Add(new PositionDeviceDto()
|
item.Devices = deviceList.Where(s => s.PositionId == item.Id).ToList()?.Adapt<List<DeviceItem>>() ?? new List<DeviceItem>();
|
||||||
{
|
|
||||||
position = item,
|
|
||||||
Devices = deviceList.Where(s => s.PositionId == item.Id).ToList().Adapt<List<DeviceItem>>()
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,135 @@
|
||||||
|
using LY.App.Extensions.DI;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace LY.App.Service
|
||||||
|
{
|
||||||
|
[ServiceInjection(InjectionType.Scoped)]
|
||||||
|
public class WeatherService
|
||||||
|
{
|
||||||
|
private IHttpClientFactory _httpClientFactory;
|
||||||
|
private IConfiguration _configuration;
|
||||||
|
public WeatherService(IHttpClientFactory httpClientFactory,
|
||||||
|
IConfiguration configuration)
|
||||||
|
{
|
||||||
|
_httpClientFactory = httpClientFactory;
|
||||||
|
_configuration = configuration;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 爬气象局的天气数据%
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<Data> GetWeather()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var client = _httpClientFactory.CreateClient();
|
||||||
|
var url = _configuration.GetSection("Weather").Value;
|
||||||
|
if (!string.IsNullOrEmpty(url))
|
||||||
|
{
|
||||||
|
var resp = await client.GetAsync(url);
|
||||||
|
if (resp.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var data = await resp.Content.ReadAsStringAsync();
|
||||||
|
var result = JsonConvert.DeserializeObject<Root>(data);
|
||||||
|
return result?.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
public class Location
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 54511
|
||||||
|
/// </summary>
|
||||||
|
public string id { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 北京
|
||||||
|
/// </summary>
|
||||||
|
public string name { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 中国, 北京, 北京
|
||||||
|
/// </summary>
|
||||||
|
public string path { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Now
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Precipitation
|
||||||
|
/// </summary>
|
||||||
|
public double precipitation { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Temperature
|
||||||
|
/// </summary>
|
||||||
|
public double temperature { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Pressure
|
||||||
|
/// </summary>
|
||||||
|
public double pressure { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Humidity
|
||||||
|
/// </summary>
|
||||||
|
public double humidity { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 东北风
|
||||||
|
/// </summary>
|
||||||
|
public string windDirection { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// WindDirectionDegree
|
||||||
|
/// </summary>
|
||||||
|
public double windDirectionDegree { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// WindSpeed
|
||||||
|
/// </summary>
|
||||||
|
public double windSpeed { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 微风
|
||||||
|
/// </summary>
|
||||||
|
public string windScale { get; set; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public class Data
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Location
|
||||||
|
/// </summary>
|
||||||
|
public Location location { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Now
|
||||||
|
/// </summary>
|
||||||
|
public Now now { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Alarm
|
||||||
|
/// </summary>
|
||||||
|
public List<object> alarm { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 2024/01/15 10:05
|
||||||
|
/// </summary>
|
||||||
|
public DateTime lastUpdate { get; set; }
|
||||||
|
}
|
||||||
|
public class Root
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// success
|
||||||
|
/// </summary>
|
||||||
|
public string msg { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Code
|
||||||
|
/// </summary>
|
||||||
|
public int code { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Data
|
||||||
|
/// </summary>
|
||||||
|
public Data data { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
"Redis": {
|
"Redis": {
|
||||||
"ConnectionString": "101.43.201.20:6379,password=Aa123,abortConnect =false"
|
"ConnectionString": "101.43.201.20:6379,password=Aa123,abortConnect =false"
|
||||||
},
|
},
|
||||||
|
"Weather": "https://weather.cma.cn/api/now/54511", //天气预报地址,中国气象
|
||||||
"Vertify": 5, //登录失败次数
|
"Vertify": 5, //登录失败次数
|
||||||
"BatchId": 60, //无人机批次连续时间,如果超过这个时间,则变成下一个批次
|
"BatchId": 60, //无人机批次连续时间,如果超过这个时间,则变成下一个批次
|
||||||
"SnowFlakeWordId": 1 //雪花算法的wordId,多台服务器时,需要配置不同的wordId,
|
"SnowFlakeWordId": 1 //雪花算法的wordId,多台服务器时,需要配置不同的wordId,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue