Ver código fonte

mxg:添加本地名称与本地编码同步功能

mengxiangge 6 anos atrás
pai
commit
dedc9b9f95

+ 17 - 6
MBI/Menu/MBITool.xml

@@ -24,13 +24,13 @@
     </Button>
   
     <Button ButtonStyles="Large">
-      <ButtonName>SAGA.MBI.AddEquipLocationCommand</ButtonName>
-      <ButtonText>补充坐标信息</ButtonText>
+      <ButtonName>SAGA.MBI.CorrectPropertyReadFromRevitCommand</ButtonName>
+      <ButtonText>同步从模型中获取的信息点的值</ButtonText>
       <ImageName>1、打开楼层模型</ImageName>
       <DllName>..\OutputDll\SAGA.MBI.exe</DllName>
-      <ClassName>SAGA.MBI.AddEquipLocationCommand</ClassName>
-      <ToolTip>更新所有楼层设备、部件、空间的坐标信息</ToolTip>
-      <LongDescription>之前老版本BIMLocation信息点值为null,可用此命令去补充</LongDescription>
+      <ClassName>SAGA.MBI.CorrectPropertyReadFromRevitCommand</ClassName>
+      <ToolTip>更新岗位从模型中获取的信息点</ToolTip>
+      <LongDescription>之前老版本BIMLocation,LocalId,LocalName的值为null,可用此命令去补充.</LongDescription>
       <ToolTipImage></ToolTipImage>
       <MenuTab>MBITool_W</MenuTab>
       <Modules>MBITool</Modules>
@@ -110,7 +110,18 @@
     </Button>
   </Panel>
   <Panel PanelName="工具" GroupFlag="True" GroupImage="" RevitVer="R14,R15,R16,R17"  ButtonStyles="Large">
-
+    <Button ButtonStyles="Stacked">
+      <ButtonName>SAGA.MBI.CopyLocalIdCommand</ButtonName>
+      <ButtonText>复制设备编号的值</ButtonText>
+      <ImageName>1、打开楼层模型</ImageName>
+      <DllName>..\OutputDll\SAGA.MBI.exe</DllName>
+      <ClassName>SAGA.MBI.CopyLocalIdCommand</ClassName>
+      <ToolTip>将设备编号的值复制到设备本地编码中。</ToolTip>
+      <LongDescription>将设备编号的值复制到设备本地编码中,结果将列出本层复制失败的对象的id,如果本层都复制成功则没有提示。</LongDescription>
+      <ToolTipImage></ToolTipImage>
+      <MenuTab>MBITool_W</MenuTab>
+      <Modules>MBITool</Modules>
+    </Button>
     <Button ButtonStyles="Stacked">
       <ButtonName>SAGA.MBI.DeleteZeroSpaceCommand</ButtonName>
       <ButtonText>删除本层Zero空间</ButtonText>

+ 28 - 0
MBI/SAGA.MBI/Common/RevitBuiltInParameter.cs

@@ -0,0 +1,28 @@
+/* ==============================================================================
+ * 功能描述:RevitBuiltInParameter  
+ * 创 建 者:Garrett
+ * 创建日期:2019/3/29 9:43:20
+ * ==============================================================================*/
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SAGA.MBI.Common
+{
+    /// <summary>
+    /// RevitBuiltInParameter
+    /// </summary>
+    class RevitBuiltInParameter
+    {
+        /// <summary>
+        /// 设备本地编码
+        /// </summary>
+        public readonly static string EquipLocalID = "设备本地编码";
+        /// <summary>
+        /// 设备本地名称
+        /// </summary>
+        public readonly static string EquipLocalName = "设备本地名称";
+    }
+}

+ 4 - 6
MBI/SAGA.MBI/DataArrange/DalEquip.cs

@@ -60,13 +60,11 @@ namespace SAGA.MBI.DataArrange
             mode.Family = family;
             mode.PreviewImage = elem.GetFamily().GetPreviewImage(new System.Drawing.Size(200, 200));
             //从模型中读取的信息点
-            mode.Location = elem.GetLocationPointMBI();
-            //mode.LocalId = elem.GetParameterString("设备本地编码");
-            //mode.LocalName= elem.GetParameterString("设备本地名称");
+            mode.ReadRevitParamter(elem);
             //model.BIMType = familyName + ";" + typeName;
 
             //Revit族名称
-            mode.RevitFamilyName = elem.GetFamily().Name;
+            //mode.RevitFamilyName = elem.GetFamily().Name;
 
             //dic.Add("Length", (instance.GetBoxLength() / 1000).Round(3));
             //dic.Add("Width", (instance.GetBoxWidth() / 1000).Round(3));
@@ -96,8 +94,8 @@ namespace SAGA.MBI.DataArrange
                         addJArray.Add(addJObject);
                         break;
                     case DocumentChangedOperator.Delete:
-                        JObject delJObject=new JObject();
-                        delJObject.Add("id",mode.Id);
+                        JObject delJObject = new JObject();
+                        delJObject.Add("id", mode.Id);
                         delJArray.Add(delJObject);
                         break;
                     case DocumentChangedOperator.Modified:

+ 5 - 4
MBI/SAGA.MBI/DataArrange/DalEquipPart.cs

@@ -59,9 +59,10 @@ namespace SAGA.MBI.DataArrange
             mode.MEquipment = DalEquipPart.GetPartParentElement(elem);
             //这里处理从设备中读取到的数据
             //坐标
-            mode.Location = elem.GetLocationPointMBI();
-            //mode.LocalId = elem.GetParameterString("设备本地编码");
-            //mode.LocalName = elem.GetParameterString("设备本地名称");
+            mode.ReadRevitParamter(elem);
+
+            //Revit族名称
+            //mode.RevitFamilyName = elem.GetFamily().Name;
             return mode;
         }
 
@@ -79,7 +80,7 @@ namespace SAGA.MBI.DataArrange
             var parentInst = doc.GetElements(new ElementIntersectsElementFilter(fi))
                 .FirstOrDefault(t => t is FamilyInstance && !t.Id.IsEqual(fi.Id) && t.GetFamilyCode() == family);
             if (parentInst == null) return null;
-            var equip=DalEquip.GetEquipment(parentInst as FamilyInstance);
+            var equip = DalEquip.GetEquipment(parentInst as FamilyInstance);
             return equip;
         }
     }

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

@@ -62,7 +62,7 @@ namespace SAGA.MBI.DataArrange
             //mspace.PlanePath = CommonTool.ConvertSpaceEdgesToStr(space.GetPlaneVertexes());
             mspace.PreviewImage=new Bitmap(Path.Combine(MBIConst.MBIImagePath, "ispace.png"));
             //坐标
-            mspace.Location = elem.GetLocationPointMBI();
+            mspace.ReadRevitParamter(elem);
             return mspace;
         }
         /// <summary>

+ 5 - 3
MBI/SAGA.MBI/DataArrange/DalUploadFloor.cs

@@ -353,7 +353,7 @@ namespace SAGA.MBI.DataArrange
             //不知什么原因,日志就显示add,但物理世界存在这条信息
             if (mode != null)
             {
-                IsEquipClassCodeChanged(mode, revitmode, context);
+                IsEquipClassCodeChanged(mode,elem, revitmode, context);
             }
             else
             {
@@ -381,7 +381,7 @@ namespace SAGA.MBI.DataArrange
                         {
                             //待建模型清单新建的设备
                             cloudmode.BimID = revitmode.BimID;
-                            IsEquipClassCodeChanged(cloudmode, revitmode, context);
+                            IsEquipClassCodeChanged(cloudmode,elem, revitmode, context);
                             context.Add(cloudmode);
                         }
                     }
@@ -397,7 +397,7 @@ namespace SAGA.MBI.DataArrange
         /// <param name="tempmode"></param>
         /// <param name="context"></param>
         /// <returns></returns>
-        private static bool IsEquipClassCodeChanged(MRevitEquipBase mode, MRevitEquipBase tempmode, CalcContext context)
+        private static bool IsEquipClassCodeChanged(MRevitEquipBase mode,Element elem, MRevitEquipBase tempmode, CalcContext context)
         {
             bool result = false;
 
@@ -408,6 +408,7 @@ namespace SAGA.MBI.DataArrange
                 if (EquipmentCodeMap.GetOriginCode(mode.EquipClassCode) == EquipmentCodeMap.GetOriginCode(tempmode.EquipClassCode))
                 {
                     mode.Operator = DocumentChangedOperator.Modified;
+                    mode.ReadRevitParamter(elem);
                 }
                 else
                 {
@@ -431,6 +432,7 @@ namespace SAGA.MBI.DataArrange
                 else
                 {
                     mode.Operator = DocumentChangedOperator.Modified;
+                    mode.ReadRevitParamter(elem);
                 }
             }
 

+ 0 - 4
MBI/SAGA.MBI/JsonConvert/EquipmentConvert.cs

@@ -30,12 +30,8 @@ namespace SAGA.MBI.JsonConvert
         {
             string floorId=mode.FloorId;
              string bimId=mode.BimID;
-            Stopwatch st=new Stopwatch();
-            st.Start();
             string json = CommonRequest.QueryObjectByBIMID(floorId, bimId,new []{"Eq"});
             if (!json.IsRequestHasItem()) return false;
-            st.Stop();
-            Debug.WriteLine(st.Elapsed);
             JObject jObject = JObject.Parse(json);
             mode.Id = (string)jObject["Content"][0]["id"];
             var linkId = ((JObject)jObject["Content"][0]).GetValueEx("linkId");

+ 1 - 1
MBI/SAGA.MBI/Model/CloudDataBase.cs

@@ -88,7 +88,7 @@ namespace SAGA.MBI.Model
                     {
                         continue;
                     }
-                    if (value!=null)
+                    if (value.IsNotNullEmpty())
                     {
                         object obj = Convert.ChangeType(value, info.PropertyType);
                         info.SetValue(this, obj);

+ 20 - 260
MBI/SAGA.MBI/Model/MEquipment.cs

@@ -27,6 +27,7 @@ using SAGA.MBI.JsonConvert;
 using SAGA.MBI.RequestData;
 using SAGA.MBI.Tools;
 using SAGA.MBI.WinView.ModeInfoMaintenance;
+using SAGA.RevitUtils.Extends;
 using SAGA.RevitUtils.Windows;
 using WPG.Data;
 using WPG.UserControls;
@@ -45,7 +46,7 @@ namespace SAGA.MBI.Model
             this.BimID = bimMId;
             ServirceImages = new ObservableCollection<MServiceAttachment>();
         }
-      
+
 
         #region CloudProperty
 
@@ -85,7 +86,7 @@ namespace SAGA.MBI.Model
         }
 
         #endregion CloudProperty
-        
+
         #region VirtualMethod
 
         public override string ToString()
@@ -107,11 +108,11 @@ namespace SAGA.MBI.Model
         public override bool DelObject()
         {
             if (Id.IsNullOrEmpty()) return false;
-            var rlt=new RltEquipInSpace(this.Id,null){Operator = DocumentChangedOperator.Delete};
+            var rlt = new RltEquipInSpace(this.Id, null) { Operator = DocumentChangedOperator.Delete };
             rlt.DelObject();
             //删除设备所在楼层
             var rltequipinfloor = new RltEquipinFloor(this.Id, null) { Operator = DocumentChangedOperator.Delete };
-            rltequipinfloor.AddorUpdateObject() ;
+            rltequipinfloor.AddorUpdateObject();
             return EquipmentConvert.DelEquipment(this.Id);
         }
 
@@ -121,266 +122,22 @@ namespace SAGA.MBI.Model
         /// <returns></returns>
         public override CompositeItem SetFixedProperty()
         {
-            CompositeItem item = new PropertyCollection();
-            string code = this.EquipClassCode;
-            PropertyDefineTb pdtb = PEPCodeConvert.GetPropertyDefineTb(code);
-
-            Property property = new Property(this);
-            //属性窗格用到的信息
-            property.Category = "编码及关系";
-            property.Name = "模型ID";
-            //Type应该先于Value进行赋值
-            property.PropertyType = typeof(string);
-            property.IsReadOnly = true;
-            property.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "BIMID");
-            //property.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property);
-
-            Property property1 = new Property(this);
-            //属性窗格用到的信息
-            property1.Category = "编码及关系";
-            property1.Name = "设备ID";
-            //Type应该先于Value进行赋值
-            property1.PropertyType = typeof(string);
-            property1.IsReadOnly = true;
-            property1.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "EquipID");
-            //property1.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property1);
-
-            Property property2 = new Property(this);
-            //属性窗格用到的信息
-            property2.Category = "编码及关系";
-            property2.Name = "对应资产";
-            //Type应该先于Value进行赋值
-            property2.PropertyType = typeof(UcReferenceFM);
-            property2.Value = this.FMID.IsNullOrEmpty() ? "请选择" : this.FMID;
-            property2.ExtendClickAction = PWGInstace.WinMatchFMClick;
-            //property2.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property2);
-
-            //设备关联过资产后才有二维码图片
-            if (this.FMID.IsNotNullEmpty())
-            {
-                Property propertyi2 = new Property(this);
-                propertyi2.Category = "编码及关系";
-                propertyi2.Name = "设备二维码图片";
-                propertyi2.PropertyType = typeof(UcHyperlink);
-                propertyi2.ItemClickAction = PWGInstace.WinQRCodeItemClick;
-                propertyi2.Value = this.FMID.IsNullOrEmpty() ? null : "点击查看二维码图片";
-                item.Items.Add(propertyi2);
-            }
-            Property propertySpace = new Property(this);
-            //属性窗格用到的信息
-            propertySpace.Category = "编码及关系";
-            propertySpace.Name = "所在元空间";
-            //Type应该先于Value进行赋值
-            propertySpace.PropertyType = typeof(UcHyperlink);
-            propertySpace.ItemClickAction = PWGInstace.WinISpaceItemClick;
-            propertySpace.Value = this.MSpace?.ToString();
-            item.Items.Add(propertySpace);
-
-
-            Property property3 = new Property(this);
-            //属性窗格用到的信息
-            property3.Category = "台账信息-设备厂家";
-            property3.Name = "厂家";
-            //Type应该先于Value进行赋值
-            property3.PropertyType = typeof(UcPopups);
-            property3.IsReadOnly = true;
-            property3.Value = "请选择型号";
-            property3.ExtendClickAction = PWGInstace.WinSelectManufacturerClick;
-            //property3.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property3);
-
-            Property property4 = new Property(this);
-            //属性窗格用到的信息
-            property4.Category = "台账信息-设备厂家";
-            property4.Name = "生产日期";
-            //Type应该先于Value进行赋值
-            property4.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "ProductDate");
-            //property4.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property4);
-
-
-            Property property5 = new Property(this);
-            //属性窗格用到的信息
-            property5.Category = "台账信息-设备厂家";
-            property5.Name = "出厂编号";
-            //Type应该先于Value进行赋值
-            property5.IsReadOnly = false;
-            property5.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "SerialNum");
-            //property5.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property5);
-
-            Property property6 = new Property(this);
-            //属性窗格用到的信息
-            property6.Category = "台账信息-供应&购买";
-            property6.Name = "供应商";
-            //Type应该先于Value进行赋值
-            property6.PropertyType = typeof(UcPopups);
-            //property6.PropertyType = typeof(UcSupplier);
-            property6.IsReadOnly = true;
-            property6.Value = "请选择供应商";
-            property6.ExtendClickAction = PWGInstace.WinSelectSupplyClick;
-           
-            //property6.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property6);
-
-            Property property7 = new Property(this);
-            //属性窗格用到的信息
-            property7.Category = "台账信息-供应&购买";
-            property7.Name = "合同编号";
-            //Type应该先于Value进行赋值
-            property7.PropertyType = typeof(UcPopups);
-            //property7.PropertyType = typeof(UcContractNO);
-            property7.IsReadOnly = true;
-            property7.Value = "请维护供应商合同";
-            property7.ExtendClickAction = PWGInstace.WinSupplyContractInfoClick;
-            //property7.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property7);
-
-            Property property8 = new Property(this);
-            //属性窗格用到的信息
-            property8.Category = "台账信息-供应&购买";
-            property8.Name = "资产编号";
-            //Type应该先于Value进行赋值
-            property8.IsReadOnly = false;
-            property8.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "AssetID");
-            //property8.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property8);
-
-            Property property9 = new Property(this);
-            //属性窗格用到的信息
-            property9.Category = "台账信息-运行&维保";
-            property9.Name = "维保负责人";
-            //Type应该先于Value进行赋值
-            property9.IsReadOnly = false;
-            property9.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "Principal");
-            //property9.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property9);
-
-            Property property10 = new Property(this);
-            //属性窗格用到的信息
-            property10.Category = "台账信息-运行&维保";
-            property10.Name = "投产日期";
-            //Type应该先于Value进行赋值
-            property10.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "StartDate");
-            //property10.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property10);
-
-            Property property11 = new Property(this);
-            //属性窗格用到的信息
-            property11.Category = "台账信息-运行&维保";
-            property11.Name = "保修期";
-            //Type应该先于Value进行赋值
-            property11.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "Warranty");
-            item.Items.Add(property11);
-
-            Property property12 = new Property(this);
-            //属性窗格用到的信息
-            property12.Category = "台账信息-运行&维保";
-            property12.Name = "维保合同截止日期";
-            //Type应该先于Value进行赋值
-            property12.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "MaintainDeadline");
-            item.Items.Add(property12);
-
-            Property property13 = new Property(this);
-            //属性窗格用到的信息
-            property13.Category = "台账信息-运行&维保";
-            property13.Name = "预计报废日期";
-            //Type应该先于Value进行赋值
-            property13.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "ExpectScrapDate");
-            item.Items.Add(property13);
-
-            Property property14 = new Property(this);
-            //属性窗格用到的信息
-            property14.Category = "台账信息-运行&维保";
-            property14.Name = "保养周期";
-            property14.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "MaintainPeriod");
-            item.Items.Add(property14);
-
-            Property property15 = new Property(this);
-            //属性窗格用到的信息
-            property15.Category = "台账信息-运行&维保";
-            property15.Name = "维修商";
-            //Type应该先于Value进行赋值
-            property15.PropertyType = typeof(UcPopups);
-            //property15.PropertyType = typeof(UcMaintenance);
-            property15.IsReadOnly = true;
-            property15.Value = "请选择维修商";
-            property15.ExtendClickAction = PWGInstace.WinMaintenanceDealerClick;
-            item.Items.Add(property15);
-
-            Property property16 = new Property(this);
-            //属性窗格用到的信息
-            property16.Category = "台账信息-保险";
-            property16.Name = "保险公司";
-            //Type应该先于Value进行赋值
-            property16.PropertyType = typeof(UcPopups);
-            //property16.PropertyType = typeof(UcInsuer);
-            property16.IsReadOnly = true;
-            property16.Value = "请选择保险公司";
-            property16.ExtendClickAction = PWGInstace.WinInsuerClick;
-            item.Items.Add(property16);
-
-            Property property17 = new Property(this);
-            //属性窗格用到的信息
-            property17.Category = "台账信息-保险";
-            property17.Name = "保单号";
-            //Type应该先于Value进行赋值
-            property17.PropertyType = "All_HyperLink";//typeof(UcPopups);
-            //property17.PropertyType = typeof(UcNumberOfPolicy);
-            property17.IsReadOnly = true;
-            property17.Value = "请维护保单信息";
-            property17.ExtendClickAction = PWGInstace.WinInsuerContractInfoClick;
-            property17.ItemClickAction = PWGInstace.WinInsuerContractLoadClick;
-            item.Items.Add(property17);
-
-
-            Property property18 = new Property(this);
-            //属性窗格用到的信息
-            property18.Category = "台账信息-照片&文档";
-            property18.Name = "设备铭牌照片";
-            //Type应该先于Value进行赋值
-            property18.PropertyType = typeof(UcPopups_Nameplate);
-            property18.ExtendClickAction = PWGInstace.WinNameplateExtendClick;
-            property18.ItemClickAction = PWGInstace.WinNameplateItemClick;
-            property18.Value = this.CloudInfos.GetAttachmentsItems("Nameplate").Count == 0 ? null : "点击查看铭牌照片";
-            item.Items.Add(property18);
-
-            Property property19 = new Property(this);
-            //属性窗格用到的信息
-            property19.Category = "台账信息-照片&文档";
-            property19.Name = "设备照片";
-            //Type应该先于Value进行赋值
-            property19.PropertyType = typeof(UcReferenceFM);
-            property19.ExtendClickAction = PWGInstace.WinPicManageClick;
-            property19.Value = $"共{ServirceImages.Count}个媒体文件";
-            //property19.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "Pic");
-            item.Items.Add(property19);
-
-            Property property20 = new Property(this);
-            property20.Category = "台账信息-照片&文档";
-            property20.Name = "设备图纸";
-            property20.PropertyType = typeof(UcReferenceFM);
-            property20.ExtendClickAction = PWGInstace.WinServiceDrawingManageClick;
-            var count = this.CloudInfos.GetAttachmentsItems("Drawing").Count;
-            property20.Value = $"共{count}个文件";
-            item.Items.Add(property20);
-
-            Property property21 = new Property(this);
-            property21.Category = "台账信息-照片&文档";
-            property21.Name = "设备文档";
-            property21.PropertyType = typeof(UcReferenceFM);
-            property21.ExtendClickAction = PWGInstace.WinDeviceDocumentManageClick;
-            var count21 = this.CloudInfos.GetAttachmentsItems("Archive").Count;
-            property21.Value = $"共{count21}个文件";
-            item.Items.Add(property21);
-            return item;
+            return PWGInstace.SetFixedProperty(this);
         }
 
+        /// <summary>
+        /// 从Revit读取需要的参数
+        /// </summary>
+        public override void ReadRevitParamter(Element elem, bool isSubjectToMode = false)
+        {
+            base.ReadRevitParamter(elem);
+            this.LocalId = isSubjectToMode||LocalId.IsNullOrEmpty()?elem.GetParameterString(RevitBuiltInParameter.EquipLocalID):LocalId;
+            this.LocalName = isSubjectToMode||LocalName.IsNullOrEmpty()?elem.GetParameterString(RevitBuiltInParameter.EquipLocalName):LocalName;
+        }
         #endregion
 
+        #region BindingCommand
+
         /// <summary>
         /// 查看详细信息
         /// </summary>
@@ -409,5 +166,8 @@ namespace SAGA.MBI.Model
         {
             return true;
         }
+
+        #endregion
+
     }
 }

+ 16 - 257
MBI/SAGA.MBI/Model/MEquipmentPart.cs

@@ -26,6 +26,7 @@ using SAGA.MBI.JsonConvert;
 using SAGA.MBI.RequestData;
 using SAGA.MBI.Tools;
 using SAGA.MBI.WinView.ModeInfoMaintenance;
+using SAGA.RevitUtils.Extends;
 using WPG.Data;
 using WPG.UserControls;
 
@@ -134,266 +135,22 @@ namespace SAGA.MBI.Model
         /// <returns></returns>
         public override CompositeItem SetFixedProperty()
         {
-            CompositeItem item = new PropertyCollection();
-            string code = this.EquipClassCode;
-            PropertyDefineTb pdtb = PEPCodeConvert.GetPropertyDefineTb(code);
-
-            Property property = new Property(this);
-            //属性窗格用到的信息
-            property.Category = "编码及关系";
-            property.Name = "模型ID";
-            //Type应该先于Value进行赋值
-            property.PropertyType = typeof(string);
-            property.IsReadOnly = true;
-            property.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "BIMID");
-            //property.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property);
-
-            Property property1 = new Property(this);
-            //属性窗格用到的信息
-            property1.Category = "编码及关系";
-            property1.Name = "设备ID";
-            //Type应该先于Value进行赋值
-            property1.PropertyType = typeof(string);
-            property1.IsReadOnly = true;
-            property1.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "EquipID");
-            //property1.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property1);
-
-            Property property2 = new Property(this);
-            //属性窗格用到的信息
-            property2.Category = "编码及关系";
-            property2.Name = "对应资产";
-            //Type应该先于Value进行赋值
-            property2.PropertyType = typeof(UcReferenceFM);
-            property2.Value = this.FMID.IsNullOrEmpty() ? "请选择" : this.FMID;
-            property2.ExtendClickAction = PWGInstace.WinMatchFMClick;
-            //property2.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property2);
-
-            //设备关联过资产后才有二维码图片
-            if (this.FMID.IsNotNullEmpty())
-            {
-                Property propertyi2 = new Property(this);
-                propertyi2.Category = "编码及关系";
-                propertyi2.Name = "设备二维码图片";
-                propertyi2.PropertyType = typeof(UcHyperlink);
-                propertyi2.ItemClickAction = PWGInstace.WinQRCodeItemClick;
-                propertyi2.Value = this.FMID.IsNullOrEmpty() ? null : "点击查看二维码图片";
-                item.Items.Add(propertyi2);
-            }
-            Property propertySpace = new Property(this);
-            //属性窗格用到的信息
-            propertySpace.Category = "编码及关系";
-            propertySpace.Name = "所在元空间";
-            //Type应该先于Value进行赋值
-            propertySpace.PropertyType = typeof(UcHyperlink);
-            propertySpace.ItemClickAction = PWGInstace.WinISpaceItemClick;
-            propertySpace.Value = this.MSpace?.ToString();
-            item.Items.Add(propertySpace);
-
-
-            Property property3 = new Property(this);
-            //属性窗格用到的信息
-            property3.Category = "台账信息-设备厂家";
-            property3.Name = "厂家";
-            //Type应该先于Value进行赋值
-            property3.PropertyType = typeof(UcPopups);
-            property3.IsReadOnly = true;
-            property3.Value = "请选择型号";
-            property3.ExtendClickAction = PWGInstace.WinSelectManufacturerClick;
-            //property3.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property3);
-
-            Property property4 = new Property(this);
-            //属性窗格用到的信息
-            property4.Category = "台账信息-设备厂家";
-            property4.Name = "生产日期";
-            //Type应该先于Value进行赋值
-            property4.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "ProductDate");
-            //property4.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property4);
-
-
-            Property property5 = new Property(this);
-            //属性窗格用到的信息
-            property5.Category = "台账信息-设备厂家";
-            property5.Name = "出厂编号";
-            //Type应该先于Value进行赋值
-            property5.IsReadOnly = false;
-            property5.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "SerialNum");
-            //property5.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property5);
-
-            Property property6 = new Property(this);
-            //属性窗格用到的信息
-            property6.Category = "台账信息-供应&购买";
-            property6.Name = "供应商";
-            //Type应该先于Value进行赋值
-            property6.PropertyType = typeof(UcPopups);
-            //property6.PropertyType = typeof(UcSupplier);
-            property6.IsReadOnly = true;
-            property6.Value = "请选择供应商";
-            property6.ExtendClickAction = PWGInstace.WinSelectSupplyClick;
-
-            //property6.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property6);
-
-            Property property7 = new Property(this);
-            //属性窗格用到的信息
-            property7.Category = "台账信息-供应&购买";
-            property7.Name = "合同编号";
-            //Type应该先于Value进行赋值
-            property7.PropertyType = typeof(UcPopups);
-            //property7.PropertyType = typeof(UcContractNO);
-            property7.IsReadOnly = true;
-            property7.Value = "请维护供应商合同";
-            property7.ExtendClickAction = PWGInstace.WinSupplyContractInfoClick;
-            //property7.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property7);
-
-            Property property8 = new Property(this);
-            //属性窗格用到的信息
-            property8.Category = "台账信息-供应&购买";
-            property8.Name = "资产编号";
-            //Type应该先于Value进行赋值
-            property8.IsReadOnly = false;
-            property8.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "AssetID");
-            //property8.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property8);
-
-            Property property9 = new Property(this);
-            //属性窗格用到的信息
-            property9.Category = "台账信息-运行&维保";
-            property9.Name = "维保负责人";
-            //Type应该先于Value进行赋值
-            property9.IsReadOnly = false;
-            property9.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "Principal");
-            //property9.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property9);
-
-            Property property10 = new Property(this);
-            //属性窗格用到的信息
-            property10.Category = "台账信息-运行&维保";
-            property10.Name = "投产日期";
-            //Type应该先于Value进行赋值
-            property10.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "StartDate");
-            //property10.PropertyChangeAction += PropertyChangeAction;
-            item.Items.Add(property10);
-
-            Property property11 = new Property(this);
-            //属性窗格用到的信息
-            property11.Category = "台账信息-运行&维保";
-            property11.Name = "保修期";
-            //Type应该先于Value进行赋值
-            property11.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "Warranty");
-            item.Items.Add(property11);
-
-            Property property12 = new Property(this);
-            //属性窗格用到的信息
-            property12.Category = "台账信息-运行&维保";
-            property12.Name = "维保合同截止日期";
-            //Type应该先于Value进行赋值
-            property12.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "MaintainDeadline");
-            item.Items.Add(property12);
-
-            Property property13 = new Property(this);
-            //属性窗格用到的信息
-            property13.Category = "台账信息-运行&维保";
-            property13.Name = "预计报废日期";
-            //Type应该先于Value进行赋值
-            property13.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "ExpectScrapDate");
-            item.Items.Add(property13);
-
-            Property property14 = new Property(this);
-            //属性窗格用到的信息
-            property14.Category = "台账信息-运行&维保";
-            property14.Name = "保养周期";
-            property14.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "MaintainPeriod");
-            item.Items.Add(property14);
-
-            Property property15 = new Property(this);
-            //属性窗格用到的信息
-            property15.Category = "台账信息-运行&维保";
-            property15.Name = "维修商";
-            //Type应该先于Value进行赋值
-            property15.PropertyType = typeof(UcPopups);
-            //property15.PropertyType = typeof(UcMaintenance);
-            property15.IsReadOnly = true;
-            property15.Value = "请选择维修商";
-            property15.ExtendClickAction = PWGInstace.WinMaintenanceDealerClick;
-            item.Items.Add(property15);
-
-            Property property16 = new Property(this);
-            //属性窗格用到的信息
-            property16.Category = "台账信息-保险";
-            property16.Name = "保险公司";
-            //Type应该先于Value进行赋值
-            property16.PropertyType = typeof(UcPopups);
-            //property16.PropertyType = typeof(UcInsuer);
-            property16.IsReadOnly = true;
-            property16.Value = "请选择保险公司";
-            property16.ExtendClickAction = PWGInstace.WinInsuerClick;
-            item.Items.Add(property16);
-
-            Property property17 = new Property(this);
-            //属性窗格用到的信息
-            property17.Category = "台账信息-保险";
-            property17.Name = "保单号";
-            //Type应该先于Value进行赋值
-            property17.PropertyType = "All_HyperLink";//typeof(UcPopups);
-            //property17.PropertyType = typeof(UcNumberOfPolicy);
-            property17.IsReadOnly = true;
-            property17.Value = "请维护保单信息";
-            property17.ExtendClickAction = PWGInstace.WinInsuerContractInfoClick;
-            property17.ItemClickAction = PWGInstace.WinInsuerContractLoadClick;
-            item.Items.Add(property17);
-
-
-            Property property18 = new Property(this);
-            //属性窗格用到的信息
-            property18.Category = "台账信息-照片&文档";
-            property18.Name = "设备铭牌照片";
-            //Type应该先于Value进行赋值
-            property18.PropertyType = typeof(UcPopups_Nameplate);
-            property18.ExtendClickAction = PWGInstace.WinNameplateExtendClick;
-            property18.ItemClickAction = PWGInstace.WinNameplateItemClick;
-            property18.Value = this.CloudInfos.GetAttachmentsItems("Nameplate").Count == 0 ? null : "点击查看铭牌照片";
-            item.Items.Add(property18);
-
-            Property property19 = new Property(this);
-            //属性窗格用到的信息
-            property19.Category = "台账信息-照片&文档";
-            property19.Name = "设备照片";
-            //Type应该先于Value进行赋值
-            property19.PropertyType = typeof(UcReferenceFM);
-            property19.ExtendClickAction = PWGInstace.WinPicManageClick;
-            property19.Value = $"共{ServirceImages.Count}个媒体文件";
-            //property19.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "Pic");
-            item.Items.Add(property19);
-
-            Property property20 = new Property(this);
-            property20.Category = "台账信息-照片&文档";
-            property20.Name = "设备图纸";
-            property20.PropertyType = typeof(UcReferenceFM);
-            property20.ExtendClickAction = PWGInstace.WinServiceDrawingManageClick;
-            var count = this.CloudInfos.GetAttachmentsItems("Drawing").Count;
-            property20.Value = $"共{count}个文件";
-            item.Items.Add(property20);
-
-            Property property21 = new Property(this);
-            property21.Category = "台账信息-照片&文档";
-            property21.Name = "设备文档";
-            property21.PropertyType = typeof(UcReferenceFM);
-            property21.ExtendClickAction = PWGInstace.WinDeviceDocumentManageClick;
-            var count21 = this.CloudInfos.GetAttachmentsItems("Archive").Count;
-            property21.Value = $"共{count21}个文件";
-            item.Items.Add(property21);
-            return item;
+            return PWGInstace.SetFixedProperty(this);
         }
 
+        /// <summary>
+        /// 从Revit读取需要的参数
+        /// </summary>
+        public override void ReadRevitParamter(Element elem, bool isSubjectToMode = false)
+        {
+            base.ReadRevitParamter(elem);
+            this.LocalId = LocalId.IsNullOrEmpty() ? elem.GetParameterString(RevitBuiltInParameter.EquipLocalID) : LocalId;
+            this.LocalName = LocalName.IsNullOrEmpty() ? elem.GetParameterString(RevitBuiltInParameter.EquipLocalName) : LocalName;
+        }
         #endregion
 
+        #region BindingCommand
+
         /// <summary>
         /// 查看详细信息
         /// </summary>
@@ -405,7 +162,7 @@ namespace SAGA.MBI.Model
             {
                 var url =
                     $"{MBIConst.Html5DetailLocalHost}details?perjectId={MBIControl.ProjectCur.Id}&secret={MBIControl.ProjectCur.Password}&FmId={this.Id}&type=0&code={EquipClassCode}";
-                //url = "www.baidu.com";
+                //var url = "www.baidu.com";
                 var win = WinBrowser.Instance;
                 win.Width = 1233;
                 win.Height = 902;
@@ -423,5 +180,7 @@ namespace SAGA.MBI.Model
             return true;
         }
 
+        #endregion
+
     }
 }

+ 14 - 1
MBI/SAGA.MBI/Model/MRevitEquipBase.cs

@@ -12,6 +12,7 @@ using System.Linq;
 using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
+using Autodesk.Revit.DB;
 using Newtonsoft.Json.Linq;
 using SAGA.DotNetUtils;
 using SAGA.DotNetUtils.Extend;
@@ -83,7 +84,7 @@ namespace SAGA.MBI.Model
         //是否上传
         public bool HasUpload { get; set; }
         //设备族名称
-        public string RevitFamilyName { get; set; }
+        //public string RevitFamilyName { get; set; }
         //设备类编码
         public string EquipClassCode { get; set; }
         //设备类名称
@@ -369,6 +370,8 @@ namespace SAGA.MBI.Model
             return Id;
         }
         #endregion
+
+        #region VirtualMethod
         /// <summary>
         /// 信息点维护的固定参数
         /// </summary>
@@ -414,5 +417,15 @@ namespace SAGA.MBI.Model
             }
             return result;
         }
+        /// <summary>
+        /// 从Revit读取需要的参数
+        /// </summary>
+        public virtual void ReadRevitParamter(Element elem, bool isSubjectToMode = false)
+        {
+            this.Location = elem.GetLocationPointMBI();
+        }
+
+        #endregion
+
     }
 }

+ 3 - 2
MBI/SAGA.MBI/RevitModelHandle/ParameterDefinitionFactory.cs

@@ -12,6 +12,7 @@ using System.Text;
 using System.Threading.Tasks;
 using Autodesk.Revit.DB;
 using Autodesk.Revit.DB.Mechanical;
+using SAGA.MBI.Common;
 using SAGA.Models;
 
 namespace SAGA.MBI.RevitModelHandle
@@ -22,8 +23,8 @@ namespace SAGA.MBI.RevitModelHandle
 
         static ParameterDefinitionFactory()
         {
-            m_InnerMap[MBIBuiltInParameter.EquipLocalID] = new ParameterDefinition("设备本地编码");
-            m_InnerMap[MBIBuiltInParameter.EquipLocalName] = new ParameterDefinition("设备本地名称");
+            m_InnerMap[MBIBuiltInParameter.EquipLocalID] = new ParameterDefinition(RevitBuiltInParameter.EquipLocalID);
+            m_InnerMap[MBIBuiltInParameter.EquipLocalName] = new ParameterDefinition(RevitBuiltInParameter.EquipLocalName);
             m_InnerMap[MBIBuiltInParameter.RoomLocalName] = new ParameterDefinition(BuiltInParameter.ROOM_NAME){CanUpdate=
                 (e, value) =>
                 {

+ 3 - 3
MBI/SAGA.MBI/RevitModelHandle/RevitParameterUpdate.cs

@@ -149,9 +149,9 @@ namespace SAGA.MBI
         }
         public static void UpdateElementByMbi(Element element, string mbiParameterName, string value, bool checkValueEmpty)
         {
-            //设备信息同步关闭
-            if (element is FamilyInstance)
-                return;
+            ////设备信息同步关闭
+            //if (element is FamilyInstance)
+            //    return;
             if (checkValueEmpty && string.IsNullOrWhiteSpace(value))
                 return;
             ParameterDefinitionFactory.GetParameterDefinition(mbiParameterName)

+ 3 - 1
MBI/SAGA.MBI/SAGA.MBI.csproj

@@ -294,6 +294,7 @@
     <Compile Include="Common\EquipmentCodeMap.cs" />
     <Compile Include="Common\MailLog.cs" />
     <Compile Include="Common\PhaseUtil.cs" />
+    <Compile Include="Common\RevitBuiltInParameter.cs" />
     <Compile Include="Common\WaitingView.cs" />
     <Compile Include="DataArrange\DalInfoCode.cs" />
     <Compile Include="Html5Command.cs" />
@@ -341,12 +342,13 @@
     <Compile Include="ToolsData\DataCheck\DutyModeCodeDiffCheckResult.cs" />
     <Compile Include="ToolsData\DataCheck\SpaceEquipFloorCheck.cs" />
     <Compile Include="ToolsData\DataCheck\SpaceEquipFloorCheckResult.cs" />
+    <Compile Include="ToolsData\CopyLocalNameValue.cs" />
     <Compile Include="ToolsData\DelZeroSpace.cs" />
     <Compile Include="ToolsData\CheckBase\CheckOperation.cs" />
     <Compile Include="ToolsData\CheckBase\CheckType.cs" />
     <Compile Include="ToolsData\CheckBase\ICheckBase.cs" />
     <Compile Include="ToolsData\CheckDocumentData.cs" />
-    <Compile Include="ToolsData\AddEquipLocation.cs" />
+    <Compile Include="ToolsData\CorrectPropertyReadFromRevitHandler.cs" />
     <Compile Include="ToolsData\CheckDuplicationBIMId.cs" />
     <Compile Include="ToolsData\DataCheck\DataCheckBase.cs" />
     <Compile Include="ToolsData\CheckBase\CheckContext.cs" />

+ 45 - 5
MBI/SAGA.MBI/ToolCommand.cs

@@ -248,6 +248,46 @@ namespace SAGA.MBI
             return true;
         }
     }
+
+    /// <summary>
+    /// 将设备编号的值复制到设备本地编码中
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    [Regeneration(RegenerationOption.Manual)]
+    public class CopyLocalIdCommand : ExternalCommand
+    {
+        public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            try
+            {
+                int count = 0;
+                var tip = MessageShowBase.Question2($"确定复制设备编号中的值到{RevitBuiltInParameter.EquipLocalID}中?\r\n是:修正全部楼层\r\n否:修正当前楼层\r\n取消:取消修正。");
+                switch (tip)
+                {
+                    case DialogResult.Yes:
+                        count = CopyLocalNameValue.OperateAll();
+                        break;
+                    case DialogResult.No:
+                        count = CopyLocalNameValue.OperateCurFloor();
+                        break;
+                    default:
+                        break;
+                }
+                MessageShowBase.Infomation("信息点的值复制完成");
+            }
+            catch (Exception e)
+            {
+                MessageShow.Show(e);
+                return Result.Cancelled;
+            }
+            return Result.Succeeded;
+        }
+
+        public override bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories)
+        {
+            return true;
+        }
+    }
     #endregion
 
     #region 数据修正
@@ -294,24 +334,24 @@ namespace SAGA.MBI
     }
 
     /// <summary>
-    /// 更新所有楼层设备的坐标信息
+    /// 更新岗位从模型中获取的信息点
     /// </summary>
     [Transaction(TransactionMode.Manual)]
     [Regeneration(RegenerationOption.Manual)]
-    public class AddEquipLocationCommand : ExternalCommand
+    public class CorrectPropertyReadFromRevitCommand : ExternalCommand
     {
         public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
         {
             try
             {
-                var tip = MessageShow.Question2("确定要更新所有楼层设备的坐标信息?\r\n是:修正全部楼层\r\n否:修正当前楼层\r\n取消:取消修正。");
+                var tip = MessageShow.Question2("确定要更新岗位从模型中获取的信息点?\r\n是:修正全部楼层\r\n否:修正当前楼层\r\n取消:取消修正。");
                 switch (tip)
                 {
                     case DialogResult.Yes:
-                        AddEquipLocation.OperateAll();
+                        CorrectPropertyReadFromRevitHandler.OperateAll();
                         break;
                     case DialogResult.No:
-                        AddEquipLocation.OperateCurFloor();
+                        CorrectPropertyReadFromRevitHandler.OperateCurFloor();
                         break;
                     default:
                         break;

+ 0 - 144
MBI/SAGA.MBI/ToolsData/AddEquipLocation.cs

@@ -1,144 +0,0 @@
-/* ==============================================================================
- * 功能描述:修正岗位从模型中读取的数据
- * 创 建 者:Garrett
- * 创建日期:2018/7/12 14:25:17
- * ==============================================================================*/
-using Autodesk.Revit.DB;
-using SAGA.DotNetUtils;
-using SAGA.DotNetUtils.Logger;
-using SAGA.DotNetUtils.Others;
-using SAGA.MBI.Calc;
-using SAGA.MBI.DataArrange;
-using SAGA.MBI.Model;
-using SAGA.MBI.Tools;
-using SAGA.MBI.WinView.Upload;
-using SAGA.RevitUtils.Extends;
-using System;
-using SAGA.MBI.Common;
-
-namespace SAGA.MBI.ToolsData
-{
-    /// <summary>
-    /// CheckEquipCategory
-    /// </summary>
-    public class AddEquipLocation
-    {
-        /// <summary>
-        /// 检查并处理所有楼层
-        /// </summary>
-        public static void OperateAll()
-        {
-            var floors = DalUploadFloor.GetHasFileFloors();
-            foreach (UploadFloor floor in floors)
-            {
-                Operate(floor.MFloor);
-            }
-        }
-        /// <summary>
-        /// 只处理当前楼层
-        /// </summary>
-        public static void OperateCurFloor()
-        {
-            MFloor floor = ExternalDataWrapper.Current.Doc.GetCurMFloor();
-            if (floor != null)
-                Operate(floor);
-        }
-        /// <summary>
-        /// 检查并处理
-        /// </summary>
-        /// <param name="floor"></param>
-        /// <returns></returns>
-        private static void Operate(MFloor floor)
-        {
-            var context = DalCommon.DownLoadCouldData(floor);
-            context.OpenDocument();
-            try
-            {
-                Check(context);
-                RebuildCloudData(context);
-            }
-            catch (Exception e)
-            {
-                MessageShowBase.Show(e);
-            }
-            finally
-            {
-                context.RevitDoc.CloseDoc();
-            }
-        }
-        /// <summary>
-        /// 检查设备,部件
-        /// </summary>
-        /// <param name="baseContext"></param>
-        /// <param name="delcontext"></param>
-        /// <param name="addContext"></param>
-        private static void Check(CalcContext baseContext)
-        {
-            var doc = baseContext.RevitDoc;
-            //检查设备
-            foreach (var mode in baseContext.MEquipments)
-            {
-                string cBimId = mode.BimID;
-                if (cBimId.IsNullOrEmpty()) continue;
-                int bimid = cBimId.GetBIMID();
-                Element elem = doc.GetElement(bimid);
-                if (elem == null) continue;
-                mode.Operator = DocumentChangedOperator.Modified;
-                mode.Location = elem.GetLocationPointMBI();
-                //mode.LocalId = elem.GetParameterString("设备本地编码");
-                //mode.LocalName = elem.GetParameterString("设备本地名称");
-                ////恢复信息点的值
-                //if (mode.LocalId.IsNotNullEmpty())
-                //{
-                //    mode.LocalId = CommonTool.NullStr;
-                //}
-
-                //if (mode.LocalName.IsNotNullEmpty())
-                //{
-                //    mode.LocalName = CommonTool.NullStr;
-                //}
-            }
-            //检查部件 
-            foreach (var mode in baseContext.MEquipmentParts)
-            {
-                string cBimId = mode.BimID;
-                if (cBimId.IsNullOrEmpty()) continue;
-                int bimid = cBimId.GetBIMID();
-                Element elem = doc.GetElement(bimid);
-                if (elem == null) continue;
-                mode.Operator = DocumentChangedOperator.Modified;
-                mode.Location = elem.GetLocationPointMBI();
-                //mode.LocalId = elem.GetParameterString("设备本地编码");
-                //mode.LocalName = elem.GetParameterString("设备本地名称");
-                //if (mode.LocalId.IsNotNullEmpty())
-                //{
-                //    mode.LocalId = CommonTool.NullStr;
-                //}
-
-                //if (mode.LocalName.IsNotNullEmpty())
-                //{
-                //    mode.LocalName = CommonTool.NullStr;
-                //}
-            }
-            //信标不用检查
-            //检查空间 
-            foreach (var mode in baseContext.MSpaces)
-            {
-                string cBimId = mode.BimID;
-                if (cBimId.IsNullOrEmpty()) continue;
-                int bimid = cBimId.GetBIMID();
-                Element elem = doc.GetElement(bimid);
-                if (elem == null) continue;
-                mode.Operator = DocumentChangedOperator.Modified;
-                mode.Location = elem.GetLocationPointMBI();
-            }
-        }
-        /// <summary>
-        /// 重建物理世界有问题的数据
-        /// </summary>
-        private static void RebuildCloudData(CalcContext context)
-        {
-            context.Upload();
-        }
-    }
-}

+ 153 - 0
MBI/SAGA.MBI/ToolsData/CopyLocalNameValue.cs

@@ -0,0 +1,153 @@
+/* ==============================================================================
+ * 功能描述:复制本地名称或本地编码的值
+ * 创 建 者:Garrett
+ * 创建日期:2018/7/12 14:25:17
+ * ==============================================================================*/
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SAGA.DotNetUtils.Others;
+using SAGA.MBI.Calc;
+using SAGA.MBI.Model;
+using SAGA.MBI.RequestData;
+using SAGA.MBI.WinView.Upload;
+using Autodesk.Revit.DB;
+using Autodesk.Revit.DB.Mechanical;
+using SAGA.DotNetUtils;
+using SAGA.DotNetUtils.Logger;
+using SAGA.MBI.Common;
+using SAGA.MBI.DataArrange;
+using SAGA.MBI.Tools;
+using SAGA.RevitUtils.Extends;
+
+namespace SAGA.MBI.ToolsData
+{
+    /// <summary>
+    /// CheckEquipCategory
+    /// </summary>
+    public class CopyLocalNameValue
+    {
+        /// <summary>
+        /// 检查并处理所有楼层
+        /// </summary>
+        public static int OperateAll()
+        {
+            int count = 0;
+            var floors = DalUploadFloor.GetHasFileFloors();
+            foreach (UploadFloor floor in floors)
+            {
+                count += Operate(floor.MFloor);
+            }
+            return count;
+        }
+        /// <summary>
+        /// 只处理当前楼层
+        /// </summary>
+        public static int OperateCurFloor()
+        {
+            int count = 0;
+            MFloor floor = ExternalDataWrapper.Current.Doc.GetCurMFloor();
+            if (floor != null)
+                count = Operate(floor);
+            return count;
+        }
+        /// <summary>
+        /// 检查并处理
+        /// </summary>
+        /// <param name="floor"></param>
+        /// <returns>失败的个数</returns>
+        private static int Operate(MFloor floor)
+        {
+            List<string> errorids = new List<string>();
+            var context = new CalcContext(floor);
+            try
+            {
+                context.OpenDocument();
+                var doc = context.RevitDoc;
+                using (Transaction trans = new Transaction(doc, "复制本地名称,本地编码的值"))
+                {
+                    trans.Start();
+                    try
+                    {
+                        var fis = doc.GetFamilyInstances();
+                        foreach (var fi in fis)
+                        {
+                            if (fi.IsEquipment() || fi.IsEquipmentPart())
+                                if (!CopyProperty(fi))
+                                    errorids.Add(fi.Id.ToString());
+                        }
+                        trans.Commit();
+                    }
+                    catch (Exception)
+                    {
+                        trans.RollBack();
+                    }
+                }
+            }
+            catch (Exception e)
+            {
+                MessageShowBase.Show(e);
+            }
+            finally
+            {
+                context.RevitDoc.CloseDoc();
+            }
+            //if (errorids.Count > 0)
+            //    MessageShowBase.Infomation($"楼层 {floor} 下列对象的参数复制失败,请检查!\r\n" + string.Join(",", errorids));
+            return errorids.Count;
+        }
+
+        /// <summary>
+        /// 复制值:
+        /// 从设备本地名称到设备本地名称2
+        /// 从设备本地编码到设备本地编码2
+        /// 从设备编号到设备本地编码
+        /// </summary>
+        /// <param name="fi"></param>
+        /// <returns>True成功,False失败</returns>
+        private static bool CopyProperty(FamilyInstance fi, bool isBackupValue = false)
+        {
+            bool result = false;
+            try
+            {
+                Parameter localIdParameter = fi.GetParameter(RevitBuiltInParameter.EquipLocalID);
+                Parameter numParameter = fi.GetParameter("设备编号");
+                if (localIdParameter != null)
+                {
+                    if (isBackupValue)
+                    {
+                        Parameter localNameParameter = fi.GetParameter(RevitBuiltInParameter.EquipLocalName);
+                        Parameter localNameParameter2 = fi.GetParameter("设备本地名称2");
+                        Parameter localIdParameter2 = fi.GetParameter("设备本地编码2");
+                        if (localNameParameter != null)
+                        {
+                            if (localIdParameter2 != null && localNameParameter2 != null)
+                            {
+                                localIdParameter2.SetValueString(localIdParameter.GetParameterString());
+                                localNameParameter2.SetValueString(localNameParameter.GetParameterString());
+                            }
+                        }
+                    }
+
+                    if (numParameter != null)
+                    {
+                        string originValue = localIdParameter.GetParameterString();
+                        string numvalue = numParameter.GetParameterString();
+                        if (originValue.IsNullOrEmpty()&& numvalue.IsNotNullEmpty())
+                            result = localIdParameter.Set(numvalue);
+                    }
+
+                }
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine(e);
+                return false;
+            }
+
+            return result;
+        }
+    }
+}

+ 109 - 0
MBI/SAGA.MBI/ToolsData/CorrectPropertyReadFromRevitHandler.cs

@@ -0,0 +1,109 @@
+/* ==============================================================================
+ * 功能描述:修正岗位从模型中读取的数据
+ * 创 建 者:Garrett
+ * 创建日期:2018/7/12 14:25:17
+ * ==============================================================================*/
+using Autodesk.Revit.DB;
+using SAGA.DotNetUtils;
+using SAGA.DotNetUtils.Logger;
+using SAGA.DotNetUtils.Others;
+using SAGA.MBI.Calc;
+using SAGA.MBI.DataArrange;
+using SAGA.MBI.Model;
+using SAGA.MBI.Tools;
+using SAGA.MBI.WinView.Upload;
+using SAGA.RevitUtils.Extends;
+using System;
+using System.Collections.Generic;
+using SAGA.MBI.Common;
+
+namespace SAGA.MBI.ToolsData
+{
+    /// <summary>
+    /// CheckEquipCategory
+    /// </summary>
+    public class CorrectPropertyReadFromRevitHandler
+    {
+        /// <summary>
+        /// 检查并处理所有楼层
+        /// </summary>
+        public static void OperateAll()
+        {
+            var floors = DalUploadFloor.GetHasFileFloors();
+            foreach (UploadFloor floor in floors)
+            {
+                Operate(floor.MFloor);
+            }
+        }
+        /// <summary>
+        /// 只处理当前楼层
+        /// </summary>
+        public static void OperateCurFloor()
+        {
+            MFloor floor = ExternalDataWrapper.Current.Doc.GetCurMFloor();
+            if (floor != null)
+                Operate(floor);
+        }
+        /// <summary>
+        /// 检查并处理
+        /// </summary>
+        /// <param name="floor"></param>
+        /// <returns></returns>
+        private static void Operate(MFloor floor)
+        {
+            try
+            {
+                var context = Check(floor);
+                RebuildCloudData(context);
+            }
+            catch (Exception e)
+            {
+                MessageShowBase.Show(e);
+            }
+        }
+        /// <summary>
+        /// 检查设备,部件
+        /// </summary>
+        /// <param name="baseContext"></param>
+        /// <param name="delcontext"></param>
+        /// <param name="addContext"></param>
+        private static CalcContext Check(MFloor floor)
+        {
+            var context = new CalcContext(floor);
+            context.OpenDocument();
+            var doc = context.RevitDoc;
+            try
+            {
+                var modes = DalCommon.DownLoadCouldData(floor.Id);
+                foreach (MRevitEquipBase mode in modes)
+                {
+                    string cBimId = mode.BimID;
+                    if (cBimId.IsNullOrEmpty()) continue;
+                    int bimid = cBimId.GetBIMID();
+                    Element elem = doc.GetElement(bimid);
+                    if (elem == null) continue;
+                    mode.Operator = DocumentChangedOperator.Modified;
+                    mode.ReadRevitParamter(elem);
+                    context.Add(mode);
+                }
+            }
+            catch (Exception v)
+            {
+                throw;
+            }
+            finally
+            {
+                doc.CloseDoc();
+            }
+
+            return context;
+        }
+        /// <summary>
+        /// 重建物理世界有问题的数据
+        /// </summary>
+        private static void RebuildCloudData(CalcContext context)
+        {
+            context.Upload();
+        }
+    }
+}

+ 270 - 0
MBI/SAGA.MBI/WinView/ModeInfoMaintenance/PWGInstace.cs

@@ -508,5 +508,275 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
         }
         #endregion
 
+
+        #region 写死的信息点
+
+        /// <summary>
+        /// 信息点维护的固定参数
+        /// </summary>
+        /// <returns></returns>
+        public static CompositeItem SetFixedProperty(MRevitEquipBase mode)
+        {
+            CompositeItem item = new PropertyCollection();
+            string code = mode.EquipClassCode;
+            PropertyDefineTb pdtb = PEPCodeConvert.GetPropertyDefineTb(code);
+
+            Property property = new Property(mode);
+            //属性窗格用到的信息
+            property.Category = "编码及关系";
+            property.Name = "模型ID";
+            //Type应该先于Value进行赋值
+            property.PropertyType = typeof(string);
+            property.IsReadOnly = true;
+            property.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "BIMID");
+            //property.PropertyChangeAction += PropertyChangeAction;
+            item.Items.Add(property);
+
+            Property property1 = new Property(mode);
+            //属性窗格用到的信息
+            property1.Category = "编码及关系";
+            property1.Name = "设备ID";
+            //Type应该先于Value进行赋值
+            property1.PropertyType = typeof(string);
+            property1.IsReadOnly = true;
+            property1.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "EquipID");
+            //property1.PropertyChangeAction += PropertyChangeAction;
+            item.Items.Add(property1);
+
+            Property property2 = new Property(mode);
+            //属性窗格用到的信息
+            property2.Category = "编码及关系";
+            property2.Name = "对应资产";
+            //Type应该先于Value进行赋值
+            property2.PropertyType = typeof(UcReferenceFM);
+            property2.Value = mode.FMID.IsNullOrEmpty() ? "请选择" : mode.FMID;
+            property2.ExtendClickAction = PWGInstace.WinMatchFMClick;
+            //property2.PropertyChangeAction += PropertyChangeAction;
+            item.Items.Add(property2);
+
+            //设备关联过资产后才有二维码图片
+            if (mode.FMID.IsNotNullEmpty())
+            {
+                Property propertyi2 = new Property(mode);
+                propertyi2.Category = "编码及关系";
+                propertyi2.Name = "设备二维码图片";
+                propertyi2.PropertyType = typeof(UcHyperlink);
+                propertyi2.ItemClickAction = PWGInstace.WinQRCodeItemClick;
+                propertyi2.Value = mode.FMID.IsNullOrEmpty() ? null : "点击查看二维码图片";
+                item.Items.Add(propertyi2);
+            }
+            Property propertySpace = new Property(mode);
+            //属性窗格用到的信息
+            propertySpace.Category = "编码及关系";
+            propertySpace.Name = "所在元空间";
+            //Type应该先于Value进行赋值
+            propertySpace.PropertyType = typeof(UcHyperlink);
+            propertySpace.ItemClickAction = PWGInstace.WinISpaceItemClick;
+            propertySpace.Value = mode.MSpace?.ToString();
+            item.Items.Add(propertySpace);
+
+
+            Property property3 = new Property(mode);
+            //属性窗格用到的信息
+            property3.Category = "台账信息-设备厂家";
+            property3.Name = "厂家";
+            //Type应该先于Value进行赋值
+            property3.PropertyType = typeof(UcPopups);
+            property3.IsReadOnly = true;
+            property3.Value = "请选择型号";
+            property3.ExtendClickAction = PWGInstace.WinSelectManufacturerClick;
+            //property3.PropertyChangeAction += PropertyChangeAction;
+            item.Items.Add(property3);
+
+            Property property4 = new Property(mode);
+            //属性窗格用到的信息
+            property4.Category = "台账信息-设备厂家";
+            property4.Name = "生产日期";
+            //Type应该先于Value进行赋值
+            property4.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "ProductDate");
+            //property4.PropertyChangeAction += PropertyChangeAction;
+            item.Items.Add(property4);
+
+
+            Property property5 = new Property(mode);
+            //属性窗格用到的信息
+            property5.Category = "台账信息-设备厂家";
+            property5.Name = "出厂编号";
+            //Type应该先于Value进行赋值
+            property5.IsReadOnly = false;
+            property5.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "SerialNum");
+            //property5.PropertyChangeAction += PropertyChangeAction;
+            item.Items.Add(property5);
+
+            Property property6 = new Property(mode);
+            //属性窗格用到的信息
+            property6.Category = "台账信息-供应&购买";
+            property6.Name = "供应商";
+            //Type应该先于Value进行赋值
+            property6.PropertyType = typeof(UcPopups);
+            //property6.PropertyType = typeof(UcSupplier);
+            property6.IsReadOnly = true;
+            property6.Value = "请选择供应商";
+            property6.ExtendClickAction = PWGInstace.WinSelectSupplyClick;
+
+            //property6.PropertyChangeAction += PropertyChangeAction;
+            item.Items.Add(property6);
+
+            Property property7 = new Property(mode);
+            //属性窗格用到的信息
+            property7.Category = "台账信息-供应&购买";
+            property7.Name = "合同编号";
+            //Type应该先于Value进行赋值
+            property7.PropertyType = typeof(UcPopups);
+            //property7.PropertyType = typeof(UcContractNO);
+            property7.IsReadOnly = true;
+            property7.Value = "请维护供应商合同";
+            property7.ExtendClickAction = PWGInstace.WinSupplyContractInfoClick;
+            //property7.PropertyChangeAction += PropertyChangeAction;
+            item.Items.Add(property7);
+
+            Property property8 = new Property(mode);
+            //属性窗格用到的信息
+            property8.Category = "台账信息-供应&购买";
+            property8.Name = "资产编号";
+            //Type应该先于Value进行赋值
+            property8.IsReadOnly = false;
+            property8.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "AssetID");
+            //property8.PropertyChangeAction += PropertyChangeAction;
+            item.Items.Add(property8);
+
+            Property property9 = new Property(mode);
+            //属性窗格用到的信息
+            property9.Category = "台账信息-运行&维保";
+            property9.Name = "维保负责人";
+            //Type应该先于Value进行赋值
+            property9.IsReadOnly = false;
+            property9.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "Principal");
+            //property9.PropertyChangeAction += PropertyChangeAction;
+            item.Items.Add(property9);
+
+            Property property10 = new Property(mode);
+            //属性窗格用到的信息
+            property10.Category = "台账信息-运行&维保";
+            property10.Name = "投产日期";
+            //Type应该先于Value进行赋值
+            property10.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "StartDate");
+            //property10.PropertyChangeAction += PropertyChangeAction;
+            item.Items.Add(property10);
+
+            Property property11 = new Property(mode);
+            //属性窗格用到的信息
+            property11.Category = "台账信息-运行&维保";
+            property11.Name = "保修期";
+            //Type应该先于Value进行赋值
+            property11.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "Warranty");
+            item.Items.Add(property11);
+
+            Property property12 = new Property(mode);
+            //属性窗格用到的信息
+            property12.Category = "台账信息-运行&维保";
+            property12.Name = "维保合同截止日期";
+            //Type应该先于Value进行赋值
+            property12.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "MaintainDeadline");
+            item.Items.Add(property12);
+
+            Property property13 = new Property(mode);
+            //属性窗格用到的信息
+            property13.Category = "台账信息-运行&维保";
+            property13.Name = "预计报废日期";
+            //Type应该先于Value进行赋值
+            property13.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "ExpectScrapDate");
+            item.Items.Add(property13);
+
+            Property property14 = new Property(mode);
+            //属性窗格用到的信息
+            property14.Category = "台账信息-运行&维保";
+            property14.Name = "保养周期";
+            property14.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "MaintainPeriod");
+            item.Items.Add(property14);
+
+            Property property15 = new Property(mode);
+            //属性窗格用到的信息
+            property15.Category = "台账信息-运行&维保";
+            property15.Name = "维修商";
+            //Type应该先于Value进行赋值
+            property15.PropertyType = typeof(UcPopups);
+            //property15.PropertyType = typeof(UcMaintenance);
+            property15.IsReadOnly = true;
+            property15.Value = "请选择维修商";
+            property15.ExtendClickAction = PWGInstace.WinMaintenanceDealerClick;
+            item.Items.Add(property15);
+
+            Property property16 = new Property(mode);
+            //属性窗格用到的信息
+            property16.Category = "台账信息-保险";
+            property16.Name = "保险公司";
+            //Type应该先于Value进行赋值
+            property16.PropertyType = typeof(UcPopups);
+            //property16.PropertyType = typeof(UcInsuer);
+            property16.IsReadOnly = true;
+            property16.Value = "请选择保险公司";
+            property16.ExtendClickAction = PWGInstace.WinInsuerClick;
+            item.Items.Add(property16);
+
+            Property property17 = new Property(mode);
+            //属性窗格用到的信息
+            property17.Category = "台账信息-保险";
+            property17.Name = "保单号";
+            //Type应该先于Value进行赋值
+            property17.PropertyType = "All_HyperLink";//typeof(UcPopups);
+            //property17.PropertyType = typeof(UcNumberOfPolicy);
+            property17.IsReadOnly = true;
+            property17.Value = "请维护保单信息";
+            property17.ExtendClickAction = PWGInstace.WinInsuerContractInfoClick;
+            property17.ItemClickAction = PWGInstace.WinInsuerContractLoadClick;
+            item.Items.Add(property17);
+
+
+            Property property18 = new Property(mode);
+            //属性窗格用到的信息
+            property18.Category = "台账信息-照片&文档";
+            property18.Name = "设备铭牌照片";
+            //Type应该先于Value进行赋值
+            property18.PropertyType = typeof(UcPopups_Nameplate);
+            property18.ExtendClickAction = PWGInstace.WinNameplateExtendClick;
+            property18.ItemClickAction = PWGInstace.WinNameplateItemClick;
+            property18.Value = mode.CloudInfos.GetAttachmentsItems("Nameplate").Count == 0 ? null : "点击查看铭牌照片";
+            item.Items.Add(property18);
+
+            Property property19 = new Property(mode);
+            //属性窗格用到的信息
+            property19.Category = "台账信息-照片&文档";
+            property19.Name = "设备照片";
+            //Type应该先于Value进行赋值
+            property19.PropertyType = typeof(UcReferenceFM);
+            property19.ExtendClickAction = PWGInstace.WinPicManageClick;
+            property19.Value = $"共{mode.ServirceImages.Count}个媒体文件";
+            //property19.Define = pdtb.PropertyDefineItems.FirstOrDefault(t => t.CodeName == "Pic");
+            item.Items.Add(property19);
+
+            Property property20 = new Property(mode);
+            property20.Category = "台账信息-照片&文档";
+            property20.Name = "设备图纸";
+            property20.PropertyType = typeof(UcReferenceFM);
+            property20.ExtendClickAction = PWGInstace.WinServiceDrawingManageClick;
+            var count = mode.CloudInfos.GetAttachmentsItems("Drawing").Count;
+            property20.Value = $"共{count}个文件";
+            item.Items.Add(property20);
+
+            Property property21 = new Property(mode);
+            property21.Category = "台账信息-照片&文档";
+            property21.Name = "设备文档";
+            property21.PropertyType = typeof(UcReferenceFM);
+            property21.ExtendClickAction = PWGInstace.WinDeviceDocumentManageClick;
+            var count21 = mode.CloudInfos.GetAttachmentsItems("Archive").Count;
+            property21.Value = $"共{count21}个文件";
+            item.Items.Add(property21);
+            return item;
+        }
+
+
+        #endregion
+
     }
 }

+ 1 - 1
MBI/SAGA.MBI/WinView/ModeInfoMaintenance/WinInsuerContractInfo.xaml.cs

@@ -131,7 +131,7 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
                 return result;
             return GetValueDisplay(updateItem);
         }
-        public static readonly string NullDisplay = "选择保单号";
+        public static readonly string NullDisplay = "选择保单号";
 
 
         public static void DownLoadPolicy(MRevitEquipBase equipment)