EquipmentMaintainRuleVM.cs 12.7 KB
using AutoMapper;
using HHECS.Application.Enums;
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.EquipmentInfo
{
    public class EquipmentMaintainRuleVM : VMBase
    {
        #region 属性

        #region EquipmentMaintainRule

        public string Code { get; set; }

        public string Name { get; set; }

        public string Remark { get; set; }

        public List<EquipmentMaintainRule> EquipmentMaintainRules { get; set; }

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

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

        #endregion

        #region EquipmentMaintainRuleDetail

        public EquipmentMaintainRule CurrentEquipmentMaintainRule { get; set; }

        public List<EquipmentMaintainRuleDetail> EquipmentMaintainRuleDetails { get; set; }

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

        #endregion

        #endregion

        #region 方法

        #region EquipmentMaintainRule

        public void Query()
        {
            Expression<Func<EquipmentMaintainRule, 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(Remark))
            {
                filter = filter.And(t => t.Remark.Contains(Remark));
            }

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

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

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

        public void Delete(List<EquipmentMaintainRule> equipmentMaintainRules)
        {
            if (equipmentMaintainRules == null || equipmentMaintainRules.Count == 0)
            {
                MessageBox.Show("未选中数据");
                return;
            }
            if (MessageBox.Show("是否确认删除?", "警告", MessageBoxButton.YesNo) != MessageBoxResult.Yes)
            {
                return;
            }
            var bllResult = App.EquipmentService.DeleteEquipmentMaintainRules(equipmentMaintainRules);
            if (bllResult.Success)
            {
                App.LogService.LogOperation(Title.MaintainRuleDelete, ModuleConst.MaintainRule, $"维护规则删除成功.数据:{JsonConvert.SerializeObject(equipmentMaintainRules.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.MaintainRuleDelete, ModuleConst.MaintainRule, $"维护规则删除失败.数据:{JsonConvert.SerializeObject(equipmentMaintainRules.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<EquipmentMaintainRule, bool>> filter = t => true;
                var result = App.EquipmentService.GetEquipmentMaintainRules(filter);
                if (result.Success && result.Data.Count > 0)
                {
                    var rules = result.Data;
                    var detailsResult = App.EquipmentService.GetEquipmentMaintainRuleDetails(a => true);
                    if (detailsResult.Success)
                    {
                        var details = detailsResult.Data;
                        List<EquipmentMaintainRuleExcelModel> models = new List<EquipmentMaintainRuleExcelModel>();
                        int flag = 1;
                        int count = 0;
                        foreach (var rule in rules)
                        {
                            flag = 1;
                            foreach (var detail in details)
                            {
                                if (rule.Id == detail.EquipmentMaintainRuleId)
                                {
                                    EquipmentMaintainRuleExcelModel model = new EquipmentMaintainRuleExcelModel();
                                    model.Id = rule.Id;
                                    model.Code = rule.Code;
                                    model.Name = rule.Name;
                                    model.Created = rule.Created;
                                    model.CreatedBy = rule.CreatedBy;
                                    model.Updated = rule.Updated;
                                    model.UpdatedBy = rule.UpdatedBy;
                                    model.DetailId = detail.Id;
                                    if (detail.EquipmentMaintainOperation != null)
                                    {
                                        model.OperationName = detail.EquipmentMaintainOperation.Name;
                                        model.Targetcomponent = detail.EquipmentMaintainOperation.Targetcomponent;
                                        model.Tools = detail.EquipmentMaintainOperation.Tools;
                                        model.OperationDescription = detail.EquipmentMaintainOperation.Operation;
                                    }
                                    model.Corn = detail.Cron;
                                    model.DetailCreated = detail.Created;
                                    model.DetailCreatedBy = detail.CreatedBy;
                                    model.Updated = detail.Updated;
                                    model.UpdatedBy = detail.UpdatedBy;

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

        #endregion

        #region EquipmentMaintainRuleDetail

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

                var detailResult = App.EquipmentService.GetEquipmentMaintainRuleDetails(t => t.EquipmentMaintainRuleId == quipmentMaintainRule.Id);
                if (detailResult.Success)
                {
                    EquipmentMaintainRuleDetails = detailResult.Data;
                }
                else
                {
                    EquipmentMaintainRuleDetails = null;
                    MessageBox.Show($"查询当前维护规则的明细失败:{detailResult.Msg}");
                }
                IsTabDetailSelected = true;
            }
            else
            {
                MessageBox.Show($"未能查询到主数据,请刷新");
                IsTabMainSelected = true;
            }
        }

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

        public void EditDetail(EquipmentMaintainRuleDetail equipmentMaintainRuleDetail)
        {
            if (equipmentMaintainRuleDetail == null)
            {
                MessageBox.Show("请选中一条数据");
                return;
            }
            WinEquipmentMaintainRuleDetailAddOrEdit win = new WinEquipmentMaintainRuleDetailAddOrEdit(equipmentMaintainRuleDetail.Id, equipmentMaintainRuleDetail.EquipmentMaintainRuleId);
            win.ShowDialog();
            QueryDetail(CurrentEquipmentMaintainRule);
        }

        public void DeleteDetail(List<EquipmentMaintainRuleDetail> equipmentMaintainRuleDetails)
        {
            if (equipmentMaintainRuleDetails == null || equipmentMaintainRuleDetails.Count == 0)
            {
                MessageBox.Show("未选中数据");
                return;
            }
            if (MessageBox.Show("是否确认删除?", "警告", MessageBoxButton.YesNo) != MessageBoxResult.Yes)
            {
                return;
            }
            var bllResult = App.EquipmentService.DeleteEquipmentMaintainRuleDetails(equipmentMaintainRuleDetails);
            if (bllResult.Success)
            {
                App.LogService.LogOperation(Title.MaintainRuleDetailDelete, ModuleConst.MaintainRule, $"维护规则明细删除成功.规则Id:{CurrentEquipmentMaintainRule.Id},数据:{JsonConvert.SerializeObject(equipmentMaintainRuleDetails.Select(t => new { Id = t.Id, OperationName = t.EquipmentMaintainOperation?.Name, Corn = t.Cron }))}", bllResult.Code.ToString(), App.User.UserCode);
                MessageBox.Show("删除成功");
            }
            else
            {
                App.LogService.LogOperation(Title.MaintainRuleDetailDelete, ModuleConst.MaintainRule, $"维护规则明细删除失败.规则Id:{CurrentEquipmentMaintainRule.Id},数据:{JsonConvert.SerializeObject(equipmentMaintainRuleDetails.Select(t => new { Id = t.Id, OperationName = t.EquipmentMaintainOperation?.Name, Corn = t.Cron }))}.详情:{bllResult.Msg}", bllResult.Code.ToString(), App.User.UserCode);
                MessageBox.Error($"删除失败:{bllResult.Msg}");
            }
            QueryDetail(CurrentEquipmentMaintainRule);
        }

        #endregion

        #endregion

    }
}