BiDecisionController.cs 7.49 KB
using Hh.Mes.Pojo.System;
using Hh.Mes.POJO.ApiEntity;
using Hh.Mes.POJO.ApiEntity.BiDecision;
using Hh.Mes.POJO.Response;
using Hh.Mes.Service;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Distributed;
using System;
using System.Collections.Generic;
using System.Text.Json;

namespace Hh.Mes.Api.Controllers
{
    /// <summary>
    /// 注意此处的接口  公共方法AOP忽略接口日志 
    /// 决策支持 BI报表 接口
    /// </summary>
    [Route("api/[controller]/[action]")]
    [ApiController]
    //[ServiceFilter(typeof(ValidateUserAttribute))]
    public class BiDecisionController : BaseController
    {
        private readonly BiDecisionService service;
        private readonly IDistributedCache _cache;


        public BiDecisionController(BiDecisionService service, IDistributedCache cache, IHttpContextAccessor accessor)
        {
            this.service = service;
            _cache = cache;
            this.context = accessor.HttpContext;
        }

        #region 供应商、供应商对应的项目
        /// <summary>
        /// 供应商 
        /// </summary>
        [HttpGet]
        public string GetSuppliersInfo()
        {
            return Serialize(service.GetSuppliersInfo());
        }

        /// <summary>
        /// 供应商对应的项目 
        /// </summary>
        [HttpGet]
        public string GeteProjectInfoByClientInfoKeys(Guid clientInfoKeys)
        {
            return Serialize(service.GeteProjectInfoByClientInfoKeys(clientInfoKeys));
        }
        #endregion

        #region sn and sim is  info

        /// <summary>
        /// 返回SN统计信息 已经详情
        /// guid projectClientInfoKeys, string projectCode,DateTime begin, DateTime end
        /// </summary>
        /// <param name="group">集团</param>
        /// <param name="projectCode">项目编码</param>
        /// <param name="begin">开始时间</param>
        /// <param name="end">结束时间</param>
        /// <returns></returns>
        [HttpGet]
        public string GetSNInfo(DateTime begin)
        {
            return Serialize(service.GetSNInfo(begin));
        }

        /// <summary>
        /// SIM统计信息
        /// </summary>
        /// <param name="begin"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        [HttpGet]
        public string GetSimInfo(DateTime begin, int type = 0)
        {
            var cacheKey = $"{nameof(GetSimInfo)}_{begin}_{type}".GetHashCode();
            var cachedResponse = _cache.Get($"{cacheKey}");
            if (cachedResponse != null)
            {
                return Serialize(JsonSerializer.Deserialize<Response<SimInfoReport>>(cachedResponse));
            }
            var result = service.GetSimInfo(begin, type);
            if (result.Status)
            {
                _cache.Set($"{cacheKey}", JsonSerializer.SerializeToUtf8Bytes(result), new DistributedCacheEntryOptions
                {
                    AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
                });
            }
            return Serialize(result);
        }

        #endregion

        #region 故障分析

        /// <summary>
        /// 设备妥善率统计
        /// </summary>
        [HttpGet]
        public string GetEquipmentReadinessRate(Guid projectClientInfoKeys, DateTime begin, string projectCode = null, string equipmentCode = null)
        {
            var cacheKey = $"{nameof(GetEquipmentReadinessRate)}_{begin}_{projectClientInfoKeys}_{projectCode}_{equipmentCode}".GetHashCode();
            var cachedResponse = _cache.Get($"{cacheKey}");
            if (cachedResponse != null)
            {
                return Serialize(JsonSerializer.Deserialize<Response<EquipmentReadinessRate>>(cachedResponse));
            }

            var result = service.GetEquipmentReadinessRate(projectClientInfoKeys, begin, projectCode, equipmentCode);
            if (result.Status)
            {
                _cache.Set($"{cacheKey}", JsonSerializer.SerializeToUtf8Bytes(result), new DistributedCacheEntryOptions
                {
                    AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
                });
            }
            return Serialize(result);
        }

        /// <summary>
        /// 设备报警时长统计-报警时长视角
        /// </summary>
        /// <param name="type">0:本月,其他:本季度</param>
        /// <returns></returns>
        [HttpGet]
        public string GetEquipmentAlarmDuration(Guid projectClientInfoKeys, DateTime begin, string projectCode = null, string equipmentCode = null, int type = 0)
        {
            var cacheKey = $"{nameof(GetEquipmentAlarmDuration)}_{projectClientInfoKeys}_{begin}_{projectCode}_{equipmentCode}".GetHashCode();
            var cachedResponse = _cache.Get($"{cacheKey}");
            if (cachedResponse != null)
            {
                return Serialize(JsonSerializer.Deserialize<Response<EquipmentAlarmDuration>>(cachedResponse));
            }
            var result = service.GetEquipmentAlarmDuration(projectClientInfoKeys, begin, projectCode, equipmentCode, type);
            if (result.Status)
            {
                _cache.Set($"{cacheKey}", JsonSerializer.SerializeToUtf8Bytes(result), new DistributedCacheEntryOptions
                {
                    AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
                });
            }
            return Serialize(result);
        }

        /// <summary>
        /// 设备报警时长统计-报警时长视角详情
        /// </summary>
        [HttpGet]
        public string GetEquipmentAlarmDurationDetail(Guid projectClientInfoKeys, DateTime begin, string projectCode = null, string equipmentCode = null)
        {
            var result = service.GetEquipmentAlarmDurationDetail(projectClientInfoKeys, begin, projectCode, equipmentCode);
            return Serialize(result);
        }

        /// <summary>
        /// 设备报警次数统计-报警次数视角
        /// </summary>
        [HttpGet]
        public string GetEquipmentAlarmFrequency(Guid projectClientInfoKeys, DateTime begin, string projectCode = null, string equipmentCode = null)
        {
            var cacheKey = $"{nameof(GetEquipmentAlarmFrequency)}_{begin}_{projectClientInfoKeys}_{projectCode}_{equipmentCode}".GetHashCode();
            var cachedResponse = _cache.Get($"{cacheKey}");
            if (cachedResponse != null)
            {
                return Serialize(JsonSerializer.Deserialize<Response<EquipmentAlarmFrequency>>(cachedResponse));
            }
            var result = service.GetEquipmentAlarmFrequency(projectClientInfoKeys, begin, projectCode, equipmentCode);
            if (result.Status)
            {
                _cache.Set($"{cacheKey}", JsonSerializer.SerializeToUtf8Bytes(result), new DistributedCacheEntryOptions
                {
                    AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
                });
            }
            return Serialize(result);
        }

        /// <summary>
        /// 设备报警次数统计报警次数视角详情
        /// </summary>
        [HttpGet]
        public string GetEquipmentAlarmFrequencyDetail(Guid projectClientInfoKeys, DateTime begin, string projectCode = null, string equipmentCode = null)
        {
            var result = service.GetEquipmentAlarmFrequencyDetail(projectClientInfoKeys, begin, projectCode, equipmentCode);
            return Serialize(result);
        }

        #endregion
    }
}