ErrorHandleGuideVM.cs 5.71 KB
using AutoMapper;
using HHECS.Application.Enums;
using HHECS.Application.Error;
using HHECS.Infrastructure.CommonHelper;
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.Text;
using System.Threading.Tasks;
using System.Windows;
using MessageBox = HandyControl.Controls.MessageBox;

namespace HHECS.WinClient.View.ErrorHandleGuideInfo
{
    public class ErrorHandleGuideVM : VMBase
    {
        public string Code { get; set; }
        public string Module { get; set; }
        public int Level { get; set; }
        public string Description { get; set; }

        public List<ErrorCode> ErrorCodes { get; set; }

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

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

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

        public ErrorHandleGuideVM()
        {
            Modules = EnumHelper.EnumListDic<ModuleConst>("全部", "");

            Levels = EnumHelper.EnumListDic<ErrorCodeLevel>("全部", "0");
        }

        public void Query()
        {
            Expression<Func<ErrorCode, bool>> filter = t => true;
            if (!string.IsNullOrWhiteSpace(Code))
            {
                filter = filter.And(t => t.Code.Contains(Code));
            }
            if (!string.IsNullOrWhiteSpace(Module))
            {
                filter = filter.And(t => t.Module.Contains(Module));
            }
            if (Level != 0)
            {
                filter = filter.And(t => t.Level == Level);
            }
            if (!string.IsNullOrWhiteSpace(Description))
            {
                filter = filter.And(t => t.Description.Contains(Description));
            }

            var result = App.ErrorCodeService.GetErrorCodes(filter, PageInfo.PageIndex, PageInfo.PageSize, out long totalCount);
            if (result.Success)
            {
                PageInfo.TotalCount = totalCount;
                ErrorCodes = result.Data;
            }
            else
            {
                MessageBox.Show($"查询失败:{result.Msg}");
            }
        }

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

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

        public void Delete(List<ErrorCode> errorCodes)
        {
            if (errorCodes == null || errorCodes.Count == 0)
            {
                MessageBox.Show("未选中数据");
                return;
            }
            if (MessageBox.Show("是否确认删除?", "警告", MessageBoxButton.YesNo) != MessageBoxResult.Yes)
            {
                return;
            }
            var bllResult = App.ErrorCodeService.DeleteErrorCodes(errorCodes);
            if (bllResult.Success)
            {
                App.LogService.LogOperation(Title.ErrorGuideDelete, ModuleConst.ErrorHandleGuide, $"异常处理指引删除成功.数据:{JsonConvert.SerializeObject(errorCodes.Select(t => new { Id = t.Id, Code = t.Code, Module = t.Module, Level = t.Level }))}", bllResult.Code.ToString(), App.User.UserCode);
                MessageBox.Show("删除成功");
            }
            else
            {
                App.LogService.LogOperation(Title.ErrorGuideDelete, ModuleConst.ErrorHandleGuide, $"异常处理指引删除失败.数据:{JsonConvert.SerializeObject(errorCodes.Select(t => new { Id = t.Id, Code = t.Code, Module = t.Module, Level = t.Level }))},详情:{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<ErrorCode, bool>> filter = t => true;
                var result = App.ErrorCodeService.GetErrorCodes(filter);
                if (result.Success)
                {
                    var errorCodes = result.Data;
                    var config = new MapperConfiguration(cfg => cfg.CreateMap<ErrorCode, ErrorCodeExcelModel>());
                    var mapper = config.CreateMapper();
                    List<ErrorCodeExcelModel> models = new List<ErrorCodeExcelModel>();
                    errorCodes.ForEach(t =>
                    {
                        var temp = mapper.Map<ErrorCodeExcelModel>(t);
                        models.Add(temp);
                    });
                    string TimeTxt = DateTime.Now.ToString("yyyy年MM月dd日HH点mm分ss秒");
                    await NPIOHelper.ExportDTtoExcelAsync<ErrorCodeExcelModel>(models, "异常指引", string.Format($"{App.ExportPath}异常指引{TimeTxt}.xlsx"), App.ExportPath);
                    MessageBox.Show($"异常指引导出成功");
                }
                else
                {
                    MessageBox.Show($"导出失败:{result.Msg}");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"导出异常:{ex.Message}");
            }
        }

    }
}