Browse Source

mxg:将结果保存到数据库json_result中

mengxiangge 5 years ago
parent
commit
a5d11b0de7

+ 6 - 0
Dispatcher/Client/Client.csproj.user

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ProjectFiles</ProjectView>
+  </PropertyGroup>
+</Project>

+ 43 - 1
Dispatcher/Client/Readme.txt

@@ -18,4 +18,46 @@ NHibernate  5.2.5
 
 
 JSON
-newtonsoft.json
+newtonsoft.json 11.0.1,注意版本,12.0.*可能会出现问题,很坑的
+
+
+传入的参数有:
+CommandName;
+MBIName,ModelId,ResultFileName;
+Floor
+结果存储在:ResultFileName中
+ResultFileName的地址为Local+"RevitService"+guid
+使用完成会将结果删除
+最终的结果将存储在客户端JsonResult中
+
+
+192.168.20.225:6666  是调度器的socket地址
+数据库是 192.168.20.235 : 5432     数据库名 datacenter.scheduler, 你要是添加数据, 可以直接在这里加, 是postgresql数据库
+
+
+调度时,需要手动启动本机的mysql
+
+
+
+服务器端表:
+PostgreSql 数据库是 192.168.20.235 : 5432
+数据库名:datacenter.scheduler,包含两个表download,task
+task_name ,task名称,随便填
+task_cmd,Revit需要执行的命令,
+task_param,命令需要的参数,
+task_status,命令的状态,'0 Waiting, 1 Sending, 2 Sent, 3 FileDownloadException, 4 CommandExecuteException, 5 Finished',
+task_expected_finish_time,预期完成时间,单位s,指定时间未完成,任务超时。
+
+down表
+task_id关联任务的id,上面生成的id
+task_url,文件的存储地址,文件服务器地址
+task_md5,目前可以不填 ,目前 没有进行md5校验
+
+本地数据库表
+mysql:localhost_3306 用户名:root,密码:123456
+数据库名:worker,包含两个表download,task
+task.task_status,0 Waiting, 1 Success, -1 downloadError, -2 execute error
+
+重新执行某个命令
+本地数据库task_status更改为0
+重启客户端

+ 79 - 19
Dispatcher/Client/Start/RevitCmdExecutor.cs

@@ -10,6 +10,7 @@ using System.Diagnostics;
 using System.IO;
 using System.Linq;
 using System.Windows.Forms;
+using Newtonsoft.Json.Linq;
 
 namespace Client.Start
 {
@@ -20,27 +21,86 @@ namespace Client.Start
     {
         public string ExecuteCmd(string revitCmd, string param, HashSet<string> filePathList)
         {
-            //由revitCmd生成实体类
-            //实体类传入参数、参考楼层列表
-            //执行方法,返回执行结果 
-            Console.WriteLine(DateTime.Now+" 准备执行命令:"+revitCmd);
-            string fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "StartVisionSelector.exe");
-            Process process = new Process();//AppDomain.CurrentDomain.BaseDirectory +
-            process.StartInfo.FileName = fullPath;//执行的exe路径
-            process.StartInfo.UseShellExecute = false;//不显示shell
-            process.StartInfo.CreateNoWindow = true;//不创建窗口
-            process.StartInfo.RedirectStandardInput = true;//打开流输入
-            process.StartInfo.RedirectStandardOutput = true;//打开流输出
-            process.StartInfo.RedirectStandardError = true;//打开错误流
-            process.StartInfo.Arguments = "" + revitCmd + " \"" + filePathList.First() + "\"";//输入参数,多个参数使用空间分割,如果一个参数包含空格,使用""包括此参数
-            process.Start();//执行
-            string msg = process.StandardOutput.ReadToEnd();//读取输出
-            process.WaitForExit();//等待执行完成
-            process.Close();//结束
-            Console.WriteLine(DateTime.Now + " 命令执行完成:" + revitCmd);
+            string msg = null;
+            try
+            {
+                //由revitCmd生成实体类
+                //实体类传入参数、参考楼层列表
+                //执行方法,返回执行结果 
+                Console.WriteLine(DateTime.Now + " 准备执行命令:" + revitCmd);
+                string fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "StartVisionSelector.exe");
+                Process process = new Process();//AppDomain.CurrentDomain.BaseDirectory +
+                process.StartInfo.FileName = fullPath;//执行的exe路径
+                process.StartInfo.UseShellExecute = false;//不显示shell
+                process.StartInfo.CreateNoWindow = true;//不创建窗口
+                process.StartInfo.RedirectStandardInput = true;//打开流输入
+                process.StartInfo.RedirectStandardOutput = true;//打开流输出
+                process.StartInfo.RedirectStandardError = true;//打开错误流
+                string resultFilePath = GetReusltFileName();
+                string newParam = AddResultFileNameToParam(param, resultFilePath);
+                //输入参数,多个参数使用空间分割,如果一个参数包含空格,使用""包括此参数
+                //注意Json的传入格式
+                process.StartInfo.Arguments = revitCmd + " " +
+                                              "\"" + newParam + "\"" + " " +
+                                              "\"" + filePathList.First() + "\"";
+                process.Start();//执行
+                //string msg = process.StandardOutput.ReadToEnd();//读取输出
+                process.WaitForExit();//等待执行完成
+                process.Close();//结束
+                msg = ReadResultString(resultFilePath);
+                Console.WriteLine(DateTime.Now + " 命令执行完成:" + revitCmd);
 
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine(e.Message+"\r\n"+e.StackTrace);
+            }
+         
             return msg;
         }
-     
+        /// <summary>
+        /// 将检查结果的保存位置添加到参数中
+        /// </summary>
+        /// <param name="param"></param>
+        /// <param name="fileName"></param>
+        /// <returns></returns>
+        private string AddResultFileNameToParam(string param, string filePath)
+        {
+
+            JObject jObject = null;
+            if (string.IsNullOrEmpty(param))
+            {
+                jObject = new JObject();
+            }
+            else
+            {
+                jObject = JObject.Parse(param);
+            };
+            string key = "ResultFileName";
+            jObject.Add(new JProperty(key, filePath));
+            return jObject.ToString().Replace("\"", "\\\"");
+        }
+        /// <summary>
+        /// 生成 结果的保存文件名
+        /// </summary>
+        /// <returns></returns>
+        private string GetReusltFileName()
+        {
+            string localPath = System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
+            string fileName = "Result_" + Guid.NewGuid().ToString()+".txt";
+            return Path.Combine(localPath, "RevitService", fileName);
+        }
+        /// <summary>
+        /// 读取执行的结果,并清理结果文件
+        /// </summary>
+        /// <param name="filePath"></param>
+        /// <returns></returns>
+        private string ReadResultString(string filePath)
+        {
+            Console.WriteLine(filePath);
+            string str = File.ReadAllText(filePath);
+            File.Delete(filePath);
+            return str;
+        }
     }
 }

+ 1 - 1
Dispatcher/Client/app.config

@@ -64,7 +64,7 @@
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="11.0.0.0" />
       </dependentAssembly>
     </assemblyBinding>
   </runtime>

+ 2 - 2
Dispatcher/TaskDatabase/TaskDatabase.csproj

@@ -43,8 +43,8 @@
     <Reference Include="MySql.Data, Version=6.10.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
       <HintPath>..\packages\MySql.Data.6.10.8\lib\net452\MySql.Data.dll</HintPath>
     </Reference>
-    <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
+    <Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
     </Reference>
     <Reference Include="NHibernate, Version=5.2.0.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
       <HintPath>..\packages\NHibernate.5.2.0\lib\net461\NHibernate.dll</HintPath>

+ 1 - 1
Dispatcher/TaskDatabase/packages.config

@@ -4,7 +4,7 @@
   <package id="Google.Protobuf" version="3.5.0" targetFramework="net461" />
   <package id="Iesi.Collections" version="4.0.4" targetFramework="net461" />
   <package id="MySql.Data" version="6.10.8" targetFramework="net461" />
-  <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net461" />
+  <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net461" />
   <package id="NHibernate" version="5.2.0" targetFramework="net461" />
   <package id="Remotion.Linq" version="2.2.0" targetFramework="net461" />
   <package id="Remotion.Linq.EagerFetching" version="2.2.0" targetFramework="net461" />

+ 6 - 2
Executer/DataCheck/ServiceDataCheck.csproj

@@ -90,8 +90,6 @@
     <Compile Include="DataCheck.Mode\SystemReferEquipCheckResult.cs" />
     <Compile Include="DataCheck.Mode\ParameterIntegrityCheckResult.cs" />
     <Compile Include="DataCheck.Mode\SystemNameCheckResult.cs" />
-    <Compile Include="DataCheck.Mode\ResultBase.cs" />
-    <Compile Include="DataCheck.Mode\ResultState.cs" />
     <Compile Include="DataCheck.Mode\EquipPartLocationCheck.cs" />
     <Compile Include="DataCheck.Mode\ColumnCheck.cs" />
     <Compile Include="DataCheck.Mode\ElementRangeCheck.cs" />
@@ -120,5 +118,11 @@
     <None Include="app.config" />
     <None Include="packages.config" />
   </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\MBIRevitBase\MBIRevitBase.csproj">
+      <Project>{2bc3da7b-57cb-4d9d-8afa-888ea4d8da87}</Project>
+      <Name>MBIRevitBase</Name>
+    </ProjectReference>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>

+ 21 - 6
Executer/DataCheck/TestCommand.cs

@@ -7,10 +7,12 @@ using Autodesk.Revit.Attributes;
 using Autodesk.Revit.DB;
 using Autodesk.Revit.UI;
 using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
 using SAGA.DotNetUtils.Data;
 using SAGA.DotNetUtils.Geometry;
 using SAGA.RevitUtils;
 using SAGA.RevitUtils.Extends;
+using ServiceRevitLib.Mode;
 
 namespace ServiceRevitLib
 {
@@ -18,22 +20,35 @@ namespace ServiceRevitLib
 
     public class ServiceDataCheckTest
     {
-        public static void Check(Document doc)
+        public static string Check(Document doc)
         {
+            string result = null;
             try
             {
                 var factory = new CheckFactory();
                 factory.SetCheckItems("SagaCheck,UnitCheck,FamilyNameCheck,EquipPartLocationCheck,ColumnCheck,ElementRangeCheck,ConnectorCheck,SystemNameCheck,EquipInSpaceCheck,SystemReferEquipCheck,ParameterIntegrityCheck");
                 factory.Check(doc);
-                var result = JsonConvert.SerializeObject(factory);
-                string fileName = DateTime.Now.ToString("yyyyMMddHHmmss");
-                string path = Path.Combine(@"D:\", $"DataCheck{fileName}.json");
-                File.WriteAllText(path, result);
-                //System.Diagnostics.Process.Start("notepad.exe", path);
+                result = Serialze(factory);
             }
             catch (Exception e)
             {
+                result = Serialze(ResultBase.Exception(e.Message));
             }
+
+            return result;
+        }
+
+        public static string Serialze(object obj)
+        {
+            JsonSerializerSettings jsetting = CreateDefaultSettings();
+            var result = JsonConvert.SerializeObject(obj, jsetting);
+            return result;
+        }
+        private static JsonSerializerSettings CreateDefaultSettings()
+        {
+            JsonSerializerSettings jsetting = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore };
+            jsetting.Converters.Add(new StringEnumConverter());
+            return jsetting;
         }
     }
    

+ 1 - 1
Executer/DataExport/RevitToJBim/JsonConverter/BimJsonUtil.cs

@@ -20,7 +20,7 @@ namespace RevitToJBim.JsonConverter
 {
     public static class BimJsonUtil
     {
-        public static string Serializer(MBIDocument document)
+        public static string Serializer(object document)
         {
             JsonSerializerSettings jsetting = CreateDefaultSettings();
             string dataStr =JsonConvert.SerializeObject(document, jsetting);

+ 7 - 2
Executer/DataExport/RevitToJBim/MBI/MBIDocument.cs

@@ -12,6 +12,8 @@ using System.Text;
 using System.Threading.Tasks;
 using Autodesk.Revit.DB;
 using JBIM;
+using Newtonsoft.Json.Linq;
+using SAGA.DotNetUtils.Extend;
 using SAGA.RevitUtils;
 
 namespace RevitToJBim.MBI
@@ -22,6 +24,7 @@ namespace RevitToJBim.MBI
     public class MBIDocument
     {
         public string MBIName { get; set; }
+        public string ModelId { get; set; }
         public string PlanName { get; set; }
         public Dictionary<string, List<BimObject>> Elements { get;private set; }
         /// <summary>
@@ -40,10 +43,12 @@ namespace RevitToJBim.MBI
             Elements = dic;
         }
 
-        public static MBIDocument CreateDocument(Document document)
+        public static MBIDocument CreateDocument(Document document,string param)
         {
             MBIDocument dto = new MBIDocument();
-            dto.MBIName = "PjXXX_001";//待读取
+            JObject jObject=JObject.Parse(param);
+            dto.MBIName = jObject.GetValueEx("MBIName");//待读取
+            dto.ModelId = jObject.GetValueEx("ModelId");
             dto.PlanName = document.GetUseView()?.Name;
             return dto;
         }

+ 11 - 9
Executer/DataExport/RevitToJBim/MbiExport.cs

@@ -11,17 +11,20 @@ using System.IO;
 using Autodesk.Revit.DB;
 using MBIRevitBase.Services;
 using MBIRevitBase.Tools;
+using Newtonsoft.Json;
 using RevitExport.Export;
 using RevitToJBim.ComponentParse;
 using RevitToJBim.JsonConverter;
 using RevitToJBim.MBI;
+using ServiceRevitLib.Mode;
 
 namespace RevitToJBim
 {
     public class MbiExport
     {
-        public static void Export(Document document)
+        public static string Export(Document document,string param)
         {
+            string result = null;
             //导出类
             try
             {
@@ -32,23 +35,22 @@ namespace RevitToJBim
                 context.Parser.Parse(report);
 
                 //构建需要结果
-                var mbiDocument = MBIDocument.CreateDocument(document);
+                var mbiDocument = MBIDocument.CreateDocument(document, param);
                 mbiDocument.AttachElements(context.GetResultDocument());
                 /*
                  * 序列化的变化封装在这里,增加MBIDocument传输数据对象,
                  * 增加一些和JBIM无关,又和当前业务逻辑相关的属性
                  */
-                var result = BimJsonUtil.Serializer(mbiDocument);
-                var resultResponse = UploadService.UploadExportFile(result);
-                string fileName = DateTime.Now.ToString("yyyyMMddHHmmss");
-                string path = Path.Combine(@"D:\", $"{fileName}.json");
-                File.WriteAllText(path, result.ToString());
-                System.Diagnostics.Process.Start("notepad.exe", path);
+                var json = BimJsonUtil.Serializer(mbiDocument);
+                var resultResponse = UploadService.UploadExportFile(json);
+                result= BimJsonUtil.Serializer((ResultBase)resultResponse);
             }
             catch (Exception ex)
             {
-                Console.WriteLine(ex.StackTrace.ToString());
+                result = BimJsonUtil.Serializer(ResultBase.Exception(ex.Message));
             }
+
+            return result;
         }
     }
 }

+ 2 - 0
Executer/MBIRevitBase/MBIRevitBase.csproj

@@ -46,6 +46,8 @@
     <Compile Include="BResult.cs" />
     <Compile Include="Config\ApiConfig.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Result\ResultBase.cs" />
+    <Compile Include="Result\ResultState.cs" />
     <Compile Include="Services\UploadService.cs" />
     <Compile Include="Tools\HttpUtils.cs" />
     <Compile Include="Tools\ZipUtils.cs" />

+ 51 - 0
Executer/MBIRevitBase/Result/ResultBase.cs

@@ -0,0 +1,51 @@
+/* ==============================================================================
+ * 功能描述:
+ * 创 建 者:Garrett
+ * 创建日期:2019/5/31 16:24:04
+ * ==============================================================================*/
+
+
+using System;
+using MBIRevitBase;
+
+namespace ServiceRevitLib.Mode
+{
+    /// <summary>
+    /// CheckResultBase
+    /// </summary>
+    public class ResultBase
+    {
+        public ResultBase()
+        {
+            Result = ResultState.Success;
+        }
+        /// <summary>
+        /// 异常结果
+        /// </summary>
+        /// <param name="msg"></param>
+        /// <returns></returns>
+        public static ResultBase Exception(string msg)
+        {
+            return new ResultBase(){Result = ResultState.Failure,ResultMsg = msg};
+        }
+        /// <summary>
+        /// 成功或失败结果描述
+        /// </summary>
+        public string ResultMsg { get; set; }
+
+        /// <summary>
+        /// 结果
+        /// </summary>
+        public ResultState Result { get; set; }
+
+        public static implicit operator ResultBase(BResult result)
+        {
+            return new ResultBase()
+            {
+                ResultMsg = result.Message,
+                Result = (ResultState)(Convert.ToInt32(result.IsSuccessed))
+            };
+        }
+
+    }
+}

+ 17 - 0
Executer/MBIRevitBase/Result/ResultState.cs

@@ -0,0 +1,17 @@
+/* ==============================================================================
+ * 功能描述:结果的状态
+ * 创 建 者:Garrett
+ * 创建日期:2019/5/31 16:29:04
+ * ==============================================================================*/
+
+namespace ServiceRevitLib.Mode
+{
+    /// <summary>
+    /// ResultState
+    /// </summary>
+    public enum ResultState
+    {
+        Failure=0,
+        Success,
+    }
+}

+ 22 - 5
Starter/StartVisionSelector/Program.cs

@@ -2,6 +2,8 @@
 using System;
 using System.Diagnostics;
 using System.IO;
+using Newtonsoft.Json.Linq;
+using SAGA.DotNetUtils.Extend;
 
 namespace StartVisionSelector
 {
@@ -11,6 +13,7 @@ namespace StartVisionSelector
         public static void Main(string[] args)
         {
             string command = null;
+            string param = null;
             string path = null;
             if (args.Length > 0)
             {
@@ -18,7 +21,12 @@ namespace StartVisionSelector
             }
             if (args.Length > 1)
             {
-                path = args[1];
+                //注意,这个Replace很重要,不能缺少,
+                param = args[1].Replace("\"", "\\\""); ;
+            }
+            if (args.Length > 2)
+            {
+                path = args[2];
             }
 #if DEBUG
             if (string.IsNullOrWhiteSpace(command))
@@ -26,7 +34,14 @@ namespace StartVisionSelector
                 command = "DataExport";
                 path = @"E:\导出测试\testR17.rvt";
                 path = @"E:\导出测试\TestEmptyR17.rvt";
-                path= @"E:\导出测试\延庆园-B1.rvt";
+                JObject jObject = new JObject();
+                jObject.Add("ResultFileName", @"C:\Users\SAGACLOUD\AppData\Local\RevitService\Result_e26be2fd-2097-462b-bdd0-a2a86b616928.txt");
+                param = jObject.ToString().Replace("\"","\\\"");
+                //JObject jObject = new JObject();
+                //jObject.Add("ResultFileName", @"D:\abc.txt");
+                //param = jObject.ToString();
+
+                //path= @"E:\导出测试\延庆园-B1.rvt";
                 //path = @"E:\导出测试\testR18.rvt";
                 //path = @"E:\导出测试\testR16.rvt";
             }
@@ -63,7 +78,7 @@ namespace StartVisionSelector
             #endregion
             
             #region 启动
-
+            File.AppendAllText(@"D:\log.txt",param);
             Process process = new Process();//AppDomain.CurrentDomain.BaseDirectory +
             process.StartInfo.FileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ExportStart.exe");//执行的exe路径
             process.StartInfo.UseShellExecute = false;//不显示shell
@@ -71,12 +86,14 @@ namespace StartVisionSelector
             process.StartInfo.RedirectStandardInput = true;//打开流输入
             process.StartInfo.RedirectStandardOutput = true;//打开流输出
             process.StartInfo.RedirectStandardError = true;//打开错误流
-            process.StartInfo.Arguments = "" + command + " \"" + path + "\"";//输入参数,多个参数使用空间分割,如果一个参数包含空格,使用""包括此参数
+            process.StartInfo.Arguments = command + " "+
+                                          "\"" + param + "\"" + " "+
+                                          "\"" + path + "\"";//输入参数,多个参数使用空间分割,如果一个参数包含空格,使用""包括此参数
             process.Start();//执行
             string msg = process.StandardOutput.ReadToEnd();//读取输出
+            Console.WriteLine(msg);
             process.WaitForExit();//等待执行完成
             process.Close();//结束
-
             #endregion
             Console.WriteLine("end");
             //Console.ReadKey();

+ 7 - 0
Starter/StartVisionSelector/StartVisionSelector.csproj

@@ -33,6 +33,9 @@
     <StartupObject />
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
+    </Reference>
     <Reference Include="SAGA.DotNetUtils">
       <HintPath>..\..\RevitDlls\SAGA.DotNetUtils.dll</HintPath>
     </Reference>
@@ -55,5 +58,9 @@
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
   </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="packages.config" />
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>

+ 11 - 0
Starter/StartVisionSelector/app.config

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>

+ 4 - 0
Starter/StartVisionSelector/packages.config

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net461" />
+</packages>

+ 4 - 0
Starter/Starter/ExportStart.csproj

@@ -41,6 +41,9 @@
     <OutputPath>bin\x64\Release\</OutputPath>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
+    </Reference>
     <Reference Include="RevitAPI">
       <HintPath>..\..\RevitDlls\RevitAPI.dll</HintPath>
       <Private>False</Private>
@@ -71,6 +74,7 @@
   </ItemGroup>
   <ItemGroup>
     <None Include="App.config" />
+    <None Include="packages.config" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\..\Executer\DataExport\RevitToJBim\RevitToJBim.csproj">

+ 65 - 9
Starter/Starter/Program.cs

@@ -2,6 +2,8 @@
 using ServiceRevitLib;
 using System;
 using System.IO;
+using Newtonsoft.Json.Linq;
+using SAGA.DotNetUtils.Extend;
 
 //using RevitToJBim.Common;
 
@@ -17,6 +19,7 @@ namespace ExportStart
         static void Main(string[] args)
         {
             string command = null;
+            string param = null;
             string path = null;
             if (args.Length > 0)
             {
@@ -24,15 +27,26 @@ namespace ExportStart
             }
             if (args.Length > 1)
             {
-                path = args[1];
+                param = args[1];
+            }
+            if (args.Length > 2)
+            {
+                path = args[2];
             }
 #if DEBUG
             if (string.IsNullOrWhiteSpace(command))
             {
                 command = "DataExport";
-                path = @"E:\导出测试\test.rvt";
-            }
+                path = @"E:\导出测试\testR17.rvt";
+                path = @"E:\导出测试\TestEmptyR17.rvt";
+                JObject jObject=new JObject();
+                jObject.Add("ResultFileName", @"C:\Users\SAGACLOUD\AppData\Local\RevitService\Result_e26be2fd-2097-462b-bdd0-a2a86b616928.txt");
+                param = jObject.ToString();
 
+                //path= @"E:\导出测试\延庆园-B1.rvt";
+                //path = @"E:\导出测试\testR18.rvt";
+                //path = @"E:\导出测试\testR16.rvt";
+            }
 #endif
             if (string.IsNullOrEmpty(command))
             {
@@ -44,17 +58,53 @@ namespace ExportStart
             {
                 var app = RevitCoreContext.Instance.Application;
                 var doc = app.OpenDocumentFile(path);
+                string result = null;
                 switch (commandType)
                 {
                     case CommandType.DataCheck:
-                        Check(doc);
+                        result=Check(doc,param);
                         break;
                     case CommandType.DataExport:
-                        Export(doc);
+                        result=Export(doc,param);
                         break;
                 }
+
+                SaveResult(param, result);
                 RevitCoreContext.Instance.Stop();
             }
+            Console.WriteLine("ExportStart End");
+        }
+        /// <summary>
+        /// 保存检查或导出的结果
+        /// </summary>
+        /// <param name="param"></param>
+        /// <param name="result"></param>
+        /// <returns></returns>
+        private static void SaveResult(string param, string result)
+        {
+            Console.WriteLine(param);
+            File.AppendAllText(@"D:\log.txt", param);
+            try
+            {
+
+                JObject jObject = JObject.Parse(param);
+                string key = "ResultFileName";
+                string path = jObject[key].ToString();
+                File.AppendAllText(@"D:\log.txt", path);
+                if (path.IsNotNullEmpty())
+                {
+                    Console.WriteLine(path);
+                    var  dir = Directory.GetParent(path);
+                    if(!dir.Exists)
+                        dir.Create();
+                    File.AppendAllText(@"D:\log.txt", result);
+                    File.AppendAllText(path, result);
+                }
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine(e);
+            }
         }
 
         enum CommandType
@@ -65,12 +115,13 @@ namespace ExportStart
         }
 
 
-        public static void Export(Document doc)
+        public static string Export(Document doc,string param)
         {
+            string result = null;
             try
             {
                 Console.WriteLine("Start Export");
-                RevitToJBim.MbiExport.Export(doc);
+                result=RevitToJBim.MbiExport.Export(doc,param);
 
                 Console.WriteLine("End Export");
             }
@@ -79,15 +130,18 @@ namespace ExportStart
                 Console.WriteLine("导出失败");
                 Console.WriteLine(e.StackTrace);
             }
+
+            return result;
         }
 
 
-        public static void Check(Document doc)
+        public static string Check(Document doc,string param)
         {
+            string result = null;
             try
             {
                 Console.WriteLine("Start DataCheck");
-                ServiceDataCheckTest.Check(doc);
+                result=ServiceDataCheckTest.Check(doc);
 
                 Console.WriteLine("End DataCheck");
             }
@@ -96,6 +150,8 @@ namespace ExportStart
                 Console.WriteLine("导出失败");
                 Console.WriteLine(e.StackTrace);
             }
+
+            return result;
         }
 
 

+ 4 - 0
Starter/Starter/packages.config

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net461" />
+</packages>