EquipmentStatusRecordVM.cs 5.05 KB
using AutoMapper;
using HHECS.Application.Enums;
using HHECS.Infrastructure.CommonHelper;
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 EquipmentStatusRecordVM : VMBase
    {
        public string EquipmentCode { get; set; }

        public string EquipmentName { get; set; }

        public string EquipmentStatus { get; set; }

        public object RecordStatus { 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<EquipmentStatusRecordDto> EquipmentStatusRecordDtos { get; set; }

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

        public Dictionary<string, object> EquipmentStatuses { get; set; }

        public Dictionary<string, object> RecordStatuses { get; set; }

        public EquipmentStatusRecordVM()
        {
            var equipmentStatuses = EnumHelper.EnumListDicString<EquipmentStatusRecordStatus>("全部", "");
            EquipmentStatuses = equipmentStatuses;

            Dictionary<string, object> recordStatuses = new Dictionary<string, object>()
            {
                { "全部", "" },
                { "未结束", false },
                { "已结束", true }
            };
            RecordStatuses = recordStatuses;
        }

        private Expression<Func<EquipmentStatusRecord, bool>> GetEquipmentStatusRecordExpression()
        {
            Expression<Func<EquipmentStatusRecord, 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(EquipmentStatus))
            {
                filter = filter.And(a => a.EquipmentStatus == EquipmentStatus);
            }
            if (!string.IsNullOrWhiteSpace(RecordStatus.ToString()))
            {
                filter = filter.And(a => a.IsEnd == (bool)RecordStatus);
            }
            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<EquipmentStatusRecord, bool>> filter = GetEquipmentStatusRecordExpression();
            var result = App.EquipmentService.GetEquipmentStatusRecordDtos(filter, PageInfo.PageIndex, PageInfo.PageSize, out long totalCount);
            if (result.Success)
            {
                PageInfo.TotalCount = totalCount;
                EquipmentStatusRecordDtos = result.Data;
            }
            else
            {
                MessageBox.Show($"查询失败:{result.Msg}");
            }
        }

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