EquipmentMaintainRecordVM.cs 8.17 KB
using AutoMapper;
using HHECS.Application.Enums;
using HHECS.Infrastructure.CommonHelper;
using HHECS.Infrastructure.Excel;
using HHECS.Model.Entities;
using HHECS.Model.ExcelModels;
using HHECS.WinCommon.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Windows;
using MessageBox = HandyControl.Controls.MessageBox;

namespace HHECS.WinClient.View.EquipmentInfo
{
    public class EquipmentMaintainRecordVM : VMBase
    {
        public int EquipmentId { get; set; }

        public int MaintainOperationId { get; set; }

        public string MaintainOperationTargetComponent { get; set; }

        public int MaintainStatus { 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<EquipmentMaintainRecord> EquipmentMaintainRecords { get; set; }

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

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

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

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

        public EquipmentMaintainRecordVM()
        {
            var equiomentsResult = App.EquipmentService.GetEquipments(t => true);
            if (equiomentsResult.Success)
            {
                var equipments = equiomentsResult.Data;
                equipments.Insert(0, new Equipment() { Id = 0, Name = "全部" });
                Equipments = equipments.ToDictionary(t => t.Name, x => (object)x.Id);
            }

            var maintainOperationResult = App.EquipmentService.GetEquipmentMaintainOperations(t => true);
            if (maintainOperationResult.Success)
            {
                var maintainOperations = maintainOperationResult.Data;
                maintainOperations.Insert(0, new EquipmentMaintainOperation() { Id = 0, Name = "全部" });
                MaintainOperations = maintainOperations.ToDictionary(t => t.Name, x => (object)x.Id);
            }

            MaintainStatuses = EnumHelper.EnumListDic<EquipmentMaintainStatus>("全部", "-1");
        }

        private Expression<Func<EquipmentMaintainRecord, bool>> GetEquipmentMaintainRecordExpression()
        {
            Expression<Func<EquipmentMaintainRecord, bool>> filter = t => true;
            if (EquipmentId != 0)
            {
                filter = filter.And(t => t.EquipmentId == EquipmentId);
            }
            if (MaintainOperationId != 0)
            {
                var ruledetailsResult = App.EquipmentService.GetEquipmentMaintainRuleDetails(a => a.EquipmentMaintainOperationId == MaintainOperationId);
                if (ruledetailsResult.Success && ruledetailsResult.Data.Count > 0)
                {
                    var ruledetailids = ruledetailsResult.Data.Select(a => a.Id).ToList();
                    filter = filter.And(t => ruledetailids.Contains(t.EquipmentMaintainRuleDetailId));
                }
                else
                {
                    filter = filter.And(t => false);
                }
            }
            if (!string.IsNullOrWhiteSpace(MaintainOperationTargetComponent))
            {
                var operationsResult = App.EquipmentService.GetEquipmentMaintainOperations(a => a.Targetcomponent.Contains(MaintainOperationTargetComponent));
                if (operationsResult.Success && operationsResult.Data.Count > 0)
                {
                    var operationIds = operationsResult.Data.Select(a => a.Id).ToList();
                    var ruledetailsResult = App.EquipmentService.GetEquipmentMaintainRuleDetails(t => operationIds.Contains(t.EquipmentMaintainOperationId));
                    if (ruledetailsResult.Success && ruledetailsResult.Data.Count > 0)
                    {
                        var ruledetailids = ruledetailsResult.Data.Select(t => t.Id).ToList();
                        filter = filter.And(t => ruledetailids.Contains(t.EquipmentMaintainRuleDetailId));
                    }
                    else
                    {
                        filter = filter.And(t => false);
                    }
                }
                else
                {
                    filter = filter.And(t => false);
                }
            }
            if (MaintainStatus != -1)
            {
                filter = filter.And(a => a.Status == MaintainStatus);
            }
            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<EquipmentMaintainRecord, bool>> filter = GetEquipmentMaintainRecordExpression();
            var result = App.EquipmentService.GetEquipmentMaintainRecords(filter, PageInfo.PageIndex, PageInfo.PageSize, out long totalCount);
            if (result.Success)
            {
                PageInfo.TotalCount = totalCount;
                EquipmentMaintainRecords = result.Data;
            }
            else
            {
                MessageBox.Show($"查询失败:{result.Msg}");
            }
        }

        public void Edit(EquipmentMaintainRecord equipmentMaintainRecord)
        {
            if (equipmentMaintainRecord == null)
            {
                MessageBox.Show("请选中数据");
                return;
            }
            WinEquipmentMaintainRecordEdit win = new WinEquipmentMaintainRecordEdit(equipmentMaintainRecord.Id);
            win.ShowDialog();
            Query();
        }

        public async void Export()
        {
            try
            {
                if (MessageBox.Show("是否确认导出?", "注意", MessageBoxButton.YesNo) != MessageBoxResult.Yes)
                {
                    return;
                }
                Expression<Func<EquipmentMaintainRecord, bool>> filter = t => true;
                var result = App.EquipmentService.GetEquipmentMaintainRecords(filter);
                if (result.Success)
                {
                    var records = result.Data;
                    var config = new MapperConfiguration(cfg =>
                    cfg.CreateMap<EquipmentMaintainRecord, EquipmentMaintainRecordExcelModel>()
                    .ForMember(dest => dest.EquipmentName, opt => opt.MapFrom(src => src.Equipment.Name))
                    .ForMember(dest => dest.OperationName, opt => opt.MapFrom(src => src.EquipmentMaintainRuleDetail.EquipmentMaintainOperation.Name))
                    .ForMember(dest => dest.Targetcomponent, opt => opt.MapFrom(src => src.EquipmentMaintainRuleDetail.EquipmentMaintainOperation.Targetcomponent))
                    .ForMember(dest => dest.Tools, opt => opt.MapFrom(src => src.EquipmentMaintainRuleDetail.EquipmentMaintainOperation.Tools))
                    .ForMember(dest => dest.OperationDescription, opt => opt.MapFrom(src => src.EquipmentMaintainRuleDetail.EquipmentMaintainOperation.Operation))
                    );
                    var mapper = config.CreateMapper();
                    List<EquipmentMaintainRecordExcelModel> models = new List<EquipmentMaintainRecordExcelModel>();
                    records.ForEach(t =>
                    {
                        var temp = mapper.Map<EquipmentMaintainRecordExcelModel>(t);
                        models.Add(temp);
                    });
                    string TimeTxt = DateTime.Now.ToString("yyyy年MM月dd日HH点mm分ss秒");
                    await NPIOHelper.ExportDTtoExcelAsync<EquipmentMaintainRecordExcelModel>(models, "设备维护记录", string.Format($"{App.ExportPath}设备维护记录{TimeTxt}.xlsx"), App.ExportPath);
                    MessageBox.Show($"设备维护记录导出成功");
                }
                else
                {
                    MessageBox.Show($"导出失败:{result.Msg}");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"导出异常:{ex.Message}");
            }
        }
    }
}