Переглянути джерело

Merge branch 'master' of http://dev.dp.sagacloud.cn:8886/r/Revit/SAGA.MBI

xulisong 6 роки тому
батько
коміт
0f17ed5e97

BIN
MBI/MBIResource/DataCheck/模型检查结果输出格式-模版.xlsx


+ 11 - 0
MBI/SAGA.DotNetUtils/Extend/ObjectExtend.cs

@@ -34,5 +34,16 @@ namespace SAGA.DotNetUtils.Extend
             }
             return result;
         }
+
+        public static bool IsNullOrEmpty(this object obj)
+        {
+            return obj==null||((string) obj)=="";
+        }
+
+        public static bool IsNotNullEmpty(this object obj)
+        {
+            return !obj.IsNullOrEmpty();
+        }
+
     }
 }

+ 1 - 1
MBI/SAGA.MBI/DataArrange/DalEquipPart.cs

@@ -35,7 +35,7 @@ namespace SAGA.MBI.DataArrange
             if (mode == null) return null;
             EquipmentPartConvert.QueryEquipPartInfo(mode);
             //mode.FMID = MatchFMConvert.QueryEquipFM(mode.Id);
-            return null;
+            return mode;
         }
 
         /// <summary>

+ 1 - 1
MBI/SAGA.MBI/Extend/ElementExtend.cs

@@ -137,7 +137,7 @@ namespace SAGA.MBI.Tools
         /// <returns></returns>
         public static XYZ ToXyz(this string xyzstr)
         {
-            XYZ xyz = XYZ.Zero;
+            XYZ xyz =null;
             var strs = xyzstr.Split(',');
             if (strs.Length == 3)
             {

+ 5 - 0
MBI/SAGA.MBI/JsonConvert/MatchFMConvert.cs

@@ -7,6 +7,7 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using Autodesk.Revit.DB;
 using Newtonsoft.Json.Linq;
 using SAGA.DotNetUtils;
 using SAGA.DotNetUtils.Extend;
@@ -19,6 +20,7 @@ using SAGA.MBI.RequestData;
 using SAGA.MBI.Tools;
 using SAGA.RevitUtils;
 using SAGA.RevitUtils.MEP;
+using SAGA.RevitUtils.Extends;
 
 namespace SAGA.MBI.JsonConvert
 {
@@ -133,6 +135,8 @@ namespace SAGA.MBI.JsonConvert
                 mEquipFm.CodeType = fmItem.GetValueEx("CodeType").ToInt();
                 mEquipFm.Note = fmItem.GetValueEx("Note");
 
+                mEquipFm.X = fmItem.GetValueEx("X").ToDouble();
+                mEquipFm.Y = fmItem.GetValueEx("Y").ToDouble();
                 if (fmItem.IsContainKeyEx("Infos"))
                 {
                     var fmInfos = (JObject)fmItem["Infos"];
@@ -148,6 +152,7 @@ namespace SAGA.MBI.JsonConvert
                     mEquipFm.FMJson = fmInfos.ToString();
                     mEquipFm.SetPropertyValue(mEquipFm.FMJson);
                 }
+                  
                 return mEquipFm;
             }
             catch (Exception e)

+ 4 - 0
MBI/SAGA.MBI/Model/MEquipFM.cs

@@ -188,6 +188,10 @@ namespace SAGA.MBI.Model
                 m_Location = value;
             }
         }
+
+        public double X { get; set; }
+        public double Y { get; set; }
+
         private string m_FamilyCode;
         /// <summary>
         /// 设备种族编码

+ 0 - 5
MBI/SAGA.MBI/Model/MFloor.cs

@@ -511,11 +511,6 @@ namespace SAGA.MBI.Model
             WinCommonTip winEndTip = new WinCommonTip();
             winEndTip.Show(tip0, tip1, buttonStyle: MessageBoxButton.OK);
 
-            //刷新解锁按钮
-            FloorLock = FloorLock;
-            //刷新树的显示
-            var tv = DalModeFileManange.GetFloorTreeById(this.Id);
-            tv.Item.TvItemName = tv.Item.TvItemName;
             #endregion
         }
         public bool CanReDownLoad(object param)

+ 2 - 1
MBI/SAGA.MBI/RevitReference/RVTNoModeDutyOperate.cs

@@ -54,7 +54,8 @@ namespace SAGA.MBI.RevitReference
                             if (IsBasePointFamily(fs))
                             {
                                 //使用BIMLocation中的坐标,mm转为英寸
-                                XYZ xyz = mode.MEquipBase.Location.ToXyz().ConvertToApi();
+                                XYZ xyz = mode.MEquipBase.Location.ToXyz();
+                                xyz = xyz==null ? XYZ.Zero : xyz.ConvertToApi();
                                 var level = GetCurFloorLevel(doc);
                                 //传标高,z值设置为零
                                 xyz=xyz.NewZ(0);

+ 14 - 1
MBI/SAGA.MBI/ToolsData/ModeCheck/SystemCheck.cs

@@ -92,7 +92,7 @@ namespace SAGA.MBI.ToolsData.ModeCheck
             result.RSystemName = systemName;
             result.Type = system is MechanicalSystemType ? "风管系统" : "管道系统";
             result.IsRight = true;
-            var item = m_MEPSystems.Where(t => systemName.Contains(t.Name));
+            var item = m_MEPSystems.Where(t => SystemNameIsEqual(systemName,t.Name));
             if (!item.Any())
             {
                 result.IsRight = false;
@@ -100,6 +100,19 @@ namespace SAGA.MBI.ToolsData.ModeCheck
             }
             return result;
         }
+        /// <summary>
+        /// 系统名称相等
+        /// </summary>
+        /// <param name="originName"></param>
+        /// <param name="targetName"></param>
+        /// <returns></returns>
+        private bool SystemNameIsEqual(string originName,string targetName)
+        {
+            bool result = false;
+            string n1 = originName.ToLower();
+            string n2 = targetName.ToLower();
+            return n1.Equals(n2);
+        }
         //[DataCheckProcessAspect]
         public override void Export()
         {

+ 4 - 3
MBI/SAGA.MBI/WinView/Login/WinOpenFile.xaml

@@ -1,11 +1,12 @@
-<Window x:Class="SAGA.MBI.WinView.Login.WinOpenFile"
+<windows:WinBase x:Class="SAGA.MBI.WinView.Login.WinOpenFile"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
              xmlns:local="clr-namespace:SAGA.MBI.WinView.Login"
             xmlns:converter="clr-namespace:SAGA.DotNetUtils.WPF.Converter;assembly=SAGA.DotNetUtils"
-        WindowStartupLocation="CenterScreen"
+            xmlns:windows="clr-namespace:SAGA.RevitUtils.Windows;assembly=SAGA.RevitUtils"
+            WindowStartupLocation="CenterScreen"
              mc:Ignorable="d" 
              Height="400" Width="600">
     <Window.Resources>
@@ -49,4 +50,4 @@
                     Content="从云端重新获取模型文件到本地"></CheckBox>
         </Canvas>
     </Grid>
-</Window>
+</windows:WinBase>

+ 31 - 12
MBI/SAGA.MBI/WinView/ModeInfoMaintenance/VMMatchFM.cs

@@ -396,7 +396,15 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
         {
             XYZ xXyz = x.Location.ToXyz();
             XYZ yXyz = y.Location.ToXyz();
-            return origin.DistanceTo(xXyz).CompareTo(origin.DistanceTo(yXyz));
+            if (xXyz == null)
+                xXyz = new XYZ(x.X, x.Y, origin.Z);
+            if (yXyz == null)
+                yXyz = new XYZ(y.X, y.Y, origin.Z);
+            int result = origin.FindDistance2(xXyz).CompareTo(origin.FindDistance2(yXyz));
+            if (result == 0)
+                result = origin.DistanceTo(xXyz).CompareTo(origin.DistanceTo(yXyz));
+
+            return result;
         }
     }
     /// <summary>
@@ -424,11 +432,11 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
             //1.a,如果有值,过滤没有关联岗位的。
             //1.b,1.a有值,推荐1.a;没有值,推荐1;
             //2,1没有值,按方案2过滤
-            var tempList = list.Where(t => IsMathPlan1(t, equip));
+            var tempList = list.Where(t => IsMathPlan1(t, equip)).ToList();
             if (tempList.Any())
             {
                 List<MEquipFM> plan1List = new List<MEquipFM>();
-                var nodutyList = tempList.Where(t => t.EquipmentId.IsNotNullEmpty());
+                var nodutyList = tempList.Where(t => t.EquipmentId.IsNullOrEmpty()).ToList();
                 if (nodutyList.Any())
                 {
                     plan1List.AddRange(nodutyList);
@@ -463,17 +471,11 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
         /// <returns></returns>
         private bool IsMathPlan1(MEquipFM equipFm, MRevitEquipBase equip)
         {
-            bool result = false;
             List<Func<MEquipFM, MRevitEquipBase, bool>> funcs = new List<Func<MEquipFM, MRevitEquipBase, bool>>();
+            funcs.Add(IsSameFamilyCode);
             funcs.Add(IsSameFloor);
             funcs.Add(IsLocationNear);
-            while (true)
-            {
-                if (equipFm.FamilyCode != equip.Family.Code)
-                    break;
-                result = funcs.All(t => t(equipFm, equip));
-                break;
-            }
+            bool result = funcs.All(t => t(equipFm, equip));
             return result;
         }
         /// <summary>
@@ -506,6 +508,16 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
 
         #region 推荐方法
         /// <summary>
+        /// 同一种设备族
+        /// </summary>
+        /// <param name="equipFm"></param>
+        /// <param name="equip"></param>
+        /// <returns></returns>
+        private bool IsSameFamilyCode(MEquipFM equipFm, MRevitEquipBase equip)
+        {
+            return (equipFm.FamilyCode == equip.Family.Code);
+        }
+        /// <summary>
         ///  资产和模型为同一层
         /// </summary>
         /// <param name="equipFm"></param>
@@ -577,7 +589,7 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
                 localName = equipment.LocalName;
                 localId = equipment.LocalId;
             }
-            if (equip is MEquipmentPart part)
+            else if (equip is MEquipmentPart part)
             {
                 localName = part.LocalName;
                 localId = part.LocalId;
@@ -605,11 +617,18 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
             XYZ fmXyz = equipFm.Location.ToXyz();
             XYZ dutyXyz = equip.Location.ToXyz();
             bool result = false;
+
             if (fmXyz != null && dutyXyz != null)
             {
                 //单位mm
                 result = fmXyz.DistanceTo(dutyXyz).IsLess(redundancy);
             }
+            else if (fmXyz == null && dutyXyz != null)
+            {
+                //取不到Location,使用X,Y中的值,进行比较,忽略Z
+                fmXyz = new XYZ(equipFm.X, equipFm.Y, 0);
+                result = fmXyz.FindDistance2(dutyXyz).IsLess(redundancy);
+            }
             return result;
         }
 

+ 18 - 2
MBI/SAGA.MBI/WinView/ModeInfoMaintenance/WinMatchFMTip_FMNoBimId.xaml.cs

@@ -44,7 +44,7 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
             m_Items = originitems;
             if (originitems.Count > 0)
             {
-                InfoGrid.ItemsSource = new ObservableCollection<ItemProperty>(EquipmentCombineUtil.GetGroupProperties(originitems));
+                InfoGrid.ItemsSource = new ObservableCollection<ItemProperty>(EquipmentCombineUtil.GetGroupProperties(originitems).Where(t=>t.Children.All(tt=>tt.Value.IsNotNullEmpty())));
             }
         }
         private List<ItemProperty> m_Items;
@@ -54,7 +54,23 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
         /// <returns></returns>
         public List<ItemProperty> GetCombineInfos()
         {
-            return m_Items;
+            var results= m_Items.Select(t =>
+            {
+                if (t.Value.IsNullOrEmpty())
+                {
+                    if (t.Children.All(tt => tt.Value.IsNotNullEmpty()))
+                    {
+                        
+                    }
+                    else
+                    {
+                        (t.Value) = t.Children.FirstOrDefault(tt => tt.Value.IsNotNullEmpty())?.Value;
+                    }
+
+                }
+                return t;
+            }).ToList();
+            return results;
         }
 
         private MatchOperateType m_Operate;