EquipmentTypeVM.cs 16.1 KB
using AutoMapper;
using HHECS.Application.Enums;
using HHECS.BllModel;
using HHECS.Infrastructure.Excel;
using HHECS.Model.Entities;
using HHECS.Model.ExcelModels;
using HHECS.WinCommon.ViewModel;
using Newtonsoft.Json;
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 EquipmentTypeVM : VMBase
    {
        #region 属性

        #region EquipmentType

        public string Code { get; set; }

        public string Name { get; set; }

        public string Description { get; set; }

        public List<EquipmentType> EquipmentTypes { get; set; }

        public bool IsTabMainSelected { get; set; } = true;

        #endregion

        #region EquipmentTypePropTemplate

        public string PropTemplateCode { get; set; }

        public string PropTemplateName { get; set; }

        public string PropType { get; set; }

        public EquipmentType CurrentEquipmentType { get; set; }

        public List<EquipmentTypePropTemplate> EquipmentTypePropTemplates { get; set; }

        public bool IsTabDetailSelected { get; set; } = false;

        #endregion

        #endregion

        #region 方法

        #region EquipmentType

        public void Query()
        {
            Expression<Func<EquipmentType, bool>> filter = t => true;
            if (!String.IsNullOrWhiteSpace(Code))
            {
                filter = filter.And(t => t.Code.Contains(Code));
            }
            if (!String.IsNullOrWhiteSpace(Name))
            {
                filter = filter.And(t => t.Name.Contains(Name));
            }
            if (!String.IsNullOrWhiteSpace(Description))
            {
                filter = filter.And(t => t.Description.Contains(Description));
            }

            var result = App.EquipmentService.GetEquipmentTypes(filter);
            if (result.Success)
            {
                EquipmentTypes = result.Data;
            }
            else
            {
                MessageBox.Show($"查询失败:{result.Msg}");
            }
        }

        public void New()
        {
            WinEquipmentTypeAddOrEdit win = new WinEquipmentTypeAddOrEdit(0);
            win.ShowDialog();
            Query();
        }

        public void ItemCopy(EquipmentType equipmentType)
        {
            if (equipmentType == null)
            {
                MessageBox.Show("请选中一条数据");
                return;
            }
            var result = App.EquipmentService.CopyEquipmentType(equipmentType.Id, App.User.UserCode);
            if (result.Success)
            {
                App.LogService.LogOperation(Title.EquipmentTypeCopy, ModuleConst.EquipmentType, $"设备类型复制成功.数据:{JsonConvert.SerializeObject(new { Code = equipmentType.Code + 2, Name = equipmentType.Name })}", result.Code.ToString(), App.User.UserCode);
                MessageBox.Show("复制成功");
            }
            else
            {
                App.LogService.LogOperation(Title.EquipmentTypeCopy, ModuleConst.EquipmentType, $"设备类型复制失败.数据:{JsonConvert.SerializeObject(new { Code = equipmentType.Code + 2, Name = equipmentType.Name })}.详情:{result.Msg}", result.Code.ToString(), App.User.UserCode);
                MessageBox.Show($"复制失败:{result.Msg}");
            }
            Query();
        }

        public void Edit(EquipmentType equipmentType)
        {
            if (equipmentType == null)
            {
                MessageBox.Show("请选中一条数据");
                return;
            }
            WinEquipmentTypeAddOrEdit win = new WinEquipmentTypeAddOrEdit(equipmentType.Id);
            win.ShowDialog();
            Query();
        }

        public void Delete(List<EquipmentType> equipmentTypes)
        {
            if (equipmentTypes == null || equipmentTypes.Count == 0)
            {
                MessageBox.Show("未选中数据");
                return;
            }
            if (MessageBox.Show("是否确认删除?", "警告", MessageBoxButton.YesNo) != MessageBoxResult.Yes)
            {
                return;
            }
            var bllResult = App.EquipmentService.DeleteEquipmentTypes(equipmentTypes);
            if (bllResult.Success)
            {
                App.LogService.LogOperation(Title.EquipmentTypeDelete, ModuleConst.EquipmentType, $"设备类型删除成功.数据:{JsonConvert.SerializeObject(equipmentTypes.Select(t => new { Id = t.Id, Code = t.Code, Name = t.Name }))}", bllResult.Code.ToString(), App.User.UserCode);
                MessageBox.Show("删除成功");
            }
            else
            {
                App.LogService.LogOperation(Title.EquipmentTypeDelete, ModuleConst.EquipmentType, $"设备类型删除失败.数据:{JsonConvert.SerializeObject(equipmentTypes.Select(t => new { Id = t.Id, Code = t.Code, Name = t.Name }))}.详情:{bllResult.Msg}", bllResult.Code.ToString(), App.User.UserCode);
                MessageBox.Error($"删除失败:{bllResult.Msg}");
            }
            Query();
        }

        public async void Export()
        {
            try
            {
                if (MessageBox.Show("是否确认导出?", "注意", MessageBoxButton.YesNo) != MessageBoxResult.Yes)
                {
                    return;
                }
                Expression<Func<EquipmentType, bool>> filter = t => true;
                var result = App.EquipmentService.GetEquipmentTypes(filter);
                if (result.Success)
                {
                    var types = result.Data;
                    var config = new MapperConfiguration(cfg => cfg.CreateMap<EquipmentType, EquipmentTypeExcelModel>());
                    var mapper = config.CreateMapper();
                    List<EquipmentTypeExcelModel> models = new List<EquipmentTypeExcelModel>();
                    types.ForEach(t =>
                    {
                        var temp = mapper.Map<EquipmentTypeExcelModel>(t);
                        models.Add(temp);
                    });
                    string TimeTxt = DateTime.Now.ToString("yyyy年MM月dd日HH点mm分ss秒");
                    await NPIOHelper.ExportDTtoExcelAsync<EquipmentTypeExcelModel>(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 EquipmentTypePropTemplate

        public void QueryDetail(EquipmentType equipmentType)
        {
            if (equipmentType == null)
            {
                MessageBox.Show("未选中主数据!");
                IsTabMainSelected = true;
                return;
            }
            //重新查询一遍主数据,防止同步删除
            var result = App.EquipmentService.GetEquipmentTypes(t => t.Id == equipmentType.Id);
            if (result.Success && result.Data.Count > 0)
            {
                CurrentEquipmentType = result.Data[0];

                Expression<Func<EquipmentTypePropTemplate, bool>> filter = t => t.EquipmentTypeId == equipmentType.Id;
                if (!String.IsNullOrWhiteSpace(PropTemplateCode))
                {
                    filter = filter.And(t => t.Code.Contains(PropTemplateCode));
                }
                if (!String.IsNullOrWhiteSpace(PropTemplateName))
                {
                    filter = filter.And(t => t.Name.Contains(PropTemplateName));
                }
                if (!String.IsNullOrWhiteSpace(PropType))
                {
                    filter = filter.And(t => t.PropType == PropType);
                }

                var detailResult = App.EquipmentService.GetEquipmentTypePropTemplates(filter);
                if (detailResult.Success)
                {
                    EquipmentTypePropTemplates = detailResult.Data;
                }
                else
                {
                    EquipmentTypePropTemplates = null;
                    MessageBox.Show($"查询当前设备类型的属性模板失败:{detailResult.Msg}");
                }
                IsTabDetailSelected = true;
            }
            else
            {
                MessageBox.Show($"未能查询到主数据,请刷新");
                IsTabMainSelected = true;
            }
        }

        public void NewDetail()
        {
            if (CurrentEquipmentType == null)
            {
                MessageBox.Show("未选中主数据!请通过选中主数据,双击进入详情界面.");
                IsTabMainSelected = true;
                return;
            }
            WinEquipmentTypePropTemplateAddOrEdit win = new WinEquipmentTypePropTemplateAddOrEdit(0, CurrentEquipmentType.Id);
            win.ShowDialog();
            QueryDetail(CurrentEquipmentType);
        }

        public void EditDetail(EquipmentTypePropTemplate equipmentTypePropTemplate)
        {
            if (equipmentTypePropTemplate == null)
            {
                MessageBox.Show("请选中一条数据");
                return;
            }
            WinEquipmentTypePropTemplateAddOrEdit win = new WinEquipmentTypePropTemplateAddOrEdit(equipmentTypePropTemplate.Id, equipmentTypePropTemplate.EquipmentTypeId);
            win.ShowDialog();
            QueryDetail(CurrentEquipmentType);
        }

        public void DeleteDetail(List<EquipmentTypePropTemplate> equipmentTypePropTemplates)
        {
            if (equipmentTypePropTemplates == null || equipmentTypePropTemplates.Count == 0)
            {
                MessageBox.Show("未选中数据");
                return;
            }
            if (MessageBox.Show("是否确认删除?", "警告", MessageBoxButton.YesNo) != MessageBoxResult.Yes)
            {
                return;
            }
            var bllResult = App.EquipmentService.DeleteEquipmentTypePropTemplates(equipmentTypePropTemplates);
            if (bllResult.Success)
            {
                App.LogService.LogOperation(Title.PropTemplateDelete, ModuleConst.EquipmentType, $"属性模板删除成功.设备类型Id:{CurrentEquipmentType.Id},数据:{JsonConvert.SerializeObject(equipmentTypePropTemplates.Select(t => new { Id = t.Id, Code = t.Code, Name = t.Name }))}", bllResult.Code.ToString(), App.User.UserCode);
                MessageBox.Show("删除成功");
            }
            else
            {
                App.LogService.LogOperation(Title.PropTemplateDelete, ModuleConst.EquipmentType, $"属性模板删除失败.设备类型Id:{CurrentEquipmentType.Id},数据:{JsonConvert.SerializeObject(equipmentTypePropTemplates.Select(t => new { Id = t.Id, Code = t.Code, Name = t.Name }))}.详情:{bllResult.Msg}", bllResult.Code.ToString(), App.User.UserCode);
                MessageBox.Error($"删除失败:{bllResult.Msg}");
            }
            QueryDetail(CurrentEquipmentType);
        }

        public async void ExportDetail()
        {
            MessageBoxResult msbResult = MessageBox.Show("是否导出所有设备类型的属性明细\n\n提示:\n  “是”:导出所有设备类型的属性明细\n  “否”:导出当前设备类型的属性明细\n  “取消”:取消导出操作", "注意", MessageBoxButton.YesNoCancel);
            bool isAllExport = false;
            switch (msbResult)
            {
                case MessageBoxResult.Yes: isAllExport = true; break;
                case MessageBoxResult.No: isAllExport = false; break;
                default: return;
            }
            try
            {
                BllResult<List<EquipmentType>> result = null;
                if (isAllExport)
                {
                    result = App.EquipmentService.GetEquipmentTypes(a => true);
                }
                else
                {
                    result = App.EquipmentService.GetEquipmentTypes(a => a.Id == CurrentEquipmentType.Id);
                }
                if (result.Success && result.Data.Count > 0)
                {
                    var types = result.Data;
                    var templatesResult = App.EquipmentService.GetEquipmentTypePropTemplates(a => true);
                    if (templatesResult.Success)
                    {
                        var templates = templatesResult.Data;
                        List<EquipmentTypePropTemplateExcelModel> models = new List<EquipmentTypePropTemplateExcelModel>();
                        int flag = 1;
                        int count = 0;
                        foreach (var type in types)
                        {
                            flag = 1;
                            foreach (var template in templates)
                            {
                                if (type.Id == template.EquipmentTypeId)
                                {
                                    EquipmentTypePropTemplateExcelModel templatemodel = new EquipmentTypePropTemplateExcelModel();
                                    templatemodel.EquipmentTypeId = type.Id;
                                    templatemodel.EquipmentTypeCode = type.Code;
                                    templatemodel.EquipmentTypeName = type.Name;
                                    templatemodel.Id = template.Id;
                                    templatemodel.Code = template.Code;
                                    templatemodel.Name = template.Name;
                                    templatemodel.Description = template.Description;
                                    templatemodel.PropType = template.PropType;
                                    templatemodel.DataType = template.DataType;
                                    templatemodel.Address = template.Address;
                                    templatemodel.MonitorCompareValue = template.MonitorCompareValue;
                                    templatemodel.MonitorNormal = template.MonitorNormal;
                                    templatemodel.MonitorFailure = template.MonitorFailure;
                                    templatemodel.Created = template.CreateTime;
                                    templatemodel.CreatedBy = template.CreateBy;
                                    templatemodel.Updated = template.UpdateTime;
                                    templatemodel.UpdatedBy = template.UpdateBy;

                                    models.Add(templatemodel);
                                    flag = 0;
                                }
                            }
                            if (flag == 1)
                            {
                                count++;
                            }
                        }
                        //获取实时时间并格式化
                        string TimeTxt = DateTime.Now.ToString("yyyy年MM月dd日HH点mm分ss秒");
                        //将数据导出到excel
                        await NPIOHelper.ExportDTtoExcelAsync<EquipmentTypePropTemplateExcelModel>(models, "设备类型属性明细", string.Format($"{App.ExportPath}设备类型属性明细{TimeTxt}.xlsx"), App.ExportPath);
                        string str = "";
                        if (count > 0)
                        {
                            str += $"\n其中{count}个设备类型没有属性明细,已跳过";
                        }
                        MessageBox.Show($"设备类型属性明细导出成功" + str);
                    }
                    else
                    {
                        MessageBox.Show($"获取数据出错:{templatesResult.Msg}");
                    }
                }
                else
                {
                    MessageBox.Show($"导出失败:未获取到设备类型主数据.");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"导出异常:{ex.Message}");
            }
        }

        #endregion

        #endregion
    }
}