Ver código fonte

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

mengxiangge 6 anos atrás
pai
commit
e443013a7d
29 arquivos alterados com 1243 adições e 335 exclusões
  1. BIN
      MBI/MBIResource/BaseDB/MBIAssistData.db
  2. BIN
      MBI/MBIResource/BaseDB/SqliteVersion.xml
  3. BIN
      MBI/MBIResource/Config/物理世界关系定义列表-2019-1.xlsx
  4. 0 12
      MBI/Menu/MBITool.xml
  5. 6 6
      MBI/Menu/SAGABIM.xml
  6. 39 0
      MBI/Menu/TopolgyTool.xml
  7. 46 2
      MBI/SAGA.DotNetUtils/DB/SQLiteUpdateUtil.cs
  8. 40 0
      MBI/SAGA.DotNetUtils/Data.Framework/Sqlite/SqliteUtil.cs
  9. 27 0
      MBI/SAGA.DotNetUtils/Data.Framework/Sqlite/Version/ExecutionStatement.cs
  10. 37 0
      MBI/SAGA.DotNetUtils/Data.Framework/Sqlite/Version/VersionItem.cs
  11. 153 0
      MBI/SAGA.DotNetUtils/Data.Framework/Sqlite/Version/VersionManager.cs
  12. 13 2
      MBI/SAGA.DotNetUtils/Data/EdgesArray/EdgesArrayGraphUtil.cs
  13. 3 2
      MBI/SAGA.DotNetUtils/Logger/DocumentChangedLog.cs
  14. 99 0
      MBI/SAGA.DotNetUtils/NPOI/WorkbookExtension.cs
  15. 5 1
      MBI/SAGA.DotNetUtils/SAGA.DotNetUtils.csproj
  16. 4 1
      MBI/SAGA.GplotDrawData/SAGA.GplotDrawData.csproj
  17. 2 302
      MBI/SAGA.GplotManage/GplotCommand.cs
  18. 7 0
      MBI/SAGA.GplotManage/SAGA.GplotManage.csproj
  19. 268 0
      MBI/SAGA.GplotManage/TopologyApplication/SearchShaft/SearchShaftHandler.cs
  20. 50 0
      MBI/SAGA.GplotManage/TopologyApplication/SearchShaft/SpaceInfo.cs
  21. 59 0
      MBI/SAGA.GplotManage/TopologyApplication/SpaceAirSupply/SpaceAirSupplyDocUtil.cs
  22. 137 0
      MBI/SAGA.GplotManage/TopologyApplication/SpaceAirSupply/SpaceAirSupplyHandler.cs
  23. 36 0
      MBI/SAGA.GplotManage/TopologyApplication/SpaceAirSupply/SpaceAirSupplyResultItem.cs
  24. 115 0
      MBI/SAGA.GplotManage/TopologyApplication/TopologyApplicationUtil.cs
  25. 58 0
      MBI/SAGA.GplotManage/TopologyApplicationCommand.cs
  26. 7 6
      MBI/SAGA.GplotRelationComputerManage/SystemRelation/SystemComputerHandler.cs
  27. 9 0
      MBI/SAGA.MBI/Common/MBIAssistHelper.cs
  28. 1 1
      MBI/SAGA.MBI/Common/MBIConst.cs
  29. 22 0
      MBI/SAGA.Models/MBIItem/MBIBuiltInCategory.cs

BIN
MBI/MBIResource/BaseDB/MBIAssistData.db


BIN
MBI/MBIResource/BaseDB/SqliteVersion.xml


BIN
MBI/MBIResource/Config/物理世界关系定义列表-2019-1.xlsx


+ 0 - 12
MBI/Menu/MBITool.xml

@@ -222,18 +222,6 @@
       <MenuTab>MBITool_W</MenuTab>
       <Modules>MBITool</Modules>
     </Button>
-<Button ButtonStyles="Large">
-      <ButtonName>SAGA.GplotManage.SearchShaftCommand</ButtonName>
-      <ButtonText>导出竖井关系</ButtonText>
-      <ImageName>10、空间管理</ImageName>
-      <DllName>..\OutputDll\SAGA.GplotManage.exe</DllName>
-      <ClassName>SAGA.GplotManage.SearchShaftCommand</ClassName>
-      <ToolTip>导出竖井关系</ToolTip>
-      <LongDescription>导出竖井关系</LongDescription>
-      <ToolTipImage></ToolTipImage>
-      <MenuTab>MBITool_W</MenuTab>
-      <Modules>MBITool</Modules>
-    </Button>
 </Panel>
 </Menus>
 <!--名称里面换行-->

+ 6 - 6
MBI/Menu/SAGABIM.xml

@@ -486,12 +486,12 @@
     <!--冷凍水供水-->
     <Button ButtonStyles="Large">
       <ButtonName>SAGA.GplotManage.ChillWaterLoopComputerSupplyGraph</ButtonName>
-      <ButtonText>系统-平面</ButtonText>
+      <ButtonText>系统-平面</ButtonText>
       <ImageName>10、空间管理</ImageName>
       <DllName>..\OutputDll\SAGA.GplotManage.exe</DllName>
       <ClassName>SAGA.GplotManage.ChillWaterLoopComputerSupplyGraph</ClassName>
-      <ToolTip>系统平面</ToolTip>
-      <LongDescription>系统平面</LongDescription>
+      <ToolTip>系统平面</ToolTip>
+      <LongDescription>系统平面</LongDescription>
       <ToolTipImage></ToolTipImage>
       <MenuTab>SJJC_W</MenuTab>
       <Modules>SJJC</Modules>
@@ -513,12 +513,12 @@
     <!--冷凍水立管-->
     <Button ButtonStyles="Large">
       <ButtonName>SAGA.GplotManage.ChillWaterLoopComputerVGraph</ButtonName>
-      <ButtonText>系统-立面</ButtonText>
+      <ButtonText>系统-立面</ButtonText>
       <ImageName>10、空间管理</ImageName>
       <DllName>..\OutputDll\SAGA.GplotManage.exe</DllName>
       <ClassName>SAGA.GplotManage.ChillWaterLoopComputerVGraph</ClassName>
-      <ToolTip>系统立面</ToolTip>
-      <LongDescription>系统立面</LongDescription>
+      <ToolTip>系统立面</ToolTip>
+      <LongDescription>系统立面</LongDescription>
       <ToolTipImage></ToolTipImage>
       <MenuTab>SJJC_W</MenuTab>
       <Modules>SJJC</Modules>

+ 39 - 0
MBI/Menu/TopolgyTool.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Menus>
+  <App>
+    <AppIndex>3</AppIndex>
+    <AppName>SAGA</AppName>
+  </App>
+  <Tab TabName="拓扑工具">
+    <MenuTab>Topology_W</MenuTab>
+    <Modules>Topology</Modules>
+  </Tab>
+ <Panel PanelName="功能扩展" GroupFlag="True" GroupImage="" RevitVer="R14,R15,R16,R17"  ButtonStyles="Large">   
+    <Button ButtonStyles="Large">
+      <ButtonName>SAGA.GplotManage.SpaceAirSupplyCommand</ButtonName>
+      <ButtonText>机组服务空间</ButtonText>
+      <ImageName>10、空间管理</ImageName>
+      <DllName>..\OutputDll\SAGA.GplotManage.exe</DllName>
+      <ClassName>SAGA.GplotManage.SpaceAirSupplyCommand</ClassName>
+      <ToolTip>导出竖井关系</ToolTip>
+      <LongDescription>导出竖井关系</LongDescription>
+      <ToolTipImage></ToolTipImage>
+       <MenuTab>Topology_W</MenuTab>
+    <Modules>Topology</Modules>
+    </Button>
+<Button ButtonStyles="Large">
+      <ButtonName>SAGA.GplotManage.SearchShaftCommand</ButtonName>
+      <ButtonText>导出竖井关系</ButtonText>
+      <ImageName>10、空间管理</ImageName>
+      <DllName>..\OutputDll\SAGA.GplotManage.exe</DllName>
+      <ClassName>SAGA.GplotManage.SearchShaftCommand</ClassName>
+      <ToolTip>导出竖井关系</ToolTip>
+      <LongDescription>导出竖井关系</LongDescription>
+      <ToolTipImage></ToolTipImage>
+       <MenuTab>Topology_W</MenuTab>
+    <Modules>Topology</Modules>
+    </Button>
+</Panel>
+</Menus>
+<!--名称里面换行-->
+<!-- <ButtonText>扫楼App&#x000A;用户管理</ButtonText>-->

+ 46 - 2
MBI/SAGA.DotNetUtils/DB/SQLiteUpdateUtil.cs

@@ -10,14 +10,58 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using Saga.Framework.DB.Sqlite;
+using SAGA.DotNetUtils.Data.Framework.Sqlite;
 
 namespace SAGA.DotNetUtils.DB
 {
     public static class SQLiteUpdateUtil
     {
-        public static void UpdateDb(int oldVersion, int newVersion)
+        private static int chekTimes = 1;
+        /// <summary>
+        /// 更新默认数据库
+        /// </summary>
+        public static void UpdateDb()
         {
-           // SQLiteHelper.exno
+            //return;
+            try
+            {
+                if (chekTimes > 0)
+                {
+                    SqliteDatabase dataBase = new SqliteDatabase(SQLiteHelper.ConnectionString);
+                    VersionManager.Default.UpdateDatabaseVersion(dataBase);
+                    chekTimes--;
+                }
+            }
+            catch (Exception)
+            {
+
+            }         
+        }
+
+        /// <summary>
+        /// 使用指定配置文件更新数据库
+        /// </summary>
+        /// <param name="versionPath">配置文件路径</param>
+        public static void UpdateDb(string versionPath)
+        {
+            //return;
+            try
+            {
+                if (chekTimes > 0)
+                {
+                    var manager = new VersionManager(versionPath);
+                    //VersionManager.Init(() => new VersionManager(versionPath));
+                    SqliteDatabase dataBase = new SqliteDatabase(SQLiteHelper.ConnectionString);
+                    //VersionManager.Default.UpdateDatabaseVersion(dataBase);
+                    manager.UpdateDatabaseVersion(dataBase);
+                    chekTimes--;
+                }
+            }
+            catch (Exception)
+            {
+
+            }
         }
     }
 }

+ 40 - 0
MBI/SAGA.DotNetUtils/Data.Framework/Sqlite/SqliteUtil.cs

@@ -0,0 +1,40 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:SqliteUtil
+ * 作者:xulisong
+ * 创建时间: 2019/4/12 10:47:04
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Saga.Framework.DB.Sqlite
+{
+    public static class SqliteUtil
+    {
+        /// <summary>
+        /// 获取用户版本信息
+        /// </summary>
+        /// <param name="database"></param>
+        /// <returns></returns>
+        public static int GetUserVersionNum(this SqliteDatabase database)
+        {
+            string sqlText = "PRAGMA user_version";
+            var result = database.ExecuteScalar(sqlText);
+            return Convert.ToInt32(result);
+        }
+        /// <summary>
+        /// 设置用户版本信息
+        /// </summary>
+        /// <param name="database"></param>
+        /// <param name="versionNum"></param>
+        public static void SetUserVersionNum(this SqliteDatabase database, int versionNum)
+        {
+            string sqlText = "PRAGMA user_version="+versionNum;
+            database.ExecuteNonQuery(sqlText);
+        }
+    }
+}

+ 27 - 0
MBI/SAGA.DotNetUtils/Data.Framework/Sqlite/Version/ExecutionStatement.cs

@@ -0,0 +1,27 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:ExecutionStatementcs
+ * 作者:xulisong
+ * 创建时间: 2019/4/12 10:43:16
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SAGA.DotNetUtils.Data.Framework.Sqlite
+{
+    public class ExecutionStatement
+    {
+        /// <summary>
+        /// 语句串
+        /// </summary>
+        public string SqlText { get; set; }
+        /// <summary>
+        /// 执行顺序
+        /// </summary>
+        public int Index { get; set; }
+    }
+}

+ 37 - 0
MBI/SAGA.DotNetUtils/Data.Framework/Sqlite/Version/VersionItem.cs

@@ -0,0 +1,37 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:VersionItem
+ * 作者:xulisong
+ * 创建时间: 2019/4/12 10:40:29
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Serialization;
+
+namespace SAGA.DotNetUtils.Data.Framework.Sqlite
+{
+    [XmlType("Version")]
+    [XmlRoot("Version")]
+    public class VersionItem
+    {
+        public VersionItem()
+        {
+            Statements = new List<ExecutionStatement>();
+        }
+        /// <summary>
+        /// 版本信息
+        /// </summary>
+        [XmlAttribute]
+        public int Num { get; set; }
+
+        /// <summary>
+        /// 需要执行的语句
+        /// </summary>
+        [XmlArrayItem("Statement")]
+        public List<ExecutionStatement> Statements { get;private set; }
+    }
+}

+ 153 - 0
MBI/SAGA.DotNetUtils/Data.Framework/Sqlite/Version/VersionManager.cs

@@ -0,0 +1,153 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:VersionManager
+ * 作者:xulisong
+ * 创建时间: 2019/4/12 10:52:51
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+using System.Xml.Serialization;
+using Saga.Framework.DB.Sqlite;
+
+namespace SAGA.DotNetUtils.Data.Framework.Sqlite
+{
+   public  class VersionManager
+    {
+        private static VersionManager m_Default;
+        public static VersionManager Default
+        {
+            get
+            {
+                if (m_Default == null)
+                {
+                    m_Default = m_InitManager?.Invoke();
+                }
+                if (m_Default == null)
+                {                  
+                    string defaultPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "SqliteVersion.xml");
+                    m_Default = new VersionManager(defaultPath);
+                }
+                return m_Default;
+            }
+        }
+        private static Func<VersionManager> m_InitManager;
+        public static void Init(Func<VersionManager> initManager)
+        {
+            m_Default = null;
+            m_InitManager = initManager;
+        }
+        #region 加载保存版本信息
+        private static XmlSerializer CreateSerializer<T>()
+        {
+            Type type = typeof(T);
+            string useRootName = null;
+            if (type.IsGenericType)
+            {
+                var attribute = type.GetGenericArguments()[0].GetCustomAttribute(typeof(XmlRootAttribute)) as XmlRootAttribute;
+                if (attribute != null)
+                {
+                    useRootName = attribute.ElementName + "s";
+                }
+            }
+            XmlSerializer xs = null;
+            if (string.IsNullOrEmpty(useRootName))
+            {
+                xs = new XmlSerializer(type);
+            }
+            else
+            {
+                xs = new XmlSerializer(type, new XmlRootAttribute(useRootName));
+            }
+           
+            return xs;
+        }
+        public static void SaveVersions(List<VersionItem> versions, string path)
+        {
+            StringBuilder sb = new StringBuilder();
+            using (TextWriter writer = new StringWriter(sb))
+            {
+                XmlTextWriter xtw = new XmlTextWriter(writer);
+                xtw.Formatting = Formatting.Indented;
+                var serializer = CreateSerializer<List<VersionItem>>();
+                serializer.Serialize(xtw, versions);
+                if (!File.Exists(path))
+                {
+                    var directory = Path.GetDirectoryName(path);
+                    if (!Directory.Exists(directory))
+                    {
+                        Directory.CreateDirectory(directory);
+                    }
+                }
+                File.WriteAllText(path, sb.ToString());
+            }
+              
+        }
+
+        public static List<VersionItem> GetVersions(string path)
+        {
+            List<VersionItem> items = new List<VersionItem>();
+            if (!File.Exists(path))
+            {
+                return items;
+            }
+            using (TextReader tr = new StreamReader(path))
+            {
+                XmlTextReader xtr = new XmlTextReader(tr);
+               
+                var serializer = CreateSerializer<List<VersionItem>>();
+                items = serializer.Deserialize(xtr) as List<VersionItem>;
+            }
+            return items??new List<VersionItem>();
+        }
+        #endregion
+        public VersionManager(List<VersionItem> versions)
+        {
+            //可以在配置文件加载
+            //需要整理版本顺序,和语句执行顺序
+            VersionItems = versions;
+        }
+
+        public VersionManager(string configPath)
+        {
+            VersionItems = GetVersions(configPath);
+        }
+        public List<VersionItem> VersionItems { get; private set; }
+
+        /// <summary>
+        /// 更新给定库,到版本集合中的最高版本
+        /// </summary>
+        /// <param name="database"></param>
+        public void UpdateDatabaseVersion(SqliteDatabase database)
+        {
+            var oldNum = database.GetUserVersionNum();
+            var orderVersionItems=VersionItems.OrderBy(v => v.Num).ToList();
+            foreach (var orderVersionItem in orderVersionItems)
+            {
+                if (orderVersionItem.Num <= oldNum)
+                {
+                    continue;
+                }
+
+                var orderStatements =
+                    (orderVersionItem.Statements ?? new List<ExecutionStatement>()).OrderBy(s => s.Index);
+                foreach (var executionStatement in orderStatements)
+                {
+                    if (string.IsNullOrWhiteSpace(executionStatement.SqlText))
+                    {
+                        continue;
+                    }
+                    database.ExecuteNonQuery(executionStatement.SqlText);
+                }
+
+                database.SetUserVersionNum(orderVersionItem.Num);
+            }
+        }
+    }
+}

+ 13 - 2
MBI/SAGA.DotNetUtils/Data/EdgesArray/EdgesArrayGraphUtil.cs

@@ -161,6 +161,17 @@ namespace SAGA.DotNetUtils.Data
                 return edgesArray;
         }
 
+        /// <summary>
+        /// 查找相关联的路径信息,该方法如果传入的图不是有向无环图,则不能获取到正确结果【不建议使用】
+        /// </summary>
+        /// <typeparam name="V"></typeparam>
+        /// <typeparam name="VD"></typeparam>
+        /// <typeparam name="E"></typeparam>
+        /// <typeparam name="ED"></typeparam>
+        /// <param name="edgesArray"></param>
+        /// <param name="start"></param>
+        /// <param name="endPredicate"></param>
+        /// <returns></returns>
         public static List<PathNodes<V, E>> GetPaths<V, VD, E, ED>(this EdgesArrayGraph<V, VD, E, ED> edgesArray, V start, Predicate<V> endPredicate) where V : EAVertex<VD>, new() where E : EAEdge<ED>, new()
         {
             List<PathNodes<V, E>> list = new List<PathNodes<V, E>>();
@@ -190,7 +201,7 @@ namespace SAGA.DotNetUtils.Data
             return list;
         }
         /// <summary>
-        /// 获取指定起点,到指定条件的节点路径信息;
+        /// 获取指定起点,到指定条件的节点路径信息;(建议使用)
         /// </summary>
         /// <typeparam name="V"></typeparam>
         /// <typeparam name="VD"></typeparam>
@@ -223,7 +234,7 @@ namespace SAGA.DotNetUtils.Data
                     continue;
                 if (prePath.Count > 1 && prePath[prePath.Count - 1].NextNode.Id == anotherId)
                 {
-                    //或者不进行数量判断,弹药对NextNode进行非空判断
+                    //或者不进行数量判断,但要对NextNode进行非空判断
                     continue; 
                 }
                 if ((prePath.Any(n => n.NextNode.Id == anotherId)) ||(endPredicate != null && endPredicate(v)))

+ 3 - 2
MBI/SAGA.DotNetUtils/Logger/DocumentChangedLog.cs

@@ -60,9 +60,10 @@ namespace SAGA.DotNetUtils.Logger
         /// <summary>
         /// 删除临时文件
         /// </summary>
-        /// <param name="logPath">临时日志文件的路径 </param>
-        public static void DeleteTempLog(string logPath)
+        /// <param name="rvtPath">模型文件路径 </param>
+        public static void DeleteTempLog(string rvtPath)
         {
+            var logPath = GetTempLogFilePath(rvtPath);
             if (File.Exists(logPath))
             {
                 File.Delete(logPath);

+ 99 - 0
MBI/SAGA.DotNetUtils/NPOI/WorkbookExtension.cs

@@ -0,0 +1,99 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:WorkbookExtension
+ * 作者:xulisong
+ * 创建时间: 2019/4/11 17:31:29
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using NPOI.SS.UserModel;
+
+namespace SAGA.DotNetUtils.NPOI
+{
+    public static class WorkbookExtension
+    {
+        /// <summary>
+        /// 保存excel信息
+        /// </summary>
+        /// <param name="book"></param>
+        /// <param name="filePath"></param>
+        /// <param name="closeBook">保存前,是否关闭流。如果使用文件被当前excel打开,必须关闭才能写入</param>
+        /// <returns></returns>
+        public static bool Save(this IWorkbook book, string filePath, bool closeBook)
+        {
+            if (string.IsNullOrWhiteSpace(filePath))
+                throw new ArgumentNullException(nameof(filePath));
+            using (MemoryStream ms = new MemoryStream())
+            {
+                book.Write(ms);
+                if (closeBook)
+                {
+                    book.Close();
+                }
+                var directory = Path.GetDirectoryName(filePath);
+                if (!Directory.Exists(directory))
+                {
+                    Directory.CreateDirectory(directory);
+                }
+                using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write))
+                {
+                    byte[] data = ms.ToArray();
+                    fs.Write(data, 0, data.Length);
+                    fs.Flush();
+                }
+                return true;
+            }                 
+        }
+
+        /// <summary>
+        /// 将book保存到指定文件
+        /// </summary>
+        /// <param name="book"></param>
+        /// <param name="filePath"></param>
+        /// <returns></returns>
+        public static bool Save(this IWorkbook book, string filePath)
+        {
+            return Save(book, filePath, true);
+        }
+
+
+        public static ICell SetCellValue(this ISheet sheet,int rowIndex, int columnIndex, object value)
+        {
+            #region 获取可用的Cell
+            var useRow = sheet.GetRow(rowIndex);
+            if (useRow == null)
+            {
+                useRow = sheet.CreateRow(rowIndex);
+            }
+            var useCell = useRow.GetCell(columnIndex);
+            if (useCell == null)
+            {
+                useCell = useRow.CreateCell(columnIndex);
+            } 
+            #endregion
+
+            do
+            {
+                if (value is string strValue)
+                {
+                    useCell.SetCellValue(strValue);
+                    break;
+                }
+                if (value is double dblValue)
+                {
+                    useCell.SetCellValue(dblValue);
+                    break;
+                }
+                //todo 待完善
+                useCell.SetCellValue((value??string.Empty).ToString());
+                break;
+            } while (false);
+            return useCell;
+        }
+    }
+}

+ 5 - 1
MBI/SAGA.DotNetUtils/SAGA.DotNetUtils.csproj

@@ -280,6 +280,10 @@
     <Compile Include="Data.Framework\IDal.cs" />
     <Compile Include="Data.Framework\Sqlite\SqliteDal.cs" />
     <Compile Include="Data.Framework\Sqlite\SqliteDatabase.cs" />
+    <Compile Include="Data.Framework\Sqlite\SqliteUtil.cs" />
+    <Compile Include="Data.Framework\Sqlite\Version\ExecutionStatement.cs" />
+    <Compile Include="Data.Framework\Sqlite\Version\VersionItem.cs" />
+    <Compile Include="Data.Framework\Sqlite\Version\VersionManager.cs" />
     <Compile Include="Data\EdgesArray\EdgesArrayBase.cs" />
     <Compile Include="Data\EdgesArray\DBCollection.cs" />
     <Compile Include="Data\EdgesArray\EAEdge.cs" />
@@ -333,6 +337,7 @@
     <Compile Include="MBI\OutReachConst.cs" />
     <Compile Include="NPOI\ExcelExtension.cs" />
     <Compile Include="NPOI\NPOIHelper.cs" />
+    <Compile Include="NPOI\WorkbookExtension.cs" />
     <Compile Include="Others\AppBaseInfo.cs" />
     <Compile Include="Others\ApplicationDecrypt.cs" />
     <Compile Include="Others\BaseWindow.cs" />
@@ -558,7 +563,6 @@
   <ItemGroup>
     <Resource Include="Image\search.jpg" />
   </ItemGroup>
-  <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Import Project="..\packages\MrAdvice.2.5.24\build\MrAdvice.targets" Condition="Exists('..\packages\MrAdvice.2.5.24\build\MrAdvice.targets')" />
   <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">

+ 4 - 1
MBI/SAGA.GplotDrawData/SAGA.GplotDrawData.csproj

@@ -55,7 +55,10 @@
     </Reference>
     <Reference Include="NPOI.OpenXml4Net, Version=2.2.1.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1" />
     <Reference Include="RevitAPI, Version=17.0.0.0, Culture=neutral, PublicKeyToken=null" />
-    <Reference Include="RevitAPIUI, Version=17.0.0.0, Culture=neutral, PublicKeyToken=null" />
+    <Reference Include="RevitAPIUI, Version=16.0.0.0, Culture=neutral, processorArchitecture=AMD64">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Dlls\RevitRefDll\RevitAPIUI.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Data" />
     <Reference Include="System.Xml" />

Diferenças do arquivo suprimidas por serem muito extensas
+ 2 - 302
MBI/SAGA.GplotManage/GplotCommand.cs


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

@@ -154,6 +154,13 @@
       <DependentUpon>WinSystemCheck.xaml</DependentUpon>
     </Compile>
     <Compile Include="SystemRelation\RelationDataUtil.cs" />
+    <Compile Include="TopologyApplicationCommand.cs" />
+    <Compile Include="TopologyApplication\SearchShaft\SearchShaftHandler.cs" />
+    <Compile Include="TopologyApplication\SearchShaft\SpaceInfo.cs" />
+    <Compile Include="TopologyApplication\SpaceAirSupply\SpaceAirSupplyDocUtil.cs" />
+    <Compile Include="TopologyApplication\SpaceAirSupply\SpaceAirSupplyHandler.cs" />
+    <Compile Include="TopologyApplication\SpaceAirSupply\SpaceAirSupplyResultItem.cs" />
+    <Compile Include="TopologyApplication\TopologyApplicationUtil.cs" />
     <Compile Include="UploadRelated\AirNetwork.cs" />
     <Compile Include="UploadRelated\ControlRelation.cs" />
     <Compile Include="UploadRelated\ConvectionNetwork.cs" />

Diferenças do arquivo suprimidas por serem muito extensas
+ 268 - 0
MBI/SAGA.GplotManage/TopologyApplication/SearchShaft/SearchShaftHandler.cs


+ 50 - 0
MBI/SAGA.GplotManage/TopologyApplication/SearchShaft/SpaceInfo.cs

@@ -0,0 +1,50 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:SpaceInfo
+ * 作者:xulisong
+ * 创建时间: 2019/4/11 17:16:30
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SAGA.Models;
+
+namespace SAGA.GplotManage.TopologyApplication
+{
+    public class SpaceInfo
+    {
+        /// <summary>
+        /// 元空间Id
+        /// </summary>
+        public string Id { get; set; }
+        /// <summary>
+        /// BimId
+        /// </summary>
+        public string BimId { get; set; }
+        /// <summary>
+        /// 楼层Id
+        /// </summary>
+        public string FloorId { get; set; }
+        /// <summary>
+        /// 楼层名称
+        /// </summary>
+        public string FloorName { get; set; }
+        /// <summary>
+        /// 本地名称
+        /// </summary>
+        public string Name { get; set; }
+
+        public static SpaceInfo Parse(RoomItem roomItem)
+        {
+            SpaceInfo info = new SpaceInfo();
+            info.Id = roomItem.Id;
+            info.FloorId = roomItem.FloorId;
+            info.Name = roomItem.GetDisplay();
+            info.BimId = roomItem.RevitId.ToString();
+            return info;
+        }
+    }
+}

+ 59 - 0
MBI/SAGA.GplotManage/TopologyApplication/SpaceAirSupply/SpaceAirSupplyDocUtil.cs

@@ -0,0 +1,59 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:SpaceAirSupplyDocUtil
+ * 作者:xulisong
+ * 创建时间: 2019/4/11 17:13:35
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using NPOI.SS.UserModel;
+using NPOI.XSSF.UserModel;
+using SAGA.DotNetUtils.NPOI;
+
+namespace SAGA.GplotManage.TopologyApplication
+{
+    public class SpaceAirSupplyDocUtil
+    {
+        /// <summary>
+        /// 经计算结果保存到指定路径
+        /// </summary>
+        /// <param name="path"></param>
+        /// <param name="results"></param>
+        public static void Save(string path, List<SpaceAirSupplyResultItem> results)
+        {
+            var orderResults = results.OrderBy(s => s.Floor?.FloorSequenceID).ThenBy(s => s.AirVent?.Id).ToList();
+            IWorkbook book = new XSSFWorkbook();
+            ISheet sheet = book.CreateSheet("Sheet1");
+            List<string> headNames = new List<string>() {"楼层id","楼层名称", "供风设备Id", "供风设备revitId", "风口id", "风口revitId", "空间id", "空间revitId" };
+            for (int i = 0; i < headNames.Count; i++)
+            {
+                sheet.SetCellValue(0,i,headNames[i]);
+            }
+
+            int baseRowIndex = 1;
+            int baseColumnIndex = 0;
+            for (int i = 0; i < orderResults.Count; i++)
+            {
+                var useResult = orderResults[i];
+                int useIndex = baseRowIndex + i;
+                //使用++来替代原始的0,1,2,3的顺序
+                int flag = 0;
+                sheet.SetCellValue(useIndex, baseColumnIndex+ flag++, useResult.Floor?.Id);
+                sheet.SetCellValue(useIndex, baseColumnIndex + flag++, useResult.Floor?.LocalName);
+                sheet.SetCellValue(useIndex, baseColumnIndex + flag++, useResult.AirSupply?.Id);
+                sheet.SetCellValue(useIndex, baseColumnIndex + flag++, useResult.AirSupply?.RevitId);
+                sheet.SetCellValue(useIndex, baseColumnIndex + flag++, useResult.AirVent?.Id);
+                sheet.SetCellValue(useIndex, baseColumnIndex + flag++, useResult.AirVent?.RevitId);
+                sheet.SetCellValue(useIndex, baseColumnIndex + flag++, useResult.Space?.Id);
+                sheet.SetCellValue(useIndex, baseColumnIndex + flag++, useResult.Space?.RevitId);
+               
+              
+            }
+            book.Save(path);
+        }
+    }
+}

+ 137 - 0
MBI/SAGA.GplotManage/TopologyApplication/SpaceAirSupply/SpaceAirSupplyHandler.cs

@@ -0,0 +1,137 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:SpaceAirSupplyHandler
+ * 作者:xulisong
+ * 创建时间: 2019/4/12 14:56:14
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Newtonsoft.Json.Linq;
+using SAGA.DotNetUtils.Cache;
+using SAGA.DotNetUtils.Data;
+using SAGA.Models;
+
+namespace SAGA.GplotManage.TopologyApplication
+{
+    public class SpaceAirSupplyHandler
+    {
+        public SpaceAirSupplyHandler()
+        {
+            EquipmentItems = TopologyApplicationUtil.CreateEquipmentItems();
+            Rooms= TopologyApplicationUtil.CreateRoomItems();
+            Floors = TopologyApplicationUtil.CreateFloorItems();
+        }
+        #region 数据获取
+        /// <summary>
+        /// 缓存设备
+        /// </summary>
+        public CacheItems<string, EquipmentItem> EquipmentItems { get; private set; }
+        /// <summary>
+        /// 缓存空间对象
+        /// </summary>
+        public CacheItems<string, RoomItem> Rooms { get; private set; }
+
+        public CacheItems<string, FloorItem> Floors { get; private set; }
+        /// <summary>
+        /// 获取图关系
+        /// </summary>
+        /// <param name="graphType"></param>
+        /// <returns></returns>
+        private SimpleGraph<string, string> GetGraph(string graphType)
+        {
+            SimpleGraph<string, string> result = TopologyApplicationUtil.GetGraph(graphType);
+            foreach (var resultVertex in result.Vertexes)
+            {
+                var useCategory= EquipmentItems.GetItem(resultVertex.Id)?.Category;
+                if (!string.IsNullOrWhiteSpace(useCategory))
+                {
+                      useCategory = useCategory.Remove(0, 2);
+                }
+               
+                resultVertex.Data = useCategory;
+            }
+
+            return result;
+        } 
+        #endregion
+
+        public bool Execute()
+        {
+            /*1、找到数据源 图信息
+             * 2、找到为风口的点
+             * 3、根据风口找与风口相关联的机组设备
+             * 4、查找风口所在的空间信息
+             * 5、产生计算结果数据
+             */
+            List<SpaceAirSupplyResultItem> result = new List<SpaceAirSupplyResultItem>();
+            List<string> supplyEquipmentCategories = new List<string>()
+                {MBIBuiltInCategory.ATAH, MBIBuiltInCategory.ATFC, MBIBuiltInCategory.ATFU};
+            List<string> graphTypes = new List<string>(){ "ACAirNetwork", "FreshAirNetwork" };
+            SimpleGraph<string, string> equipinElementSp = null;
+            foreach (var graphType in graphTypes)
+            {
+                var graph = GetGraph(graphType);
+                var airPorts = graph.Vertexes.Where(v => v.Data == MBIBuiltInCategory.ATIO||v.Data== MBIBuiltInCategory.VTIO).ToList();
+                foreach (var airPort in airPorts)
+                {
+                    var paths=graph.GetPaths2(airPort, v => supplyEquipmentCategories.Contains(v.Data));
+                    List<SpaceAirSupplyResultItem> useItems = new List<SpaceAirSupplyResultItem>();
+                    foreach (var endPathNode in paths)
+                    {
+                        var useEdge = endPathNode.LastOrDefault();
+                        if (useEdge == null)
+                            continue;
+                        if (supplyEquipmentCategories.Contains((useEdge.NextNode.Data)))
+                        {
+                            if (equipinElementSp == null)
+                            {
+                                equipinElementSp = GetGraph("EquipinElementSp");
+                            }
+                            SpaceAirSupplyResultItem item = new SpaceAirSupplyResultItem();
+                            item.AirVent = EquipmentItems.GetItem(airPort.Id);
+                            if (item.AirVent != null)
+                            {
+                                item.Floor = Floors.GetItem(item.AirVent.FloorId);
+                            }
+                            item.AirSupply = EquipmentItems.GetItem(useEdge.NextNode.Id);
+                            var spaceRelations = equipinElementSp.GetOutVertexes(airPort.Id);
+                            if (spaceRelations != null && spaceRelations.Any())
+                            {
+                                item.Space = Rooms.GetItem(spaceRelations[0].Id);
+                            }
+                            useItems.Add(item);
+                        }
+                    }
+
+                    if (!useItems.Any())
+                    {
+                        SpaceAirSupplyResultItem item = new SpaceAirSupplyResultItem();
+                        item.AirVent = EquipmentItems.GetItem(airPort.Id);
+                        if (item.AirVent != null)
+                        {
+                            item.Floor = Floors.GetItem(item.AirVent.FloorId);
+                        }
+
+                        useItems.Add(item);
+                    }
+
+                    result.AddRange(useItems);
+
+                }
+            }
+
+            SpaceAirSupplyDocUtil.Save(@"E:\airport.xlsx",result);
+            return false;
+        }
+        public static bool ShellExecute()
+        {
+            //类的静态方法,装饰类的实例方法
+            SpaceAirSupplyHandler handler = new SpaceAirSupplyHandler();
+            return handler.Execute();
+        }
+    }
+}

+ 36 - 0
MBI/SAGA.GplotManage/TopologyApplication/SpaceAirSupply/SpaceAirSupplyResultItem.cs

@@ -0,0 +1,36 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:SpaceAirSupplyResultItem
+ * 作者:xulisong
+ * 创建时间: 2019/4/11 17:04:50
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SAGA.Models;
+
+namespace SAGA.GplotManage.TopologyApplication
+{
+    public class SpaceAirSupplyResultItem
+    {
+        /// <summary>
+        /// 风口所在楼层
+        /// </summary>
+        public FloorItem Floor { get; set; }
+        /// <summary>
+        /// 风口所在空间信息
+        /// </summary>
+        public RoomItem Space { get; set; }
+        /// <summary>
+        /// 风口信息
+        /// </summary>
+        public EquipmentItem AirVent { get; set; }
+        /// <summary>
+        /// 供风设备
+        /// </summary>
+        public EquipmentItem AirSupply { get; set; }
+    }
+}

+ 115 - 0
MBI/SAGA.GplotManage/TopologyApplication/TopologyApplicationUtil.cs

@@ -0,0 +1,115 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:TopologyApplicationUtil
+ * 作者:xulisong
+ * 创建时间: 2019/4/12 15:05:38
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Newtonsoft.Json.Linq;
+using SAGA.DotNetUtils.Cache;
+using SAGA.DotNetUtils.Data;
+using SAGA.MBI.RequestData;
+using SAGA.Models;
+
+namespace SAGA.GplotManage.TopologyApplication
+{
+    public class TopologyApplicationUtil
+    {
+        /// <summary>
+        /// 获取指定图类型的当前关系
+        /// </summary>
+        /// <param name="graphType"></param>
+        /// <returns></returns>
+        public static SimpleGraph<string, string> GetGraph(string graphType)
+        {
+            string graphId = RelationRequest.GetCurrentGraphId(graphType);
+            var tuples = RelationRequest.QueryRelations(graphId, null);
+            var tempGraph = new SimpleGraph<string, string>();
+            foreach (var tuple in tuples)
+            {
+                tempGraph.AddVertex(new SimpleVertex<string>() { Id = tuple.Item1 });
+                tempGraph.AddVertex(new SimpleVertex<string>() { Id = tuple.Item2 });
+                tempGraph.AddEdge(new SimpleEdge<string>(tuple.Item1, tuple.Item2));
+            }
+            return tempGraph;
+        }
+
+
+        /// <summary>
+        /// 创建房间缓冲集合
+        /// </summary>
+        /// <returns></returns>
+        public static CacheItems<string, RoomItem> CreateRoomItems()
+        {
+            CacheItems<string, RoomItem> items = new CacheItems<string, RoomItem>((s) =>
+            {
+                var rooms = new Dictionary<string, RoomItem>();
+                var str = new string[] { MBIBuiltInCategory.Si };
+                List<JObject> datas = CommonConvert.QueryObjectInfoByTypes(str);
+                foreach (var data in datas)
+                {
+                    var roomItem = MBIItemFactory.Create<RoomItem>(data);
+                    rooms[roomItem.Id] = roomItem;
+                }
+
+                return rooms;
+            });
+            return items;
+        }
+
+        /// <summary>
+        /// 获取设备缓存类
+        /// </summary>
+        /// <returns></returns>
+        public static CacheItems<string, EquipmentItem> CreateEquipmentItems()
+        {
+            CacheItems<string, EquipmentItem> items = new CacheItems<string, EquipmentItem>((s) =>
+            {
+                var equipmentItems = new Dictionary<string, EquipmentItem>();
+                var types = new string[] { MBIBuiltInCategory.Eq };
+                List<JObject> equipDatas = CommonConvert.QueryObjectInfoByTypes(types);
+                foreach (var jobject in equipDatas)
+                {
+                    var item = MBIItemFactory.Create<EquipmentItem>(jobject);
+                    if (item != null && !string.IsNullOrWhiteSpace(item.BimId))
+                    {
+                        equipmentItems[item.Id] = item;
+                    }
+                }
+
+                return equipmentItems;
+            });
+            return items;
+        }
+
+        /// <summary>
+        /// 获取楼层缓存类
+        /// </summary>
+        /// <returns></returns>
+        public static CacheItems<string, FloorItem> CreateFloorItems()
+        {
+            CacheItems<string, FloorItem> items = new CacheItems<string, FloorItem>((s) =>
+            {
+                var floorItems = new Dictionary<string, FloorItem>();
+                var types = new string[] { MBIBuiltInCategory.Fl };
+                List<JObject> equipDatas = CommonConvert.QueryObjectInfoByTypes(types);
+                foreach (var jobject in equipDatas)
+                {
+                    var item = MBIItemFactory.Create<FloorItem>(jobject);
+                    if (item != null && !string.IsNullOrWhiteSpace(item.Id))
+                    {
+                        floorItems[item.Id] = item;
+                    }
+                }
+
+                return floorItems;
+            });
+            return items;
+        }
+    }
+}

+ 58 - 0
MBI/SAGA.GplotManage/TopologyApplicationCommand.cs

@@ -0,0 +1,58 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:TopologyApplicationCommand
+ * 作者:xulisong
+ * 创建时间: 2019/4/12 16:17:56
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Autodesk.Revit.Attributes;
+using Autodesk.Revit.DB;
+using Autodesk.Revit.UI;
+using SAGA.GplotManage.TopologyApplication;
+using SAGA.RevitUtils;
+using SAGA.RevitUtils.Extends;
+
+namespace SAGA.GplotManage
+{
+    /// <summary>
+    /// 竖井查找
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    [Regeneration(RegenerationOption.Manual)]
+    public class SearchShaftCommand : ExternalCommand
+    {
+        public override bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories)
+        {
+            return true;
+        }
+        public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            SearchShaftHandler.ShellExecute();
+            MessageShow.Infomation("完成");
+            return Result.Succeeded;
+        }
+    }
+    /// <summary>
+    /// 机组供电空间
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    [Regeneration(RegenerationOption.Manual)]
+    public class SpaceAirSupplyCommand : ExternalCommand
+    {
+        public override bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories)
+        {
+            return true;
+        }
+        public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            SpaceAirSupplyHandler.ShellExecute();
+            MessageShow.Infomation("完成");
+            return Result.Succeeded;
+        }
+    }
+}

+ 7 - 6
MBI/SAGA.GplotRelationComputerManage/SystemRelation/SystemComputerHandler.cs

@@ -25,8 +25,9 @@ namespace SAGA.GplotRelationComputerManage
         {
             List<string> testFiles = new List<string>();
 #if DEBUG
-            testFiles.Add("Fl420105000119b7c08edcee11e8a553abe8a598be93.rvt");
-            testFiles.Add("Fl420105000110be38e9dcf511e8a5532b791a1ee2c4.rvt");
+            //testFiles.Add("Fl420105000119b7c08edcee11e8a553abe8a598be93.rvt");
+            testFiles.Add("Fl42010500012ca5c61ddcf511e8a5535bb85ffaee3b.rvt");
+            testFiles.Add("Fl42010500015f8ce4eddcf411e8a5532f436ae9c161.rvt");
 #endif
             var fileInfos = RevitModelPath.GetAllRevitFiles();
             foreach (var fileInfo in fileInfos)
@@ -35,10 +36,10 @@ namespace SAGA.GplotRelationComputerManage
                 {
 
 #if DEBUG
-                    //if (testFiles.All(f => !fileInfo.Contains(f)))
-                    //{
-                    //    continue;
-                    //}
+                    if (testFiles.All(f => !fileInfo.Contains(f)))
+                    {
+                        continue;
+                    }
 #endif
                     FloorSystemItem floorItems = context.FloorItems.GetItem(fileInfo);
                     //FloorSystemItemTest floorItems = context.TestFloorItems.GetItem(fileInfo);

+ 9 - 0
MBI/SAGA.MBI/Common/MBIAssistHelper.cs

@@ -31,6 +31,15 @@ namespace SAGA.MBI.Common
                 File.Copy(basePath, targetPath);
             }
             SQLiteHelper.SetDBPath(targetPath);
+            //更新数据库表结构
+            try
+            {
+                string vsrsionPath = Path.Combine(MBIConst.MBIResourcePath, "BaseDB", MBIConst.MBIAssistDBVersion);
+                SQLiteUpdateUtil.UpdateDb(vsrsionPath);
+            }
+            catch (Exception)
+            {
+            }
         }
         /// <summary>
         /// 删除指定层的Duty和BIMID的数据

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

@@ -22,7 +22,7 @@ namespace SAGA.MBI.Common
     {
         public static readonly string ManageCur = "ManageCurLocalize.json";
         public static readonly string MBIAssistDBName = "MBIAssistData.db";
-        
+        public static readonly string MBIAssistDBVersion = "SqliteVersion.xml";
         public static readonly string MBITempSettingPath = Path.Combine(AppBaseInfo.AppTempFilePath, "MBI\\SettingsTemp");
 
         public static readonly string MBIImagePath = AppBaseInfo.ImagePath;

+ 22 - 0
MBI/SAGA.Models/MBIItem/MBIBuiltInCategory.cs

@@ -62,5 +62,27 @@ namespace SAGA.Models
         /// 楼控控制面板
         /// </summary>
         public readonly static string BACP = "BACP";
+
+        /// <summary>
+        /// 空调风口
+        /// </summary>
+        public readonly static string ATIO = "ATIO";
+
+        /// <summary>
+        /// 通风风口
+        /// </summary>
+        public readonly static string VTIO = "VTIO";
+        /// <summary>
+        /// 新风机组
+        /// </summary>
+        public readonly static string ATFU = "ATFU";
+        /// <summary>
+        /// 空调机组
+        /// </summary>
+        public readonly static string ATAH = "ATAH";
+        /// <summary>
+        /// 风机盘管
+        /// </summary>
+        public readonly static string ATFC = "ATFC";
     }
 }