EquipmentAlarmRecordVM.cs 9 KB
using AutoMapper;
using HHECS.Infrastructure.Excel;
using HHECS.Model.Dtos;
using HHECS.Model.Entities;
using HHECS.Model.ExcelModels;
using HHECS.WinCommon.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Windows;
using MessageBox = HandyControl.Controls.MessageBox;

namespace HHECS.WinClient.View.EquipmentInfo
{
    public class EquipmentAlarmRecordVM : VMBase
    {
        #region 属性

        #region EquipmentAlarmRecord

        public string EquipmentCode { get; set; }

        public string EquipmentName { get; set; }

        public string EquipmentPropCode { get; set; }

        public string EquipmentPropName { get; set; }

        public string Alarm { get; set; }

        public DateTime? StartTime { get; set; } = DateTime.Now.Date.AddDays(-7);

        public DateTime? EndTime { get; set; } = DateTime.Now.Date.AddDays(2).AddSeconds(-1);

        public List<EquipmentAlarmRecordDto> EquipmentAlarmRecordDtos { get; set; }

        public PageInfo PageInfo { get; set; } = new PageInfo();

        #endregion

        #region EquipmentAlarmRecordCount

        public string CountEquipmentCode { get; set; }

        public string CountEquipmentName { get; set; }

        public string CountEquipmentPropCode { get; set; }

        public string CountEquipmentPropName { get; set; }

        public string CountAlarm { get; set; }

        public DateTime? CountStartTime { get; set; } = DateTime.Now.Date.AddDays(-7);

        public DateTime? CountEndTime { get; set; } = DateTime.Now.Date.AddDays(2).AddSeconds(-1);

        public List<EquipmentAlarmRecordDto> EquipmentAlarmRecordDtoCounts { get; set; }

        public PageInfo CountPageInfo { get; set; } = new PageInfo();

        #endregion

        #endregion

        #region 方法

        #region EquipmentAlarmRecord

        private Expression<Func<EquipmentAlarmRecord, bool>> GetEquipmentAlarmRecordExpression()
        {
            Expression<Func<EquipmentAlarmRecord, bool>> filter = a => true;
            if (!string.IsNullOrWhiteSpace(EquipmentCode))
            {
                filter = filter.And(a => a.EquipmentCode.Contains(EquipmentCode));
            }
            if (!string.IsNullOrWhiteSpace(EquipmentName))
            {
                filter = filter.And(a => a.EquipmentName.Contains(EquipmentName));
            }
            if (!string.IsNullOrWhiteSpace(EquipmentPropCode))
            {
                filter = filter.And(a => a.EquipmentPropCode.Contains(EquipmentPropCode));
            }
            if (!string.IsNullOrWhiteSpace(EquipmentPropName))
            {
                filter = filter.And(a => a.EquipmentPropName.Contains(EquipmentPropName));
            }
            if (!string.IsNullOrWhiteSpace(Alarm))
            {
                filter = filter.And(a => a.Alarm.Contains(Alarm));
            }
            if (StartTime != null)
            {
                filter = filter.And(a => a.CreateTime >= StartTime);
            }
            if (EndTime != null)
            {
                filter = filter.And(a => a.CreateTime <= EndTime);
            }
            return filter;
        }

        public void Query()
        {
            Expression<Func<EquipmentAlarmRecord, bool>> filter = GetEquipmentAlarmRecordExpression();
            var result = App.EquipmentService.GetEquipmentAlarmRecordDtos(filter, PageInfo.PageIndex, PageInfo.PageSize, out long totalCount);
            if (result.Success)
            {
                PageInfo.TotalCount = totalCount;
                EquipmentAlarmRecordDtos = result.Data;
            }
            else
            {
                MessageBox.Show($"查询失败:{result.Msg}");
            }
        }

        public async void Export()
        {
            try
            {
                if (MessageBox.Show("是否确认导出?", "注意", MessageBoxButton.YesNo) != MessageBoxResult.Yes)
                {
                    return;
                }
                Expression<Func<EquipmentAlarmRecord, bool>> filter = GetEquipmentAlarmRecordExpression();
                var result = App.EquipmentService.GetEquipmentAlarmRecordDtos(filter);
                if (result.Success)
                {
                    var alarms = result.Data;
                    var config = new MapperConfiguration(cfg => cfg.CreateMap<EquipmentAlarmRecordDto, EquipmentAlarmRecordExcelModel>());
                    var mapper = config.CreateMapper();
                    List<EquipmentAlarmRecordExcelModel> models = new List<EquipmentAlarmRecordExcelModel>();
                    alarms.ForEach(t =>
                    {
                        var temp = mapper.Map<EquipmentAlarmRecordExcelModel>(t);
                        models.Add(temp);
                    });
                    string TimeTxt = DateTime.Now.ToString("yyyy年MM月dd日HH点mm分ss秒");
                    await NPIOHelper.ExportDTtoExcelAsync<EquipmentAlarmRecordExcelModel>(models, "设备报警", string.Format($"{App.ExportPath}设备报警{TimeTxt}.xlsx"), App.ExportPath);
                    MessageBox.Show($"设备报警导出成功");
                }
                else
                {
                    MessageBox.Show($"导出失败:{result.Msg}");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"导出异常:{ex.Message}");
            }
        }

        #endregion

        #region EquipmentAlarmRecordCount

        private Expression<Func<EquipmentAlarmRecord, bool>> GetEquipmentAlarmRecordCountExpression()
        {
            Expression<Func<EquipmentAlarmRecord, bool>> filter = a => true;
            if (!string.IsNullOrWhiteSpace(CountEquipmentCode))
            {
                filter = filter.And(a => a.EquipmentCode.Contains(CountEquipmentCode));
            }
            if (!string.IsNullOrWhiteSpace(CountEquipmentName))
            {
                filter = filter.And(a => a.EquipmentName.Contains(CountEquipmentName));
            }
            if (!string.IsNullOrWhiteSpace(CountEquipmentPropCode))
            {
                filter = filter.And(a => a.EquipmentPropCode.Contains(CountEquipmentPropCode));
            }
            if (!string.IsNullOrWhiteSpace(CountEquipmentPropName))
            {
                filter = filter.And(a => a.EquipmentPropName.Contains(CountEquipmentPropName));
            }
            if (!string.IsNullOrWhiteSpace(CountAlarm))
            {
                filter = filter.And(a => a.Alarm.Contains(CountAlarm));
            }
            return filter;
        }

        public void CountQuery()
        {
            Expression<Func<EquipmentAlarmRecord, bool>> filter = GetEquipmentAlarmRecordCountExpression();
            var result = App.EquipmentService.GetEquipmentAlarmRecordDtoCountsByGroup(filter, (DateTime)StartTime, (DateTime)EndTime, CountPageInfo.PageIndex, CountPageInfo.PageSize, out long totalCount);
            if (result.Success)
            {
                CountPageInfo.TotalCount = totalCount;
                EquipmentAlarmRecordDtoCounts = result.Data;
            }
            else
            {
                MessageBox.Show($"查询失败:{result.Msg}");
            }
        }

        public async void CountExport()
        {
            try
            {
                if (MessageBox.Show("是否确认导出?", "注意", MessageBoxButton.YesNo) != MessageBoxResult.Yes)
                {
                    return;
                }
                Expression<Func<EquipmentAlarmRecord, bool>> filter = GetEquipmentAlarmRecordCountExpression();
                var result = App.EquipmentService.GetEquipmentAlarmRecordDtoCountsByGroup(filter, (DateTime)StartTime, (DateTime)EndTime);
                if (result.Success)
                {
                    var alarmscounts = result.Data;
                    var config = new MapperConfiguration(cfg => cfg.CreateMap<EquipmentAlarmRecordDto, EquipmentAlarmRecordCountsExcelModel>());
                    var mapper = config.CreateMapper();
                    List<EquipmentAlarmRecordCountsExcelModel> models = new List<EquipmentAlarmRecordCountsExcelModel>();
                    alarmscounts.ForEach(t =>
                    {
                        var temp = mapper.Map<EquipmentAlarmRecordCountsExcelModel>(t);
                        models.Add(temp);
                    });
                    string TimeTxt = DateTime.Now.ToString("yyyy年MM月dd日HH点mm分ss秒");
                    await NPIOHelper.ExportDTtoExcelAsync<EquipmentAlarmRecordCountsExcelModel>(models, "设备报警统计", string.Format($"{App.ExportPath}设备报警统计{TimeTxt}.xlsx"), App.ExportPath);
                    MessageBox.Show($"设备报警统计导出成功");
                }
                else
                {
                    MessageBox.Show($"导出失败:{result.Msg}");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"导出异常:{ex.Message}");
            }
        }

        #endregion

        #endregion

    }
}