diff --git a/langguanApi.xml b/langguanApi.xml
index 05606d3..a694e41 100644
--- a/langguanApi.xml
+++ b/langguanApi.xml
@@ -34,6 +34,14 @@
+
+
+ post数据
+
+
+
+
+
sub
@@ -201,6 +209,34 @@
+
+
+ 环境治理页面接口
+
+
+
+
+ 环境治理服务
+
+
+
+
+ 构造函数
+
+
+
+
+
+ 获取设备状态数据
+
+
+
+
+
+ 环境治理首页
+
+
+
获取指定设备的历史数据
@@ -794,6 +830,46 @@
原始数据
是否通过
+
+
+ RespModel
+
+
+
+
+ 状态码
+
+
+
+
+ 在线
+
+
+
+
+ 报警信息
+
+
+
+
+ 设备列表
+
+
+
+
+ 设备类型 1雾炮 2雾桩 3干雾
+
+
+
+
+ 日志
+
+
+
+
+ 设备状态
+
+
用于用户管理的Dto
@@ -1886,6 +1962,24 @@
+
+
+ 环境治理页面Service
+
+
+
+
+ 首页数据
+
+
+
+
+
+ 获取设备状态
+
+
+
+
首页数据
@@ -2079,6 +2173,12 @@
+
+
+ 获取菜单树
+
+
+
递归获取子菜单列表
diff --git a/langguanApi/Common/Proxy/HttpProxy.cs b/langguanApi/Common/Proxy/HttpProxy.cs
index a79f303..3a323ff 100644
--- a/langguanApi/Common/Proxy/HttpProxy.cs
+++ b/langguanApi/Common/Proxy/HttpProxy.cs
@@ -44,5 +44,33 @@ namespace langguanApi.Common.Proxy
return default(T);
}
}
+ ///
+ /// post数据
+ ///
+ ///
+ ///
+ ///
+ public async Task PostData(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(result);
+ }
+ else
+ {
+ Console.WriteLine($"请求失败,状态码:{response.StatusCode},请求地址 {requestUri}");
+ return default(T);
+ }
+ }
}
}
diff --git a/langguanApi/Controllers/AlertController.cs b/langguanApi/Controllers/AlertController.cs
index d97b87f..e91eb47 100644
--- a/langguanApi/Controllers/AlertController.cs
+++ b/langguanApi/Controllers/AlertController.cs
@@ -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");
diff --git a/langguanApi/Controllers/EnvGovController.cs b/langguanApi/Controllers/EnvGovController.cs
new file mode 100644
index 0000000..09836f0
--- /dev/null
+++ b/langguanApi/Controllers/EnvGovController.cs
@@ -0,0 +1,47 @@
+using langguanApi.Service;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+
+namespace langguanApi.Controllers
+{
+ ///
+ /// 环境治理页面接口
+ ///
+ [Route("api/[controller]")]
+ [ApiController]
+ public class EnvGovController : ControllerBase
+ {
+ ///
+ /// 环境治理服务
+ ///
+ private readonly EnvGovService _envGovService;
+ ///
+ /// 构造函数
+ ///
+ ///
+ public EnvGovController(EnvGovService envGovService)
+ {
+ _envGovService = envGovService;
+ }
+ ///
+ /// 获取设备状态数据
+ ///
+ ///
+ [HttpGet("DeviceStatu")]
+ public async Task GetEnvGovData(string deviceId)
+ {
+ var data = await _envGovService.DeviceStatu(deviceId);
+ return Ok(data);
+ }
+ ///
+ /// 环境治理首页
+ ///
+ ///
+ [HttpGet("Index")]
+ public async Task IndexView()
+ {
+ var result = await _envGovService.IndexView();
+ return Ok(result);
+ }
+ }
+}
diff --git a/langguanApi/Controllers/UserController.cs b/langguanApi/Controllers/UserController.cs
index ad69e3a..0d1e8e2 100644
--- a/langguanApi/Controllers/UserController.cs
+++ b/langguanApi/Controllers/UserController.cs
@@ -24,14 +24,14 @@ namespace langguanApi.Controllers
[HttpPost("login")]
public async Task 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 = "用户名或密码错误" });
}
}
///
diff --git a/langguanApi/Model/Dto/RespModel.cs b/langguanApi/Model/Dto/RespModel.cs
new file mode 100644
index 0000000..2f993de
--- /dev/null
+++ b/langguanApi/Model/Dto/RespModel.cs
@@ -0,0 +1,78 @@
+namespace langguanApi.Model.Dto
+{
+ ///
+ /// RespModel
+ ///
+ public class RespModel
+ {
+ ///
+ /// 状态码
+ ///
+ public int code { get; set; }
+ public T data { get; set; }
+ public string msg { get; set; }
+ }
+ ///
+ /// 在线
+ ///
+ public class Rate
+ {
+ public string key { get; set; }
+ public string val { get; set; }
+ }
+ public class alarmList
+ {
+ public List List { get; set; }
+ }
+ ///
+ /// 报警信息
+ ///
+ public class alarm
+ {
+ public string DeviceName { get; set; }
+ public string AlarmName { get; set; }
+ public string Time { get; set; }
+ }
+ public class devceList
+ {
+ public List List { get; set; }
+ }
+ ///
+ /// 设备列表
+ ///
+ public class Devce
+ {
+ public string DeviceName { get; set; }
+ public string DeviceID { get; set; }
+ public string GroupID { get; set; }
+ ///
+ /// 设备类型 1雾炮 2雾桩 3干雾
+ ///
+ public int DeviceType { get; set; }
+ public double Lon { get; set; }
+ public double Lat { get; set; }
+ public List RunLog { get; set; }
+ public double CurrentAngel { get; set; }
+
+ }
+ ///
+ /// 日志
+ ///
+ public class Devlogs
+ {
+ public string Time { get; set; }
+ public string Text { get; set; }
+ }
+ ///
+ /// 设备状态
+ ///
+ 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; }
+ }
+}
diff --git a/langguanApi/Model/Entity/UserEntity.cs b/langguanApi/Model/Entity/UserEntity.cs
index c37d11c..71dd65b 100644
--- a/langguanApi/Model/Entity/UserEntity.cs
+++ b/langguanApi/Model/Entity/UserEntity.cs
@@ -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 Menus { get; set; }
+ }
}
diff --git a/langguanApi/Model/FactorCode.cs b/langguanApi/Model/FactorCode.cs
index 5678686..b8975e8 100644
--- a/langguanApi/Model/FactorCode.cs
+++ b/langguanApi/Model/FactorCode.cs
@@ -416,6 +416,7 @@
a34040,
a99010,
a99049,
+ a99054
//a99051,
#endregion
}
diff --git a/langguanApi/Service/AlertService.cs b/langguanApi/Service/AlertService.cs
index eeac91e..2d11ab8 100644
--- a/langguanApi/Service/AlertService.cs
+++ b/langguanApi/Service/AlertService.cs
@@ -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
{
- 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;
}
///
/// 新加
@@ -54,13 +59,35 @@ namespace langguanApi.Service
///
public async Task ExportData(DateTime? start, DateTime? end)
{
-
Expression> exp = filter => filter.CreateDateTime >= start
- && filter.CreateDateTime <= end
- && filter.IsDelete == false;
+ && filter.CreateDateTime <= end && filter.IsDelete == false;
+ List result = new List();
+ //获取接口报警数据
+ Dictionary dic = new Dictionary() { };
+ 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>(dic,_configuration.GetValue("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("报警开始时间", s => s.CreateDateTime)
.Map("设备名称", s => s.deviceName)
@@ -68,7 +95,7 @@ namespace langguanApi.Service
.Map("内容", s => s.AlertContent)
.Format("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;
diff --git a/langguanApi/Service/EnvGovService.cs b/langguanApi/Service/EnvGovService.cs
new file mode 100644
index 0000000..997a548
--- /dev/null
+++ b/langguanApi/Service/EnvGovService.cs
@@ -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
+{
+ ///
+ /// 环境治理页面Service
+ ///
+ [ServiceInjection(InjectionType.Transient)]
+ public class EnvGovService
+ {
+ private HttpProxy _httpProxy;
+ private readonly IConfiguration _configuration;
+
+ public EnvGovService(HttpProxy httpProxy, IConfiguration configuration)
+ {
+ _httpProxy = httpProxy;
+ _configuration = configuration;
+ }
+ ///
+ /// 首页数据
+ ///
+ ///
+ public async Task IndexView()
+ {
+ var url = _configuration.GetValue("Apis:DeviceList");
+ var deviceResp = await _httpProxy.Get>(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;
+ }
+ ///
+ /// 获取设备状态
+ ///
+ ///
+ ///
+ public async Task DeviceStatu(string deviceId)
+ {
+ var url = _configuration.GetValue("Apis:DeviceStatu");
+ var deviceStatuResp = await _httpProxy.Get>>(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
+ };
+ }
+ }
+}
diff --git a/langguanApi/Service/HJ212SocketServer.cs b/langguanApi/Service/HJ212SocketServer.cs
index 049d6fa..60cbd55 100644
--- a/langguanApi/Service/HJ212SocketServer.cs
+++ b/langguanApi/Service/HJ212SocketServer.cs
@@ -96,13 +96,14 @@ namespace langguanApi.Service
if (hj.DecodeData(rawText))
{
var body = JsonConvert.SerializeObject(hj.CP);
+ Console.WriteLine("解析成功: " + body);
var entity = JsonConvert.DeserializeObject(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());
diff --git a/langguanApi/Service/HomeService.cs b/langguanApi/Service/HomeService.cs
index 0089e7b..2aef934 100644
--- a/langguanApi/Service/HomeService.cs
+++ b/langguanApi/Service/HomeService.cs
@@ -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> getTrendFunc = async () => await _hj212Service.GetIndexData();
var trend = await _cacheManager.GetConvertVale(RedisKeylist.Trend, getTrendFunc, 60 * new Random().Next(70));
- // alerts += await _httpProxy.Get(null, _configuration.GetValue("Apis:AlertUrl"));
- // alerts += await _httpProxy.Get(null, _configuration.GetValue("Apis:RateUrl"));
+ // 获取远程接口污染物排放率
+ var rateResp = await _httpProxy.Get>>(null, _configuration.GetValue("Apis:RateUrl"));
+ var rate = rateResp.data.ToList();
+ var AlermResp = await _httpProxy.Get>(null, _configuration.GetValue("Apis:AlertUrl"));
+ // alerts += await _httpProxy.Get(null, _configuration.GetValue("Apis:AlertUrl"));
+ // alerts += await _httpProxy.Get(null, _configuration.GetValue("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,
diff --git a/langguanApi/Service/MenuService.cs b/langguanApi/Service/MenuService.cs
index e22dfb7..6855264 100644
--- a/langguanApi/Service/MenuService.cs
+++ b/langguanApi/Service/MenuService.cs
@@ -48,6 +48,15 @@ namespace langguanApi.Service
///
///
public async Task GetMenuTree()
+ {
+ var result = await GetMenuTreeList();
+ return new ApiResult() { data = result };
+ }
+ ///
+ /// 获取菜单树
+ ///
+ ///
+ public async Task> GetMenuTreeList()
{
List dto = new List();
var MenuList = await GetChildList("0");
@@ -63,7 +72,7 @@ namespace langguanApi.Service
Children = await GetChildList(item.Id)
});
}
- return new ApiResult() { data = dto };
+ return dto;
}
///
/// 递归获取子菜单列表
diff --git a/langguanApi/Service/UserService.cs b/langguanApi/Service/UserService.cs
index fda7d9c..288fd1a 100644
--- a/langguanApi/Service/UserService.cs
+++ b/langguanApi/Service/UserService.cs
@@ -19,10 +19,15 @@ namespace langguanApi.Service
{
private ILogger _logger;
private RoleService _roleService;
- public UserService(IConfiguration config, ILogger logger, RoleService roleService) : base(config, nameof(UserEntity).Replace("Entity", ""))
+ private RoleMenuServie _roleMenuServie;
+ private MenuService _menuService;
+ public UserService(IConfiguration config, ILogger logger,
+ RoleService roleService, RoleMenuServie roleMenuServie, MenuService menuService) : base(config, nameof(UserEntity).Replace("Entity", ""))
{
_logger = logger;
_roleService = roleService;
+ _roleMenuServie = roleMenuServie;
+ _menuService = menuService;
}
///
/// 登录
@@ -30,12 +35,23 @@ namespace langguanApi.Service
///
///
///
- public async Task login(string username, string password)
+ public async Task login(string username, string password)
{
Expression> 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;
}
///
/// 根据用户名获取用户信息
diff --git a/langguanApi/appsettings.json b/langguanApi/appsettings.json
index b1f015a..d9e74dd 100644
--- a/langguanApi/appsettings.json
+++ b/langguanApi/appsettings.json
@@ -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": {