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 { #region 系统主页 /// /// 获取系统主页信息接口数据 /// /// /// [HttpPost, Route("GetCompanyEnergy")] public JsonActionResult GetCompanyEnergy([FromBody] KeywordFilter filter) { return SafeExecute(() => { 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(c => c.TIME >= st && c.TIME <= et, fieldFilter).Sum(d => d.CONS_DATA); var types = this.GetEntities(x => x.ENABLE_STATUS == (int)FMEnableStatusEnum.启用, new BaseFilter(filter.OrgId), "Nav_UnitEnumItem").OrderBy(x => x.NAME); var attrs = this.GetEntities(x => x.Nav_VariableAttr != null && x.Nav_VariableAttr.VAR_ATTR_TYPE == (int)BDVarAttrType.计量点, new BaseFilter(filter.OrgId), "Nav_VariableAttr"); var meterApp = new List(); var deductApp = new List(); var serice = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); 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(); var deductVids = deductApp.Any() ? attrs.Where(x => deductApp.Contains(x.APPLIANCE_ID)).Select(x => x.VAR_ID) : new List(); var report = this.GetEntities(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(filter.OrgId ?? Guid.Empty).FirstOrDefault(s => s.IP == GetIP()); //var redisManager = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); if (CsRedisManager.KeyExists(RedisCacheKey.HardWareCpuInfo)) result.CPU = CsRedisManager.StringGet(RedisCacheKey.HardWareCpuInfo); if (CsRedisManager.KeyExists(RedisCacheKey.HardWareRamInfo)) result.STORAGE = CsRedisManager.StringGet(RedisCacheKey.HardWareRamInfo); //result.ConcurrencyNum = WebSocketServiceHelper.ClintInfos.Count; if (CsRedisManager.KeyExists(RedisCacheKey.HardWarePVInfo)) result.PVNum = CsRedisManager.StringGet(RedisCacheKey.HardWarePVInfo); //系统信息 // var systemData = this.GetEntitiesByRedis(filter.OrgId ?? Guid.Empty).FirstOrDefault(); //result.ConcurrencyNum = systemData?.CONCURRENCY ?? 0; //result.PVNum = systemData?.PV ?? 0; fieldFilter.SelectField = new string[] { "ID" }; //报警信息 var warnNum = this.GetCount(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(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(); fieldFilter.SelectField = new string[] { "ID", "IS_LEAF", "IS_LEAF", "NAME", "PARENT_ID", "Nav_MenuForm.TABLE_NAME", "IS_INIT_REQ" }; var useProData = this.GetEntities(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(Guid orgId) where T : MesEntityBase, new() { BaseFilter filter = new BaseFilter(); return this.GetCount(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; } ///// ///// 获取模块数据进行返回显示颜色 ///// ///// ///// ///// //public string GetBgColor() //{ // if (t == null) // return "#facd91"; // //获取数据 // this.GetEntities // if (returnText.Contains("errcode")) // //可能发生错误 // return "#facd91"; // if (string.IsNullOrEmpty(returnText)) // return "#bccadf"; // //Response.Write(returnText); // return returnText; //} #endregion } }