212 lines
9.7 KiB
C#
212 lines
9.7 KiB
C#
using APT.BaseData.Domain.ApiModel.BD;
|
|
using APT.BaseData.Domain.ApiModel.Platform;
|
|
using APT.BaseData.Domain.Entities;
|
|
using APT.BaseData.Domain.Entities.BD;
|
|
using APT.BaseData.Domain.Entities.PF;
|
|
using APT.BaseData.Domain.Enums;
|
|
using APT.BaseData.Domain.IServices.BD;
|
|
using APT.ECM.Domain.Entities.EM;
|
|
using APT.ECM.Domain.Entities.KR;
|
|
using APT.Infrastructure.Api.Redis;
|
|
using APT.Infrastructure.Core;
|
|
using APT.Infrastructure.Core.Refctor;
|
|
using APT.Utility;
|
|
using Aspose.Tasks;
|
|
using Microsoft.AspNetCore.Http.Extensions;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore.Internal;
|
|
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
|
using NPOI.SS.Formula.Functions;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using APT.Infrastructure.Api;
|
|
namespace APT.BD.WebApi.Controllers.Api
|
|
{
|
|
[Route("api/BD/BDServerInfo")]
|
|
public partial class ServerInfoController : AuthorizeApiController<T_BD_SERVER_INFO>
|
|
{
|
|
#region 系统主页
|
|
|
|
/// <summary>
|
|
/// 获取系统主页信息接口数据
|
|
/// </summary>
|
|
/// <param name="filter"></param>
|
|
/// <returns></returns>
|
|
[HttpPost, Route("GetCompanyEnergy")]
|
|
public JsonActionResult<CompanyIndexModel> GetCompanyEnergy([FromBody] KeywordFilter filter)
|
|
{
|
|
return SafeExecute<CompanyIndexModel>(() =>
|
|
{
|
|
CompanyIndexModel result = new CompanyIndexModel();
|
|
if (string.IsNullOrEmpty(filter.Parameter2) || string.IsNullOrEmpty(filter.Parameter3))
|
|
return null;
|
|
var st = DateTime.Parse(filter.Parameter2);
|
|
var et = DateTime.Parse(filter.Parameter3);
|
|
var fieldFilter = new BaseFilter(filter.OrgId);
|
|
fieldFilter.SelectField = new string[] { "CONS_DATA" };
|
|
//能源信息
|
|
//var energyNum = this.GetEntities<T_EM_ENERGY_DOSAGE_DAY>(c => c.TIME >= st && c.TIME <= et, fieldFilter).Sum(d => d.CONS_DATA);
|
|
|
|
var types = this.GetEntities<T_BD_ENERGY_TYPE>(x => x.ENABLE_STATUS == (int)FMEnableStatusEnum.启用,
|
|
new BaseFilter(filter.OrgId), "Nav_UnitEnumItem").OrderBy(x => x.NAME);
|
|
|
|
var attrs = this.GetEntities<T_BD_APPLIANCE_ATTR>(x => x.Nav_VariableAttr != null && x.Nav_VariableAttr.VAR_ATTR_TYPE == (int)BDVarAttrType.计量点,
|
|
new BaseFilter(filter.OrgId), "Nav_VariableAttr");
|
|
var meterApp = new List<Guid>();
|
|
var deductApp = new List<Guid>();
|
|
var serice = APT.Infrastructure.Api.ServiceLocator.Instance.GetService<IBDMeterNodeService>();
|
|
foreach (var type in types)
|
|
{
|
|
var nodes = serice.GetCalMeterNode(null, type.ID, new BaseFilter(filter.OrgId) { DataRule = filter.DataRule});
|
|
foreach (var item in nodes)
|
|
{
|
|
if (item.Nav_MeterAppliances.Any())
|
|
meterApp.AddRange(item.Nav_MeterAppliances.Select(x => x.APPLIANCE_ID));
|
|
if (item.Nav_DeductAppliances.Any())
|
|
deductApp.AddRange(item.Nav_DeductAppliances.Select(x => x.APPLIANCE_ID));
|
|
}
|
|
}
|
|
var meterVids = meterApp.Any() ? attrs.Where(x => meterApp.Contains(x.APPLIANCE_ID)).Select(x => x.VAR_ID) : new List<Guid>();
|
|
var deductVids = deductApp.Any() ? attrs.Where(x => deductApp.Contains(x.APPLIANCE_ID)).Select(x => x.VAR_ID) : new List<Guid>();
|
|
var report = this.GetEntities<T_EM_ENERGY_DOSAGE_MONTH>(c => c.TIME >= st && c.TIME <= et, new BaseFilter(filter.OrgId));
|
|
var energyNum = report.Where(x=> meterVids.Contains(x.VAR_ID)).Sum(x=>x.CONS_DATA) - report.Where(x => deductVids.Contains(x.VAR_ID)).Sum(x => x.CONS_DATA);
|
|
|
|
result.EnergyNum = energyNum.ChangeDoubleToW().ToString("f2");
|
|
|
|
//服务信息
|
|
//var data = this.GetEntitiesByRedis<T_BD_SERVER_INFO>(filter.OrgId ?? Guid.Empty).FirstOrDefault(s => s.IP == GetIP());
|
|
|
|
//var redisManager = APT.Infrastructure.Api.ServiceLocator.Instance.GetService<RedisManager>();
|
|
if (CsRedisManager.KeyExists(RedisCacheKey.HardWareCpuInfo))
|
|
result.CPU = CsRedisManager.StringGet<decimal>(RedisCacheKey.HardWareCpuInfo);
|
|
if (CsRedisManager.KeyExists(RedisCacheKey.HardWareRamInfo))
|
|
result.STORAGE = CsRedisManager.StringGet<decimal>(RedisCacheKey.HardWareRamInfo);
|
|
//result.ConcurrencyNum = WebSocketServiceHelper.ClintInfos.Count;
|
|
if (CsRedisManager.KeyExists(RedisCacheKey.HardWarePVInfo))
|
|
result.PVNum = CsRedisManager.StringGet<int>(RedisCacheKey.HardWarePVInfo);
|
|
//系统信息
|
|
// var systemData = this.GetEntitiesByRedis<T_BD_SYSTEM_INFO>(filter.OrgId ?? Guid.Empty).FirstOrDefault();
|
|
//result.ConcurrencyNum = systemData?.CONCURRENCY ?? 0;
|
|
//result.PVNum = systemData?.PV ?? 0;
|
|
|
|
fieldFilter.SelectField = new string[] { "ID" };
|
|
//报警信息
|
|
var warnNum = this.GetCount<T_KR_ALARM_LOG>(k => k.CREATE_TIME >= st && k.CREATE_TIME <= et, fieldFilter);
|
|
result.WarningNum = warnNum;
|
|
|
|
//更新日志
|
|
var param2 = new BasePageFilter(1, 5);
|
|
param2.Sort = "CREATE_TIME";
|
|
param2.Order = DbOrder.DESC;
|
|
param2.OrgId = filter.OrgId;
|
|
param2.SelectField = new string[] { "VERSION_ZH", "VERSION_NO", "CREATE_TIME" , "CONTENT" };
|
|
var versionData = this.GetOrderPageEntities<T_PF_VERSION_MANAGE>(null, param2).Data;
|
|
result.VersionManager = versionData.Select(v => new VersionManager
|
|
{
|
|
Version = v.VERSION_NO,
|
|
Content = v.CONTENT,
|
|
Version_ZH = v.VERSION_ZH,
|
|
CreateTime = v.CREATE_TIME
|
|
}).ToList();
|
|
|
|
//运用流程
|
|
result.UseProcess = new List<UseProcess>();
|
|
fieldFilter.SelectField = new string[] { "ID", "IS_LEAF", "IS_LEAF", "NAME", "PARENT_ID", "Nav_MenuForm.TABLE_NAME", "IS_INIT_REQ" };
|
|
var useProData = this.GetEntities<T_PF_MENU>(null, filter, "Nav_MenuForm").Where(m => m.IS_INIT_SHOW == true
|
|
&& ((m.ENABLE_STATUS ?? 0) == Convert.ToInt32(FMEnableStatusEnum.启用)));
|
|
result.UseProcess = useProData.Where(u => !u.IS_LEAF).OrderBy(e => e.NUM).Select(s => new UseProcess
|
|
{
|
|
PName = s.NAME,
|
|
UseChildren = useProData.Where(p => p.IS_LEAF && p.PARENT_ID == s.ID
|
|
&& p.Nav_MenuForm != null).OrderBy(c => c.NUM).Select(t => new UseChildren
|
|
{
|
|
PName = t.NAME,
|
|
ApiFormName = t.Nav_MenuForm.TABLE_NAME,
|
|
FromObj = t.Nav_MenuForm,
|
|
IsReq = t.IS_INIT_REQ,
|
|
BgColor = "#f2f2f2"
|
|
}).ToList()
|
|
}).ToList();
|
|
|
|
foreach (var item in result.UseProcess)
|
|
{
|
|
foreach (var ite in item.UseChildren)
|
|
{
|
|
if (string.IsNullOrEmpty(ite.ApiFormName))
|
|
continue;
|
|
|
|
try
|
|
{
|
|
Type type = ReflectHelper.FindTypeInCurrentDomain(ite.ApiFormName);
|
|
var methodInfo = this.GetType().GetMethod("GetBgEntity", BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);
|
|
|
|
var count = methodInfo.MakeGenericMethod(new Type[] { type }).Invoke(this, new object[] { filter.OrgId });
|
|
if (Convert.ToInt32(count) > 0)
|
|
ite.BgColor = "#bccadf";
|
|
}
|
|
catch (Exception)
|
|
{
|
|
//throw;
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
return result;
|
|
});
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 方法
|
|
|
|
public int GetBgEntity<T>(Guid orgId) where T : MesEntityBase, new()
|
|
{
|
|
BaseFilter filter = new BaseFilter();
|
|
return this.GetCount<T>(c => c.IS_DELETED == false && c.ORG_ID == orgId, filter);
|
|
}
|
|
|
|
public static string GetIP()
|
|
{
|
|
///获取本地的IP地址
|
|
string AddressIP = string.Empty;
|
|
foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
|
|
{
|
|
if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
|
|
{
|
|
AddressIP = _IPAddress.ToString();
|
|
}
|
|
}
|
|
return AddressIP;
|
|
}
|
|
|
|
///// <summary>
|
|
///// 获取模块数据进行返回显示颜色
|
|
///// </summary>
|
|
///// <param name="url"></param>
|
|
///// <param name="model"></param>
|
|
///// <returns></returns>
|
|
//public string GetBgColor<T>()
|
|
//{
|
|
// if (t == null)
|
|
// return "#facd91";
|
|
// //获取数据
|
|
// this.GetEntities<tObj>
|
|
// if (returnText.Contains("errcode"))
|
|
// //可能发生错误
|
|
// return "#facd91";
|
|
// if (string.IsNullOrEmpty(returnText))
|
|
// return "#bccadf";
|
|
// //Response.Write(returnText);
|
|
// return returnText;
|
|
//}
|
|
|
|
#endregion
|
|
}
|
|
}
|