BiDecisionController.cs 8.41 KB
using Hh.Mes.Pojo.System;
using Hh.Mes.POJO.ApiEntity.BiDecision;
using Hh.Mes.POJO.Response;
using Hh.Mes.Service.ApiService;
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;

        /// <summary>
        /// 用户信息
        /// </summary>
        private UserAuthSession UserInfo { get; set; }

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

        #region sn and sim is  info

        [HttpGet]
        public string GetSNAndSimInfo(string yyyyMonth, string projectCode, string equipmentTypeCode)
        {
            return null;
        }

        #endregion

        #region 故障分析

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

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

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

        /// <summary>
        /// 设备报警时长统计-报警时长视角详情
        /// </summary>
        /// <param name="projectClientInfoKeys"></param>
        /// <param name="begin"></param>
        /// <param name="end"></param>
        /// <param name="projectCode"></param>
        /// <param name="equipmentCode"></param>
        /// <returns></returns>
        [HttpGet]
        public Response<EquipmentAlarmDurationDetail> GetEquipmentAlarmDurationDetail(Guid projectClientInfoKeys, DateTime begin, DateTime end, string projectCode = null, string equipmentCode = null)
        {
            var cacheKey = $"{nameof(GetEquipmentAlarmDurationDetail)}_{begin}_{end}_{projectClientInfoKeys}_{projectCode}_{equipmentCode}".GetHashCode();
            var cachedResponse = _cache.Get($"{cacheKey}");
            if (cachedResponse != null)
            {
                return JsonSerializer.Deserialize<Response<EquipmentAlarmDurationDetail>>(cachedResponse);
            }
            var result = service.GetEquipmentAlarmDurationDetail(projectClientInfoKeys, begin, end, projectCode, equipmentCode);

            if (result.Status)
            {
                _cache.Set($"{cacheKey}", JsonSerializer.SerializeToUtf8Bytes(result), new DistributedCacheEntryOptions
                {
                    AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
                });
            }
            return result;
        }

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

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

        #endregion
    }
}