/* ============================================================================== * 功能描述:RevitCmdExecutor * 创 建 者:Garrett * 创建日期:2019/4/16 11:46:37 * ==============================================================================*/ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using Newtonsoft.Json.Linq; using System.Windows.Forms; using SAGA.DotNetUtils; using ServiceMBI.Modes; namespace Client.Start { /// /// RevitCmdExecutor /// public class RevitCmdExecutor : IRevitCommandExcutor { public string ExecuteCmd(string revitCmd, string param, HashSet filePathList) { //由revitCmd生成实体类 //实体类传入参数、参考楼层列表 //执行方法,返回执行结果 Console.WriteLine("准备执行命令"); IServiceCommand command = GetServiceCommand(revitCmd); if (command == null) return $"命令 {revitCmd} 解析异常"; CustomMessage addMessage = null; string combineParam = AddFilePathParam(param, filePathList, ref addMessage); if (addMessage?.Result == false) return addMessage.ResultMsg; string msg = ""; msg=command.Execute(combineParam); MessageBox.Show("命令执行完成 "); return msg; } /// /// 由Command的字符串转化为相应的命令 /// /// /// private IServiceCommand GetServiceCommand(string revitCmd) { IServiceCommand command = null; string dllName = "ServiceMBI.dll"; string className = "ServiceMBI.Commands." + revitCmd; string path = Path.Combine(AppBaseInfo.DllRunPath, dllName); Console.WriteLine(path); if (File.Exists(path)) { Assembly tempAsembly = Assembly.LoadFrom(path); command = (tempAsembly.CreateInstance(className)) as IServiceCommand; } return command; } /// /// 将ReferFloors参数,添加至参数列表中 /// /// /// /// /// private string AddFilePathParam(string param, HashSet filePathList, ref CustomMessage message) { string floorskey = ServiceMBIBuiltInParameter.ReferFloors; message = new CustomMessage(true, "Add Success"); try { JObject jObject = JObject.Parse(param); //解析字符串获取Json存储树结构 var keys = ServiceMBIBuiltInParameter.ReferFloors.Split('.'); if (keys.Length == 2) { JArray checkItemsJArray = new JArray(); foreach (string filePath in filePathList) { checkItemsJArray.Add(filePath); } if (jObject.ContainsKey(keys[0])) { var jcriteria = (JObject)jObject[keys[0]]; jcriteria.Add(keys[1], checkItemsJArray); } else { JObject checkItemsJObject = new JObject(); checkItemsJObject.Add(keys[1], checkItemsJArray); jObject.Add(keys[0], checkItemsJObject); } } return jObject.ToString(); } catch (Exception e) { Console.WriteLine(e); message = new CustomMessage(false, "添加ReferFloors参数异常"); } return null; } } }