AlarmOverviewController.cs 6.64 KB
using HHECS.Application.Service;
using HHECS.Dal.Repository;
using HHECS.Executor.EquipmentHandler.SRMV4;
using HHECS.Infrastructure.LogHelper;
using HHECS.Model.Entities;
using HHECS.Model.Enums;
using HHECS.Web.Models;
using Microsoft.AspNetCore.Mvc;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using HHECS.Model.ViewEntity;
using Microsoft.DotNet.MSIdentity.Shared;
using NuGet.Protocol;
using System.Linq.Expressions;

namespace HHECS.Web.Areas.Dashboard.Controllers
{
    /// <summary>
    /// 报警运行监控页(总览)
    /// </summary>
    [Area("Dashboard")]
    public class AlarmOverviewController : BaseController
    {
        private readonly EquipmentService _equipmentService;
        private readonly WarehouseService _warehouseService;
        private readonly EquipmentStatusRecordService _statusRecordService;

        public AlarmOverviewController(EquipmentService equipmentService, EquipmentStatusRecordService statusRecordService, WarehouseService warehouseService)
        {
            _equipmentService = equipmentService;
            _statusRecordService = statusRecordService;
            _warehouseService = warehouseService;
        }

        [ServiceFilter(typeof(OperLogFilter))]
        public IActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public string Load(PageReq pageRequest, Warehouse entity)
        {
            return _warehouseService.LoadEquipmentCount(entity, pageRequest, _equipmentService);
        }

        [HttpPost]
        public string LoadEquipmentName(string code)
        {
            return Execute(() =>
            {
                var equipments = _equipmentService.GetEquipments(x => x.WarehouseCode.Equals(code) && 
                    x.EquipmentTypeId != 2 && 
                    x.EquipmentTypeId != 4 && 
                    x.EquipmentTypeId != 5 && 
                    x.EquipmentTypeId != 8 && 
                    x.EquipmentTypeId != 9
                 ).Data;
                foreach (var equipment in equipments) { 
                    equipment.Name = equipment.Code + "-" + equipment.Name; 
                }
                Response.Result = equipments;
                Response.Count = equipments.Count;
                return Response.ToJson();
            });
        }

        [HttpPost]
        public string LoadYear()
        {
            return Execute(() =>
            {
                List<Dict> dictList = new List<Dict>();
                for(int i = 0; i > -10;  i--)
                {
                    int year = DateTime.Now.AddYears(i).Year;
                    dictList.Add(new Dict() { Code = year.ToString(), Name = year.ToString() });
                }
                Response.Result = dictList;
                Response.Count = dictList.Count;
                return Response.ToJson();
            });
        }
        

        /// <summary>
        /// 获取设备信息
        /// </summary>
        /// <param name="code">仓库编码</param>
        /// <returns></returns>
        public IActionResult GetResult(string warehouseCode,
                                       string equipmentCode,
                                       string dateType,
                                       string year,
                                       string month,
                                       string day,
                                       string warehouseCodeExt)
        {
            try
            {
                var equipments = new List<Equipment>();
                equipments = _equipmentService.GetEquipments(x => warehouseCodeExt.IndexOf(x.Code) > -1).Data;
                if (equipments == null || equipments.Count == 0)
                {
                    return Ok(new
                    {
                        code = 500,
                        count = 0,
                        data = string.Empty,
                        msg = "查询无数据"
                    });
                }

                using EquipmentAlarmRecordRepository alarmRecordRepository = new EquipmentAlarmRecordRepository();                
                List<MonitorViewModel> results = new List<MonitorViewModel>();
                foreach (var equipment in equipments)
                {
                    //var allStatus = _statusRecordService.GetEquipmentHistoryStatusByCode(equipment.Code).Where(x=>x.EquipmentStatus== EquipmentStatusRecordStatus.Error.ToString()).ToList();
                    var allStatus = alarmRecordRepository.Where(t => t.EquipmentCode == equipment.Code &&!t.ishandled.Value && (t.Updated.Value - t.Created.Value).TotalSeconds > 60).ToList();
                    var count = 0;
                    switch(dateType)
                    {
                        case "year":
                            count = allStatus.Count(x => x.Created.Value.Year.ToString() == year);
                            break;
                        case "month":
                            var monthTemp = DateTime.Parse(month);
                            count = allStatus.Count(x => x.Created.Value.Year == monthTemp.Year &&
                                                         x.Created.Value.Month == monthTemp.Month);
                            break;
                        case "day":
                            var dayTemp = DateTime.Parse(day);
                            count = allStatus.Count(x => x.Created.Value.Year == dayTemp.Year &&
                                                         x.Created.Value.Month == dayTemp.Month &&
                                                         x.Created.Value.Day == dayTemp.Day);
                            break;
                    }
                    var result = new MonitorViewModel
                    {
                        Equipment = equipment,
                        ErrorTotal = count,
                    };
                    results.Add(result);
                }
                return Ok(results);
            }
            catch (Exception ex)
            {
                return Ok(new
                {
                    code = 200,
                    count = 0,
                    data = string.Empty,
                    msg = ex.Message
                });
            }
        }

        private Expression<Func<EquipmentAlarmRecord, bool>> GetExpression(string warehouseCodeExt)
        {
            Expression<Func<EquipmentAlarmRecord, bool>> filter = t => true;

            if (!string.IsNullOrWhiteSpace(warehouseCodeExt))
            {
                filter = filter.And(x => warehouseCodeExt.IndexOf(x.EquipmentCode) >= 0);
            }


            return filter;
        }
    }
}