فهرست منبع

包含数据检查设置窗体

mengxiangge 6 سال پیش
والد
کامیت
77c56f7c42

+ 193 - 0
MBI/SAGA.MBI/ToolsData/DataCheck/MissDutyOrModeCheck.cs

@@ -0,0 +1,193 @@
+/* ==============================================================================
+ * 功能描述:岗位和资产信息点一致性检查
+ * 创 建 者:Garrett
+ * 创建日期:2018/10/23 15:08:55
+ * ==============================================================================*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using Autodesk.Revit.DB;
+using Autodesk.Revit.DB.Mechanical;
+using Newtonsoft.Json.Linq;
+using NPOI.SS.UserModel;
+using SAGA.DotNetUtils.Extend;
+using SAGA.DotNetUtils.Others;
+using SAGA.MBI.DataArrange;
+using SAGA.MBI.JsonConvert;
+using SAGA.MBI.Model;
+using SAGA.MBI.RequestData;
+using SAGA.MBI.Tools;
+using SAGA.MBI.ToolsData.CheckBase;
+using SAGA.MBI.ToolsData.ModeCheck;
+using SAGA.RevitUtils.Extends;
+
+namespace SAGA.MBI.ToolsData.DataCheck
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    class MissDutyOrMode : DataCheckBase
+    {
+        public MissDutyOrMode()
+        {
+            Name = "岗位与模型一致性检查";
+        }
+        [DataCheckProcessAspect]
+        public override bool Check()
+        {
+            IsRight = GetCheckResult();
+            return IsRight;
+        }
+
+        public override void Correct()
+        {
+            throw new NotImplementedException();
+        }
+
+        #region CheckMethod
+        /// <summary>
+        /// 缓存建筑下的所有岗位信息
+        /// </summary>
+        /// <returns></returns>
+        private List<MRevitEquipBase> CacheBuildingDutys()
+        {
+            return CommonConvert.CacheEqEc(this.Context.BuildingId);
+        }
+        /// <summary>
+        /// 缓存 建筑下的所有资产
+        /// </summary>
+        /// <returns></returns>
+        private List<MEquipFM> CacheBuildingFMs()
+        {
+            return MatchFMConvert.GetAllEquipFmFromScanBuilding(this.Context.BuildingId); ;
+        }
+        /// <summary>
+        /// 对比信息点是否一致
+        /// </summary>
+        /// <returns></returns>
+        private bool GetCheckResult()
+        {
+            bool result = true;
+            string buildingId = this.Context.BuildingId;
+            if (buildingId.IsNullOrEmptyExt())
+            {
+                result = false;
+                return result;
+            }
+            var dutys = CacheBuildingDutys();
+            var fms = CacheBuildingFMs();
+            foreach (var duty in dutys)       {
+                while (true)
+                {
+                    string fmid = duty.FMID;
+                    if (fmid.IsNullOrEmptyExt()) break;
+                    var fm = fms.FirstOrDefault(t => t.Id == fmid);
+                    if (fm == null) break;
+                    var rs = GetCheckResult(duty,fm);
+                    if (rs == null) break;
+                    Results.Add(rs);
+                    break;
+                }
+            }
+            return result;
+        }
+
+        private DutyFMInfoCheckResult GetCheckResult(MRevitEquipBase duty, MEquipFM fm)
+        {
+            DutyFMInfoCheckResult result = null;
+            try
+            {
+                var dutyJObject = duty.CloundJObject;
+                var fmJson = fm.FMJson;
+                var fmJObject = JObject.Parse(fmJson);
+
+                PropertyDefineTb pdtb = PEPCodeConvert.GetPropertyDefineTb(duty.EquipClassCode);
+                StringBuilder sb = new StringBuilder();
+                foreach (KeyValuePair<string, JToken> pair in dutyJObject)
+                {
+                    string key = pair.Key;
+                    string dutyValue = pair.Value.ToString();
+                    string fmValue = fmJObject.GetValueEx(key);
+                    if (dutyValue.IsNotNullEmptyExt() && fmValue.IsNotNullEmptyExt() && !dutyValue.Equals(fmValue))
+                    {
+                        var define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == key);
+                        sb.Append($"{define?.Name??key}、");
+                    }
+                }
+                result = new DutyFMInfoCheckResult();
+                result.FloorName = DalProjectTree.GetFloorNameByFloorId(duty.FloorId);
+                result.DutyId = duty.Id;
+                result.DutyName = duty.ToString();
+                result.BIMID = duty.BimID.GetBIMID().ToString();
+                result.FMId = fm.Id;
+                result.FMName = fm.ToString();
+                result.IsRight = sb.Length == 0;
+                result.RMessage = result.IsRight ? "" : $"值不一致的信息点有:{sb}";
+            }
+            catch (Exception e)
+            {
+                return result;
+            }
+            return result;
+        }
+
+
+        #endregion
+
+        //[DataCheckProcessAspect]
+        public override void Export()
+        {
+            //   Check();
+            try
+            {
+                IWorkbook book = DCRExport.GetWorkbook();
+                //ISheet sheet = book.CreateSheet(Name);
+                ISheet sheet = book.GetSheet(Name);
+
+                #region 添加数据
+                int index = 3;
+                //添加 共检查XXX条数据,未通过检查的如下 提示
+                IRow rowTip = sheet.CreateRow(index - 1);
+                rowTip.AddCell(0, $"总检查{Results.Count}条数据,未通过检查的如下", DataCheckNPOIStyle.Title);
+                //IRow row4 = sheet.CreateRow(index);
+                //row4.HeightInPoints = 15;
+
+                //row4.AddCell(0, "楼层本地名称", DataCheckNPOIStyle.Title);
+                //row4.AddCell(1, "文件名", DataCheckNPOIStyle.Title);
+                //row4.AddCell(2, "文件地址", DataCheckNPOIStyle.Title);
+                //row4.AddCell(3, "族名称", DataCheckNPOIStyle.Title);
+                //row4.AddCell(4, "类型", DataCheckNPOIStyle.Title);
+                //row4.AddCell(5, "ID", DataCheckNPOIStyle.Title);
+                //row4.AddCell(6, "通过", DataCheckNPOIStyle.Title);
+                //row4.AddCell(7, "备注(失败原因)", DataCheckNPOIStyle.Title);
+                foreach (DutyFMInfoCheckResult result in Results)
+                {
+                    //数量过多,只显示有问题的
+                    if (result.IsRight) continue;
+                    index++;
+                    IRow rowN = sheet.CreateRow(index);
+                    DataCheckNPOIStyle style = result.IsRight ? DataCheckNPOIStyle.Content : DataCheckNPOIStyle.Error;
+                    int i = 0;
+                    rowN.AddCell(i++, result.FloorName, style);
+                    rowN.AddCell(i++, result.FMId, style);
+                    rowN.AddCell(i++, result.FMName, style);
+                    rowN.AddCell(i++, result.DutyId, style);
+                    rowN.AddCell(i++, result.DutyName, style);
+                    rowN.AddCell(i++, result.BIMID, style);
+                    string rowN4 = result.IsRight ? "通过" : "不通过";
+                    rowN.AddCell(i++, rowN4, style);
+                    rowN.AddCell(i++, result.RMessage, style);
+                }
+                #endregion
+
+            }
+            catch (Exception e)
+            {
+                MessageShowBase.Show(e);
+            }
+        }
+    }
+}

+ 23 - 0
MBI/SAGA.MBI/ToolsData/DataCheck/MissDutyOrModeCheckResult.cs

@@ -0,0 +1,23 @@
+/* ==============================================================================
+ * 功能描述:岗位和资产信息点一致性检查结果
+ * 创 建 者:Garrett
+ * 创建日期:2018/10/23 15:13:17
+ * ==============================================================================*/
+
+using SAGA.MBI.ToolsData.ModeCheck;
+
+namespace SAGA.MBI.ToolsData.DataCheck
+{
+    /// <summary>
+    /// UnitCheckResult
+    /// </summary>
+    class MissDutyOrModeCheckResult : DataCheckResultBase
+    {
+        public string FloorName { get; set; }
+        public string DutyId { get; set; }
+        public string DutyName { get; set; }
+        public string FMId { get; set; }
+        public string FMName { get; set; }
+        public string BIMID { get; set; }
+    }
+}

+ 153 - 0
MBI/SAGA.MBI/ToolsData/DataCheck/WinDataCheckSetting.xaml.cs

@@ -0,0 +1,153 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Globalization;
+using System.Linq;
+using System.Windows;
+using System.Windows.Data;
+using SAGA.DotNetUtils.Extend;
+using SAGA.MBI.Common;
+using SAGA.MBI.DataArrange;
+using SAGA.MBI.Model;
+using SAGA.MBI.ToolsData.CheckBase;
+using SAGA.MBI.ToolsData.ModeCheck;
+
+namespace SAGA.MBI.ToolsData.DataCheck
+{
+    /// <summary>
+    /// WinModeCheckSetting.xaml 的交互逻辑
+    /// </summary>
+    public partial class WinDataCheckSetting : INotifyPropertyChanged
+    {
+        private CheckType m_CheckType;
+        public WinDataCheckSetting(List<ICheckBase> checkItems, CheckType checkType)
+        {
+            InitializeComponent();
+            m_CheckType = checkType;
+            myListbox.ItemsSource = checkItems;
+            Init();
+            this.DataContext = this;
+
+        }
+
+        private void Init()
+        {
+            ProjectList = MBIControl.ProjectTree.Children;
+            if (ProjectList.FirstOrDefault() != null)
+                ProjectList.FirstOrDefault().IsSelected = true;
+            SavePath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory),
+                $"{MBIControl.ProjectCur}{m_CheckType.GetDescription()}检查结果.xlsx");
+            OFImage = CommonTool.GetBtnImagePath(SavePath);
+        }
+
+
+        #region BindingProperty
+
+        private ObservableCollection<TreeNodeItem> m_ProjectList;
+
+        public ObservableCollection<TreeNodeItem> ProjectList
+        {
+            get { return m_ProjectList; }
+            set { m_ProjectList = value; }
+        }
+
+        private string m_SavePath;
+
+        /// <summary>
+        /// 保存路径
+        /// </summary>
+        public string SavePath
+        {
+            get { return m_SavePath; }
+            set
+            {
+                m_SavePath = value;
+                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SavePath)));
+            }
+        }
+
+        private string m_OFImage;
+
+
+        /// <summary>
+        /// 打开关闭按钮图片
+        /// </summary>
+        public string OFImage
+        {
+            get { return m_OFImage; }
+            set { m_OFImage = value; }
+        }
+
+        public event PropertyChangedEventHandler PropertyChanged;
+        #endregion
+
+
+        #region Action
+
+        private void SelectFile_Click(object sender, RoutedEventArgs e)
+        {
+            SavePath = DCRExport.GetExportPath(SavePath);
+        }
+
+        private void ButtonNext_OnClick(object sender, RoutedEventArgs e)
+        {
+            if (CanExecute())
+            {
+                this.DialogResult = true;
+            }
+        }
+
+        private bool CanExecute()
+        {
+            bool result = DalProjectTree.GetSelectedBuilding()?.Id != null; ;
+            if (!result)
+            {
+                MessageBox.Show("请选择需要检查的建筑");
+                if (ProjectList.FirstOrDefault() != null)
+                    ProjectList.FirstOrDefault().IsSelected = true;
+            }
+            else
+            {
+                var list = myListbox.ItemsSource as List<ICheckBase>;
+                result = list.Any(t => t.RIsChecked);
+                if (!result)
+                {
+                    MessageBox.Show("请至少选择一个检查项");
+                }
+            }
+
+
+            return result;
+        }
+        #endregion
+        /// <summary>
+        /// 获取数据检查上下文
+        /// </summary>
+        /// <param name="savepath"></param>
+        /// <returns></returns>
+        public CheckContext GetCheckContext()
+        {
+            CheckContext context = new CheckContext();
+            context.BuildingId = DalProjectTree.GetSelectedBuilding()?.Id;
+            context.SavePath = SavePath;
+            context.TemplatePath = CheckOperation.GetSaveTemplatePath(m_CheckType);
+            return context;
+        }
+
+    }
+    public class FloorRadioButtonVisibleConverter : IMultiValueConverter
+    {
+        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
+        {
+            bool isproject = values[0] is MFloor;
+            return isproject ? Visibility.Collapsed : Visibility.Visible;
+        }
+
+        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
+

+ 178 - 0
MBI/SAGA.MBI/ToolsData/ModeCheck/WinModeCheckSetting.xaml.cs

@@ -0,0 +1,178 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Globalization;
+using System.Linq;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using SAGA.DotNetUtils.Extend;
+using SAGA.MBI.Common;
+using SAGA.MBI.DataArrange;
+using SAGA.MBI.Model;
+using SAGA.MBI.ToolsData.CheckBase;
+
+namespace SAGA.MBI.ToolsData.ModeCheck
+{
+    /// <summary>
+    /// WinModeCheckSetting.xaml 的交互逻辑
+    /// </summary>
+    public partial class WinModeCheckSetting : INotifyPropertyChanged
+    {
+        private CheckType m_CheckType;
+        public WinModeCheckSetting(List<ICheckBase> checkItems, CheckType checkType)
+        {
+            InitializeComponent();
+            m_CheckType = checkType;
+            myListbox.ItemsSource = checkItems;
+            Init();
+            this.DataContext = this;
+            
+        }
+
+        private void Init()
+        {
+            ProjectList = MBIControl.ProjectTree.Children;
+            if (ProjectList.FirstOrDefault() != null)
+                SetTreeState(ProjectList.FirstOrDefault(), true);
+            SavePath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory),
+                $"{MBIControl.ProjectCur}{m_CheckType.GetDescription()}检查结果.xlsx");
+            OFImage = CommonTool.GetBtnImagePath(SavePath);
+        }
+
+
+        #region BindingProperty
+
+        private ObservableCollection<TreeNodeItem> m_ProjectList;
+
+        public ObservableCollection<TreeNodeItem> ProjectList
+        {
+            get { return m_ProjectList; }
+            set { m_ProjectList = value; }
+        }
+
+        private string m_SavePath;
+
+        /// <summary>
+        /// 保存路径
+        /// </summary>
+        public string SavePath
+        {
+            get { return m_SavePath; }
+            set
+            {
+                m_SavePath = value;
+                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SavePath)));
+            }
+        }
+
+        private string m_OFImage;
+
+
+        /// <summary>
+        /// 打开关闭按钮图片
+        /// </summary>
+        public string OFImage
+        {
+            get { return m_OFImage; }
+            set { m_OFImage = value; }
+        }
+
+        public event PropertyChangedEventHandler PropertyChanged;
+        #endregion
+
+
+        #region Action
+
+        private void SelectFile_Click(object sender, RoutedEventArgs e)
+        {
+            SavePath = DCRExport.GetExportPath(SavePath);
+        }
+
+        private void ButtonNext_OnClick(object sender, RoutedEventArgs e)
+        {
+            if (CanExecute())
+            {
+                this.DialogResult = true;
+            }
+        }
+
+        private bool CanExecute()
+        {
+            bool result = DalProjectTree.GetSelectedBuilding()?.Id != null; ;
+            if (!result)
+            {
+                MessageBox.Show("请选择需要检查的建筑");
+                if (ProjectList.FirstOrDefault() != null)
+                    SetTreeState(ProjectList.FirstOrDefault(), true);
+            }
+            else
+            {
+                var list = myListbox.ItemsSource as List<ICheckBase>;
+                result = list.Any(t => t.RIsChecked);
+                if (!result)
+                {
+                    MessageBox.Show("请至少选择一个检查项");
+                }
+            }
+
+
+            return result;
+        }
+        #endregion
+        /// <summary>
+        /// 获取数据检查上下文
+        /// </summary>
+        /// <param name="savepath"></param>
+        /// <returns></returns>
+        public CheckContext GetCheckContext()
+        {
+            CheckContext context = new CheckContext();
+            context.BuildingId = DalProjectTree.GetSelectedBuilding()?.Id;
+            context.SavePath = SavePath;
+            context.TemplatePath = CheckOperation.GetSaveTemplatePath(m_CheckType);
+            return context;
+        }
+
+        private void TreeItemChecked_OnChecked(object sender, RoutedEventArgs e)
+        {
+            if (sender is CheckBox chk)
+            {
+                bool state = chk.IsChecked == true;
+                if (chk.DataContext is TreeNodeItem node)
+                {
+                    //SetTreeState(node, state);
+                    SetChildrenState(node, state);
+                    SetParentState(node, state);
+                }
+            }
+        }
+
+        private void SetTreeState(TreeNodeItem node, bool state)
+        {
+            node.IsSelected = state;
+            SetChildrenState(node, state);
+            SetParentState(node, state);
+        }
+
+        private void SetChildrenState(TreeNodeItem node, bool state)
+        {
+            foreach (TreeNodeItem child in node.Children)
+            {
+                child.IsSelected = state;
+            }
+        }
+
+        private void SetParentState(TreeNodeItem node, bool state)
+        {
+            if (node.Parent != null)
+            {
+                node.Parent.IsSelected = state;
+                SetParentState(node.Parent, state);
+            }
+
+        }
+    }
+}
+