Procházet zdrojové kódy

Merge branch 'master' of https://git.dev.tencent.com/xuhuo1234/saga

xulisong před 6 roky
rodič
revize
01d9906a0a

+ 15 - 15
MBI/Menu/MBITool.xml

@@ -12,12 +12,12 @@
     
     <Button ButtonStyles="Large">
       <ButtonName>SAGA.MBI.CheckCloudAndLocalFamilyCommand</ButtonName>
-      <ButtonText>同步族类型</ButtonText>
+      <ButtonText>族编码同步</ButtonText>
       <ImageName>1、打开楼层模型</ImageName>
       <DllName>..\OutputDll\SAGA.MBI.exe</DllName>
       <ClassName>SAGA.MBI.CheckCloudAndLocalFamilyCommand</ClassName>
-      <ToolTip>处理云平台和物理世界族类型不同步的问题。</ToolTip>
-      <LongDescription>处理云平台和物理世界族类型不同步的问题。</LongDescription>
+      <ToolTip>处理云平台和物理世界设备类与族类型不同步的问题。</ToolTip>
+      <LongDescription>冲突岗位,先删除,再重新创建。</LongDescription>
       <ToolTipImage></ToolTipImage>
       <MenuTab>MBITool_W</MenuTab>
       <Modules>MBITool</Modules>
@@ -25,12 +25,12 @@
   
     <Button ButtonStyles="Large">
       <ButtonName>SAGA.MBI.AddEquipLocationCommand</ButtonName>
-      <ButtonText>更新所有楼层设备的坐标信息</ButtonText>
+      <ButtonText>补充坐标信息</ButtonText>
       <ImageName>1、打开楼层模型</ImageName>
       <DllName>..\OutputDll\SAGA.MBI.exe</DllName>
       <ClassName>SAGA.MBI.AddEquipLocationCommand</ClassName>
-      <ToolTip>更新所有楼层设备的坐标信息</ToolTip>
-      <LongDescription>更新所有楼层设备的坐标信息</LongDescription>
+      <ToolTip>更新所有楼层设备、部件、空间的坐标信息</ToolTip>
+      <LongDescription>之前老版本BIMLocation信息点值为null,可用此命令去补充</LongDescription>
       <ToolTipImage></ToolTipImage>
       <MenuTab>MBITool_W</MenuTab>
       <Modules>MBITool</Modules>
@@ -41,20 +41,20 @@
       <ImageName>2、模型文件管理</ImageName>
       <DllName>..\OutputDll\SAGA.MBI.exe</DllName>
       <ClassName>SAGA.MBI.ExportMbiModelCommand</ClassName>
-      <ToolTip>模型文件管理。</ToolTip>
-      <LongDescription>模型文件管理。</LongDescription>
+      <ToolTip>上传底图数据。</ToolTip>
+      <LongDescription>扫楼使用的底图如果缺失,使用此命令重新上传底图数据。</LongDescription>
       <ToolTipImage></ToolTipImage>
       <MenuTab>MBITool_W</MenuTab>
       <Modules>MBITool</Modules>
     </Button>
     <Button ButtonStyles="Large">
       <ButtonName>SAGA.MBI.UpdateEquipinSpaceCommand</ButtonName>
-      <ButtonText>更新设备所在空间关系</ButtonText>
+      <ButtonText>补充设备所在空间关系</ButtonText>
       <ImageName>1、打开楼层模型</ImageName>
       <DllName>..\OutputDll\SAGA.MBI.exe</DllName>
       <ClassName>SAGA.MBI.UpdateEquipinSpaceCommand</ClassName>
-      <ToolTip>更新设备所在空间关系。</ToolTip>
-      <LongDescription>更新设备所在空间关系。</LongDescription>
+      <ToolTip>更新设备所在空间关系。</ToolTip>
+      <LongDescription>设备所在元空间数据可能会不完事,使用此命令更新设备、部件所在空间关系。</LongDescription>
       <ToolTipImage></ToolTipImage>
       <MenuTab>MBITool_W</MenuTab>
       <Modules>MBITool</Modules>
@@ -66,18 +66,18 @@
       <DllName>..\OutputDll\SAGA.MBI.exe</DllName>
       <ClassName>SAGA.MBI.CheckEquipinFloorCommand</ClassName>
       <ToolTip>更新设备所在楼层关系。</ToolTip>
-      <LongDescription>更新设备所在楼层关系。</LongDescription>
+      <LongDescription>使用创建设备,部件的命令,可能会引起,设备所在楼层关系缺失,使用此命令更新设备所在楼层关系。</LongDescription>
       <ToolTipImage></ToolTipImage>
       <MenuTab>MBITool_W</MenuTab>
       <Modules>MBITool</Modules>
     </Button>
     <Button ButtonStyles="Large">
       <ButtonName>SAGA.MBI.CorrectLossDutyCommand</ButtonName>
-      <ButtonText>修正有模型但没有岗位问题</ButtonText>
+      <ButtonText>模型岗位不一致</ButtonText>
       <ImageName>1、打开楼层模型</ImageName>
       <DllName>..\OutputDll\SAGA.MBI.exe</DllName>
       <ClassName>SAGA.MBI.CorrectLossDutyCommand</ClassName>
-      <ToolTip>修正有模型但没有岗位问题。</ToolTip>
+      <ToolTip>修正有模型但没有岗位问题或有岗位没有对应模型的问题。</ToolTip>
       <LongDescription>修正有模型但没有岗位问题。</LongDescription>
       <ToolTipImage></ToolTipImage>
       <MenuTab>MBITool_W</MenuTab>
@@ -89,7 +89,7 @@
       <ImageName>1、打开楼层模型</ImageName>
       <DllName>..\OutputDll\SAGA.MBI.exe</DllName>
       <ClassName>SAGA.MBI.CorrectBIMIDDutyCommand</ClassName>
-      <ToolTip>修正BIMID重复。</ToolTip>
+      <ToolTip>修正BIMID重复,多个岗位将保留信息点比较多岗位。</ToolTip>
       <LongDescription>修正BIMID重复。</LongDescription>
       <ToolTipImage></ToolTipImage>
       <MenuTab>MBITool_W</MenuTab>

+ 6 - 0
MBI/SAGA.GplotManage/SAGA.GplotManage.csproj

@@ -129,6 +129,12 @@
     <Compile Include="GplotManage\GplotView\GplotView.cs" />
     <Compile Include="Command\GplotUtil.cs" />
     <Compile Include="GraphTypeEnum.cs" />
+    <Compile Include="RelationManager\ElectricalRelationUploader.cs" />
+    <Compile Include="RelationManager\IRelationUploader.cs" />
+    <Compile Include="RelationManager\RelationDataManager.cs" />
+    <Compile Include="RelationManager\RelationUploader.cs" />
+    <Compile Include="RelationManager\SpaceRelationUploader.cs" />
+    <Compile Include="RelationManager\SystemRelationUploader.cs" />
     <Compile Include="SystemChecks\CheckSystemResultView.xaml.cs">
       <DependentUpon>CheckSystemResultView.xaml</DependentUpon>
     </Compile>

+ 8 - 4
MBI/SAGA.GplotRelationComputerManage/PowerDistribution/ComputerHandler/DistributionRelationshipHandler.cs

@@ -17,8 +17,12 @@ using MBIEquipItem = SAGA.Models.EquipmentItem;
 
 namespace SAGA.GplotRelationComputerManage
 {
-    public class DistributionRelationshipHandler
+    public sealed class DistributionRelationshipHandler : IElectricalRelationHandler
     {
+        public string ElectricalRelationType
+        {
+            get { return "LUDistribution"; }
+        }
         /// <summary>
         /// 获取解析数据源
         /// </summary>
@@ -58,7 +62,7 @@ namespace SAGA.GplotRelationComputerManage
             var incomingCabinet = originNodes.Where(t => t.Childrens.Count != 0 && t.Parent == null).ToList();
             //孤立节点
             var orphanNodes = originNodes.Where(t => t.Childrens.Count == 0 && t.Parent == null).ToList();
-            DrawDataServer.SaveAsFile<DataNode>(new DataNode("root") { Childrens = incomingCabinet }, "LUDistribution");
+            //DrawDataServer.SaveAsFile<DataNode>(new DataNode("root") { Childrens = incomingCabinet }, "LUDistribution");
 
             List<DataNode> nodes = new List<DataNode>();
             nodes.Add(new DataNode() { Childrens = incomingCabinet });
@@ -71,9 +75,9 @@ namespace SAGA.GplotRelationComputerManage
         /// </summary>
         /// <param name="context"></param>
         /// <returns></returns>
-        public List<string> GetComputeData(PowerComputerContext context)
+        public List<DataNode> GetComputeData(PowerComputerContext context)
         {
-            return null;
+            return GetViewData(context);
         }
     }
 }

+ 8 - 4
MBI/SAGA.GplotRelationComputerManage/PowerDistribution/ComputerHandler/EquipPowerRelationshipHandler.cs

@@ -16,8 +16,12 @@ using SAGA.Models;
 using MBIEquipItem = SAGA.Models.EquipmentItem;
 namespace SAGA.GplotRelationComputerManage
 {
-    public class EquipPowerRelationshipHandler
+    public class EquipPowerRelationshipHandler : IElectricalRelationHandler
     {
+        public string ElectricalRelationType
+        {
+            get { return "EquipPower"; }
+        }
         /// <summary>
         /// 获取解析数据源
         /// </summary>
@@ -77,7 +81,7 @@ namespace SAGA.GplotRelationComputerManage
               .ToList();
             var incomingCabinet = allDataNodes.Where(t => t.Childrens.Count != 0 &&(t.Parent == null||ignoreNodes.Contains(t.Parent))).ToList();
             var orphanNodes = allDataNodes.Where(t => t.Childrens.Count == 0 && t.Parent == null).ToList();
-            DrawDataServer.SaveAsFile<DataNode>(new DataNode("root") { Childrens = incomingCabinet }, "EquipPower");
+            //DrawDataServer.SaveAsFile<DataNode>(new DataNode("root") { Childrens = incomingCabinet }, "EquipPower");
 
             List<DataNode> nodes = new List<DataNode>();
             nodes.Add(new DataNode() { Childrens = incomingCabinet });
@@ -90,9 +94,9 @@ namespace SAGA.GplotRelationComputerManage
         /// </summary>
         /// <param name="context"></param>
         /// <returns></returns>
-        public List<string> GetComputeData(PowerComputerContext context)
+        public List<DataNode> GetComputeData(PowerComputerContext context)
         {
-            return null;
+            return GetViewData(context);
         }
     }
 }

+ 8 - 4
MBI/SAGA.GplotRelationComputerManage/PowerDistribution/ComputerHandler/ObjectControlRelationshipHandler.cs

@@ -17,8 +17,12 @@ using MBIEquipItem = SAGA.Models.EquipmentItem;
 
 namespace SAGA.GplotRelationComputerManage
 {
-    public class ObjectControlRelationshipHandler
+    public class ObjectControlRelationshipHandler : IElectricalRelationHandler
     {
+        public string ElectricalRelationType
+        {
+            get { return "ControlRelation"; }
+        }
         /// <summary>
         /// 获取解析数据源
         /// </summary>
@@ -68,7 +72,7 @@ namespace SAGA.GplotRelationComputerManage
             //孤立节点
             var orphanNodes = eqs.Where(t => t.Childrens.Count == 0 && t.Parent == null).ToList();
 
-             DrawDataServer.SaveAsFile<DataNode>(new DataNode("root") { Childrens = incomingCabinet }, "ControlRelation");
+             //DrawDataServer.SaveAsFile<DataNode>(new DataNode("root") { Childrens = incomingCabinet }, "ControlRelation");
             List<DataNode> nodes = new List<DataNode>();
             nodes.Add(new DataNode() { Childrens = incomingCabinet });
             nodes.Add(new DataNode() { Childrens = orphanNodes });
@@ -80,9 +84,9 @@ namespace SAGA.GplotRelationComputerManage
         /// </summary>
         /// <param name="context"></param>
         /// <returns></returns>
-        public List<string> GetComputeData(PowerComputerContext context)
+        public List<DataNode> GetComputeData(PowerComputerContext context)
         {
-            return null;
+             return GetViewData(context);
         }
 
         private DataNode ConvertToDataNode(PowerComputerContext context,MBIEquipItem item)

+ 1 - 0
MBI/SAGA.GplotRelationComputerManage/SAGA.GplotRelationComputerManage.csproj

@@ -132,6 +132,7 @@
     <Compile Include="PowerDistribution\Common\PowerComputerContext.cs" />
     <Compile Include="PowerDistribution\ComputerHandler\DistributionRelationshipHandler.cs" />
     <Compile Include="PowerDistribution\ComputerHandler\EquipPowerRelationshipHandler.cs" />
+    <Compile Include="PowerDistribution\ComputerHandler\IElectricalRelationHandler.cs" />
     <Compile Include="PowerDistribution\ComputerHandler\ObjectControlRelationshipHandler.cs" />
     <Compile Include="PumpEnd\DrawEnd.cs" />
     <Compile Include="PumpEnd\DuctTerminalBll.cs" />

+ 6 - 11
MBI/SAGA.MBI/Command.cs

@@ -341,23 +341,18 @@ namespace SAGA.MBI
         {
             try
             {
-                Log4Net.Debug("开始命令:上传模型");
-                Log4Net.Debug("开始检查:检查所有的模型是否关闭");
                 if (DalUploadFloor.IsAllFloorClosed())
                 {
-                    Log4Net.Debug("结束检查:检查所有的模型是否关闭");
-                    Log4Net.Debug("开始检查:是否有需要下载的文件");
                     if (DalUploadFloor.IsNeedUpdataFile())
                         return Result.Succeeded;
-                    Log4Net.Debug("结束检查:是否有需要下载的文件");
-                    Log4Net.Debug("开始功能:准备需要上传的数据");
                     VMUploadModeManage vm = DalUploadFloor.PrepareUploadFloors();
-                    Log4Net.Debug("结束功能:准备需要上传的数据");
-                    WinUploadModeManage win = new WinUploadModeManage();
-                    win.DataContext = vm;
-                    win.ShowDialog();
+                    if (vm != null)
+                    {
+                        WinUploadModeManage win = new WinUploadModeManage();
+                        win.DataContext = vm;
+                        win.ShowDialog();
+                    }
                 }
-                Log4Net.Debug("结束命令:上传模型");
             }
             catch (Exception e)
             {

+ 10 - 10
MBI/SAGA.MBI/Common/MBIConst.cs

@@ -40,7 +40,7 @@ namespace SAGA.MBI.Common
             {
                 string key = nameof(SaasLocalHost);
                 string url = ProjectDirOperate.GetConfigureInfo(key);
-                if (url.IsNullOrEmpty())
+                //if (url.IsNullOrEmpty())
                 {
                     //url = "http://192.168.30.96:8080/";
                     url = "http://mbi.sagacloud.cn:8080/";
@@ -56,7 +56,7 @@ namespace SAGA.MBI.Common
             {
                 string key = nameof(DataPlatformLocalHost);
                 string url = ProjectDirOperate.GetConfigureInfo(key);
-                if (url.IsNullOrEmpty())
+                //if (url.IsNullOrEmpty())
                 {
                     //url = "http://192.168.20.225:8080/";
                     url = "http://service.sagacloud.cn:28888/";
@@ -75,7 +75,7 @@ namespace SAGA.MBI.Common
             {
                 string key = nameof(ImageServiceLocalHost);
                 string url = ProjectDirOperate.GetConfigureInfo(key);
-                if (url.IsNullOrEmpty())
+                //if (url.IsNullOrEmpty())
                 {
                     //url = "http://192.168.20.225:8080/";
                     url = "http://service.sagacloud.cn:28888/";
@@ -90,7 +90,7 @@ namespace SAGA.MBI.Common
             {
                 string key = nameof(GoodHandLocalHost);
                 string url = ProjectDirOperate.GetConfigureInfo(key);
-                if (url.IsNullOrEmpty())
+                //if (url.IsNullOrEmpty())
                 {
                     //url = "http://192.168.20.225:8080/godhand/";
                     url = "http://service.sagacloud.cn:28888/godhand/";
@@ -105,7 +105,7 @@ namespace SAGA.MBI.Common
             {
                 string key = nameof(ScanBuildingLocalHost);
                 string url = ProjectDirOperate.GetConfigureInfo(key);
-                if (url.IsNullOrEmpty())
+                //if (url.IsNullOrEmpty())
                 {
                     // url = "http://172.16.0.141:8080/ScanBuilding/";
                     url = "http://mbi.sagacloud.cn:8080/ScanBuilding/";
@@ -121,7 +121,7 @@ namespace SAGA.MBI.Common
             {
                 string key = nameof(Html5DetailLocalHost);
                 string url = ProjectDirOperate.GetConfigureInfo(key);
-                if (url.IsNullOrEmpty())
+                //if (url.IsNullOrEmpty())
                 {
                     //    url = "http://172.16.0.181:8889/#/";
                     url = "http://mbi.sagacloud.cn:8889/#/";
@@ -136,7 +136,7 @@ namespace SAGA.MBI.Common
             {
                 string key = nameof(Html5ImageLocalHost);
                 string url = ProjectDirOperate.GetConfigureInfo(key);
-                if (url.IsNullOrEmpty())
+                //if (url.IsNullOrEmpty())
                 {
                     // url = "http://172.16.0.181:8890/";
                     url = "http://mbi.sagacloud.cn:8890/";
@@ -151,7 +151,7 @@ namespace SAGA.MBI.Common
             {
                 string key = nameof(Html5ScanLocalHost);
                 string url = ProjectDirOperate.GetConfigureInfo(key);
-                if (url.IsNullOrEmpty())
+                //if (url.IsNullOrEmpty())
                 {
                     //     url = "http://172.16.0.181:8888/#/";
                     url = "http://mbi.sagacloud.cn:8888/#/";
@@ -169,7 +169,7 @@ namespace SAGA.MBI.Common
             {
                 string key = nameof(GplotViewHost); 
                 string url = ProjectDirOperate.GetConfigureInfo(key);
-                if (url.IsNullOrEmpty())
+                //if (url.IsNullOrEmpty())
                 {
                     url = "http://mbi.sagacloud.cn:8888/#/";
                     ProjectDirOperate.SaveConfigureInfo(key, url);
@@ -202,7 +202,7 @@ namespace SAGA.MBI.Common
             {
                 string key = nameof(OssClientFileKey);
                 string url = ProjectDirOperate.GetConfigureInfo(key);
-                if (url.IsNullOrEmpty())
+                //if (url.IsNullOrEmpty())
                 {
                     //     url = "test/files/revit/";
                     url = "files/revit/";

+ 114 - 57
MBI/SAGA.MBI/DataArrange/DalUploadFloor.cs

@@ -9,6 +9,7 @@ using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.IO;
 using System.Linq;
+using System.Reflection;
 using Autodesk.Revit.DB;
 using Autodesk.Revit.DB.Mechanical;
 using SAGA.DotNetUtils;
@@ -52,10 +53,10 @@ namespace SAGA.MBI.DataArrange
         /// <summary>
         /// 对比文件,开始下载
         /// </summary>
-        public static void BeginDownLoadFile()
+        public static bool BeginDownLoadFile()
         {
             List<Tuple<string, int, string>> tuples = DalVisionOperate.GetNeedDownLoadFiles();
-            int i = 0;
+            int i = 0,j = 0;
             int count = tuples.Count;
             foreach (var tuple in tuples)
             {
@@ -68,11 +69,17 @@ namespace SAGA.MBI.DataArrange
 
                     //下载成功清除本机本层的日志数据,其它用户的日志上传成功的时候才清除日志
                     ProjectLogManager.ClearFile(tuple.Item1);
+                    j++;
+                }
+                else
+                {
+                    break;
                 }
             }
             if (count >= 1)
                 //下载完成提示窗体;文件服务器缺少文件,会出现进度条无法关闭的情况;
                 UpLoadFileRequest.CloseDownloadWin(count == i, hasTip: true);
+            return i == j;
         }
         /// <summary>
         /// 重新下载模型文件
@@ -235,72 +242,86 @@ namespace SAGA.MBI.DataArrange
                     if (uploadFloor.MFloor.FloorLock.LockState != MFloorLockState.LockBySelf)
                         continue;
                     currentFloor = uploadFloor.MFloor.FullPath;
-                    #region 同步空间名称
-                    var document = ExternalDataWrapper.Current.App.OpenDocumentFile(uploadFloor.MFloor.FullPath);
-                    MBIModelInfoManager.SyncPlatformToRevit(document);
-                    #endregion
-                    //检测有日志文件,才上传
-                    var logs = DalLogOperate.GetLogs(uploadFloor.MFloor.Id);
-                    if (!logs.Any()) continue;
-                    CalcContext context = DalCommon.DownLoadCouldData(uploadFloor.MFloor);
-                    context.OpenDocument();
-                    uploadFloor.CalcContext = context;
-                    //按id分组后的日志
-                    var floorLogsGroupByBimId = logs.GroupBy(t => t.Id);
-                    //所有的拓扑图类型
-                    var tempGriphs = new List<MTopologyGriph>(topologyGriphs);
-                    foreach (IGrouping<string, DocumentChangedLogMode> logGroup in floorLogsGroupByBimId)
+                    Document document = null;
+                    try
                     {
-                        DocumentChangedLogMode log = logGroup.FirstOrDefault();
-                        if (log == null) continue;
-                        var bimId = CommonTool.GetCloudBIMId(log.DocName, log.Id);
-                        var elem = context.RevitDoc.GetElement(log.Id.ToInt());
-                        //日志影响构件
-                        var operate =
-                            (DocumentChangedOperator)Enum.Parse(typeof(DocumentChangedOperator), log.Operator);
-                        var mode = context.FindItem(bimId);
-                        //模型和物理世界都找不到这条数据,Next
-                        if (mode == null && elem == null) continue;
-                        switch (operate)
-                        {
-                            case DocumentChangedOperator.Add:
-                            case DocumentChangedOperator.Modified:
-                            case DocumentChangedOperator.Delete:
-                                OperateModifyLog(mode, elem, context);
-                                break;
-                            case DocumentChangedOperator.DeleteSaveDuty:
-                                OperateDelSaveDutyLog(mode);
-                                break;
-                        }
+                        #region 同步空间名称
+                        document = ExternalDataWrapper.Current.App.OpenDocumentFile(uploadFloor.MFloor.FullPath);
+                        MBIModelInfoManager.SyncPlatformToRevit(document);
+                        #endregion
 
-                        //日志影响拓扑图,影响则标记,从所有中移除
-                        var useGriphs = new List<MTopologyGriph>(topologyGriphs);
-                        foreach (var topologyGriph in tempGriphs)
+                        //检测有日志文件,才上传
+                        var logs = DalLogOperate.GetLogs(uploadFloor.MFloor.Id);
+                        if (!logs.Any()) continue;
+                        uploadFloor.CalcContext = DalCommon.DownLoadCouldData(uploadFloor.MFloor);
+                        //按id分组后的日志
+                        var floorLogsGroupByBimId = logs.GroupBy(t => t.Id);
+                        //所有的拓扑图类型
+                        var tempGriphs = new List<MTopologyGriph>(topologyGriphs);
+                        foreach (IGrouping<string, DocumentChangedLogMode> logGroup in floorLogsGroupByBimId)
                         {
-                            if (topologyGriph.IsAffectGriph(log))
+                            CalcContext context = uploadFloor.CalcContext;
+                            DocumentChangedLogMode log = logGroup.FirstOrDefault();
+                            if (log == null) continue;
+                            var bimId = CommonTool.GetCloudBIMId(log.DocName, log.Id);
+                            var elem = document.GetElement(log.Id.ToInt());
+                            //日志影响构件
+                            var operate =
+                                (DocumentChangedOperator)Enum.Parse(typeof(DocumentChangedOperator), log.Operator);
+                            var mode = context.FindItem(bimId);
+                            //模型和物理世界都找不到这条数据,Next
+                            if (mode == null && elem == null) continue;
+                            switch (operate)
                             {
-                                useGriphs.Add(topologyGriph);
-                                uploadFloor.ReferGriphs.Add(topologyGriph);
+                                case DocumentChangedOperator.Add:
+                                case DocumentChangedOperator.Modified:
+                                case DocumentChangedOperator.Delete:
+                                    OperateModifyLog(mode, elem, context);
+                                    break;
+                                case DocumentChangedOperator.DeleteSaveDuty:
+                                    OperateDelSaveDutyLog(mode);
+                                    break;
+                            }
+
+                            #region 日志影响拓扑图
+                            //日志影响拓扑图,影响则标记,从所有中移除
+                            var useGriphs = new List<MTopologyGriph>(topologyGriphs);
+                            foreach (var topologyGriph in tempGriphs)
+                            {
+                                if (topologyGriph.IsAffectGriph(log))
+                                {
+                                    useGriphs.Add(topologyGriph);
+                                    uploadFloor.ReferGriphs.Add(topologyGriph);
+                                }
+
                             }
+                            tempGriphs.RemoveAll(t => useGriphs.Contains(t));
 
+                            #endregion
+
+                            //处理设备所在空间
+                            CheckEquipSpaceRlt(context);
+                            uploadFloor.IsUpload = true;
                         }
-                        tempGriphs.RemoveAll(t => useGriphs.Contains(t));
+
+                    }
+                    catch (Exception e)
+                    {
+                        Console.WriteLine(e);
+                        throw;
+                    }
+                    finally
+                    {
+                        document?.CloseDoc();
                     }
-                    //处理设备所在空间
-                    CheckEquipSpaceRlt(context);
-                    uploadFloor.IsUpload = true;
                 }
                 vm.UploadFloors = modifyFloors;
                 vm.MTopologyGriphs = PrepareMTopologyGriphs(modifyFloors);
             }
             catch (Exception e)
             {
-                //MessageShowBase.Show(e);
-                MessageShow.Show(e, strMessage: $"楼层 { currentFloor ?? string.Empty} 打开异常,请检查!");
-            }
-            finally
-            {
-                CloseFloorDoc(modifyFloors);
+                MessageShow.Show(e, strMessage: $"楼层 { currentFloor ?? string.Empty} 打开异常或网络异常,请检查后再进行操作!");
+                vm = null;
             }
 
             return vm;
@@ -386,6 +407,7 @@ namespace SAGA.MBI.DataArrange
                 //如果设备族四位或六位改了,需要将岗位删除,重建岗位
                 if (mode.EquipClassCode != tempmode.EquipClassCode)
                 {
+                    SetSavePropertyValue(tempmode, mode);
                     mode.Operator = DocumentChangedOperator.Delete;
                     tempmode.Operator = DocumentChangedOperator.Add;
                     context.Add(tempmode);
@@ -399,7 +421,29 @@ namespace SAGA.MBI.DataArrange
 
             return result;
         }
+        /// <summary>
+        /// 编码更改时保留的信息点
+        /// </summary>
+        /// <param name="mode"></param>
+        /// <param name="oldmode"></param>
+        public static void SetSavePropertyValue(MRevitEquipBase mode, MRevitEquipBase oldmode)
+        {
+            string[] saveProperties = new[] { "LocalId", "LocalName" };
+            var oldProperties = oldmode.GetType().GetProperties();
 
+            foreach (PropertyInfo property in oldProperties)
+            {
+                string name = property.Name;
+                if (saveProperties.Contains(name))
+                {
+                    object value = property.GetValue(oldmode);
+                    if (value != null)
+                    {
+                        property.SetValue(mode, value);
+                    }
+                }
+            }
+        }
         /// <summary>
         /// 1,处理是无用的空间,周长为零
         /// 2,对象被删除
@@ -493,7 +537,7 @@ namespace SAGA.MBI.DataArrange
         /// <param name="context"></param>
         private static void OperateEquipInSpace(MRevitEquipBase mode, CalcContext context)
         {
-            if (mode.Operator == DocumentChangedOperator.None) return;
+            //if (mode.Operator == DocumentChangedOperator.None) return;
             var revitId = mode.BimID.GetBIMID();
             var fi = context.RevitDoc.GetElement(revitId) as FamilyInstance;
             Autodesk.Revit.DB.Mechanical.Space space = fi?.Space;
@@ -507,13 +551,26 @@ namespace SAGA.MBI.DataArrange
                 case DocumentChangedOperator.Add:
                     context.RltEquipInSpaces.Add(new RltEquipInSpace(mspace, mode) { Operator = DocumentChangedOperator.Add });
                     break;
+                case DocumentChangedOperator.Delete:
+                    context.RltEquipInSpaces.Add(new RltEquipInSpace(null, mode) { Operator = DocumentChangedOperator.Delete });
+                    break;
                 case DocumentChangedOperator.Modified:
                     //修改为,先删除,再新建
                     context.RltEquipInSpaces.Add(new RltEquipInSpace(null, mode) { Operator = DocumentChangedOperator.Delete });
                     context.RltEquipInSpaces.Add(new RltEquipInSpace(mspace, mode) { Operator = DocumentChangedOperator.Add });
                     break;
-                case DocumentChangedOperator.Delete:
-                    context.RltEquipInSpaces.Add(new RltEquipInSpace(null, mode) { Operator = DocumentChangedOperator.Delete });
+                case DocumentChangedOperator.None:
+                    //空间更改可能不引起设备修改,所以设备所在元空间关系跟据元空间状态重新计算。
+                    if (mspace.Operator == DocumentChangedOperator.Add ||
+                        mspace.Operator == DocumentChangedOperator.Modified)
+                    {
+                        context.RltEquipInSpaces.Add(new RltEquipInSpace(null, mode) { Operator = DocumentChangedOperator.Delete });
+                        context.RltEquipInSpaces.Add(new RltEquipInSpace(mspace, mode) { Operator = DocumentChangedOperator.Add });
+                    }
+                    else if (mspace.Operator == DocumentChangedOperator.Delete)
+                    {
+                        context.RltEquipInSpaces.Add(new RltEquipInSpace(null, mode) { Operator = DocumentChangedOperator.Delete });
+                    }
                     break;
             }
         }

+ 1 - 1
MBI/SAGA.MBI/FileStream/ProjectDirOperate.cs

@@ -56,7 +56,7 @@ namespace SAGA.MBI.FileStream
         /// <param name="value"></param>
         public static void SaveConfigureInfo(string key, string value)
         {
-            IniOperator.SetData("Configure", key, value);
+            IniOperator.SetData("Configure", key, value); 
         }
 
         /// <summary>

+ 1 - 5
MBI/SAGA.MBI/JsonConvert/EquipmentPartConvert.cs

@@ -47,11 +47,7 @@ namespace SAGA.MBI.JsonConvert
         /// <returns></returns>
         public static bool AddEquipmentPart(MEquipmentPart mode)
         {
-            string equipId = mode.MEquipment?.Id;
-            if (equipId.IsNullOrEmpty() && mode.MEquipment != null)
-            {
-                equipId = DalCommon.QueryDutyIdByBIMID( mode.MEquipment.BimID) ;
-            }
+            string equipId = mode.MEquipment?.GetColudId();
             if (equipId.IsNullOrEmpty()) return false;
             string category = mode.EquipClassCode;
             JObject infos = mode.GetInfosJObject();

+ 5 - 3
MBI/SAGA.MBI/JsonConvert/PEPCodeConvert.cs

@@ -41,7 +41,8 @@ namespace SAGA.MBI.JsonConvert
             {
                 //暂时只处理独有的信息点
                 tb = QueryInfosDefineByCode(code);
-                tbs.Add(tb);
+                if (tb != null)
+                    tbs.Add(tb);
             }
             return tb;
         }
@@ -75,11 +76,12 @@ namespace SAGA.MBI.JsonConvert
             }
             catch (Exception e)
             {
-                MessageShowBase.Show(e);
+                tb = null;
+                throw;
             }
 
             return tb;
         }
-        
+
     }
 }

+ 5 - 7
MBI/SAGA.MBI/Model/MRevitEquipBase.cs

@@ -390,11 +390,8 @@ namespace SAGA.MBI.Model
                     break;
                 case DocumentChangedOperator.Modified:
 
-                    if (Id.IsNullOrEmpty())
-                    {
-                        this.Id = DalCommon.QueryDutyIdByBIMID(this.BimID);
-                    }
-                    if (!Id.IsNullOrEmpty())
+                    Id = GetColudId();
+                    if (Id.IsNotNullEmpty())
                     {
                         JObject infos = this.GetInfosJObject();
                         result = CommonConvert.UpdateInfosSigle(Id, infos);
@@ -409,8 +406,9 @@ namespace SAGA.MBI.Model
                         result = DalCommon.UpdateBimId(Id, FloorId);
                     break;
                 default:
-                    if (Id.IsNullOrEmpty())
-                        this.Id = DalCommon.QueryDutyIdByBIMID(this.BimID);
+                    //如果查询不到会重新缓存,会很慢。上传过后数据不再使用,所才不进行查询
+                    //if (Id.IsNullOrEmpty())
+                    //    this.Id = DalCommon.QueryDutyIdByBIMID(this.BimID);
                     break;
             }
             return result;

+ 1 - 1
MBI/SAGA.MBI/RequestData/LoginRequest.cs

@@ -49,7 +49,7 @@ namespace SAGA.MBI.RequestData
         /// <returns></returns>
         public static string Login(string phoneNumber, string identifyingCode)
         {
-            string url = MBIConst.GoodHandLocalHost + "business-os/project/person/verifyCode/test";
+            string url = MBIConst.GoodHandLocalHost + "business-os/project/person/verifyCode/test"; //";//";//"
             JObject idJObject = new JObject();
             idJObject.Add("phone", phoneNumber);
             idJObject.Add("code", identifyingCode);

+ 5 - 10
MBI/SAGA.MBI/RequestData/UpLoadFileRequest.cs

@@ -26,6 +26,7 @@ using SAGA.MBI.FileStream;
 using SAGA.MBI.JsonConvert;
 using SAGA.MBI.Login;
 using SAGA.MBI.Tools;
+using SAGA.RevitUtils;
 
 namespace SAGA.MBI.RequestData
 {
@@ -143,18 +144,12 @@ namespace SAGA.MBI.RequestData
 
                 Log4Net.Debug($"Get object:{key} succeeded");
             }
-            catch (OssException ex)
-            {
-                Log4Net.Debug(
-                    $"Failed with error code: {ex.ErrorCode}; Error info: {ex.Message}. \nRequestID:{ex.RequestId}\tHostID:{ex.HostId}");
-                result = false;
-                CloseDownloadWin(result);
-            }
             catch (Exception ex)
             {
-                Log4Net.Debug($"Failed with error info: {ex.Message}");
+                MessageShow.Show(ex,
+                    strMessage: "Revit文件下载失败!");
                 result = false;
-                CloseDownloadWin(result);
+                CloseDownloadWin(result,false);
             }
 
             return result;
@@ -187,7 +182,7 @@ namespace SAGA.MBI.RequestData
                 windown = null;
             }
             if (hasTip)
-                MessageShowBase.Infomation(issucess ? "数据下载完毕!" : "数据下载失败!");
+                MessageShowBase.Infomation(issucess ? "Revit文件下载完毕!" : "Revit文件下载失败!");
         }
 
         #endregion

+ 2 - 2
MBI/SAGA.MBI/ToolCommand.cs

@@ -499,7 +499,7 @@ namespace SAGA.MBI
         {
             try
             {
-                var tip = MessageShow.Question2("是否开始修正岗位缺失问题?\r\n是:修正全部楼层\r\n否:修正当前楼层\r\n取消:取消修正。");
+                var tip = MessageShow.Question2("是否开始修正岗位缺失问题?\r\n本功能会删除找不到对应模型的岗位和重新创建有模型没有岗位的数据。\r\n是:修正全部楼层\r\n否:修正当前楼层\r\n取消:取消修正。");
                 switch (tip)
                 {
                     case DialogResult.Yes:
@@ -531,7 +531,7 @@ namespace SAGA.MBI
         }
     }
     /// <summary>
-    /// 修正岗位缺失
+    /// 是否开始修正BIMID重复问题
     /// </summary>
     [Transaction(TransactionMode.Manual)]
     [Regeneration(RegenerationOption.Manual)]

+ 3 - 2
MBI/SAGA.MBI/ToolsData/CheckEquipCategory.cs

@@ -119,8 +119,7 @@ namespace SAGA.MBI.ToolsData
                     MEquipment equip = DalEquip.GetEquipment(fi);
                     if (equip == null) continue;
                     //暂时保留本地名称和本地编码
-                    equip.LocalId = mode.LocalId;
-                    equip.LocalName = mode.LocalName;
+                 DalUploadFloor.SetSavePropertyValue(equip,mode);
                     equip.Operator = DocumentChangedOperator.Add;
                     addContext.MEquipments.Add(equip);
 
@@ -157,6 +156,8 @@ namespace SAGA.MBI.ToolsData
                     MEquipmentPart equipment = DalEquipPart.GetEquipPart(fi);
                     if (equipment == null) continue;
                     equipment.Operator = DocumentChangedOperator.Add;
+                    //暂时保留本地名称和本地编码
+                    DalUploadFloor.SetSavePropertyValue(equipment, mode);
                     addContext.MEquipmentParts.Add(equipment);
                     //识别设备所在空间
                     var space = fi.GetReferenceSpace();

+ 7 - 4
MBI/SAGA.MBI/WinView/Login/WinMissFloor.xaml.cs

@@ -83,11 +83,14 @@ namespace SAGA.MBI.Login
             //保存选择项目信息信息
             ProjectDirOperate.LocalizeCurProject();
             //执行下载操作并进入revit主界面
-            DalUploadFloor.BeginDownLoadFile();
+            if (DalUploadFloor.BeginDownLoadFile())
+            {
+                //启动revit
+                SAGA.Revit.MainWindow main = new SAGA.Revit.MainWindow();
+                main.Start();
+
+            }
 
-            //启动revit
-            SAGA.Revit.MainWindow main = new SAGA.Revit.MainWindow();
-            main.Start();
 
             System.Windows.Application.Current.Shutdown();
             //SetBrowserEnvironment.StopCef();

+ 27 - 13
MBI/SAGA.MBI/WinView/ModeInfoMaintenance/WinModeInfoMaintenance.xaml.cs

@@ -14,7 +14,9 @@ using System.Windows.Media.Imaging;
 using System.Windows.Navigation;
 using System.Windows.Shapes;
 using Autodesk.Revit.UI;
+using SAGA.DotNetUtils.Others;
 using SAGA.MBI.Model;
+using SAGA.RevitUtils;
 using SAGA.RevitUtils.Extends;
 using SAGA.RevitUtils.Windows;
 using WPG.Data;
@@ -47,14 +49,16 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
         private void WinModeInfoMaintenance_Closing(object sender, System.ComponentModel.CancelEventArgs e)
         {
             ExecuteCmd.ExecuteCommandOnce(
-                () => {
+                () =>
+                {
                     ExternalDataWrapper.Current.UiApp.Idling -= IdlingEditInstance.EditInstance_Idling;
                     return Result.Succeeded;
                 }
                 , () => { return Result.Succeeded; });
 
             this.Visibility = Visibility.Collapsed;
-            e.Cancel = true;
+            if (e != null)
+                e.Cancel = true;
             EquipmentInfo?.StopWatch();
         }
 
@@ -68,12 +72,21 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
         public MRevitEquipBase EquipmentInfo { get; set; }
         public new void Show(MRevitEquipBase equipmentInfo)
         {
-            EquipmentInfo?.StopWatch();
-            EquipmentInfo = equipmentInfo;
-            this.DataContext = EquipmentInfo;
-            WindowShow();
+            try
+            {
+
+                EquipmentInfo?.StopWatch();
+                EquipmentInfo = equipmentInfo;
+                this.DataContext = EquipmentInfo;
+                WindowShow();
 
-            EquipmentInfo?.BeginWatch();
+                EquipmentInfo?.BeginWatch();
+            }
+            catch (Exception e)
+            {
+                MessageShow.Show(e,strMessage:"网络异常,请稍后重试");
+                WinModeInfoMaintenance_Closing(null, null);
+            }
         }
         /// <summary>
         /// 切换显示的界面
@@ -81,12 +94,12 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
         private void SwitchGridVisible()
         {
             SetAllCollapsed();
-            if(null != EquipmentInfo?.Id)
+            if (null != EquipmentInfo?.Id)
             {
                 GridHas.Visibility = Visibility.Visible;
                 LoadHasData();
             }
-            else if(EquipmentInfo is MBeacon beacon)
+            else if (EquipmentInfo is MBeacon beacon)
             {
                 beacon.Name = "信标";
                 GridNone.Visibility = Visibility.Visible;
@@ -100,16 +113,16 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
                 CompositeItem item = NullPWGInstace.GetUnknownSpaceItems(EquipmentInfo?.BimID);
                 myWPG.Instance = item;
             }
-            else if(EquipmentInfo is MEquipment equip)
+            else if (EquipmentInfo is MEquipment equip)
             {
-                equip.Name = equip.Family.EquipmentTypes[0].Name;
+                equip.Name = equip.EquipClassName;
                 //部件和设备
                 GridNone.Visibility = Visibility.Visible;
                 LoadNoneData();
             }
             else if (EquipmentInfo is MEquipmentPart part)
             {
-                part.Name = part.Family.EquipmentTypes[0].Name;
+                part.Name = part.EquipClassName;
                 //部件和设备
                 GridNone.Visibility = Visibility.Visible;
                 LoadNoneData();
@@ -141,7 +154,8 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
             {
                 base.Show();
                 ExecuteCmd.ExecuteCommandOnce(
-                    () => {
+                    () =>
+                    {
                         IdlingEditInstance.RefrushInstance();
                         ExternalDataWrapper.Current.UiApp.Idling += IdlingEditInstance.EditInstance_Idling;
                         return Result.Succeeded;

binární
MBI/Updater/Update.exe


binární
MBI/Updater/Update.pdb