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
 | 
						|
    }
 | 
						|
}
 |