对外接口修改

This commit is contained in:
yanghongwei 2024-06-24 23:13:14 +08:00
parent 81f68f3a1a
commit 339592fd9c
15 changed files with 443 additions and 27 deletions

View File

@ -34,6 +34,14 @@
<returns></returns>
<exception cref="T:System.Exception"></exception>
</member>
<member name="M:langguanApi.Common.Proxy.HttpProxy.PostData``1(System.Object,System.String)">
<summary>
post数据
</summary>
<param name="requestUri"></param>
<param name="data"></param>
<returns></returns>
</member>
<member name="F:langguanApi.Common.Redis.RedisHelper._subscriber">
<summary>
sub
@ -201,6 +209,34 @@
<param name="deviceType"></param>
<returns></returns>
</member>
<member name="T:langguanApi.Controllers.EnvGovController">
<summary>
环境治理页面接口
</summary>
</member>
<member name="F:langguanApi.Controllers.EnvGovController._envGovService">
<summary>
环境治理服务
</summary>
</member>
<member name="M:langguanApi.Controllers.EnvGovController.#ctor(langguanApi.Service.EnvGovService)">
<summary>
构造函数
</summary>
<param name="envGovService"></param>
</member>
<member name="M:langguanApi.Controllers.EnvGovController.GetEnvGovData(System.String)">
<summary>
获取设备状态数据
</summary>
<returns></returns>
</member>
<member name="M:langguanApi.Controllers.EnvGovController.IndexView">
<summary>
环境治理首页
</summary>
<returns></returns>
</member>
<member name="M:langguanApi.Controllers.HJ212Controller.Get(System.String)">
<summary>
获取指定设备的历史数据
@ -794,6 +830,46 @@
<param name="Text">原始数据</param>
<returns>是否通过</returns>
</member>
<member name="T:langguanApi.Model.Dto.RespModel`1">
<summary>
RespModel
</summary>
</member>
<member name="P:langguanApi.Model.Dto.RespModel`1.code">
<summary>
状态码
</summary>
</member>
<member name="T:langguanApi.Model.Dto.Rate">
<summary>
在线
</summary>
</member>
<member name="T:langguanApi.Model.Dto.alarm">
<summary>
报警信息
</summary>
</member>
<member name="T:langguanApi.Model.Dto.Devce">
<summary>
设备列表
</summary>
</member>
<member name="P:langguanApi.Model.Dto.Devce.DeviceType">
<summary>
设备类型 1雾炮 2雾桩 3干雾
</summary>
</member>
<member name="T:langguanApi.Model.Dto.Devlogs">
<summary>
日志
</summary>
</member>
<member name="T:langguanApi.Model.Dto.DeviceStatu">
<summary>
设备状态
</summary>
</member>
<member name="T:langguanApi.Model.Dto.SystemConfigurationDto.UserDto">
<summary>
用于用户管理的Dto
@ -1886,6 +1962,24 @@
<param name="input"></param>
<returns></returns>
</member>
<member name="T:langguanApi.Service.EnvGovService">
<summary>
环境治理页面Service
</summary>
</member>
<member name="M:langguanApi.Service.EnvGovService.IndexView">
<summary>
首页数据
</summary>
<returns></returns>
</member>
<member name="M:langguanApi.Service.EnvGovService.DeviceStatu(System.String)">
<summary>
获取设备状态
</summary>
<param name="deviceId"></param>
<returns></returns>
</member>
<member name="M:langguanApi.Service.Hj212Service.GetIndexData(System.Int32)">
<summary>
首页数据
@ -2079,6 +2173,12 @@
</summary>
<returns></returns>
</member>
<member name="M:langguanApi.Service.MenuService.GetMenuTreeList">
<summary>
获取菜单树
</summary>
<returns></returns>
</member>
<member name="M:langguanApi.Service.MenuService.GetChildList(System.String)">
<summary>
递归获取子菜单列表

View File

@ -44,5 +44,33 @@ namespace langguanApi.Common.Proxy
return default(T);
}
}
/// <summary>
/// post数据
/// </summary>
/// <param name="requestUri"></param>
/// <param name="data"></param>
/// <returns></returns>
public async Task<T> PostData<T>(object data, string requestUri)
{
StringContent content = null;
var client = _httpClientFactory.CreateClient();
client.BaseAddress = new Uri(requestUri);
if (data != null)
{
string json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
}
var response = await client.PostAsync(requestUri, content);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(result);
}
else
{
Console.WriteLine($"请求失败,状态码:{response.StatusCode},请求地址 {requestUri}");
return default(T);
}
}
}
}

View File

@ -1,4 +1,6 @@
using langguanApi.Model;
using langguanApi.Common.Proxy;
using langguanApi.Model;
using langguanApi.Model.Dto;
using langguanApi.Service;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
@ -10,7 +12,8 @@ namespace langguanApi.Controllers
public class AlertController : ControllerBase
{
private readonly AlertService _alertService;
public AlertController(AlertService alertService)
public AlertController(AlertService alertService, HttpProxy httpProxy, IConfiguration configuration)
{
_alertService = alertService;
}
@ -25,6 +28,7 @@ namespace langguanApi.Controllers
{
start = start.HasValue ? start.Value.Date : DateTime.Now.AddDays(-7);
end = end.HasValue ? end.Value.Date.AddDays(1) : DateTime.Now.Date.AddDays(1);
var alerts = await _alertService.ExportData(start, end);
return File(alerts, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
$"{start.Value.ToString("yyyy-MM-dd")}-{end.Value.ToString("yyyy-MM-dd")}_设备报警.xlsx");

View File

@ -0,0 +1,47 @@
using langguanApi.Service;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace langguanApi.Controllers
{
/// <summary>
/// 环境治理页面接口
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class EnvGovController : ControllerBase
{
/// <summary>
/// 环境治理服务
/// </summary>
private readonly EnvGovService _envGovService;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="envGovService"></param>
public EnvGovController(EnvGovService envGovService)
{
_envGovService = envGovService;
}
/// <summary>
/// 获取设备状态数据
/// </summary>
/// <returns></returns>
[HttpGet("DeviceStatu")]
public async Task<IActionResult> GetEnvGovData(string deviceId)
{
var data = await _envGovService.DeviceStatu(deviceId);
return Ok(data);
}
/// <summary>
/// 环境治理首页
/// </summary>
/// <returns></returns>
[HttpGet("Index")]
public async Task<IActionResult> IndexView()
{
var result = await _envGovService.IndexView();
return Ok(result);
}
}
}

View File

@ -24,14 +24,14 @@ namespace langguanApi.Controllers
[HttpPost("login")]
public async Task<IActionResult> Login([FromBody] UserLogin user)
{
var result = _userService.login(user.Username, user.Password);
var result = await _userService.login(user.Username, user.Password);
if (result != null)
{
return Ok(result);
return Ok(new ApiResult() { data = result });
}
else
{
return BadRequest(result);
return Ok(new ApiResult() { code = -1, msg = "用户名或密码错误" });
}
}
/// <summary>

View File

@ -0,0 +1,78 @@
namespace langguanApi.Model.Dto
{
/// <summary>
/// RespModel
/// </summary>
public class RespModel<T>
{
/// <summary>
/// 状态码
/// </summary>
public int code { get; set; }
public T data { get; set; }
public string msg { get; set; }
}
/// <summary>
/// 在线
/// </summary>
public class Rate
{
public string key { get; set; }
public string val { get; set; }
}
public class alarmList
{
public List<alarm> List { get; set; }
}
/// <summary>
/// 报警信息
/// </summary>
public class alarm
{
public string DeviceName { get; set; }
public string AlarmName { get; set; }
public string Time { get; set; }
}
public class devceList
{
public List<Devce> List { get; set; }
}
/// <summary>
/// 设备列表
/// </summary>
public class Devce
{
public string DeviceName { get; set; }
public string DeviceID { get; set; }
public string GroupID { get; set; }
/// <summary>
/// 设备类型 1雾炮 2雾桩 3干雾
/// </summary>
public int DeviceType { get; set; }
public double Lon { get; set; }
public double Lat { get; set; }
public List<Devlogs> RunLog { get; set; }
public double CurrentAngel { get; set; }
}
/// <summary>
/// 日志
/// </summary>
public class Devlogs
{
public string Time { get; set; }
public string Text { get; set; }
}
/// <summary>
/// 设备状态
/// </summary>
public class DeviceStatu
{
public string DeviceID { get; set; }
public string DeviceName { get; set; }
public double ElecInfo { get; set; }
public double WaterFlow { get; set; }
public double Pressure { get; set; }
public long RunTime { get; set; }
}
}

View File

@ -70,5 +70,11 @@ namespace langguanApi.Model.Entity
{
public string RoleName { get; set; }
}
public class UserAnMenusViewModel
{
public UserEntity UserInfo { get; set; }
public string RoleName { get; set; }
public List<MenuTreeDto> Menus { get; set; }
}
}

View File

@ -416,6 +416,7 @@
a34040,
a99010,
a99049,
a99054
//a99051,
#endregion
}

View File

@ -1,4 +1,5 @@
using langguanApi.Extensions.AutoDI;
using langguanApi.Common.Proxy;
using langguanApi.Extensions.AutoDI;
using langguanApi.Model;
using langguanApi.Model.Dto;
using langguanApi.Model.Entity;
@ -11,8 +12,12 @@ namespace langguanApi.Service
[ServiceInjection(InjectionType.Transient)]
public class AlertService : BaseService<Alert>
{
public AlertService(IConfiguration config) : base(config, nameof(Alert))
private readonly HttpProxy _httpProxy;
private readonly IConfiguration _configuration;
public AlertService(IConfiguration config, HttpProxy httpProxy) : base(config, nameof(Alert))
{
_httpProxy = httpProxy;
_configuration = config;
}
/// <summary>
/// 新加
@ -54,13 +59,35 @@ namespace langguanApi.Service
/// <returns></returns>
public async Task<byte[]> ExportData(DateTime? start, DateTime? end)
{
Expression<Func<Alert, bool>> exp = filter => filter.CreateDateTime >= start
&& filter.CreateDateTime <= end
&& filter.IsDelete == false;
&& filter.CreateDateTime <= end && filter.IsDelete == false;
List<Alert> result = new List<Alert>();
//获取接口报警数据
Dictionary<string, string> dic = new Dictionary<string, string>() { };
dic.Add("BeginTime", start.Value.ToString("yyyy-MM-dd HH:mm:ss"));
dic.Add("EndTime", end.Value.ToString("yyyy-MM-dd HH:mm:ss"));
var AlermResp = await _httpProxy.Get<RespModel<alarmList>>(dic,_configuration.GetValue<string>("Apis:AlertUrl"));
if (AlermResp.code == 0)
{
var romte = AlermResp.data.List.Select(s => new Alert
{
AlertContent = s.AlarmName,
deviceName = s.DeviceName,
CreateDateTime = DateTime.Parse(s.Time)
}).ToList();
if (romte.Any())
{
result.AddRange(romte);
}
}
var list = (await base.GetListWithExp(exp)).OrderByDescending(s => s.CreateDateTime).ToList();
if (list.Any())
{
result.AddRange(list);
}
if (result.Any())
{
result = result.OrderByDescending(s => s.CreateDateTime).ToList();
var mapper = new Mapper();
mapper.Map<Alert>("报警开始时间", s => s.CreateDateTime)
.Map<Alert>("设备名称", s => s.deviceName)
@ -68,7 +95,7 @@ namespace langguanApi.Service
.Map<Alert>("内容", s => s.AlertContent)
.Format<Alert>("yyyy-MM-dd HH:mm:ss", s => s.CreateDateTime);
MemoryStream stream = new MemoryStream();
mapper.Save(stream, list, sheetName: "sheet1", leaveOpen: true);
mapper.Save(stream, result, sheetName: "sheet1", leaveOpen: true);
return stream.ToArray();
}
return null;

View File

@ -0,0 +1,97 @@
using IceCoffee.Common.Templates;
using langguanApi.Common.Proxy;
using langguanApi.Extensions.AutoDI;
using langguanApi.Model;
using langguanApi.Model.Dto;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Microsoft.OpenApi.Writers;
namespace langguanApi.Service
{
/// <summary>
/// 环境治理页面Service
/// </summary>
[ServiceInjection(InjectionType.Transient)]
public class EnvGovService
{
private HttpProxy _httpProxy;
private readonly IConfiguration _configuration;
public EnvGovService(HttpProxy httpProxy, IConfiguration configuration)
{
_httpProxy = httpProxy;
_configuration = configuration;
}
/// <summary>
/// 首页数据
/// </summary>
/// <returns></returns>
public async Task<ApiResult> IndexView()
{
var url = _configuration.GetValue<string>("Apis:DeviceList");
var deviceResp = await _httpProxy.Get<RespModel<devceList>>(null, url);
var deviceList = deviceResp.data.List.GroupBy(g => g.GroupID)
.Select(s => new
{
group = s.Key,
items = new
{
devices = s.ToList().GroupBy(m => m.DeviceType)
.Select(o => new
{
devicetype = ConvertDeviceType(o.Key),
items = o.ToList()
.Select(d => new
{
d.DeviceID,
d.DeviceName,
d.Lon,
d.Lat,
d.CurrentAngel,
d.RunLog
})
})
}
});
return new ApiResult
{
code = deviceResp.code,
msg = deviceResp.msg,
data = deviceList
};
}
private string ConvertDeviceType(int deviceType)
{
switch (deviceType)
{
case 1:
return "雾炮";
case 2:
return "雾桩";
case 3:
return "干雾";
}
return null;
}
/// <summary>
/// 获取设备状态
/// </summary>
/// <param name="deviceId"></param>
/// <returns></returns>
public async Task<ApiResult> DeviceStatu(string deviceId)
{
var url = _configuration.GetValue<string>("Apis:DeviceStatu");
var deviceStatuResp = await _httpProxy.Get<RespModel<List<DeviceStatu>>>(null, url);
var result = deviceStatuResp.data.Where(s => s.DeviceID == deviceId).FirstOrDefault();
return new ApiResult
{
//接口返回错误,暂时注释
// code = deviceStatuResp.code,
code = 0,
msg = deviceStatuResp.msg,
data = result
};
}
}
}

View File

@ -96,13 +96,14 @@ namespace langguanApi.Service
if (hj.DecodeData(rawText))
{
var body = JsonConvert.SerializeObject(hj.CP);
Console.WriteLine("解析成功: " + body);
var entity = JsonConvert.DeserializeObject<Model.HJ212>(body);
entity.deviceMN = hj.DATA_HEAD["MN"];
await _deviceService.Add(new DeviceAddDto
{
deviceMN = hj.DATA_HEAD["MN"],
DeviceType = SetDeviceType(hj.DATA_HEAD["ST"]),
Ip= session.RemoteIPEndPoint.ToString(),
Ip = session.RemoteIPEndPoint.ToString(),
});
//校验通过,开始入库
await _hj212Service.Add(entity, session.RemoteIPEndPoint.ToString());

View File

@ -4,6 +4,7 @@ using langguanApi.Extensions.AutoDI;
using langguanApi.Model;
using System.Linq.Expressions;
using langguanApi.Common.Proxy;
using langguanApi.Model.Dto;
namespace langguanApi.Service
{
@ -66,8 +67,12 @@ namespace langguanApi.Service
var ariQuality = await _cacheManager.GetConvertVale(RedisKeylist.AriQuality, getAriQualityFunc, 60 * 120);
Func<Task<object>> getTrendFunc = async () => await _hj212Service.GetIndexData();
var trend = await _cacheManager.GetConvertVale(RedisKeylist.Trend, getTrendFunc, 60 * new Random().Next(70));
// alerts += await _httpProxy.Get<string>(null, _configuration.GetValue<string>("Apis:AlertUrl"));
// alerts += await _httpProxy.Get<string>(null, _configuration.GetValue<string>("Apis:RateUrl"));
// 获取远程接口污染物排放率
var rateResp = await _httpProxy.Get<RespModel<List<Rate>>>(null, _configuration.GetValue<string>("Apis:RateUrl"));
var rate = rateResp.data.ToList();
var AlermResp = await _httpProxy.Get<RespModel<alarmList>>(null, _configuration.GetValue<string>("Apis:AlertUrl"));
// alerts += await _httpProxy.Get<string>(null, _configuration.GetValue<string>("Apis:AlertUrl"));
// alerts += await _httpProxy.Get<string>(null, _configuration.GetValue<string>("Apis:RateUrl"));
//首页清洁运输比例
var cleaData = new
@ -97,10 +102,7 @@ namespace langguanApi.Service
hotmap,
weather,
ariQuality,
rate = new[] {
new { key = "cems", val = 0.7 } ,
new { key = "VOC", val = 0.6 }
},
rate,
trend,
alerts,
cleanData,

View File

@ -48,6 +48,15 @@ namespace langguanApi.Service
/// </summary>
/// <returns></returns>
public async Task<ApiResult> GetMenuTree()
{
var result = await GetMenuTreeList();
return new ApiResult() { data = result };
}
/// <summary>
/// 获取菜单树
/// </summary>
/// <returns></returns>
public async Task<List<MenuTreeDto>> GetMenuTreeList()
{
List<MenuTreeDto> dto = new List<MenuTreeDto>();
var MenuList = await GetChildList("0");
@ -63,7 +72,7 @@ namespace langguanApi.Service
Children = await GetChildList(item.Id)
});
}
return new ApiResult() { data = dto };
return dto;
}
/// <summary>
/// 递归获取子菜单列表

View File

@ -19,10 +19,15 @@ namespace langguanApi.Service
{
private ILogger<UserService> _logger;
private RoleService _roleService;
public UserService(IConfiguration config, ILogger<UserService> logger, RoleService roleService) : base(config, nameof(UserEntity).Replace("Entity", ""))
private RoleMenuServie _roleMenuServie;
private MenuService _menuService;
public UserService(IConfiguration config, ILogger<UserService> logger,
RoleService roleService, RoleMenuServie roleMenuServie, MenuService menuService) : base(config, nameof(UserEntity).Replace("Entity", ""))
{
_logger = logger;
_roleService = roleService;
_roleMenuServie = roleMenuServie;
_menuService = menuService;
}
/// <summary>
/// 登录
@ -30,12 +35,23 @@ namespace langguanApi.Service
/// <param name="username"></param>
/// <param name="password"></param>
/// <returns></returns>
public async Task<UserEntity> login(string username, string password)
public async Task<UserAnMenusViewModel> login(string username, string password)
{
Expression<Func<UserEntity, bool>> exp = filter =>
filter.Username == username && filter.Password == StringHelper.MD5Encrypt32(password);
var list = await base.GetListWithExp(exp);
return list.FirstOrDefault();
var userEntity = (await base.GetListWithExp(exp)).FirstOrDefault();
if (userEntity != null)
{
var menuIds = await _roleMenuServie.GetByRoleId(userEntity.RoleId);
var menus = await _menuService.GetMenuTreeList();
return new UserAnMenusViewModel()
{
UserInfo = userEntity,
RoleName = (await _roleService.GetAsync(userEntity.RoleId))?.RoleName,
Menus = menus
};
}
return null;
}
/// <summary>
/// 根据用户名获取用户信息

View File

@ -18,10 +18,10 @@
"Weather": "https://weather.cma.cn/api/now/54511", //,
"AirQuality": "https://air.cnemc.cn:18007/CityData/GetAQIDataPublishLiveInfo?cityCode=110000", //API
"Apis": {
"RateUrl": "https://air.cnemc.cn:18007/CityData/GetAQIDataPublishLiveInfo?cityCode=110000", //线API
"AlertUrl": "https://air.cnemc.cn:18007/CityData/GetAQIDataPublishLiveInfo?cityCode=110000", //API
"DeviceList": "https://air.cnemc.cn:18007/CityData/GetAQIDataPublishLiveInfo?cityCode=110000", // API
"DeviceInfo": "https://air.cnemc.cn:18007/CityData/GetAQIDataPublishLiveInfo?cityCode=110000" // API
"RateUrl": "https://mock.apipark.cn/m1/4687001-0-default/DustApi/DeviceOnlineRate", //线API
"AlertUrl": "https://mock.apipark.cn/m1/4687001-0-default/DustApi/DeviceHistoryAlarm", //API
"DeviceList": "https://mock.apipark.cn/m1/4687001-0-default/DustApi/GetDeviceList", // API
"DeviceStatu": "https://mock.apipark.cn/m1/4687001-0-default/DustApi/GetDeviceStatu" // API
},
"Home": {