From ec9bc16c81d897549568d826047da0189b8e85a3 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期二, 23 七月 2024 12:01:55 +0800
Subject: [PATCH] 新增bimface sdk,方便调试

---
 Component/Yw.BIMFace.SDK.Core/02-response/06-delete/DeleteIntegrateResponse.cs                                      |   10 
 Component/Yw.BIMFace.SDK.Core/04-helper/ViewTokenExpireHelper.cs                                                    |   44 +
 Component/Yw.BIMFace.SDK.Core/05-client/04-upload/BimfaceClient_Upload.cs                                           |  175 ++++
 Component/Yw.BIMFace.SDK.Core/02-response/01-access-token/AccessTokenResponse.cs                                    |   26 
 Component/Yw.BIMFace.SDK.Core/02-response/03-translate/TranslateFileResponseModel.cs                                |   78 +
 Component/Yw.BIMFace.SDK.Core/Properties/PublishProfiles/FolderProfile.pubxml.user                                  |   10 
 Component/Yw.BIMFace.SDK.Core/04-helper/ExceptionHelper.cs                                                          |   26 
 Component/Yw.BIMFace.SDK.Core/04-helper/HeaderHelper.cs                                                             |   32 
 Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj                                                                |    2 
 Component/Yw.BIMFace.SDK.Core/05-client/02-access-token/BIMFaceClient_AccessToken.cs                                |   53 +
 Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFileResponse.cs                                           |   11 
 Component/Yw.BIMFace.SDK.Core/03-extensions/Base64Extension.cs                                                      |   33 
 Component/Yw.BIMFace.SDK.Core/Yw.BIMFace.SDK.Core.csproj                                                            |   16 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/02-ProjectInfo/InputXhsProjectInfoWizardPage.cs            |    2 
 Component/Yw.BIMFace.SDK.Core/00-core/eModelIdType.cs                                                               |   27 
 Desktop/HStation.Desktop.Xhs.Core/MainForm.Designer.cs                                                              |   21 
 Component/Yw.BIMFace.SDK.Core/00-core/eRvtTranslateStyle.cs                                                         |   18 
 Component/Yw.BIMFace.SDK.Core/02-response/01-access-token/AccessTokenResponseModel.cs                               |   30 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/GenerateXhsProjectWizardPage.Designer.cs |   83 +
 Component/Yw.BIMFace.SDK.Core/04-helper/ResponseHelper.cs                                                           |   63 +
 Component/Yw.BIMFace.SDK.Core/05-client/01-instance/BIMFaceClient_Instance.cs                                       |   54 +
 Component/Yw.BIMFace.SDK.Core/02-response/00-core/GeneralResponse.cs                                                |   53 +
 Component/Yw.BIMFace.SDK.Core/02-response/02-view-token/ViewTokenResponse.cs                                        |   11 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.Designer.cs                                          |  100 ++
 Desktop/HStation.Desktop.Xhs.Core/DbFirstHelper.cs                                                                  |    2 
 Component/Yw.BIMFace.SDK.Core/00-core/BIMFaceException.cs                                                           |   27 
 Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFileResponseModel.cs                                      |   53 +
 Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFilePolicyResponse.cs                                     |   11 
 Component/Yw.BIMFace.SDK.Core/02-response/06-delete/DeleteCompareResponse.cs                                        |   10 
 Component/Yw.BIMFace.SDK.Core/00-core/Constants.cs                                                                  |   36 
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj                                                   |    2 
 Component/Yw.BIMFace.SDK.Core/05-client/03-view-token/BIMFaceClient_ViewToken.cs                                    |   50 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectViewModel.cs                       |   44 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/GenerateXhsProjectWizardPage.cs          |  118 ++
 Component/Yw.BIMFace.SDK.Core/Properties/PublishProfiles/FolderProfile.pubxml                                       |   13 
 Component/Yw.BIMFace.SDK.Core/00-core/eTranslateStatus.cs                                                           |   18 
 Component/Yw.BIMFace.SDK.Core/05-client/05-translate/BIMFaceClient_Translate.cs                                     |  126 +++
 Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFilePolicyResponseModel.cs                                |   38 
 Component/Yw.BIMFace.SDK.Core/01-request/TranslateRvtFileRequest.cs                                                 |   25 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.resx                                                 |   18 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/ImportXhsProjectHelper.cs                |  203 +++-
 Component/Yw.BIMFace.SDK.Core/05-client/06-delete/BIMFaceClient_Delete.cs                                           |   75 +
 Service/HStation.Service.Xhs.Core/00-core/DataType.cs                                                               |    2 
 Component/Yw.BIMFace.SDK.Core/02-response/06-delete/DeleteFileResponse.cs                                           |   11 
 Component/Yw.BIMFace.SDK.Core/00-core/eResponseCode.cs                                                              |   81 +
 Component/Yw.BIMFace.SDK.Core/02-response/03-translate/TranslateFileResponse.cs                                     |   11 
 Component/Yw.BIMFace.SDK.Core/GlobalUsings.cs                                                                       |    7 
 HStation.Xhs.Core.sln                                                                                               |   13 
 Desktop/HStation.Desktop.Xhs.Core/Program.cs                                                                        |    3 
 Hydro/HStation.Hydro.Core/ParseHelper.cs                                                                            |  200 ++++
 Component/Yw.BIMFace.SDK.Core/04-helper/AccessTokenExpireHelper.cs                                                  |   38 
 Component/Yw.BIMFace.SDK.Core/01-request/TranslateFileRequest.cs                                                    |   38 
 Service/HStation.Service.Revit.Core/02-parter/00-core/RevitBoundingBox.cs                                           |   11 
 Component/Yw.BIMFace.SDK.Core/01-request/TranslateSource.cs                                                         |   38 
 Service/HStation.Service.Revit.Core/02-parter/00-core/RevitPosition.cs                                              |   31 
 Component/Yw.BIMFace.SDK.Core/01-request/RvtModelConfig.cs                                                          |  149 +++
 56 files changed, 2,321 insertions(+), 159 deletions(-)

diff --git a/Component/Yw.BIMFace.SDK.Core/00-core/BIMFaceException.cs b/Component/Yw.BIMFace.SDK.Core/00-core/BIMFaceException.cs
new file mode 100644
index 0000000..0df0287
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/00-core/BIMFaceException.cs
@@ -0,0 +1,27 @@
+锘縩amespace Yw
+{
+    /// <summary>
+    /// 鑷畾涔夊紓甯�
+    /// </summary>
+    public class BIMFaceException : Exception
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public BIMFaceException(string code)
+        {
+            this.Code = ResponseHelper.GetResponseCode(code);
+            this.Message = ResponseHelper.GetResponseMessage(code);
+        }
+        /// <summary>
+        /// 缂栫爜
+        /// </summary>
+        public eResponseCode Code { get; private set; }
+
+        /// <summary>
+        /// 淇℃伅
+        /// </summary>
+        public new string Message { get; private set; }
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/00-core/Constants.cs b/Component/Yw.BIMFace.SDK.Core/00-core/Constants.cs
new file mode 100644
index 0000000..9a62c14
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/00-core/Constants.cs
@@ -0,0 +1,36 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// 甯搁噺
+    /// </summary>
+    public class Constants
+    {
+        /// <summary>
+        /// 鎴愬姛鏍囪瘑
+        /// </summary>
+        public const string Success = "success";
+
+        /// <summary>
+        /// 澶勭悊涓爣璇�
+        /// </summary>
+        public const string ProcessingStatus = "processing";
+
+        /// <summary>
+        /// AccessToken鐨勬椂闂翠綑閲忥紙鍒嗛挓锛�
+        /// </summary>
+        public const int AccessTokenAllowance = 60;
+
+        /// <summary>
+        /// ViewToken鐨勬椂闂翠綑閲忥紙鍒嗛挓锛�
+        /// </summary>
+        public const int ViewTokenAllowance = 10;
+
+        /// <summary>
+        /// ViewToken鐢熷懡鍛ㄦ湡锛堝皬鏃讹級
+        /// </summary>
+        public const int ViewTokenLife = 12;
+
+    }
+
+
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/00-core/eModelIdType.cs b/Component/Yw.BIMFace.SDK.Core/00-core/eModelIdType.cs
new file mode 100644
index 0000000..cdc0ee3
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/00-core/eModelIdType.cs
@@ -0,0 +1,27 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    ///  妯″瀷绫诲瀷鏋氫妇
+    /// </summary>
+    public enum eModelIdType
+    {
+        /// <summary>
+        /// 鏂囦欢杞崲Id
+        /// </summary>
+        fileId = 0,
+
+        /// <summary>
+        /// 妯″瀷瀵规瘮Id
+        /// </summary>
+        compareId = 1,
+
+        /// <summary>
+        /// 闆嗘垚妯″瀷Id
+        /// </summary>
+        integrateId = 2
+
+    }
+
+
+
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/00-core/eResponseCode.cs b/Component/Yw.BIMFace.SDK.Core/00-core/eResponseCode.cs
new file mode 100644
index 0000000..0615c9a
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/00-core/eResponseCode.cs
@@ -0,0 +1,81 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// 杩斿洖缁撴灉Code鏋氫妇
+    /// </summary>
+    public enum eResponseCode
+    {
+        /// <summary>
+        /// 鏈煡
+        /// </summary>
+        UnKnown = 0,
+
+        /// <summary>
+        /// 鎴愬姛
+        /// </summary>
+        Success = 1,
+
+        /// <summary>
+        /// BIMFACE绯荤粺寮傚父
+        /// </summary>
+        SystemError = 2,
+
+        /// <summary>
+        /// API璁块棶鍚堟硶鎬ф牎楠屽け璐�
+        /// </summary>
+        AuthenticationFailed = 3,
+
+        /// <summary>
+        /// 鏂囦欢鏈浆鎹紝涓嶈兘鑾峰彇viewToken
+        /// </summary>
+        FileHasNotTranslated = 4,
+
+        /// <summary>
+        /// 鏂囦欢杞崲澶辫触锛屼笉鑳借幏鍙杤iewToken
+        /// </summary>
+        FileTranslateFailed = 5,
+
+        /// <summary>
+        /// 鏂囦欢杞崲涓紝涓嶈兘鑾峰彇viewToken
+        /// </summary>
+        FileIsTranslating = 6,
+
+        /// <summary>
+        /// //闆嗘垚妯″瀷涓嶅瓨鍦紝涓嶈兘鑾峰彇viewToken
+        /// </summary>
+        IntegrationNotFound = 7,
+
+        /// <summary>
+        /// 闆嗘垚涓紝涓嶈兘鑾峰彇viewToken
+        /// </summary>
+        FileIsIntegrating = 8,
+
+        /// <summary>
+        /// 闆嗘垚澶辫触锛屼笉鑳借幏鍙杤iewToken
+        /// </summary>
+        FilesIntegrateFailed = 9,
+
+        /// <summary>
+        /// 瀵规瘮妯″瀷涓嶅瓨鍦紝涓嶈兘鑾峰彇viewToken
+        /// </summary>
+        ModelCompareNotFound = 10,
+
+        /// <summary>
+        /// 瀵规瘮鏈畬鎴愶紝涓嶈兘鑾峰彇viewToken
+        /// </summary>
+        ModelCompareNotFinished = 11,
+
+        /// <summary>
+        /// 瀵规瘮澶辫触锛屼笉鑳借幏鍙杤iewToken
+        /// </summary>
+        ModelCompareFailed = 12,
+
+        /// <summary>
+        /// 鏂囦欢涓嶅瓨鍦� 
+        /// </summary>
+        FileNotFound = 13,
+    }
+
+
+
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/00-core/eRvtTranslateStyle.cs b/Component/Yw.BIMFace.SDK.Core/00-core/eRvtTranslateStyle.cs
new file mode 100644
index 0000000..a491ee8
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/00-core/eRvtTranslateStyle.cs
@@ -0,0 +1,18 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// Rvt杞崲鏍峰紡鏋氫妇
+    /// </summary>
+    public enum eRvtTranslateStyle
+    {
+        /// <summary>
+        /// 鐫�鑹�
+        /// </summary>
+        Render = 0,
+
+        /// <summary>
+        /// 鐪熷疄
+        /// </summary>
+        Real = 1,
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/00-core/eTranslateStatus.cs b/Component/Yw.BIMFace.SDK.Core/00-core/eTranslateStatus.cs
new file mode 100644
index 0000000..be173ce
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/00-core/eTranslateStatus.cs
@@ -0,0 +1,18 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// 杞崲鐘舵��
+    /// </summary>
+    public enum eTranslateStatus
+    {
+        /// <summary>
+        /// 鎴愬姛
+        /// </summary>
+        Success = 0,
+
+        /// <summary>
+        /// 姝e湪杞崲涓�
+        /// </summary>
+        Processing = 1,
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/01-request/RvtModelConfig.cs b/Component/Yw.BIMFace.SDK.Core/01-request/RvtModelConfig.cs
new file mode 100644
index 0000000..7569ce4
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/01-request/RvtModelConfig.cs
@@ -0,0 +1,149 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    ///  rvt 妯″瀷閰嶇疆椤�
+    /// </summary>
+    [Serializable]
+    public class RvtModelConfig
+    {
+        public RvtModelConfig()
+        {
+            //璁剧疆 null锛屽湪搴忓垪鍖栫殑鏃跺�欏拷鐣ヨ瀛楁锛屼笉鍑虹幇鍦ㄥ簭鍒楀寲鍚庣殑瀛楃涓蹭腑
+            Texture = false;
+            ViewName = "3D";
+            DisplayLevel = "fine";
+            ExportHiddenObjects = false;
+            ExportSchedule = false;
+            ExportViewImage = false;
+            ViewImageDPI = "150";
+            Language = "zh-CN";
+
+            ExportDwg = true;
+            ExportDrawing = true;
+            ExportPdf = null;
+
+            ExportDwgInstance = null;
+            ExportSystemType = null;
+            ExportProperties = null;
+            Unit = null;
+            ToBimtiles = null;
+        }
+
+        /// <summary>
+        ///  杞崲鏃舵槸鍚︽坊鍔犳潗璐ㄣ�傞粯璁や负 false
+        /// </summary>
+        [JsonProperty("texture", NullValueHandling = NullValueHandling.Ignore)]
+        public bool? Texture { get; set; }
+
+        /// <summary>
+        ///  杞崲浣跨敤鐨�3D瑙嗗浘銆傞粯璁や负 {3D}
+        /// </summary>
+        [JsonProperty("viewName", NullValueHandling = NullValueHandling.Ignore)]
+        public string ViewName { get; set; }
+
+        /// <summary>
+        ///  璁剧疆杞崲鐨勭簿缁嗗害锛宖ine锛堢簿缁嗭級锛宮edium锛堜腑绛夛級锛宑oarse锛堢矖鐣ワ級銆傞粯璁や负 fine
+        /// </summary>
+        [JsonProperty("displaylevel", NullValueHandling = NullValueHandling.Ignore)]
+        public string DisplayLevel { get; set; }
+
+        /// <summary>
+        /// 鏄惁瀵煎嚭涓夌淮瑙嗗浘涓殣钘忕殑鏋勪欢銆傞粯璁や负 false
+        /// </summary>
+        [JsonProperty("exportHiddenObjects", NullValueHandling = NullValueHandling.Ignore)]
+        public bool? ExportHiddenObjects { get; set; }
+
+        /// <summary>
+        /// 鏄惁浣跨敤鏄庣粏琛ㄥ唴瀹广�傞粯璁や负 false
+        /// </summary>
+        [JsonProperty("exportSchedule", NullValueHandling = NullValueHandling.Ignore)]
+        public bool? ExportSchedule { get; set; }
+
+        /// <summary>
+        /// 鏄惁瀵煎嚭瑙嗗浘鍥剧墖銆傞粯璁や负 false
+        /// </summary>
+        [JsonProperty("exportViewImage", NullValueHandling = NullValueHandling.Ignore)]
+        public bool? ExportViewImage { get; set; }
+
+        /// <summary>
+        /// 璁剧疆瀵煎嚭瑙嗗浘鍥剧墖绮惧害锛�72,150,300锛夈�傞粯璁や负 150
+        /// </summary>
+        [JsonProperty("viewImageDPI", NullValueHandling = NullValueHandling.Ignore)]
+        public string ViewImageDPI { get; set; }
+
+        /// <summary>
+        ///  瀵煎嚭涓夌淮瑙嗗浘鍒楄〃("all"浠h〃鎵�鏈夎鍥�)銆傞粯璁ゅ�间负[]
+        /// </summary>
+        [JsonProperty("export3DViews", NullValueHandling = NullValueHandling.Ignore)]
+        public string[] Export3DViews { get; set; }
+
+        /// <summary>
+        /// 瀵煎嚭鎸囧畾鍒嗙粍涓殑鍥剧焊(澶氫釜灞傜骇鐢�"\\"鍒掑垎锛屽锛歿"drawingGroups": ["03.PUBLISHED\\DETAILS", "02.SHARED"]})銆傞粯璁ゅ�间负[]
+        /// </summary>
+        [JsonProperty("drawingGroups", NullValueHandling = NullValueHandling.Ignore)]
+        public string[] DrawingGroups { get; set; }
+
+        /// <summary>
+        /// 璇█鐗堟湰锛坺h_CN锛堜腑鏂囩増锛夛紝en_GB锛堣嫳鏂囩増锛夛級銆傞粯璁わ細zh_CN
+        /// </summary>
+        [JsonProperty("language", NullValueHandling = NullValueHandling.Ignore)]
+        public string Language { get; set; }
+
+        /// <summary>
+        /// 鎸囧畾鏋勪欢灞炴�т綔涓簅bjectData锛屽苟鏍规嵁objectData缁勭粐鏋勪欢鏍戙�傛寚瀹氱殑鏋勪欢灞炴�т綔涓烘瀯浠舵爲鐨勫悇绾ц妭鐐癸紝灞傜骇椤哄簭涓庤緭鍏ョ殑灞炴�ч『搴忎竴鑷达紝鍓嶉潰鐨勫瓧娈典綔涓哄悗闈㈠瓧娈电殑鐖惰妭鐐广��
+        /// 榛樿涓虹┖
+        /// </summary>
+        [JsonProperty("customizedObjectData", NullValueHandling = NullValueHandling.Ignore)]
+        public string CustomizedObjectData { get; set; }
+
+        /// <summary>
+        ///  涓夌淮妯″瀷涓鏋滃寘鍚簩缁村浘绾革紝鍒欒缃负true鏃讹紝杞崲鍚庡湪鐩綍鏍戜腑鑳界湅鍒板浘绾稿垪琛ㄣ�傞粯璁や负 false
+        /// </summary>
+        [JsonProperty("exportDrawing", NullValueHandling = NullValueHandling.Ignore)]
+        public bool? ExportDrawing { get; set; }
+
+
+        /// <summary>
+        ///  rvt2md鏄惁瀵煎嚭dwg鏂囦欢銆傞粯璁や负 false
+        /// </summary>
+        [JsonProperty("exportDwg", NullValueHandling = NullValueHandling.Ignore)]
+        public bool? ExportDwg { get; set; }
+
+        /// <summary>
+        ///  dwg2md鏄惁瀵煎嚭pdf鏂囦欢銆傞粯璁や负 false
+        /// </summary>
+        [JsonProperty("exportPdf", NullValueHandling = NullValueHandling.Ignore)]
+        public bool? ExportPdf { get; set; }
+
+        /// <summary>
+        /// 鏄惁瀵煎嚭dwg瀹炰緥銆傞粯璁や负 false
+        /// </summary>
+        [JsonProperty("exportDwgInstance", NullValueHandling = NullValueHandling.Ignore)]
+        public bool? ExportDwgInstance { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍦╱serData涓姞鍏epSystemType銆傞粯璁や负 false
+        /// </summary>
+        [JsonProperty("exportSystemType", NullValueHandling = NullValueHandling.Ignore)]
+        public bool? ExportSystemType { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍦ㄥ鍑篘WD鐨勫睘鎬b鏂囦欢銆傞粯璁や负 false
+        /// </summary>
+        [JsonProperty("exportProperties", NullValueHandling = NullValueHandling.Ignore)]
+        public bool? ExportProperties { get; set; }
+
+        /// <summary>
+        ///  璁剧疆杞崲浣跨敤鐨勫崟浣嶏紝鍙栧��"ft"\"feet"\"鑻卞昂"閲囩敤revit榛樿鐨勮嫳灏轰负鍗曚綅锛岄粯璁や互姣背涓哄崟浣嶃�傞粯璁や负绌�
+        /// </summary>
+        [JsonProperty("unit", NullValueHandling = NullValueHandling.Ignore)]
+        public string Unit { get; set; }
+
+        /// <summary>
+        /// RVT鏂囦欢杞崲涓烘祦寮忓姞杞芥ā寮忋�倀rue锛氭祦寮忓姞杞� false锛氶潪娴佸紡鍔犺浇锛屽嵆鍏ㄩ噺鍔犺浇銆�
+        /// 寤鸿澶фā鍨嬶紝涓夎鐗囬潰鏁伴噺澶т簬2000涓囦互涓婄殑妯″瀷浣跨敤娴佸紡鍔犺浇銆�
+        /// </summary>
+        [JsonProperty("toBimtiles", NullValueHandling = NullValueHandling.Ignore)]
+        public bool? ToBimtiles { get; set; }
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/01-request/TranslateFileRequest.cs b/Component/Yw.BIMFace.SDK.Core/01-request/TranslateFileRequest.cs
new file mode 100644
index 0000000..ee2e49a
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/01-request/TranslateFileRequest.cs
@@ -0,0 +1,38 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    ///  鍙戣捣鏂囦欢杞寲鐨勮姹傛暟鎹被
+    /// </summary>
+    [Serializable]
+    public class TranslateFileRequest
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public TranslateFileRequest()
+        {
+            this.CallBack = null;
+            this.Priority = 2;
+            this.Source = new TranslateSource();
+        }
+
+        /// <summary>
+        ///  Callback鍦板潃锛屽緟杞崲瀹屾瘯浠ュ悗锛孊IMFace浼氬洖璋冭鍦板潃
+        /// </summary>
+        [JsonProperty("callback")]
+        public string CallBack { get; set; }
+
+        /// <summary>
+        /// 浼樺厛绾э紝鏁板瓧瓒婂ぇ锛屼紭鍏堢骇瓒婁綆銆傚彧鑳芥槸1, 2, 3銆傞粯璁や负2
+        /// </summary>
+        [JsonProperty("priority")]
+        public int Priority { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        [JsonProperty("source")]
+        public TranslateSource Source { get; set; }
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/01-request/TranslateRvtFileRequest.cs b/Component/Yw.BIMFace.SDK.Core/01-request/TranslateRvtFileRequest.cs
new file mode 100644
index 0000000..63988df
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/01-request/TranslateRvtFileRequest.cs
@@ -0,0 +1,25 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    ///  鍙戣捣Rvt鏂囦欢杞寲鐨勮姹傛暟鎹�
+    /// </summary>
+    [Serializable]
+    public class TranslateRvtFileRequest : TranslateFileRequest
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public TranslateRvtFileRequest() : base()
+        {
+            this.Config = new RvtModelConfig();
+        }
+
+        /// <summary>
+        ///  Rvt妯″瀷杞崲寮曟搸鑷畾涔夊弬鏁帮紝config鍙傛暟璺熻浆鎹㈠紩鎿庣浉鍏筹紝涓嶅悓鐨勮浆鎹㈠紩鎿庢敮鎸佷笉鍚岀殑config鏍煎紡銆�
+        /// 渚嬪杞崲鏃舵坊鍔犲唴缃潗璐紝鍒欐坊鍔犲弬鏁板�納"texture":true}锛屾坊鍔犲閮ㄦ潗璐ㄦ椂鍙傝�冣�滀娇鐢ㄦā鍨嬪缃潗璐ㄥ満鏅�濊姹傛姤鏂囥��
+        /// 濡傛灉涓嶉渶瑕佽缃鍙傛暟锛屽垯璁剧疆涓簄ull
+        /// </summary>
+        [JsonProperty("config", NullValueHandling = NullValueHandling.Ignore)]
+        public RvtModelConfig Config { get; set; }
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/01-request/TranslateSource.cs b/Component/Yw.BIMFace.SDK.Core/01-request/TranslateSource.cs
new file mode 100644
index 0000000..aac1218
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/01-request/TranslateSource.cs
@@ -0,0 +1,38 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// 杞崲璧勬簮
+    /// </summary>
+    [Serializable]
+    public class TranslateSource
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public TranslateSource()
+        {
+            Compressed = false;
+            RootName = null;
+        }
+
+        /// <summary>
+        ///  鏂囦欢Id锛屽嵆璋冪敤涓婁紶鏂囦欢API杩斿洖鐨刦ileId
+        /// </summary>
+        [JsonProperty("fileId")]
+        public long FileId { get; set; }
+
+        /// <summary>
+        ///  鏄惁涓哄帇缂╂枃浠讹紝榛樿涓篺alse
+        /// </summary>
+        [JsonProperty("compressed")]
+        public bool Compressed { get; set; }
+
+        /// <summary>
+        /// 濡傛灉鏄帇缂╂枃浠讹紝蹇呴』鎸囧畾鍘嬬缉鍖呬腑鍝竴涓槸涓绘枃浠躲�傦紙渚嬪锛歳oot.rvt锛夈��
+        /// 濡傛灉涓嶆槸鍘嬬缉锛屽垯璁剧疆涓� null
+        /// </summary>
+        [JsonProperty("rootName", NullValueHandling = NullValueHandling.Ignore)]
+        public string RootName { get; set; }
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/02-response/00-core/GeneralResponse.cs b/Component/Yw.BIMFace.SDK.Core/02-response/00-core/GeneralResponse.cs
new file mode 100644
index 0000000..9498c84
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/02-response/00-core/GeneralResponse.cs
@@ -0,0 +1,53 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    ///  璇锋眰 BIMFACE 鏈嶅姟绔� API鐨勫搷搴旂粨鏋滅粺涓�鐨勮繑鍥炵被
+    /// </summary>
+    [Serializable]
+    public class GeneralResponse<T>
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public GeneralResponse() { }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public GeneralResponse(T data)
+        {
+            this.Data = data;
+        }
+
+        /// <summary>
+        ///  璇锋眰杩斿洖浠g爜锛宻uccess 鎴栬�� xxxx.failed銆�
+        /// </summary>
+        [JsonProperty("code")]
+        public virtual string Code { get; set; }
+
+        /// <summary>
+        ///  澶辫触鐨勯敊璇師鍥犮��
+        ///  濡傛灉 Code 涓� success 鍒� Message 涓虹┖銆�
+        ///  濡傛灉 Code 涓� xxxx.failed 鍒� Message 涓哄叿浣撶殑澶辫触淇℃伅銆�
+        /// </summary>
+        [JsonProperty("message")]
+        public virtual string Message { get; set; }
+
+        /// <summary>
+        ///  鎵ц鎴愬姛鍚庣殑杩斿洖缁撴灉
+        /// </summary>
+        [JsonProperty("data")]
+        public virtual T Data { get; set; }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override string ToString()
+        {
+            return $"GeneralResponse [code={this.Code}, Message={this.Message}, data={this.Data}]";
+        }
+
+
+    }
+}
\ No newline at end of file
diff --git a/Component/Yw.BIMFace.SDK.Core/02-response/01-access-token/AccessTokenResponse.cs b/Component/Yw.BIMFace.SDK.Core/02-response/01-access-token/AccessTokenResponse.cs
new file mode 100644
index 0000000..fd3a764
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/02-response/01-access-token/AccessTokenResponse.cs
@@ -0,0 +1,26 @@
+锘�// /* ---------------------------------------------------------------------------------------
+//    鏂囦欢鍚嶏細AccessTokenResponse.cs
+//    鏂囦欢鍔熻兘鎻忚堪锛�
+// 
+//    鍒涘缓鏍囪瘑锛�20200308
+//    浣�   鑰咃細寮犱紶瀹�  锛圦Q锛�905442693  寰俊锛歴avionzhang锛�
+//    浣滆�呭崥瀹細https://www.cnblogs.com/SavionZhang/
+//    BIMFace涓撴爮鍦板潃锛歨ttps://www.cnblogs.com/SavionZhang/p/11424431.html
+// 
+//    淇敼鏍囪瘑锛� 
+//    淇敼鎻忚堪锛�
+//  ------------------------------------------------------------------------------------------*/
+
+namespace Yw.BIMFace
+{
+    /// <summary>
+    ///  鑾峰彇 AccessToken 鐨勮姹傝繑鍥炵粨鏋滅被
+    /// </summary>
+    [Serializable]
+    public class AccessTokenResponse : GeneralResponse<AccessTokenResponseModel>
+    {
+
+    }
+
+
+}
\ No newline at end of file
diff --git a/Component/Yw.BIMFace.SDK.Core/02-response/01-access-token/AccessTokenResponseModel.cs b/Component/Yw.BIMFace.SDK.Core/02-response/01-access-token/AccessTokenResponseModel.cs
new file mode 100644
index 0000000..dbeae36
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/02-response/01-access-token/AccessTokenResponseModel.cs
@@ -0,0 +1,30 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    ///  AccessToken 鍝嶅簲Model
+    /// </summary>
+    [Serializable]
+    public class AccessTokenResponseModel
+    {
+        /// <summary>
+        ///  token 鐨勮繃鏈熸椂闂�
+        /// </summary>
+        [JsonProperty("expireTime", NullValueHandling = NullValueHandling.Ignore)]
+        public DateTime ExpireTime { get; set; }
+
+        /// <summary>
+        ///  token 鍐呭鍊�
+        /// </summary>
+        [JsonProperty("token", NullValueHandling = NullValueHandling.Ignore)]
+        public string Token { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override string ToString()
+        {
+            return $"AccessTokenResponseModel [token={this.Token}, expireTime={this.ExpireTime}]";
+        }
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/02-response/02-view-token/ViewTokenResponse.cs b/Component/Yw.BIMFace.SDK.Core/02-response/02-view-token/ViewTokenResponse.cs
new file mode 100644
index 0000000..ded51cd
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/02-response/02-view-token/ViewTokenResponse.cs
@@ -0,0 +1,11 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    ///  鑾峰彇 ViewToken 鐨勮姹傝繑鍥炵粨鏋滅被
+    /// </summary>
+    [Serializable]
+    public class ViewTokenResponse : GeneralResponse<string>
+    {
+
+    }
+}
\ No newline at end of file
diff --git a/Component/Yw.BIMFace.SDK.Core/02-response/03-translate/TranslateFileResponse.cs b/Component/Yw.BIMFace.SDK.Core/02-response/03-translate/TranslateFileResponse.cs
new file mode 100644
index 0000000..c6f681c
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/02-response/03-translate/TranslateFileResponse.cs
@@ -0,0 +1,11 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// 鏂囦欢杞寲鍝嶅簲绫�
+    /// </summary>
+    public class TranslateFileResponse : GeneralResponse<TranslateFileResponseModel>
+    {
+
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/02-response/03-translate/TranslateFileResponseModel.cs b/Component/Yw.BIMFace.SDK.Core/02-response/03-translate/TranslateFileResponseModel.cs
new file mode 100644
index 0000000..8f0e223
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/02-response/03-translate/TranslateFileResponseModel.cs
@@ -0,0 +1,78 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// 鏂囦欢杞崲鍝嶅簲 Model
+    /// </summary>
+    [Serializable]
+    public class TranslateFileResponseModel
+    {
+        /// <summary>
+        /// 鏂囦欢杞崲寮�濮嬬殑鏃堕棿
+        /// </summary>
+        [JsonProperty("createTime", NullValueHandling = NullValueHandling.Ignore)]
+        public DateTime? CreateTime { get; set; }
+
+        /// <summary>
+        ///  鏁版嵁鍖匢D
+        /// </summary>
+        [JsonProperty("databagId", NullValueHandling = NullValueHandling.Ignore)]
+        public string DatabagId { get; set; }
+
+        /// <summary>
+        ///  鏂囦欢ID
+        /// </summary>
+        [JsonProperty("fileId", NullValueHandling = NullValueHandling.Ignore)]
+        public long? FileId { get; set; }
+
+        /// <summary>
+        ///  鏂囦欢鐨勫悕绉帮紝鍖呮嫭鍚庣紑
+        /// </summary>
+        [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 浼樺厛绾э紝鏁板瓧瓒婂ぇ锛屼紭鍏堢骇瓒婁綆銆�1, 2, 3
+        /// </summary>
+        [JsonProperty("priority", NullValueHandling = NullValueHandling.Ignore)]
+        public int? Priority { get; set; }
+
+        /// <summary>
+        ///  鑻ヨ浆鎹㈠け璐ワ紝鍒欒繑鍥炲け璐ュ師鍥�
+        /// </summary>
+        [JsonProperty("reason", NullValueHandling = NullValueHandling.Ignore)]
+        public string Reason { get; set; }
+
+        /// <summary>
+        ///  杞崲鐨勭姸鎬�
+        /// </summary>
+        [JsonProperty("status", NullValueHandling = NullValueHandling.Ignore)]
+        public string Status { get; set; }
+
+        /// <summary>
+        ///  缂╃暐鍥�
+        /// </summary>
+        [JsonProperty("thumbnail", NullValueHandling = NullValueHandling.Ignore)]
+        public string[] Thumbnails { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override string ToString()
+        {
+            StringBuilder sb = new StringBuilder();
+            if (Thumbnails != null && Thumbnails.Length > 0)
+            {
+                foreach (string thumbnail in Thumbnails)
+                {
+                    sb.AppendLine(thumbnail);
+                }
+            }
+
+            return string.Format("TranslateFileResponseModel [createTime={0}, fileId={1}, name={2}, priority={3},reason={4},status={5},thumbnail={6}]",
+                                 CreateTime, FileId, Name, Priority, Reason, Status, sb.ToString());
+        }
+
+
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFilePolicyResponse.cs b/Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFilePolicyResponse.cs
new file mode 100644
index 0000000..68481e3
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFilePolicyResponse.cs
@@ -0,0 +1,11 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// 鑾峰彇鏂囦欢鐩翠紶Policy鍝嶅簲绫�
+    /// </summary>
+    public class UploadFilePolicyResponse : GeneralResponse<UploadFilePolicyResponseModel>
+    {
+
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFilePolicyResponseModel.cs b/Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFilePolicyResponseModel.cs
new file mode 100644
index 0000000..8a3e884
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFilePolicyResponseModel.cs
@@ -0,0 +1,38 @@
+锘縩amespace Yw.BIMFace
+{
+    [Serializable]
+    public class UploadFilePolicyResponseModel
+    {
+        [JsonProperty("accessId", NullValueHandling = NullValueHandling.Ignore)]
+        public string AccessId { get; set; }
+
+        [JsonProperty("callbackBody", NullValueHandling = NullValueHandling.Ignore)]
+        public string CallbackBody { get; set; }
+
+        [JsonProperty("expire", NullValueHandling = NullValueHandling.Ignore)]
+        public long? Expire { get; set; }
+
+        [JsonProperty("host", NullValueHandling = NullValueHandling.Ignore)]
+        public string Host { get; set; }
+
+        [JsonProperty("objectKey", NullValueHandling = NullValueHandling.Ignore)]
+        public string ObjectKey { get; set; }
+
+        [JsonProperty("policy", NullValueHandling = NullValueHandling.Ignore)]
+        public string Policy { get; set; }
+
+        [JsonProperty("signature", NullValueHandling = NullValueHandling.Ignore)]
+        public string Signature { get; set; }
+
+        [JsonProperty("sourceId", NullValueHandling = NullValueHandling.Ignore)]
+        public string SourceId { get; set; }
+
+        /// <summary>杩斿洖琛ㄧず褰撳墠瀵硅薄鐨勫瓧绗︿覆銆�</summary>
+        /// <returns>琛ㄧず褰撳墠瀵硅薄鐨勫瓧绗︿覆銆�</returns>
+        public override string ToString()
+        {
+            return string.Format("UploadPolicyEntity [accessId={0}, callbackBody={1}, expire={2}, host={3}, objectKey={4},policy={5},signature={6},sourceId={7}]",
+                                 AccessId, CallbackBody, Expire, Host, ObjectKey, Policy, Signature, SourceId);
+        }
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFileResponse.cs b/Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFileResponse.cs
new file mode 100644
index 0000000..d927c5b
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFileResponse.cs
@@ -0,0 +1,11 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// 涓婁紶鏂囦欢鍝嶅簲绫�
+    /// </summary>
+    public class UploadFileResponse : GeneralResponse<UploadFileResponseModel>
+    {
+
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFileResponseModel.cs b/Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFileResponseModel.cs
new file mode 100644
index 0000000..5140887
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/02-response/04-upload/UploadFileResponseModel.cs
@@ -0,0 +1,53 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    ///  鏂囦欢淇℃伅瀹炰綋
+    /// </summary>
+    [Serializable]
+    public class UploadFileResponseModel
+    {
+        /// <summary>
+        /// 涓婁紶鏃堕棿锛屾牸寮忥細yyyy-MM-dd hh:mm:ss
+        /// </summary>
+        [JsonProperty("createTime", NullValueHandling = NullValueHandling.Ignore)]
+        public DateTime? CreateTime { get; set; }
+
+        [JsonProperty("etag", NullValueHandling = NullValueHandling.Ignore)]
+        public string ETag { get; set; }
+
+        [JsonProperty("fileId", NullValueHandling = NullValueHandling.Ignore)]
+        public long? FileId { get; set; }
+
+        /// <summary>
+        /// 鏂囦欢娴佺殑闀垮害锛堝崟浣嶏細byte锛�
+        /// </summary>
+        [JsonProperty("length", NullValueHandling = NullValueHandling.Ignore)]
+        public long? Length { get; set; }
+
+        /// <summary>
+        ///  鏂囦欢鐨勫悕绉帮紝鍖呮嫭鍚庣紑
+        /// </summary>
+        [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 涓婁紶鏂囦欢鐨勮繑鍥炵粨鏋滅姸鎬侊細success 鎴栧叾浠�
+        /// </summary>
+        [JsonProperty("status", NullValueHandling = NullValueHandling.Ignore)]
+        public string Status { get; set; }
+
+        /// <summary>
+        ///  鏂囦欢鍚嶇殑鍚庣紑
+        /// </summary>
+        [JsonProperty("suffix", NullValueHandling = NullValueHandling.Ignore)]
+        public string Suffix { get; set; }
+
+        /// <summary>杩斿洖琛ㄧず褰撳墠瀵硅薄鐨勫瓧绗︿覆銆�</summary>
+        /// <returns>琛ㄧず褰撳墠瀵硅薄鐨勫瓧绗︿覆銆�</returns>
+        public override string ToString()
+        {
+            return string.Format("FileEntity [fileId={0}, name={1}, suffix={2}, length={3}, createTime={4},etag={5},status={6}]",
+                                 FileId, Name, Suffix, Length, CreateTime, ETag, Status);
+        }
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/02-response/06-delete/DeleteCompareResponse.cs b/Component/Yw.BIMFace.SDK.Core/02-response/06-delete/DeleteCompareResponse.cs
new file mode 100644
index 0000000..e5d263f
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/02-response/06-delete/DeleteCompareResponse.cs
@@ -0,0 +1,10 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    ///  鍒犻櫎妯″瀷瀵规瘮鐨勫搷搴旂粨鏋滅被
+    /// </summary>
+    public class DeleteCompareResponse : GeneralResponse<string>
+    {
+
+    }
+}
\ No newline at end of file
diff --git a/Component/Yw.BIMFace.SDK.Core/02-response/06-delete/DeleteFileResponse.cs b/Component/Yw.BIMFace.SDK.Core/02-response/06-delete/DeleteFileResponse.cs
new file mode 100644
index 0000000..408c0c7
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/02-response/06-delete/DeleteFileResponse.cs
@@ -0,0 +1,11 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    ///  鍒犻櫎鏂囦欢杩斿洖鐨勭粨鏋滅被
+    /// </summary>
+    [Serializable]
+    public class DeleteFileResponse : GeneralResponse<object>
+    {
+
+    }
+}
\ No newline at end of file
diff --git a/Component/Yw.BIMFace.SDK.Core/02-response/06-delete/DeleteIntegrateResponse.cs b/Component/Yw.BIMFace.SDK.Core/02-response/06-delete/DeleteIntegrateResponse.cs
new file mode 100644
index 0000000..cf3e0bf
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/02-response/06-delete/DeleteIntegrateResponse.cs
@@ -0,0 +1,10 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// 鍒犻櫎妯″瀷闆嗘垚鍝嶅簲绫�
+    /// </summary>
+    public class DeleteIntegrateResponse : GeneralResponse<string>
+    {
+
+    }
+}
\ No newline at end of file
diff --git a/Component/Yw.BIMFace.SDK.Core/03-extensions/Base64Extension.cs b/Component/Yw.BIMFace.SDK.Core/03-extensions/Base64Extension.cs
new file mode 100644
index 0000000..03c9a86
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/03-extensions/Base64Extension.cs
@@ -0,0 +1,33 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// base64鏍煎紡杞崲鍣�
+    /// </summary>
+    public static class Base64Extension
+    {
+        /// <summary>
+        ///  浣跨敤 UTF8 缂栫爜鏍煎紡锛屽瀛楃涓茶繘琛岃繘琛� Base64 鏂瑰紡缂栫爜锛堝姞瀵嗭級
+        /// </summary>
+        /// <param name="this">鎵╁睍瀵硅薄</param>
+        /// <returns>缂栫爜鍚庣殑瀛楃涓�</returns>
+        public static string EncryptByBase64(this string @this)
+        {
+            byte[] bytes = Encoding.Default.GetBytes(@this);
+            return Convert.ToBase64String(bytes);
+        }
+
+        /// <summary>
+        ///  浣跨敤 UTF8 缂栫爜鏍煎紡锛屽瀛楃涓茶繘琛岃繘琛� Base64 鏂瑰紡瑙g爜锛堣В瀵嗭級
+        /// </summary>
+        /// <param name="this">鎵╁睍瀵硅薄</param>
+        /// <returns>瑙g爜鍚庣殑瀛楃涓�</returns>
+        public static string DecryptByBase64(this string @this)
+        {
+            byte[] bytes = Convert.FromBase64String(@this);
+            return Encoding.Default.GetString(bytes);
+        }
+
+
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/04-helper/AccessTokenExpireHelper.cs b/Component/Yw.BIMFace.SDK.Core/04-helper/AccessTokenExpireHelper.cs
new file mode 100644
index 0000000..72b65ea
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/04-helper/AccessTokenExpireHelper.cs
@@ -0,0 +1,38 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    ///  AccessToken杩囨湡杈呭姪绫�
+    /// </summary>
+    internal class AccessTokenExpireHelper
+    {
+        //杩囨湡鏃堕棿
+        private DateTime _expireTime = DateTime.Now;
+
+        /// <summary>
+        /// 璁剧疆杩囨湡鏃堕棿
+        /// </summary>
+        internal void SetExpireTime(DateTime dateTime)
+        {
+            _expireTime = dateTime;
+        }
+
+        /// <summary>
+        /// 鏄惁杩囨湡
+        /// </summary>
+        internal bool IsExpire()
+        {
+            if (DateTime.Now.AddMinutes(Constants.AccessTokenAllowance) > _expireTime)
+            {
+                return true;
+            }
+            return false;
+        }
+
+
+
+
+
+
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/04-helper/ExceptionHelper.cs b/Component/Yw.BIMFace.SDK.Core/04-helper/ExceptionHelper.cs
new file mode 100644
index 0000000..770acb4
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/04-helper/ExceptionHelper.cs
@@ -0,0 +1,26 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    internal static class ExceptionHelper
+    {
+        /// <summary>
+        /// 灏濊瘯鎶涘紓甯�
+        /// </summary>
+        public static void TryThrowException<T>(this GeneralResponse<T> response)
+        {
+            if (response == null)
+            {
+                return;
+            }
+            if (response.Code == Constants.Success)
+            {
+                return;
+            }
+            throw new BIMFaceException(response.Code);
+        }
+
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/04-helper/HeaderHelper.cs b/Component/Yw.BIMFace.SDK.Core/04-helper/HeaderHelper.cs
new file mode 100644
index 0000000..5f5e371
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/04-helper/HeaderHelper.cs
@@ -0,0 +1,32 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// http澶撮儴
+    /// </summary>
+    internal class HeaderHelper
+    {
+        /// <summary>
+        /// AccessToken鐨勮姹俬earder
+        /// </summary>
+        internal static KeyValuePair<string, string> GetHeader(string AppKey, string AppSecret)
+        {
+            var contract = string.Format("{0}:{1}", AppKey, AppSecret);
+            var base64Contract = contract.EncryptByBase64();
+            var authorHeader = string.Format("Basic {0}", base64Contract);
+            var keyValuePair = new KeyValuePair<string, string>("Authorization", authorHeader);
+            return keyValuePair;
+        }
+
+        /// <summary>
+        /// 鍏朵粬鐨勮姹俬earder
+        /// </summary>
+        internal static KeyValuePair<string, string> GetHeader(string accesstoken)
+        {
+            var contract = string.Format("bearer {0}", accesstoken);
+            var keyValuePair = new KeyValuePair<string, string>("Authorization", contract);
+            return keyValuePair;
+        }
+
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/04-helper/ResponseHelper.cs b/Component/Yw.BIMFace.SDK.Core/04-helper/ResponseHelper.cs
new file mode 100644
index 0000000..db2f67e
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/04-helper/ResponseHelper.cs
@@ -0,0 +1,63 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// 杩斿洖缁撴灉杈呭姪绫�
+    /// </summary>
+    internal class ResponseHelper
+    {
+        //缁撴灉涓庢弿杩扮殑瀵瑰簲鍏崇郴瀛楀吀
+        private static readonly Dictionary<string, string> _dic = new Dictionary<string, string>() {
+            {"system.error","BIMFACE绯荤粺寮傚父"},
+            {"authentication.failed","API璁块棶鍚堟硶鎬ф牎楠屽け璐�"},
+            {"file.has.not.translated","鏂囦欢鏈浆鎹紝涓嶈兘鑾峰彇viewToken"},
+            {"file.translate.failed","鏂囦欢杞崲澶辫触锛屼笉鑳借幏鍙杤iewToken"},
+            {"file.is.translating","鏂囦欢杞崲涓紝涓嶈兘鑾峰彇viewToken"},
+            {"integration.not.found","闆嗘垚妯″瀷涓嶅瓨鍦紝涓嶈兘鑾峰彇viewToken"},
+            {"files.is.integrating","闆嗘垚涓紝涓嶈兘鑾峰彇viewToken"},
+            {"files.integrate.failed","闆嗘垚澶辫触锛屼笉鑳借幏鍙杤iewToken"},
+            {"model.compare.not.found","瀵规瘮妯″瀷涓嶅瓨鍦紝涓嶈兘鑾峰彇viewToken"},
+            {"model.compare.not.finished","瀵规瘮鏈畬鎴愶紝涓嶈兘鑾峰彇viewToken"},
+            {"model.compare.failed","瀵规瘮澶辫触锛屼笉鑳借幏鍙杤iewToken"},
+            {"file.not.found","鏂囦欢涓嶅瓨鍦�"},
+            {"success","鎴愬姛"}
+        };
+
+        /// <summary>
+        /// 鑾峰彇鍝嶅簲缂栫爜
+        /// </summary>
+        internal static eResponseCode GetResponseCode(string code)
+        {
+            switch (code)
+            {
+                case "system.error": return eResponseCode.SystemError;
+                case "authentication.failed": return eResponseCode.AuthenticationFailed;
+                case "file.has.not.translated": return eResponseCode.FileHasNotTranslated;
+                case "file.translate.failed": return eResponseCode.FileTranslateFailed;
+                case "file.is.translating": return eResponseCode.FileIsTranslating;
+                case "integration.not.found": return eResponseCode.IntegrationNotFound;
+                case "files.is.integrating": return eResponseCode.FileIsIntegrating;
+                case "files.integrate.failed": return eResponseCode.FilesIntegrateFailed;
+                case "model.compare.not.found": return eResponseCode.ModelCompareNotFound;
+                case "model.compare.not.finished": return eResponseCode.ModelCompareNotFinished;
+                case "model.compare.failed": return eResponseCode.ModelCompareFailed;
+                case "file.not.found": return eResponseCode.FileNotFound;
+                case "success": return eResponseCode.Success;
+                default: return eResponseCode.UnKnown;
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍝嶅簲淇℃伅
+        /// </summary>
+        internal static string GetResponseMessage(string code)
+        {
+            if (_dic.ContainsKey(code))
+            {
+                return _dic[code];
+            }
+            return null;
+        }
+
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/04-helper/ViewTokenExpireHelper.cs b/Component/Yw.BIMFace.SDK.Core/04-helper/ViewTokenExpireHelper.cs
new file mode 100644
index 0000000..3a3703a
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/04-helper/ViewTokenExpireHelper.cs
@@ -0,0 +1,44 @@
+锘縩amespace Yw.BIMFace
+{
+    /// <summary>
+    /// ViewToken杩囨湡杈呭姪绫�
+    /// </summary>
+    internal class ViewTokenExpireHelper
+    {
+        //杩囨湡瀛楀吀
+        private readonly Dictionary<string, DateTime> _expire = new();
+
+        /// <summary>
+        /// 璁剧疆杩囨湡鏃堕棿
+        /// </summary>
+        internal void SetExpireTime(string bimfaceId)
+        {
+            var dt = DateTime.Now.AddHours(Constants.ViewTokenLife);
+            if (_expire.ContainsKey(bimfaceId))
+            {
+                _expire[bimfaceId] = dt;
+                return;
+            }
+            _expire.Add(bimfaceId, dt);
+        }
+
+        /// <summary>
+        /// 鏄惁杩囨湡
+        /// </summary>
+        internal bool IsExpire(string bimfaceId)
+        {
+            if (!_expire.ContainsKey(bimfaceId))
+            {
+                return true;
+            }
+            if (DateTime.Now.AddMinutes(Constants.ViewTokenAllowance) > _expire[bimfaceId])
+            {
+                return true;
+            }
+            return false;
+        }
+
+
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/05-client/01-instance/BIMFaceClient_Instance.cs b/Component/Yw.BIMFace.SDK.Core/05-client/01-instance/BIMFaceClient_Instance.cs
new file mode 100644
index 0000000..fa3f799
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/05-client/01-instance/BIMFaceClient_Instance.cs
@@ -0,0 +1,54 @@
+锘縩amespace Yw
+{
+    /// <summary>
+    /// 璋冪敤鍏ュ彛
+    /// </summary>
+    public sealed partial class BIMFaceClient
+    {
+        /// <summary>
+        /// 鑾峰彇BimfaceClient瀵硅薄
+        /// </summary>
+        public static BIMFaceClient Instance(string appKey, string appSecret)
+        {
+            var client = _clients.Find(x => x.AppKey == appKey && x.AppSecret == appSecret);
+            if (client == null)
+            {
+                lock (_locker)
+                {
+                    client = _clients.Find(x => x.AppKey == appKey && x.AppSecret == appSecret);
+                    if (client == null)
+                    {
+                        client = new BIMFaceClient(appKey, appSecret);
+                        _clients.Add(client);
+                    }
+                }
+            }
+            return client;
+        }
+
+        //绉佹湁鏋勯�犲嚱鏁�
+        private BIMFaceClient(string AppKey, string AppSecret)
+        {
+            _appKey = AppKey;
+            _appSecret = AppSecret;
+        }
+
+        /// <summary>
+        /// AppKey
+        /// </summary>
+        public string AppKey { get => _appKey; }
+        private string _appKey;
+
+        /// <summary>
+        /// AppSecret
+        /// </summary>
+        public string AppSecret { get => _appSecret; }
+        private string _appSecret;
+
+        private static object _locker = new();//閿佸璞�
+        private static List<BIMFaceClient> _clients = new();//client 鍒楄〃
+
+
+    }
+
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/05-client/02-access-token/BIMFaceClient_AccessToken.cs b/Component/Yw.BIMFace.SDK.Core/05-client/02-access-token/BIMFaceClient_AccessToken.cs
new file mode 100644
index 0000000..6fe0c17
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/05-client/02-access-token/BIMFaceClient_AccessToken.cs
@@ -0,0 +1,53 @@
+锘縩amespace Yw
+{
+    /// <summary>
+    /// AccessToken
+    /// </summary>
+    public sealed partial class BIMFaceClient
+    {
+        private string _accessToken;//浠ょ墝
+        private const string _accessTokenUrl = @"https://api.bimface.com/oauth2/token";//浠ょ墝璇锋眰鍦板潃
+        private readonly AccessTokenExpireHelper _accessTokenExpireHelper = new(); //access token 杩囨湡杈呭姪绫�
+
+
+        /// <summary>
+        /// 鑾峰彇AccessToken
+        /// </summary>
+        public async Task<string> GetAccessToken()
+        {
+            if (string.IsNullOrEmpty(_accessToken) || _accessTokenExpireHelper.IsExpire())
+            {
+                await GetAccessTokenAsync();
+            }
+            return _accessToken;
+        }
+
+        //鑾峰彇AccessToken锛屽唴閮ㄨ皟鐢�
+        private async Task GetAccessTokenAsync()
+        {
+            var request = new FlurlRequest(_accessTokenUrl);
+            var header = HeaderHelper.GetHeader(_appKey, _appSecret);
+            request.WithHeader(header.Key, header.Value);
+            var response = await request.PostAsync();
+            var jsonString = await response.GetStringAsync();
+            var result = JsonHelper.Json2Object<AccessTokenResponse>(jsonString);
+            result.TryThrowException();
+            _accessToken = result.Data.Token;
+            _accessTokenExpireHelper.SetExpireTime(result.Data.ExpireTime);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+    }
+
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/05-client/03-view-token/BIMFaceClient_ViewToken.cs b/Component/Yw.BIMFace.SDK.Core/05-client/03-view-token/BIMFaceClient_ViewToken.cs
new file mode 100644
index 0000000..4ccf2a7
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/05-client/03-view-token/BIMFaceClient_ViewToken.cs
@@ -0,0 +1,50 @@
+锘縩amespace Yw
+{
+    /// <summary>
+    /// ViewToken
+    /// </summary>
+    public sealed partial class BIMFaceClient
+    {
+        private readonly Dictionary<string, string> _viewToken = new();//view token
+        private const string _viewTokenUrl = @"https://api.bimface.com/view/token";//瑙嗗浘浠ょ墝璇锋眰鍦板潃
+        private readonly ViewTokenExpireHelper _viewTokenExpireHelper = new();//view token 杩囨湡杈呭姪绫�
+
+        /// <summary>
+        /// 鑾峰彇ViewToken
+        /// </summary>
+        public async Task<string> GetViewToken(string bimfaceId, eModelIdType modelIdType = eModelIdType.fileId)
+        {
+            await GetAccessToken();
+            if (!_viewToken.ContainsKey(bimfaceId) || _viewTokenExpireHelper.IsExpire(bimfaceId))
+            {
+                await GetViewTokenAsync(bimfaceId, modelIdType);
+            }
+            return _viewToken[bimfaceId];
+        }
+
+        //鑾峰彇AccessToken锛屽唴閮ㄨ皟鐢�
+        private async Task GetViewTokenAsync(string bimfaceId, eModelIdType modelIdType = eModelIdType.fileId)
+        {
+            var url = $"{_viewTokenUrl}?{modelIdType}={bimfaceId}";
+            var request = new FlurlRequest(url);
+            var header = HeaderHelper.GetHeader(_accessToken);
+            request.WithHeader(header.Key, header.Value);
+            var response = await request.GetAsync();
+            var jsonString = await response.GetStringAsync();
+            var result = JsonHelper.Json2Object<ViewTokenResponse>(jsonString);
+            result.TryThrowException();
+            if (_viewToken.ContainsKey(bimfaceId))
+            {
+                _viewToken[bimfaceId] = result.Data;
+            }
+            else
+            {
+                _viewToken.Add(bimfaceId, result.Data);
+            }
+            _viewTokenExpireHelper.SetExpireTime(bimfaceId);
+        }
+
+
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/05-client/04-upload/BimfaceClient_Upload.cs b/Component/Yw.BIMFace.SDK.Core/05-client/04-upload/BimfaceClient_Upload.cs
new file mode 100644
index 0000000..edfd637
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/05-client/04-upload/BimfaceClient_Upload.cs
@@ -0,0 +1,175 @@
+锘縩amespace Yw
+{
+    /// <summary>
+    /// 鏂囦欢涓婁紶
+    /// </summary>
+    public sealed partial class BIMFaceClient
+    {
+        private const string _normalUploadUrl = @"https://file.bimface.com/upload";//鏅�氭枃浠舵祦涓婁紶URL
+        private const string _policyUploadUrl = @"https://file.bimface.com/upload/policy";//鏂囦欢鐩翠紶URL
+
+        /// <summary>
+        /// 鏅�氭枃浠朵笂浼狅紙涓嶆帹鑽愶級
+        /// </summary>
+        /// <param name="filePath">鏂囦欢鍏ㄨ矾寰�</param>
+        /// <param name="fileName">鏂囦欢鍚嶇О锛堝繀椤诲甫鍚庣紑锛�</param>
+        public async Task<UploadFileResponseModel> UploadFileByDirect(string filePath, string fileName = null)
+        {
+            await GetAccessToken();
+            if (string.IsNullOrEmpty(fileName))
+            {
+                var fileInfo = new FileInfo(filePath);
+                fileName = fileInfo.Name;
+            }
+            var fileNameString = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(fileName));
+            var url = $"{_normalUploadUrl}?name={fileNameString}";
+            var request = (HttpWebRequest)WebRequest.Create(url);
+            request.Method = WebRequestMethods.Http.Put;
+            var header = HeaderHelper.GetHeader(_accessToken);
+            request.Headers.Add(header.Key, header.Value);
+            byte[] bytes;
+            using (FileStream steam = new FileStream(filePath, FileMode.Open, FileAccess.Read))
+            {
+                bytes = new byte[(int)steam.Length];
+                steam.Read(bytes, 0, bytes.Length);
+            }
+            request.ContentLength = bytes.Length;
+            request.AllowWriteStreamBuffering = true;
+            using (Stream stream = request.GetRequestStream())
+            {
+                stream.Write(bytes, 0, bytes.Length);
+                stream.Flush();
+            }
+            var response = request.GetResponse();
+            string responsetext = string.Empty;
+            using (Stream stream = response.GetResponseStream())
+            using (StreamReader reader = new StreamReader(stream))
+            {
+                responsetext = reader.ReadToEnd();
+            }
+            var result = JsonHelper.Json2Object<UploadFileResponse>(responsetext);
+            result.TryThrowException();
+            return result.Data;
+        }
+
+        /// <summary>
+        /// 鏂囦欢鐩翠紶(鎺ㄨ崘)
+        /// </summary>
+        /// <param name="filePath">鏂囦欢鍏ㄨ矾寰�</param>
+        /// <param name="fileName">鏂囦欢鍚嶇О锛堝繀椤诲甫鍚庣紑锛�</param>
+        public async Task<UploadFileResponseModel> UploadFileByPolicy(string filePath, string fileName = null)
+        {
+            await GetAccessToken();
+            if (string.IsNullOrEmpty(fileName))
+            {
+                var fileInfo = new FileInfo(filePath);
+                fileName = fileInfo.Name;
+            }
+            var policyResult = await GetUploadFilePolicyAsync(fileName);
+            string boundary = "----" + DateTime.Now.Ticks.ToString("x");// 杈圭晫绗�
+            byte[] beginBoundaryBytes = Encoding.UTF8.GetBytes("--" + boundary + "\r\n");     // 杈圭晫绗﹀紑濮嬨�傘�愨槅銆戝彸渚у繀椤昏鏈� \r\n 銆�
+            byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); // 杈圭晫绗︾粨鏉熴�傘�愨槅銆戜袱渚у繀椤昏鏈� --\r\n 銆�
+            var textFormTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n" + "{1}\r\n";//鏂囨湰妯℃澘
+            var fileFormTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type: application/octet-stream\r\n\r\n";//鏂囦欢妯℃澘
+
+            var dic = new Dictionary<string, string>();
+            dic.Add("name", fileName);
+            dic.Add("key", policyResult.ObjectKey);
+            dic.Add("policy", policyResult.Policy);
+            dic.Add("OSSAccessKeyId", policyResult.AccessId);
+            dic.Add("success_action_status", "200");
+            dic.Add("callback", policyResult.CallbackBody);
+            dic.Add("signature", policyResult.Signature);
+
+            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(policyResult.Host);
+            request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);
+            request.Method = WebRequestMethods.Http.Post;
+            request.AllowWriteStreamBuffering = false;
+            //request.KeepAlive = true;
+            request.Timeout = -1;
+
+            long contentLength = 0;
+            var textBytesList = dic.Select(x =>
+            {
+                var textFormItem = string.Format(textFormTemplate, x.Key, x.Value);
+                byte[] textFormItemBytes = Encoding.UTF8.GetBytes(textFormItem);
+                contentLength += beginBoundaryBytes.Length;
+                contentLength += textFormItemBytes.Length;
+                return textFormItemBytes;
+            }).ToList();
+
+            var fileFormItem = string.Format(fileFormTemplate, "file", fileName);
+            byte[] fileFormItemBytes = Encoding.UTF8.GetBytes(fileFormItem);
+            contentLength += beginBoundaryBytes.Length;
+            contentLength += fileFormItemBytes.Length;
+
+            var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
+            contentLength += fileStream.Length;
+            contentLength += endBoundaryBytes.Length;
+            request.ContentLength = contentLength;
+            var requestStream = request.GetRequestStream();
+            textBytesList.ForEach(x =>
+            {
+                requestStream.Write(beginBoundaryBytes, 0, beginBoundaryBytes.Length);
+                requestStream.Write(x, 0, x.Length);
+            });
+            requestStream.Write(beginBoundaryBytes, 0, beginBoundaryBytes.Length);
+            requestStream.Write(fileFormItemBytes, 0, fileFormItemBytes.Length);
+
+            //姣忔涓婁紶4M
+            byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))];
+            int bytesRead = 0;
+            while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
+            {
+                requestStream.Write(buffer, 0, bytesRead);
+            }
+            requestStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
+
+            fileStream.Close();
+            requestStream.Close();
+
+            var response = request.GetResponse();
+            string responsetext = string.Empty;
+            using (Stream stream = response.GetResponseStream())
+            using (StreamReader reader = new StreamReader(stream))
+            {
+                responsetext = reader.ReadToEnd();
+            }
+
+            var result = JsonHelper.Json2Object<UploadFileResponse>(responsetext);
+            result.TryThrowException();
+            return result.Data;
+        }
+
+        /// <summary>
+        /// 鏂囦欢鐩翠紶 Ex(鎺ㄨ崘)
+        /// </summary>
+        public async Task<long> UploadFileExByPolicy(string filePath, string fileName = null)
+        {
+            var response = await UploadFileByPolicy(filePath, fileName);
+            if (response.Status != Constants.Success)
+            {
+                return 0;
+            }
+            return response.FileId.Value;
+        }
+
+
+        //鑾峰彇鏂囦欢鐩翠紶Policy
+        private async Task<UploadFilePolicyResponseModel> GetUploadFilePolicyAsync(string fileName)
+        {
+            var fileNameString = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(fileName));
+            var url = $"{_policyUploadUrl}?name={fileNameString}";
+            var request = new FlurlRequest(url);
+            var header = HeaderHelper.GetHeader(_accessToken);
+            request.WithHeader(header.Key, header.Value);
+            var response = await request.GetAsync();
+            var jsonString = await response.GetStringAsync();
+            var result = JsonHelper.Json2Object<UploadFilePolicyResponse>(jsonString);
+            result.TryThrowException();
+            return result.Data;
+        }
+
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/05-client/05-translate/BIMFaceClient_Translate.cs b/Component/Yw.BIMFace.SDK.Core/05-client/05-translate/BIMFaceClient_Translate.cs
new file mode 100644
index 0000000..eb82a23
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/05-client/05-translate/BIMFaceClient_Translate.cs
@@ -0,0 +1,126 @@
+锘縩amespace Yw
+{
+    /// <summary>
+    /// 鏂囦欢杞崲
+    /// </summary>
+    public sealed partial class BIMFaceClient
+    {
+        private const string _translateUrl = @"https://api.bimface.com/translate";//鏂囦欢杞崲URL
+
+
+        /// <summary>
+        /// 杞崲
+        /// </summary>
+        public async Task<TranslateFileResponseModel> TranslateRvtFile(string bimfaceId, eRvtTranslateStyle translateStyle)
+        {
+            await GetAccessToken();
+
+            if (translateStyle == eRvtTranslateStyle.Real)
+            {
+                return await TranslateRvtFileToRealStyleAsync(bimfaceId);
+            }
+            else
+            {
+                return await TranslateRvtFileToRenderStyleAsync(bimfaceId);
+            }
+        }
+
+        /// <summary>
+        /// 杞崲
+        /// </summary>
+        public async Task<eTranslateStatus> TranslateRvtFileReturnStatus(string bimfaceId, eRvtTranslateStyle translateStyle)
+        {
+            var response = await TranslateRvtFile(bimfaceId, translateStyle);
+            if (response.Status == Constants.Success)
+            {
+                return eTranslateStatus.Success;
+            }
+            if (response.Status == Constants.ProcessingStatus)
+            {
+                return eTranslateStatus.Processing;
+            }
+            return eTranslateStatus.Success;
+        }
+
+        //鍙戣捣杞崲銆傚皢RVT鏂囦欢杞崲鎴愮湡瀹炴ā寮忕殑鏁堟灉
+        private async Task<TranslateFileResponseModel> TranslateRvtFileToRealStyleAsync(string bimfaceId)
+        {
+            var request = new TranslateRvtFileRequest();
+            request.Source.FileId = long.Parse(bimfaceId);
+            request.Config.Texture = true;
+            var data = JsonHelper.Object2Json(request);
+            return await TranslateFileAsync(data);
+        }
+
+        //鍙戣捣杞崲 , 灏哛VT鏂囦欢杞崲鎴愮潃鑹叉ā寮忕殑鏁堟灉
+        private async Task<TranslateFileResponseModel> TranslateRvtFileToRenderStyleAsync(string bimfaceId)
+        {
+            var request = new TranslateRvtFileRequest();
+            request.Source.FileId = long.Parse(bimfaceId);
+            var data = JsonHelper.Object2Json(request);
+            return await TranslateFileAsync(data);
+        }
+
+        //鏂囦欢杞崲
+        private async Task<TranslateFileResponseModel> TranslateFileAsync(string data)
+        {
+            var url = _translateUrl;
+            var request = new FlurlRequest(url);
+            var header = HeaderHelper.GetHeader(_accessToken);
+            request.WithHeader(header.Key, header.Value);
+            request.Content = new StringContent(data, Encoding.UTF8, "application/json");
+            var response = await request.PutAsync();
+            var jsonString = await response.GetStringAsync();
+            var result = JsonHelper.Json2Object<TranslateFileResponse>(jsonString);
+            result.TryThrowException();
+            return result.Data;
+        }
+
+
+        /// <summary>
+        /// 鑾峰彇鏂囦欢杞崲鐘舵��
+        /// </summary>
+        public async Task<TranslateFileResponseModel> GetFileTranslateStatus(string bimfaceId)
+        {
+            await GetAccessToken();
+            return await GetFileTranslateStatusAsync(bimfaceId);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏂囦欢杞崲鐘舵��
+        /// </summary>
+        public async Task<eTranslateStatus> GetFileTranslateStatusReturnStatus(string bimfaceId)
+        {
+            var response = await GetFileTranslateStatus(bimfaceId);
+            if (response.Status == Constants.Success)
+            {
+                return eTranslateStatus.Success;
+            }
+            if (response.Status == Constants.ProcessingStatus)
+            {
+                return eTranslateStatus.Processing;
+            }
+            return eTranslateStatus.Success;
+        }
+
+        //鑾峰彇鏂囦欢杞崲鐘舵��
+        private async Task<TranslateFileResponseModel> GetFileTranslateStatusAsync(string bimfaceId)
+        {
+            var url = $"{_translateUrl}?fileId={bimfaceId}";
+            var request = new FlurlRequest(url);
+            var header = HeaderHelper.GetHeader(_accessToken);
+            request.WithHeader(header.Key, header.Value);
+            var response = await request.GetAsync();
+            var jsonString = await response.GetStringAsync();
+            var result = JsonHelper.Json2Object<TranslateFileResponse>(jsonString);
+            result.TryThrowException();
+            return result.Data;
+        }
+
+
+
+
+
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/05-client/06-delete/BIMFaceClient_Delete.cs b/Component/Yw.BIMFace.SDK.Core/05-client/06-delete/BIMFaceClient_Delete.cs
new file mode 100644
index 0000000..5b80262
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/05-client/06-delete/BIMFaceClient_Delete.cs
@@ -0,0 +1,75 @@
+锘縩amespace Yw
+{
+    public sealed partial class BIMFaceClient
+    {
+        private const string _fileDeleteUrl = @"https://file.bimface.com/file";//鏂囦欢鍒犻櫎URL
+        private const string _integrateDeleteUrl = @"https://api.bimface.com/integrate";//闆嗘垚妯″瀷鍒犻櫎URL
+        private const string _compareDeleteUrl = @"https://api.bimface.com/v2/compare";//妯″瀷瀵规瘮鍒犻櫎URL
+
+        /// <summary>
+        /// 鍒犻櫎
+        /// </summary>
+        public async Task<bool> Delete(string bimfaceId, eModelIdType modelIdType = eModelIdType.fileId)
+        {
+            await GetAccessToken();
+            bool result = false;
+            switch (modelIdType)
+            {
+                case eModelIdType.fileId: result = await DeleteFileAsync(bimfaceId); break;
+                case eModelIdType.integrateId: result = await DeleteIntegrateAsync(bimfaceId); break;
+                case eModelIdType.compareId: result = await DeleteCompareAsync(bimfaceId); break;
+                default: break;
+            }
+            return result;
+        }
+
+        //鍒犻櫎鏂囦欢
+        private async Task<bool> DeleteFileAsync(string bimfaceId)
+        {
+            var url = $"{_fileDeleteUrl}?fileId={bimfaceId}";
+            var request = new FlurlRequest(url);
+            var header = HeaderHelper.GetHeader(_accessToken);
+            request.WithHeader(header.Key, header.Value);
+            var response = await request.DeleteAsync();
+            var jsonString = await response.GetStringAsync();
+            var result = JsonHelper.Json2Object<DeleteFileResponse>(jsonString);
+            result.TryThrowException();
+            return true;
+        }
+
+        //鍒犻櫎妯″瀷闆嗘垚
+        private async Task<bool> DeleteIntegrateAsync(string bimfaceId)
+        {
+            var url = $"{_integrateDeleteUrl}?integrateId={bimfaceId}";
+            var request = new FlurlRequest(url);
+            var header = HeaderHelper.GetHeader(_accessToken);
+            request.WithHeader(header.Key, header.Value);
+            var response = await request.DeleteAsync();
+            var jsonString = await response.GetStringAsync();
+            var result = JsonHelper.Json2Object<DeleteIntegrateResponse>(jsonString);
+            result.TryThrowException();
+            return true;
+        }
+
+        //鍒犻櫎妯″瀷瀵规瘮
+        private async Task<bool> DeleteCompareAsync(string bimfaceId)
+        {
+            var url = $"{_compareDeleteUrl}?compareId={bimfaceId}";
+            var request = new FlurlRequest(url);
+            var header = HeaderHelper.GetHeader(_accessToken);
+            request.WithHeader(header.Key, header.Value);
+            var response = await request.DeleteAsync();
+            var jsonString = await response.GetStringAsync();
+            var result = JsonHelper.Json2Object<DeleteCompareResponse>(jsonString);
+            result.TryThrowException();
+            return true;
+        }
+
+
+
+
+
+
+
+    }
+}
diff --git a/Component/Yw.BIMFace.SDK.Core/GlobalUsings.cs b/Component/Yw.BIMFace.SDK.Core/GlobalUsings.cs
new file mode 100644
index 0000000..ca4e777
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/GlobalUsings.cs
@@ -0,0 +1,7 @@
+锘縢lobal using Yw;
+global using Yw.BIMFace;
+global using System.Net;
+global using System.Text;
+global using System.Collections.Specialized;
+global using Newtonsoft.Json;
+global using Flurl.Http;
\ No newline at end of file
diff --git a/Component/Yw.BIMFace.SDK.Core/Properties/PublishProfiles/FolderProfile.pubxml b/Component/Yw.BIMFace.SDK.Core/Properties/PublishProfiles/FolderProfile.pubxml
new file mode 100644
index 0000000..154e035
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/Properties/PublishProfiles/FolderProfile.pubxml
@@ -0,0 +1,13 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <Configuration>Release</Configuration>
+    <Platform>Any CPU</Platform>
+    <PublishDir>bin\Release\net6.0\publish\</PublishDir>
+    <PublishProtocol>FileSystem</PublishProtocol>
+    <_TargetId>Folder</_TargetId>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Component/Yw.BIMFace.SDK.Core/Properties/PublishProfiles/FolderProfile.pubxml.user b/Component/Yw.BIMFace.SDK.Core/Properties/PublishProfiles/FolderProfile.pubxml.user
new file mode 100644
index 0000000..1be8e9a
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <History>True|2024-07-16T06:59:37.6680219Z;True|2024-07-02T17:41:10.8366044+08:00;</History>
+    <LastFailureDetails />
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Component/Yw.BIMFace.SDK.Core/Yw.BIMFace.SDK.Core.csproj b/Component/Yw.BIMFace.SDK.Core/Yw.BIMFace.SDK.Core.csproj
new file mode 100644
index 0000000..6daaac4
--- /dev/null
+++ b/Component/Yw.BIMFace.SDK.Core/Yw.BIMFace.SDK.Core.csproj
@@ -0,0 +1,16 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>disable</Nullable>
+    <Version>3.0.1</Version>
+    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Yw.FlurlHttp.Core" Version="3.0.0" />
+    <PackageReference Include="Yw.Newtonsoft.Core" Version="3.0.0" />
+  </ItemGroup>
+
+</Project>
diff --git a/Desktop/HStation.Desktop.Xhs.Core/DbFirstHelper.cs b/Desktop/HStation.Desktop.Xhs.Core/DbFirstHelper.cs
index b438d3c..8c4b006 100644
--- a/Desktop/HStation.Desktop.Xhs.Core/DbFirstHelper.cs
+++ b/Desktop/HStation.Desktop.Xhs.Core/DbFirstHelper.cs
@@ -19,6 +19,8 @@
             new BLL.XhsDbFirstHelper().Initial();
             new Yw.BLL.MapDbFirstHelper().Initial();
             new Yw.BLL.BasicDbFirstHelper().Initial();
+            new Yw.BLL.HydroDbFirstHelper().Initial();
+            
         }
     }
 }
diff --git a/Desktop/HStation.Desktop.Xhs.Core/MainForm.Designer.cs b/Desktop/HStation.Desktop.Xhs.Core/MainForm.Designer.cs
index 049cb15..75dafee 100644
--- a/Desktop/HStation.Desktop.Xhs.Core/MainForm.Designer.cs
+++ b/Desktop/HStation.Desktop.Xhs.Core/MainForm.Designer.cs
@@ -71,7 +71,7 @@
             tileNavPane.Dock = DockStyle.Top;
             tileNavPane.Location = new Point(0, 0);
             tileNavPane.Name = "tileNavPane";
-            tileNavPane.Size = new Size(932, 60);
+            tileNavPane.Size = new Size(1189, 53);
             tileNavPane.TabIndex = 0;
             tileNavPane.Text = "tileNavPane1";
             tileNavPane.ElementClick += tileNavPane_ElementClick;
@@ -88,6 +88,7 @@
             nbMin.Caption = null;
             nbMin.ImageOptions.AllowGlyphSkinning = DevExpress.Utils.DefaultBoolean.True;
             nbMin.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("nbMin.ImageOptions.SvgImage");
+            nbMin.ImageOptions.SvgImageSize = new Size(24, 24);
             nbMin.Name = "nbMin";
             nbMin.ElementClick += nbMin_ElementClick;
             // 
@@ -97,7 +98,7 @@
             nbNormal.Caption = null;
             nbNormal.ImageOptions.AllowGlyphSkinning = DevExpress.Utils.DefaultBoolean.True;
             nbNormal.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("nbNormal.ImageOptions.SvgImage");
-            nbNormal.ImageOptions.SvgImageSize = new Size(24, 24);
+            nbNormal.ImageOptions.SvgImageSize = new Size(20, 20);
             nbNormal.Name = "nbNormal";
             nbNormal.ElementClick += nbNormal_ElementClick;
             // 
@@ -107,6 +108,7 @@
             nbClose.Caption = null;
             nbClose.ImageOptions.AllowGlyphSkinning = DevExpress.Utils.DefaultBoolean.True;
             nbClose.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("nbClose.ImageOptions.SvgImage");
+            nbClose.ImageOptions.SvgImageSize = new Size(24, 24);
             nbClose.Name = "nbClose";
             nbClose.ElementClick += nabClose_ElementClick;
             // 
@@ -162,15 +164,15 @@
             barDockControlTop.Dock = DockStyle.Top;
             barDockControlTop.Location = new Point(0, 0);
             barDockControlTop.Manager = barManager1;
-            barDockControlTop.Size = new Size(932, 0);
+            barDockControlTop.Size = new Size(1189, 0);
             // 
             // barDockControlBottom
             // 
             barDockControlBottom.CausesValidation = false;
             barDockControlBottom.Dock = DockStyle.Bottom;
-            barDockControlBottom.Location = new Point(0, 498);
+            barDockControlBottom.Location = new Point(0, 717);
             barDockControlBottom.Manager = barManager1;
-            barDockControlBottom.Size = new Size(932, 23);
+            barDockControlBottom.Size = new Size(1189, 23);
             // 
             // barDockControlLeft
             // 
@@ -178,15 +180,15 @@
             barDockControlLeft.Dock = DockStyle.Left;
             barDockControlLeft.Location = new Point(0, 0);
             barDockControlLeft.Manager = barManager1;
-            barDockControlLeft.Size = new Size(0, 498);
+            barDockControlLeft.Size = new Size(0, 717);
             // 
             // barDockControlRight
             // 
             barDockControlRight.CausesValidation = false;
             barDockControlRight.Dock = DockStyle.Right;
-            barDockControlRight.Location = new Point(932, 0);
+            barDockControlRight.Location = new Point(1189, 0);
             barDockControlRight.Manager = barManager1;
-            barDockControlRight.Size = new Size(0, 498);
+            barDockControlRight.Size = new Size(0, 717);
             // 
             // dockManager1
             // 
@@ -212,7 +214,7 @@
             // 
             AutoScaleDimensions = new SizeF(7F, 14F);
             AutoScaleMode = AutoScaleMode.Font;
-            ClientSize = new Size(932, 521);
+            ClientSize = new Size(1189, 740);
             Controls.Add(tileNavPane);
             Controls.Add(barDockControlLeft);
             Controls.Add(barDockControlRight);
@@ -221,6 +223,7 @@
             Margin = new Padding(3, 2, 3, 2);
             Name = "MainForm";
             Text = "Form1";
+            WindowState = FormWindowState.Maximized;
             FormClosing += MainForm_FormClosing;
             FormClosed += MainForm_FormClosed;
             Load += MainForm_Load;
diff --git a/Desktop/HStation.Desktop.Xhs.Core/Program.cs b/Desktop/HStation.Desktop.Xhs.Core/Program.cs
index 90f7c7b..c62c4ff 100644
--- a/Desktop/HStation.Desktop.Xhs.Core/Program.cs
+++ b/Desktop/HStation.Desktop.Xhs.Core/Program.cs
@@ -20,6 +20,9 @@
             //    return;
             //}
 
+            //Yw.FileFolderZipHelper.Zip(@"C:\Users\admin\Desktop\居家办公工作\RevitTest", @"C:\Users\admin\Desktop\居家办公工作\RevitTest.ywrvt");
+
+
             //扫描全局DTO映射
             //TypeAdapterConfig.GlobalSettings.Scan(Assembly.Load("Yw.BLL.Auth.Core"), Assembly.Load("HStation.BLL.Xhs.Core"));
             DbFirstHelper.Initial();
diff --git a/HStation.Xhs.Core.sln b/HStation.Xhs.Core.sln
index cab89f5..cd23f77 100644
--- a/HStation.Xhs.Core.sln
+++ b/HStation.Xhs.Core.sln
@@ -55,13 +55,17 @@
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HStation.Dto.Core", "Dto\HStation.Dto.Core\HStation.Dto.Core.csproj", "{4BCDC547-079A-4CB6-824B-800B111380AD}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HStation.BLL.Core", "BLL\HStation.BLL.Core\HStation.BLL.Core.csproj", "{5D082C0C-FD9B-4BEE-B57F-6C3D1B9F0BB3}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HStation.BLL.Core", "BLL\HStation.BLL.Core\HStation.BLL.Core.csproj", "{5D082C0C-FD9B-4BEE-B57F-6C3D1B9F0BB3}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Application", "Application", "{276C57AF-5A9C-4A50-A79E-A5098D322FE9}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HStation.Application.Xhs.Core", "Application\HStation.Application.Xhs.Core\HStation.Application.Xhs.Core.csproj", "{784A568F-A01F-45FC-AACB-B80F87EA3ABA}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HStation.Application.Core", "Application\HStation.Application.Core\HStation.Application.Core.csproj", "{4724474E-66CD-4237-B3A0-085125AD2D8F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HStation.Application.Core", "Application\HStation.Application.Core\HStation.Application.Core.csproj", "{4724474E-66CD-4237-B3A0-085125AD2D8F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Component", "Component", "{0469F9DE-F12C-4B83-A871-A77A82DCB4C8}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yw.BIMFace.SDK.Core", "Component\Yw.BIMFace.SDK.Core\Yw.BIMFace.SDK.Core.csproj", "{D6D805ED-C848-4403-97AB-E86715B9E2DB}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -153,6 +157,10 @@
 		{4724474E-66CD-4237-B3A0-085125AD2D8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{4724474E-66CD-4237-B3A0-085125AD2D8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{4724474E-66CD-4237-B3A0-085125AD2D8F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D6D805ED-C848-4403-97AB-E86715B9E2DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D6D805ED-C848-4403-97AB-E86715B9E2DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D6D805ED-C848-4403-97AB-E86715B9E2DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D6D805ED-C848-4403-97AB-E86715B9E2DB}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -179,6 +187,7 @@
 		{5D082C0C-FD9B-4BEE-B57F-6C3D1B9F0BB3} = {4D3764D7-19DE-4C77-8F75-0EFB19D64B3F}
 		{784A568F-A01F-45FC-AACB-B80F87EA3ABA} = {276C57AF-5A9C-4A50-A79E-A5098D322FE9}
 		{4724474E-66CD-4237-B3A0-085125AD2D8F} = {276C57AF-5A9C-4A50-A79E-A5098D322FE9}
+		{D6D805ED-C848-4403-97AB-E86715B9E2DB} = {0469F9DE-F12C-4B83-A871-A77A82DCB4C8}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {E02989A8-9B6F-43E5-AACA-790328215089}
diff --git a/Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj b/Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj
index 4100b82..f53a1ff 100644
--- a/Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj
+++ b/Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj
@@ -7,7 +7,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.BLL.Hydro.Core" Version="3.0.0" />
+    <PackageReference Include="Yw.BLL.Hydro.Core" Version="3.0.2" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/Hydro/HStation.Hydro.Core/ParseHelper.cs b/Hydro/HStation.Hydro.Core/ParseHelper.cs
index 1336644..13b9931 100644
--- a/Hydro/HStation.Hydro.Core/ParseHelper.cs
+++ b/Hydro/HStation.Hydro.Core/ParseHelper.cs
@@ -8,7 +8,7 @@
         /// <summary>
         /// 浠嶳evit瑙f瀽
         /// </summary>
-        public static long FromRevit(HStation.Model.RevitModel revitModel)
+        public static Yw.Model.HydroModelInfo FromRevit(HStation.Model.RevitModel revitModel)
         {
             var hydro = new Yw.Model.HydroModelInfo();
             hydro.Name = revitModel.Name;
@@ -19,6 +19,7 @@
             hydro.TagName = null;
             hydro.Description = revitModel.Description;
 
+            //姘村簱
             if (revitModel.Reservoirs != null && revitModel.Reservoirs.Count > 0)
             {
                 hydro.Reservoirs = new List<Yw.Model.HydroReservoirInfo>();
@@ -32,15 +33,200 @@
                     reservoir.Description = revitReservoir.Description;
                     reservoir.Head = revitReservoir.Head;
                     reservoir.Pattern = revitReservoir.Pattern;
-                    reservoir.ScenePropValueList = new List<Yw.Model.HydroScenePropValuePureInfo>();
-
-
+                    var center = revitReservoir.BoundingBox.GetCenter();
+                    reservoir.Position2d = new Yw.Model.Hydro.Position2d(center.X, center.Y);
+                    reservoir.Position3d = new Yw.Model.Hydro.Position3d(center.X, center.Y, center.Z);
+                    reservoir.ScenePropValueList = revitReservoir.PropValueList?.Select(x => new Yw.Model.HydroScenePropValuePureInfo()
+                    {
+                        PropName = x.PropName,
+                        PropValue = x.PropValue
+                    }).ToList();
+                    hydro.Reservoirs.Add(reservoir);
                 }
-
-
             }
 
-            return default;
+            //姘存睜
+            if (revitModel.Tanks != null && revitModel.Tanks.Count > 0)
+            {
+                hydro.Tanks = new List<Yw.Model.HydroTankInfo>();
+                foreach (var revitTank in revitModel.Tanks)
+                {
+                    var tank = new Yw.Model.HydroTankInfo();
+                    tank.Catalog = Yw.Hydro.Catalog.Tank;
+                    tank.Name = revitTank.Name;
+                    tank.Code = revitTank.Code;
+                    tank.Flags = revitTank.Flags;
+                    tank.Description = revitTank.Description;
+                    tank.Elev = revitTank.Elev;
+                    tank.InitLevel = revitTank.InitLevel;
+                    tank.MinLevel = revitTank.MinLevel;
+                    tank.MaxLevel = revitTank.MaxLevel;
+                    tank.Diameter = revitTank.Diameter;
+                    tank.MinVol = revitTank.MinVol;
+                    tank.VolCurve = revitTank.VolCurve;
+                    var center = revitTank.BoundingBox.GetCenter();
+                    tank.Position2d = new Yw.Model.Hydro.Position2d(center.X, center.Y);
+                    tank.Position3d = new Yw.Model.Hydro.Position3d(center.X, center.Y, center.Z);
+                    tank.ScenePropValueList = revitTank.PropValueList?.Select(x => new Yw.Model.HydroScenePropValuePureInfo()
+                    {
+                        PropName = x.PropName,
+                        PropValue = x.PropValue
+                    }).ToList();
+                    hydro.Tanks.Add(tank);
+                }
+            }
+
+            //鎵╂暎鍣�
+            if (revitModel.Emitters != null && revitModel.Emitters.Count > 0)
+            {
+                hydro.Emitters = new List<Yw.Model.HydroEmitterInfo>();
+                foreach (var revitEmitter in revitModel.Emitters)
+                {
+                    var emitter = new Yw.Model.HydroEmitterInfo();
+                    emitter.Catalog = Yw.Hydro.Catalog.Emitter;
+                    emitter.Name = revitEmitter.Name;
+                    emitter.Code = revitEmitter.Code;
+                    emitter.Flags = revitEmitter.Flags;
+                    emitter.Description = revitEmitter.Description;
+                    emitter.EmitterType = revitEmitter.EmitterType;
+                    emitter.FlowCoefficient = revitEmitter.FlowCoefficient;
+                    var center = revitEmitter.BoundingBox.GetCenter();
+                    emitter.Position2d = new Yw.Model.Hydro.Position2d(center.X, center.Y);
+                    emitter.Position3d = new Yw.Model.Hydro.Position3d(center.X, center.Y, center.Z);
+                    emitter.ScenePropValueList = revitEmitter.PropValueList?.Select(x => new Yw.Model.HydroScenePropValuePureInfo()
+                    {
+                        PropName = x.PropName,
+                        PropValue = x.PropValue
+                    }).ToList();
+                    hydro.Emitters.Add(emitter);
+                }
+            }
+
+            //鑺傜偣
+            if (revitModel.Junctions != null && revitModel.Junctions.Count > 0)
+            {
+                hydro.Junctions = new List<Yw.Model.HydroJunctionInfo>();
+                foreach (var revitJunction in revitModel.Junctions)
+                {
+                    var junction = new Yw.Model.HydroJunctionInfo();
+                    junction.Catalog = Yw.Hydro.Catalog.Junction;
+                    junction.Name = revitJunction.Name;
+                    junction.Code = revitJunction.Code;
+                    junction.Flags = revitJunction.Flags;
+                    junction.Description = revitJunction.Description;
+                    junction.Elev = revitJunction.Elev;
+                    junction.Demand = revitJunction.Demand;
+                    junction.Pattern = revitJunction.Pattern;
+                    var center = revitJunction.BoundingBox.GetCenter();
+                    junction.Position2d = new Yw.Model.Hydro.Position2d(center.X, center.Y);
+                    junction.Position3d = new Yw.Model.Hydro.Position3d(center.X, center.Y, center.Z);
+                    junction.ScenePropValueList = revitJunction.PropValueList?.Select(x => new Yw.Model.HydroScenePropValuePureInfo()
+                    {
+                        PropName = x.PropName,
+                        PropValue = x.PropValue
+                    }).ToList();
+                    hydro.Junctions.Add(junction);
+                }
+            }
+
+            //绠¢亾
+            if (revitModel.Pipes != null && revitModel.Pipes.Count > 0)
+            {
+                hydro.Pipes = new List<Yw.Model.HydroPipeInfo>();
+                foreach (var revitPipe in revitModel.Pipes)
+                {
+                    var pipe = new Yw.Model.HydroPipeInfo();
+                    pipe.Catalog = Yw.Hydro.Catalog.Pipe;
+                    pipe.Name = revitPipe.Name;
+                    pipe.Code = revitPipe.Code;
+                    pipe.Flags = revitPipe.Flags;
+                    pipe.Description = revitPipe.Description;
+                    pipe.StartCode = revitPipe.StartCode;
+                    pipe.EndCode = revitPipe.EndCode;
+                    pipe.Diameter = revitPipe.Diameter;
+                    pipe.Length = revitPipe.Length;
+                    pipe.Roughness = revitPipe.Roughness;
+                    pipe.MinorLoss = revitPipe.MinorLoss;
+                    pipe.PipeStatus = revitPipe.PipeStatus;
+                    pipe.ScenePropValueList = revitPipe.PropValueList?.Select(x => new Yw.Model.HydroScenePropValuePureInfo()
+                    {
+                        PropName = x.PropName,
+                        PropValue = x.PropValue
+                    }).ToList();
+                    hydro.Pipes.Add(pipe);
+                }
+            }
+
+            //姘存车
+            if (revitModel.Pumps != null && revitModel.Pumps.Count > 0)
+            {
+                hydro.Pumps = new List<Yw.Model.HydroPumpInfo>();
+                foreach (var revitPump in revitModel.Pumps)
+                {
+                    var pump = new Yw.Model.HydroPumpInfo();
+                    pump.Catalog = Yw.Hydro.Catalog.Pump;
+                    pump.Name = revitPump.Name;
+                    pump.Code = revitPump.Code;
+                    pump.Flags = revitPump.Flags;
+                    pump.Description = revitPump.Description;
+                    pump.StartCode = revitPump.StartCode;
+                    pump.EndCode = revitPump.EndCode;
+                    pump.Power = revitPump.Power;
+                    pump.Head = revitPump.Head;
+                    pump.Speed = revitPump.Speed;
+                    pump.Pattern = revitPump.Pattern;
+                    pump.ScenePropValueList = revitPump.PropValueList?.Select(x => new Yw.Model.HydroScenePropValuePureInfo()
+                    {
+                        PropName = x.PropName,
+                        PropValue = x.PropValue
+                    }).ToList();
+                    hydro.Pumps.Add(pump);
+                }
+            }
+
+            //闃�闂�
+            if (revitModel.Valves != null && revitModel.Valves.Count > 0)
+            {
+                hydro.Valves = new List<Yw.Model.HydroValveInfo>();
+                foreach (var revitValve in revitModel.Valves)
+                {
+                    var valve = new Yw.Model.HydroValveInfo();
+                    valve.Catalog = Yw.Hydro.Catalog.Valve;
+                    valve.Name = revitValve.Name;
+                    valve.Code = revitValve.Code;
+                    valve.Flags = revitValve.Flags;
+                    valve.Description = revitValve.Description;
+                    valve.StartCode = revitValve.StartCode;
+                    valve.EndCode = revitValve.EndCode;
+                    valve.Diameter = revitValve.Diameter;
+                    valve.MinorLoss = revitValve.MinorLoss;
+                    valve.ValveType = revitValve.ValveType;
+                    valve.ValveSetting = revitValve.ValveSetting;
+                    valve.ScenePropValueList = revitValve.PropValueList?.Select(x => new Yw.Model.HydroScenePropValuePureInfo()
+                    {
+                        PropName = x.PropName,
+                        PropValue = x.PropValue
+                    }).ToList();
+                    hydro.Valves.Add(valve);
+                }
+            }
+
+            //瑁呴グ浠�
+            if (revitModel.Decorators != null && revitModel.Decorators.Count > 0)
+            {
+                hydro.Decorators = new List<Yw.Model.HydroDecoratorInfo>();
+                foreach (var revitDecorator in revitModel.Decorators)
+                {
+                    var decorator = new Yw.Model.HydroDecoratorInfo();
+                    decorator.Name = revitDecorator.Name;
+                    decorator.Category = revitDecorator.Category;
+                    decorator.Decoration = revitDecorator.Decoration;
+                    decorator.Description = revitDecorator.Description;
+                    hydro.Decorators.Add(decorator);
+                }
+            }
+
+            return hydro;
         }
     }
 }
diff --git a/Service/HStation.Service.Revit.Core/02-parter/00-core/RevitBoundingBox.cs b/Service/HStation.Service.Revit.Core/02-parter/00-core/RevitBoundingBox.cs
index e076b83..16205ba 100644
--- a/Service/HStation.Service.Revit.Core/02-parter/00-core/RevitBoundingBox.cs
+++ b/Service/HStation.Service.Revit.Core/02-parter/00-core/RevitBoundingBox.cs
@@ -14,5 +14,16 @@
         /// 
         /// </summary>
         public RevitPosition Max { get; set; }
+
+        /// <summary>
+        /// 鑾峰彇涓績浣嶇疆
+        /// </summary>
+        public RevitPosition GetCenter()
+        {
+            var x = (this.Max.X - this.Min.X) / 2;
+            var y = (this.Max.Y - this.Min.Y) / 2;
+            var z = (this.Max.Z - this.Min.Z) / 2;
+            return new RevitPosition(x, y, z);
+        }
     }
 }
diff --git a/Service/HStation.Service.Revit.Core/02-parter/00-core/RevitPosition.cs b/Service/HStation.Service.Revit.Core/02-parter/00-core/RevitPosition.cs
index 6d997a3..54d8c9f 100644
--- a/Service/HStation.Service.Revit.Core/02-parter/00-core/RevitPosition.cs
+++ b/Service/HStation.Service.Revit.Core/02-parter/00-core/RevitPosition.cs
@@ -6,6 +6,37 @@
     public class RevitPosition
     {
         /// <summary>
+        /// 
+        /// </summary>
+        public RevitPosition() { }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="x"></param>
+        /// <param name="y"></param>
+        /// <param name="z"></param>
+        public RevitPosition(double x, double y, double z)
+        {
+            X = x;
+            Y = y;
+            Z = z;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="rhs"></param>
+        public RevitPosition(RevitPosition rhs)
+        {
+            this.X = rhs.X;
+            this.Y = rhs.Y;
+            this.Z = rhs.Z;
+        }
+
+
+
+        /// <summary>
         /// X
         /// </summary>
         public double X { get; set; }
diff --git a/Service/HStation.Service.Xhs.Core/00-core/DataType.cs b/Service/HStation.Service.Xhs.Core/00-core/DataType.cs
index e99b246..f096ed6 100644
--- a/Service/HStation.Service.Xhs.Core/00-core/DataType.cs
+++ b/Service/HStation.Service.Xhs.Core/00-core/DataType.cs
@@ -13,7 +13,7 @@
         /// <summary>
         /// 椤圭洰绔�
         /// </summary>
-        public const string XhsProjectItem = "xhs-project-site";
+        public const string XhsProjectSite = "xhs-project-site";
 
     }
 }
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.Designer.cs
index d29ce8c..f6cfedc 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.Designer.cs
@@ -32,6 +32,10 @@
             DevExpress.XtraLayout.ColumnDefinition columnDefinition2 = new DevExpress.XtraLayout.ColumnDefinition();
             DevExpress.XtraLayout.ColumnDefinition columnDefinition3 = new DevExpress.XtraLayout.ColumnDefinition();
             DevExpress.XtraLayout.RowDefinition rowDefinition1 = new DevExpress.XtraLayout.RowDefinition();
+            DevExpress.XtraLayout.RowDefinition rowDefinition2 = new DevExpress.XtraLayout.RowDefinition();
+            DevExpress.XtraEditors.TileItemElement tileItemElement1 = new DevExpress.XtraEditors.TileItemElement();
+            ComponentResourceManager resources = new ComponentResourceManager(typeof(HomeXhsProjectPage));
+            DevExpress.XtraEditors.TileItemElement tileItemElement2 = new DevExpress.XtraEditors.TileItemElement();
             layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
             mapViewProjectListContainer1 = new MapViewProjectListContainer();
             homeXhsProjectPropertyCtrl1 = new HomeXhsProjectPropertyCtrl();
@@ -40,22 +44,30 @@
             layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            tileControl1 = new DevExpress.XtraEditors.TileControl();
+            layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+            tileGroup1 = new DevExpress.XtraEditors.TileGroup();
+            tileItemForProject = new DevExpress.XtraEditors.TileItem();
+            tilItemForPumpMain = new DevExpress.XtraEditors.TileItem();
             ((ISupportInitialize)layoutControl1).BeginInit();
             layoutControl1.SuspendLayout();
             ((ISupportInitialize)Root).BeginInit();
             ((ISupportInitialize)layoutControlItem1).BeginInit();
             ((ISupportInitialize)layoutControlItem2).BeginInit();
             ((ISupportInitialize)layoutControlItem3).BeginInit();
+            ((ISupportInitialize)layoutControlItem4).BeginInit();
             SuspendLayout();
             // 
             // layoutControl1
             // 
+            layoutControl1.Controls.Add(tileControl1);
             layoutControl1.Controls.Add(mapViewProjectListContainer1);
             layoutControl1.Controls.Add(homeXhsProjectPropertyCtrl1);
             layoutControl1.Controls.Add(homeXhsProjectTreeListCtrl1);
             layoutControl1.Dock = DockStyle.Fill;
             layoutControl1.Location = new Point(0, 0);
             layoutControl1.Name = "layoutControl1";
+            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(506, 387, 650, 400);
             layoutControl1.Root = Root;
             layoutControl1.Size = new Size(1063, 677);
             layoutControl1.TabIndex = 0;
@@ -63,25 +75,26 @@
             // 
             // mapViewProjectListContainer1
             // 
-            mapViewProjectListContainer1.Location = new Point(252, 2);
+            mapViewProjectListContainer1.Location = new Point(252, 122);
             mapViewProjectListContainer1.Margin = new Padding(3, 2, 3, 2);
             mapViewProjectListContainer1.Name = "mapViewProjectListContainer1";
-            mapViewProjectListContainer1.Size = new Size(559, 673);
+            mapViewProjectListContainer1.Size = new Size(559, 553);
             mapViewProjectListContainer1.TabIndex = 6;
             // 
             // homeXhsProjectPropertyCtrl1
             // 
-            homeXhsProjectPropertyCtrl1.Location = new Point(815, 2);
+            homeXhsProjectPropertyCtrl1.Location = new Point(815, 122);
             homeXhsProjectPropertyCtrl1.Name = "homeXhsProjectPropertyCtrl1";
             homeXhsProjectPropertyCtrl1.SelectedObject = null;
-            homeXhsProjectPropertyCtrl1.Size = new Size(246, 673);
+            homeXhsProjectPropertyCtrl1.Size = new Size(246, 553);
             homeXhsProjectPropertyCtrl1.TabIndex = 5;
             // 
             // homeXhsProjectTreeListCtrl1
             // 
-            homeXhsProjectTreeListCtrl1.Location = new Point(2, 2);
+            homeXhsProjectTreeListCtrl1.Location = new Point(2, 122);
             homeXhsProjectTreeListCtrl1.Name = "homeXhsProjectTreeListCtrl1";
-            homeXhsProjectTreeListCtrl1.Size = new Size(246, 673);
+            homeXhsProjectTreeListCtrl1.Padding = new Padding(10);
+            homeXhsProjectTreeListCtrl1.Size = new Size(246, 553);
             homeXhsProjectTreeListCtrl1.TabIndex = 4;
             homeXhsProjectTreeListCtrl1.SelectProjectEvent += homeXhsProjectTreeListCtrl1_SelectProjectEvent;
             // 
@@ -89,7 +102,7 @@
             // 
             Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
             Root.GroupBordersVisible = false;
-            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem2, layoutControlItem3 });
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem2, layoutControlItem3, layoutControlItem4 });
             Root.LayoutMode = DevExpress.XtraLayout.Utils.LayoutMode.Table;
             Root.Name = "Root";
             columnDefinition1.SizeType = SizeType.Absolute;
@@ -99,9 +112,11 @@
             columnDefinition3.SizeType = SizeType.Absolute;
             columnDefinition3.Width = 250D;
             Root.OptionsTableLayoutGroup.ColumnDefinitions.AddRange(new DevExpress.XtraLayout.ColumnDefinition[] { columnDefinition1, columnDefinition2, columnDefinition3 });
-            rowDefinition1.Height = 100D;
-            rowDefinition1.SizeType = SizeType.Percent;
-            Root.OptionsTableLayoutGroup.RowDefinitions.AddRange(new DevExpress.XtraLayout.RowDefinition[] { rowDefinition1 });
+            rowDefinition1.Height = 120D;
+            rowDefinition1.SizeType = SizeType.Absolute;
+            rowDefinition2.Height = 100D;
+            rowDefinition2.SizeType = SizeType.Percent;
+            Root.OptionsTableLayoutGroup.RowDefinitions.AddRange(new DevExpress.XtraLayout.RowDefinition[] { rowDefinition1, rowDefinition2 });
             Root.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
             Root.Size = new Size(1063, 677);
             Root.TextVisible = false;
@@ -109,31 +124,78 @@
             // layoutControlItem1
             // 
             layoutControlItem1.Control = homeXhsProjectTreeListCtrl1;
-            layoutControlItem1.Location = new Point(0, 0);
+            layoutControlItem1.Location = new Point(0, 120);
             layoutControlItem1.Name = "layoutControlItem1";
-            layoutControlItem1.Size = new Size(250, 677);
+            layoutControlItem1.OptionsTableLayoutItem.RowIndex = 1;
+            layoutControlItem1.Size = new Size(250, 557);
             layoutControlItem1.TextSize = new Size(0, 0);
             layoutControlItem1.TextVisible = false;
             // 
             // layoutControlItem2
             // 
             layoutControlItem2.Control = homeXhsProjectPropertyCtrl1;
-            layoutControlItem2.Location = new Point(813, 0);
+            layoutControlItem2.Location = new Point(813, 120);
             layoutControlItem2.Name = "layoutControlItem2";
             layoutControlItem2.OptionsTableLayoutItem.ColumnIndex = 2;
-            layoutControlItem2.Size = new Size(250, 677);
+            layoutControlItem2.OptionsTableLayoutItem.RowIndex = 1;
+            layoutControlItem2.Size = new Size(250, 557);
             layoutControlItem2.TextSize = new Size(0, 0);
             layoutControlItem2.TextVisible = false;
             // 
             // layoutControlItem3
             // 
             layoutControlItem3.Control = mapViewProjectListContainer1;
-            layoutControlItem3.Location = new Point(250, 0);
+            layoutControlItem3.Location = new Point(250, 120);
             layoutControlItem3.Name = "layoutControlItem3";
             layoutControlItem3.OptionsTableLayoutItem.ColumnIndex = 1;
-            layoutControlItem3.Size = new Size(563, 677);
+            layoutControlItem3.OptionsTableLayoutItem.RowIndex = 1;
+            layoutControlItem3.Size = new Size(563, 557);
             layoutControlItem3.TextSize = new Size(0, 0);
             layoutControlItem3.TextVisible = false;
+            // 
+            // tileControl1
+            // 
+            tileControl1.Groups.Add(tileGroup1);
+            tileControl1.Location = new Point(2, 2);
+            tileControl1.MaxId = 2;
+            tileControl1.Name = "tileControl1";
+            tileControl1.Size = new Size(1059, 116);
+            tileControl1.TabIndex = 7;
+            tileControl1.Text = "tileControl1";
+            // 
+            // layoutControlItem4
+            // 
+            layoutControlItem4.Control = tileControl1;
+            layoutControlItem4.Location = new Point(0, 0);
+            layoutControlItem4.Name = "layoutControlItem4";
+            layoutControlItem4.OptionsTableLayoutItem.ColumnSpan = 3;
+            layoutControlItem4.Size = new Size(1063, 120);
+            layoutControlItem4.TextSize = new Size(0, 0);
+            layoutControlItem4.TextVisible = false;
+            // 
+            // tileGroup1
+            // 
+            tileGroup1.Items.Add(tileItemForProject);
+            tileGroup1.Items.Add(tilItemForPumpMain);
+            tileGroup1.Name = "tileGroup1";
+            tileGroup1.Text = "tileGroup1";
+            // 
+            // tileItemForProject
+            // 
+            tileItemElement1.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("resource.SvgImage");
+            tileItemElement1.Text = "椤圭洰鎬绘暟閲�";
+            tileItemForProject.Elements.Add(tileItemElement1);
+            tileItemForProject.Id = 0;
+            tileItemForProject.ItemSize = DevExpress.XtraEditors.TileItemSize.Large;
+            tileItemForProject.Name = "tileItemForProject";
+            // 
+            // tilItemForPumpMain
+            // 
+            tileItemElement2.Text = "姘存车鍨嬪彿鎬绘暟閲�";
+            tilItemForPumpMain.Elements.Add(tileItemElement2);
+            tilItemForPumpMain.Id = 1;
+            tilItemForPumpMain.ItemSize = DevExpress.XtraEditors.TileItemSize.Large;
+            tilItemForPumpMain.Name = "tilItemForPumpMain";
             // 
             // HomeXhsProjectPage
             // 
@@ -150,6 +212,7 @@
             ((ISupportInitialize)layoutControlItem1).EndInit();
             ((ISupportInitialize)layoutControlItem2).EndInit();
             ((ISupportInitialize)layoutControlItem3).EndInit();
+            ((ISupportInitialize)layoutControlItem4).EndInit();
             ResumeLayout(false);
         }
 
@@ -163,5 +226,10 @@
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+        private DevExpress.XtraEditors.TileControl tileControl1;
+        private DevExpress.XtraEditors.TileGroup tileGroup1;
+        private DevExpress.XtraEditors.TileItem tileItemForProject;
+        private DevExpress.XtraEditors.TileItem tilItemForPumpMain;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
     }
 }
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.resx
index af32865..3738beb 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.resx
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.resx
@@ -117,4 +117,22 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <assembly alias="DevExpress.Data.v23.2" name="DevExpress.Data.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
+  <data name="resource.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAFECAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iX3gzNF9fVHJhZmZpY19MaWdodHMiIHN0eWxlPSJlbmFibGUtYmFja2dy
+        b3VuZDpuZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5ZZWxsb3d7Zmls
+        bDojRkZCMTE1O30KCS5SZWR7ZmlsbDojRDExQzFDO30KCS5HcmVlbntmaWxsOiMwMzlDMjM7fQoJLkJs
+        YWNre2ZpbGw6IzcyNzI3Mjt9Cjwvc3R5bGU+DQogIDxjaXJjbGUgY3g9IjkiIGN5PSI5IiByPSI3IiBj
+        bGFzcz0iR3JlZW4iIC8+DQogIDxjaXJjbGUgY3g9IjkiIGN5PSIyNSIgcj0iNyIgY2xhc3M9IlJlZCIg
+        Lz4NCiAgPGNpcmNsZSBjeD0iMjUiIGN5PSI5IiByPSI3IiBjbGFzcz0iWWVsbG93IiAvPg0KICA8Y2ly
+        Y2xlIGN4PSIyNSIgY3k9IjI1IiByPSI3IiBjbGFzcz0iQmxhY2siIC8+DQo8L3N2Zz4L
+</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectViewModel.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectViewModel.cs
index 626bc71..38ec3bb 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectViewModel.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectViewModel.cs
@@ -63,13 +63,53 @@
 
         #endregion
 
-        #region 绗洓姝ョ敓鎴愰」鐩�
+        #region 绗洓姝ヨ嚜鍔ㄧ敓鎴愰」鐩�
+
+        /// <summary>
+        /// 姘村姏妯″瀷id
+        /// </summary>
+        public long? HydroID { get; set; }
+
+        /// <summary>
+        /// 椤圭洰id
+        /// </summary>
+        public long? ProjectID { get; set; }
+
+        /// <summary>
+        /// 椤圭洰绔檌d
+        /// </summary>
+        public long? ProjectSiteID { get; set; }
+
+        /// <summary>
+        /// 姘村姏妯″瀷鍏宠仈id
+        /// </summary>
+        public long? HydroRelationID { get; set; }
+
+        /// <summary>
+        /// 鍦板浘淇℃伅id
+        /// </summary>
+        public long? MapInfoID { get; set; }
+
+        /// <summary>
+        /// bimfaceid
+        /// </summary>
+        public long? BimfaceId { get; set; }
+
+        /// <summary>
+        /// bimface 鏂囦欢id
+        /// </summary>
+        public long? BimfaceFileID { get; set; }
+
+        /// <summary>
+        /// bimface 鏂囦欢鍏宠仈id
+        /// </summary>
+        public long? BimfaceFileRelationID { get; set; }
 
 
 
         #endregion
 
-        #region 绗簲姝ラ」鐩畬鎴�
+        #region 绗簲姝ラ」鐩鍏ュ畬鎴�
 
 
 
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/02-ProjectInfo/InputXhsProjectInfoWizardPage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/02-ProjectInfo/InputXhsProjectInfoWizardPage.cs
index 529ca1f..5d1b6b8 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/02-ProjectInfo/InputXhsProjectInfoWizardPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/02-ProjectInfo/InputXhsProjectInfoWizardPage.cs
@@ -27,9 +27,9 @@
                 return;
             }
             _vm = t;
+            _isInitialize = true;
             var allFlagList = await _bllFlag.Value.GetFlagListBySysType(HStation.Xhs.DataType.XhsProject);
             this.setFlagsEditCtrl1.SetBindingData(allFlagList, null);
-            _isInitialize = true;
         }
 
         /// <summary>
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/GenerateXhsProjectWizardPage.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/GenerateXhsProjectWizardPage.Designer.cs
index bfd820d..352760a 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/GenerateXhsProjectWizardPage.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/GenerateXhsProjectWizardPage.Designer.cs
@@ -29,18 +29,18 @@
         private void InitializeComponent()
         {
             layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
-            Root = new DevExpress.XtraLayout.LayoutControlGroup();
-            listBoxControl1 = new DevExpress.XtraEditors.ListBoxControl();
-            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
             progressBarControl1 = new DevExpress.XtraEditors.ProgressBarControl();
-            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            listBoxControl1 = new DevExpress.XtraEditors.ListBoxControl();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            itemForProgress = new DevExpress.XtraLayout.LayoutControlItem();
             ((ISupportInitialize)layoutControl1).BeginInit();
             layoutControl1.SuspendLayout();
-            ((ISupportInitialize)Root).BeginInit();
-            ((ISupportInitialize)listBoxControl1).BeginInit();
-            ((ISupportInitialize)layoutControlItem1).BeginInit();
             ((ISupportInitialize)progressBarControl1.Properties).BeginInit();
-            ((ISupportInitialize)layoutControlItem2).BeginInit();
+            ((ISupportInitialize)listBoxControl1).BeginInit();
+            ((ISupportInitialize)Root).BeginInit();
+            ((ISupportInitialize)layoutControlItem1).BeginInit();
+            ((ISupportInitialize)itemForProgress).BeginInit();
             SuspendLayout();
             // 
             // layoutControl1
@@ -56,22 +56,35 @@
             layoutControl1.TabIndex = 0;
             layoutControl1.Text = "layoutControl1";
             // 
+            // progressBarControl1
+            // 
+            progressBarControl1.Location = new Point(12, 12);
+            progressBarControl1.Name = "progressBarControl1";
+            progressBarControl1.Properties.FlowAnimationEnabled = true;
+            progressBarControl1.Properties.ShowTitle = true;
+            progressBarControl1.Size = new Size(697, 18);
+            progressBarControl1.StyleController = layoutControl1;
+            progressBarControl1.TabIndex = 5;
+            // 
+            // listBoxControl1
+            // 
+            listBoxControl1.ItemHeight = 25;
+            listBoxControl1.Location = new Point(12, 34);
+            listBoxControl1.Name = "listBoxControl1";
+            listBoxControl1.SelectionMode = SelectionMode.None;
+            listBoxControl1.ShowFocusRect = false;
+            listBoxControl1.Size = new Size(697, 459);
+            listBoxControl1.StyleController = layoutControl1;
+            listBoxControl1.TabIndex = 4;
+            // 
             // Root
             // 
             Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
             Root.GroupBordersVisible = false;
-            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem2 });
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, itemForProgress });
             Root.Name = "Root";
             Root.Size = new Size(721, 505);
             Root.TextVisible = false;
-            // 
-            // listBoxControl1
-            // 
-            listBoxControl1.Location = new Point(12, 34);
-            listBoxControl1.Name = "listBoxControl1";
-            listBoxControl1.Size = new Size(697, 459);
-            listBoxControl1.StyleController = layoutControl1;
-            listBoxControl1.TabIndex = 4;
             // 
             // layoutControlItem1
             // 
@@ -82,37 +95,29 @@
             layoutControlItem1.TextSize = new Size(0, 0);
             layoutControlItem1.TextVisible = false;
             // 
-            // progressBarControl1
+            // itemForProgress
             // 
-            progressBarControl1.Location = new Point(12, 12);
-            progressBarControl1.Name = "progressBarControl1";
-            progressBarControl1.Size = new Size(697, 18);
-            progressBarControl1.StyleController = layoutControl1;
-            progressBarControl1.TabIndex = 5;
+            itemForProgress.Control = progressBarControl1;
+            itemForProgress.Location = new Point(0, 0);
+            itemForProgress.Name = "itemForProgress";
+            itemForProgress.Size = new Size(701, 22);
+            itemForProgress.TextSize = new Size(0, 0);
+            itemForProgress.TextVisible = false;
             // 
-            // layoutControlItem2
-            // 
-            layoutControlItem2.Control = progressBarControl1;
-            layoutControlItem2.Location = new Point(0, 0);
-            layoutControlItem2.Name = "layoutControlItem2";
-            layoutControlItem2.Size = new Size(701, 22);
-            layoutControlItem2.TextSize = new Size(0, 0);
-            layoutControlItem2.TextVisible = false;
-            // 
-            // GenerateXhsProjectCtrl
+            // GenerateXhsProjectWizardPage
             // 
             AutoScaleDimensions = new SizeF(7F, 14F);
             AutoScaleMode = AutoScaleMode.Font;
             Controls.Add(layoutControl1);
-            Name = "GenerateXhsProjectCtrl";
+            Name = "GenerateXhsProjectWizardPage";
             Size = new Size(721, 505);
             ((ISupportInitialize)layoutControl1).EndInit();
             layoutControl1.ResumeLayout(false);
-            ((ISupportInitialize)Root).EndInit();
-            ((ISupportInitialize)listBoxControl1).EndInit();
-            ((ISupportInitialize)layoutControlItem1).EndInit();
             ((ISupportInitialize)progressBarControl1.Properties).EndInit();
-            ((ISupportInitialize)layoutControlItem2).EndInit();
+            ((ISupportInitialize)listBoxControl1).EndInit();
+            ((ISupportInitialize)Root).EndInit();
+            ((ISupportInitialize)layoutControlItem1).EndInit();
+            ((ISupportInitialize)itemForProgress).EndInit();
             ResumeLayout(false);
         }
 
@@ -123,6 +128,6 @@
         private DevExpress.XtraEditors.ListBoxControl listBoxControl1;
         private DevExpress.XtraLayout.LayoutControlGroup Root;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
-        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraLayout.LayoutControlItem itemForProgress;
     }
 }
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/GenerateXhsProjectWizardPage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/GenerateXhsProjectWizardPage.cs
index a241bb1..325cb00 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/GenerateXhsProjectWizardPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/GenerateXhsProjectWizardPage.cs
@@ -1,58 +1,114 @@
-锘縰sing DevExpress.XtraEditors;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace HStation.WinFrmUI
+锘縩amespace HStation.WinFrmUI
 {
     public partial class GenerateXhsProjectWizardPage : DevExpress.XtraEditors.XtraUserControl, IWizardPage<ImportXhsProjectViewModel>
     {
         public GenerateXhsProjectWizardPage()
         {
             InitializeComponent();
+            this.layoutControl1.SetupLayoutControl();
         }
 
-        public bool AllowPrev => throw new NotImplementedException();
-
-        public bool AllowNext => throw new NotImplementedException();
-
-        public bool AllowCancel => throw new NotImplementedException();
-
-        public bool AllowComplete => throw new NotImplementedException();
-
-        public bool IsInitialize => throw new NotImplementedException();
-
+        /// <summary>
+        /// 鐘舵�佹敼鍙樹簨浠�
+        /// </summary>
         public event Action PageStateChangedEvent;
+        private bool _isInitialize = false;//鏄惁鍒濆鍖�
+        private ImportXhsProjectViewModel _vm = null;//鎿嶄綔瀵硅薄
 
-        public bool CanCancel()
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public async void InitialPage(ImportXhsProjectViewModel vm)
         {
-            throw new NotImplementedException();
+            if (_isInitialize)
+            {
+                return;
+            }
+            _vm = vm;
+            _isInitialize = await ImportXhsProjectHelper.Import(vm, (msg) =>
+             {
+                 this.listBoxControl1.Items.Add(msg);
+             }, (max, current) =>
+             {
+                 this.progressBarControl1.Properties.Maximum = max;
+                 this.progressBarControl1.Position = current;
+                 // this.progressBarControl1.Properties.Step = current;
+                 // this.progressBarControl1.PerformStep();
+             });
+
+            this.PageStateChangedEvent?.Invoke();
         }
 
-        public bool CanComplete()
+        /// <summary>
+        /// 鍏佽涓婁竴姝�
+        /// </summary>
+        public bool AllowPrev
         {
-            throw new NotImplementedException();
+            get { return false; }
         }
 
-        public bool CanNext()
+        /// <summary>
+        /// 鍏佽涓嬩竴姝�
+        /// </summary>
+        public bool AllowNext
         {
-            throw new NotImplementedException();
+            get { return _isInitialize; }
         }
 
+        /// <summary>
+        /// 鍏佽鍙栨秷
+        /// </summary>
+        public bool AllowCancel
+        {
+            get { return false; }
+        }
+
+        /// <summary>
+        /// 鍏佽瀹屾垚
+        /// </summary>
+        public bool AllowComplete
+        {
+            get { return false; }
+        }
+
+        /// <summary>
+        /// 鑳藉惁涓婁竴姝�
+        /// </summary>
+        /// <returns></returns>
         public bool CanPrev()
         {
-            throw new NotImplementedException();
+            return false;
         }
 
-        public void InitialPage(ImportXhsProjectViewModel t)
+        /// <summary>
+        /// 鑳藉惁涓嬩竴姝�
+        /// </summary>
+        public bool CanNext()
         {
-            throw new NotImplementedException();
+            return _isInitialize;
         }
+
+        /// <summary>
+        /// 鑳藉惁鍙栨秷
+        /// </summary>
+        public bool CanCancel()
+        {
+            return false;
+        }
+
+        /// <summary>
+        /// 鑳藉惁瀹屾垚
+        /// </summary>
+        public bool CanComplete()
+        {
+            return false;
+        }
+
+
+
+
+
+
     }
 }
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/ImportXhsProjectHelper.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/ImportXhsProjectHelper.cs
index 2fd887d..c6d11f5 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/ImportXhsProjectHelper.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/ImportXhsProjectHelper.cs
@@ -1,11 +1,13 @@
-锘縩amespace HStation.WinFrmUI
+锘縰sing DevExpress.XtraScheduler.VCalendar;
+
+namespace HStation.WinFrmUI
 {
     /// <summary>
     /// 
     /// </summary>
     public class ImportXhsProjectHelper
     {
-        private const string _tempFolder = "project-import-temp";
+        private const string _tempFolder = "ImportProjectTemp";//瀵煎叆椤圭洰涓存椂鏂囦欢澶�
 
 
         /// <summary>
@@ -17,50 +19,85 @@
         /// <returns></returns>
         public static async Task<bool> Import(ImportXhsProjectViewModel vm, Action<string> feedBackMsg, Action<int, int> feedBackProgress)
         {
-            #region 鏂囦欢瑙f瀽
 
-            var tempFolderPath = Path.Combine(Yw.Service.ConfigHelper.DataPath, HStation.Settings.XhsParasHelper.Xhs.DataFolder, _tempFolder);
-            var bol = Yw.FileFolderZipHelper.UnZip(vm.ZipFile, tempFolderPath, null);
-            if (!bol)
-            {
-                feedBackMsg?.Invoke("妯″瀷鏂囦欢瑙f瀽澶辫触");
-                return bol;
-            }
+            #region 涓存椂鏂囦欢澶勭悊
 
-            var tempDirectoryInfo = new DirectoryInfo(tempFolderPath);
-            var allFileInfoList = tempDirectoryInfo.GetFiles();
-            if (allFileInfoList == null || allFileInfoList.Count() < 1)
+            var tempFolder = Path.Combine(Yw.Service.ConfigHelper.DataPath, HStation.Settings.XhsParasHelper.Xhs.DataFolder, _tempFolder);
+            //濡傛灉瀛樺湪涓存椂鏂囦欢澶�
+            if (Directory.Exists(tempFolder))
             {
-                feedBackMsg?.Invoke("妯″瀷鏂囦欢瑙f瀽澶辫触");
-                return bol;
+                //鍒犻櫎涓存椂鏂囦欢澶瑰強瀛愮洰褰曚笌鏂囦欢
+                Directory.Delete(tempFolder, true);
             }
+            //鍒涘缓涓存椂鏂囦欢澶�
+            Directory.CreateDirectory(tempFolder);
 
             #endregion
 
-            #region 姘村姏妯″瀷
+            #region 鍘嬬缉鏂囦欢瑙f瀽
 
+            feedBackMsg?.Invoke("姝e湪瑙f瀽妯″瀷鏂囦欢...");
+            var bol = Yw.FileFolderZipHelper.UnZip(vm.ZipFile, tempFolder, null);
+            if (!bol)
+            {
+                feedBackMsg?.Invoke("妯″瀷鏂囦欢瑙f瀽澶辫触锛侊紒锛�");
+                return bol;
+            }
+
+            var tempFolderInfo = new DirectoryInfo(tempFolder);
+            var allFileInfoList = tempFolderInfo.GetFiles();
+            if (allFileInfoList == null || allFileInfoList.Count() < 1)
+            {
+                feedBackMsg?.Invoke("妯″瀷鏂囦欢瑙f瀽澶辫触锛侊紒锛�");
+                return bol;
+            }
+
+            feedBackMsg?.Invoke("妯″瀷鏂囦欢瑙f瀽鎴愬姛銆傘�傘��");
+
+            feedBackProgress?.Invoke(100, 10);
+
+            #endregion
+
+            #region 姘村姏缁撴瀯鏂囦欢
+
+            feedBackMsg?.Invoke("姝e湪瑙f瀽姘村姏缁撴瀯鏂囦欢...");
             var jsonFileInfo = allFileInfoList.Where(x => x.Extension == ".json").FirstOrDefault();
             if (jsonFileInfo == null)
             {
-                feedBackMsg?.Invoke("姘村姏缁撴瀯鏂囦欢瑙f瀽澶辫触");
+                feedBackMsg?.Invoke("姘村姏缁撴瀯鏂囦欢瑙f瀽澶辫触锛侊紒锛�");
                 return false;
             }
 
             var jsonText = File.ReadAllText(jsonFileInfo.FullName);
             var revitModel = JsonHelper.Json2Object<HStation.Model.RevitModel>(jsonText);
-            var hydroId = HStation.Hydro.ParseHelper.FromRevit(revitModel);
-            if (hydroId < 1)
+            var hydroInfo = HStation.Hydro.ParseHelper.FromRevit(revitModel);
+            if (hydroInfo == null)
             {
-                feedBackMsg?.Invoke("姘村姏缁撴瀯鏂囦欢瑙f瀽澶辫触");
+                feedBackMsg?.Invoke("姘村姏缁撴瀯鏂囦欢瑙f瀽澶辫触锛侊紒锛�");
                 return false;
             }
 
+            var bllHydro = new Lazy<Yw.BLL.HydroModelInfo>(() => new Yw.BLL.HydroModelInfo());
+            var hydroId = await bllHydro.Value.Save(hydroInfo);
+            if (hydroId < 1)
+            {
+                feedBackMsg?.Invoke("姘村姏缁撴瀯淇濆瓨澶辫触锛侊紒锛�");
+                return false;
+            }
+
+            feedBackMsg?.Invoke("姘村姏缁撴瀯鏂囦欢瑙f瀽鎴愬姛銆傘�傘��");
+
+            feedBackProgress?.Invoke(100, 20);
+
+            vm.HydroID = hydroId;
 
             #endregion
 
-            #region 鍒涘缓椤圭洰
+            #region 鍒涘缓淇濆瓨椤圭洰
 
-            var bllXhsProject = new BLL.XhsProjectExtensions();
+            feedBackMsg?.Invoke("姝e湪鍒涘缓椤圭洰...");
+
+            var bllXhsProject = new Lazy<BLL.XhsProjectExtensions>(() => new BLL.XhsProjectExtensions());
 
             var project = new AddXhsProjectExtensionsInput();
             project.NO = vm.NO;
@@ -78,22 +115,58 @@
                 }
             };
 
-            var projectId = await bllXhsProject.Insert(project);
+            var projectId = await bllXhsProject.Value.Insert(project);
             if (projectId < 1)
             {
-                feedBackMsg?.Invoke("椤圭洰鍒涘缓澶辫触");
+                feedBackMsg?.Invoke("椤圭洰鍒涘缓澶辫触锛侊紒锛�");
                 return false;
             }
 
-            #endregion
+            feedBackMsg?.Invoke("椤圭洰鍒涘缓鎴愬姛銆傘�傘��");
 
-            #region 鍏宠仈妯″瀷
+            vm.ProjectID = projectId;
 
-
+            feedBackProgress?.Invoke(100, 25);
 
             #endregion
 
-            #region 鍦板浘浣嶇疆
+            #region 鍏宠仈姘村姏妯″瀷
+
+            var bllXhsProjectSite = new Lazy<BLL.XhsProjectSite>(() => new BLL.XhsProjectSite());
+            var allProjectSiteList = await bllXhsProjectSite.Value.GetByProjectID(projectId);
+            var projectSiteId = allProjectSiteList.First().ID;
+
+            vm.ProjectSiteID = projectSiteId;
+
+            feedBackMsg?.Invoke("姝e湪鍏宠仈姘村姏妯″瀷...");
+
+            var hydroRelation = new Yw.Dto.AddHydroModelRelationInput();
+            hydroRelation.ObjectType = HStation.Xhs.DataType.XhsProjectSite;
+            hydroRelation.ObjectID = projectSiteId;
+            hydroRelation.ModelID = hydroId;
+            hydroRelation.Purpose = Yw.Hydro.Purpose.Simulation;
+            hydroRelation.Content = null;
+            hydroRelation.Description = null;
+
+            var bllHydroRelation = new Lazy<Yw.BLL.HydroModelRelation>(() => new Yw.BLL.HydroModelRelation());
+            var hydroRelationId = await bllHydroRelation.Value.Insert(hydroRelation);
+            if (hydroRelationId < 1)
+            {
+                feedBackMsg?.Invoke("鍏宠仈姘村姏妯″瀷澶辫触锛侊紒锛�");
+                return false;
+            }
+
+            feedBackMsg?.Invoke("鍏宠仈姘村姏鎴愬姛銆傘�傘��");
+
+            vm.HydroRelationID = hydroRelationId;
+
+            feedBackProgress?.Invoke(100, 30);
+
+            #endregion
+
+            #region 璁剧疆鍦板浘浣嶇疆
+
+            feedBackMsg?.Invoke("姝e湪璁剧疆鍦板浘浣嶇疆...");
 
             if (vm.Location != null)
             {
@@ -109,37 +182,51 @@
                 var mapInfoId = await new Yw.BLL.MapInfo().Insert(mapInfo);
                 if (mapInfoId < 1)
                 {
-                    feedBackMsg?.Invoke("鍦板浘瀹氫綅淇℃伅淇濆瓨澶辫触");
+                    feedBackMsg?.Invoke("璁剧疆鍦板浘浣嶇疆澶辫触锛侊紒锛�");
                 }
                 else
                 {
-                    feedBackMsg?.Invoke("淇濆瓨鍦板浘瀹氫綅淇℃伅鎴愬姛");
+                    feedBackMsg?.Invoke("璁剧疆鍦板浘浣嶇疆鎴愬姛銆傘�傘��");
                 }
             }
+            else
+            {
+                feedBackMsg?.Invoke("璁剧疆鍦板浘浣嶇疆澶辫触锛侊紒锛�");
+            }
+
+            feedBackMsg?.Invoke("璁剧疆鍦板浘浣嶇疆瀹屾垚銆傘�傘��");
+
+            feedBackProgress?.Invoke(100, 40);
 
             #endregion
 
-            #region 涓婁紶妯″瀷
+            #region 涓婁紶Revit妯″瀷
 
+            feedBackMsg?.Invoke("姝e湪瑙f瀽Revit妯″瀷鏂囦欢...");
             var rvtFileInfo = allFileInfoList.Where(x => x.Extension == ".rvt").FirstOrDefault();
             if (rvtFileInfo == null)
             {
-                feedBackMsg?.Invoke("Revit妯″瀷鏂囦欢瑙f瀽澶辫触");
-                return false;
+                feedBackMsg?.Invoke("Revit妯″瀷鏂囦欢瑙f瀽澶辫触锛侊紒锛�");
             }
 
             var bimfaceId = await Yw.WinFrmUI.BimfaceHelper.UploadFile(rvtFileInfo.FullName);
             if (bimfaceId < 1)
             {
-                feedBackMsg?.Invoke("Revit妯″瀷鏂囦欢涓婁紶澶辫触");
-                return false;
+                feedBackMsg?.Invoke("Revit妯″瀷鏂囦欢涓婁紶澶辫触锛侊紒锛�");
+                return true;
             }
 
+            feedBackMsg?.Invoke("瑙f瀽Revit妯″瀷鏂囦欢鎴愬姛銆傘�傘��");
 
+            feedBackProgress?.Invoke(100, 60);
+
+            vm.BimfaceId = bimfaceId;
 
             #endregion
 
-            #region 淇濆瓨Bimface
+            #region 淇濆瓨Bimface鏂囦欢
+
+            feedBackMsg?.Invoke("姝e湪淇濆瓨Bimface鏂囦欢...");
 
             var bllBimfaceFile = new Yw.BLL.BimfaceFile();
 
@@ -155,19 +242,23 @@
             var bimfaceFileId = await bllBimfaceFile.Insert(bimfaceFile);
             if (bimfaceFileId < 1)
             {
-                feedBackMsg?.Invoke("BIMFACE鏂囦欢淇℃伅淇濆瓨澶辫触");
+                feedBackMsg?.Invoke("Bimface鏂囦欢淇濆瓨澶辫触锛侊紒锛�");
+                return true;
             }
-            else
-            {
-                feedBackMsg?.Invoke("BIMFACE鏂囦欢淇℃伅淇濆瓨鎴愬姛");
-            }
+
+            feedBackMsg?.Invoke("Bimface鏂囦欢淇濆瓨鎴愬姛銆傘�傘��");
+
+            feedBackProgress?.Invoke(100, 70);
+
+            vm.BimfaceFileID = bimfaceFileId;
 
             #endregion
 
-            #region 鍏宠仈Bimface
+            #region 鍏宠仈Bimface鏂囦欢
+
+            feedBackMsg?.Invoke("姝e湪鍏宠仈Bimface鏂囦欢...");
 
             var bllBimfaceRelation = new Yw.BLL.BimfaceFileRelation();
-
             var bimfaceRelation = new Yw.Dto.AddBimfaceFileRelationInput();
             bimfaceRelation.ObjectType = HStation.Xhs.DataType.XhsProject;
             bimfaceRelation.ObjectID = projectId;
@@ -178,30 +269,44 @@
             var bimfaceRelationId = await bllBimfaceRelation.Insert(bimfaceRelation);
             if (bimfaceRelationId < 1)
             {
-                feedBackMsg?.Invoke("BIMFACE鍏宠仈澶辫触");
+                feedBackMsg?.Invoke("Bimface鏂囦欢鍏宠仈澶辫触锛侊紒锛�");
+                return true;
             }
-            else
-            {
-                feedBackMsg?.Invoke("BIMFACE鍏宠仈鎴愬姛");
-            }
+            feedBackMsg?.Invoke("Bimface鏂囦欢鍏宠仈鎴愬姛銆傘�傘��");
 
+            feedBackProgress?.Invoke(100, 80);
+
+            vm.BimfaceFileRelationID = bimfaceRelationId;
             #endregion
 
             #region 鍙戣捣bimface杞崲
 
+            feedBackMsg?.Invoke("姝e湪杩涜Bimface妯″瀷杞婚噺鍖�...");
             var bimfaceTranslateStatus = await Yw.WinFrmUI.BimfaceHelper.TranslateRvtFile(bimfaceId);
             if (bimfaceTranslateStatus != Yw.BIMFace.eTranslateStatus.Success)
             {
                 await Yw.WinFrmUI.BimfaceHelper.WaitFileTranslateStatusUntilSuccess(bimfaceId, 3000);
             }
+            feedBackMsg?.Invoke("Bimface妯″瀷杞婚噺鍖栧畬鎴愩�傘�傘��");
 
+            feedBackProgress?.Invoke(100, 90);
             #endregion
 
             #region 鏇存柊鐘舵��
 
+            feedBackMsg?.Invoke("姝e湪鏇存柊Bimface鏂囦欢鐘舵��...");
             bol = await bllBimfaceFile.UpdateFileStatus(bimfaceFileId, (int)Yw.Bimface.eFileStatus.ConvertSucceed);
 
-            feedBackMsg?.Invoke("鏂囦欢鐘舵�佹洿鏂�");
+            if (bol)
+            {
+                feedBackMsg?.Invoke("姝e湪Bimface鏂囦欢鐘舵�佹洿鏂版垚鍔熴�傘�傘��");
+            }
+            else
+            {
+                feedBackMsg?.Invoke("姝e湪Bimface鏂囦欢鐘舵�佹洿鏂板け璐ワ紒锛侊紒");
+            }
+
+            feedBackProgress?.Invoke(100, 100);
 
             #endregion
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
index 41f6a82..82494ae 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
@@ -88,13 +88,13 @@
 
   <ItemGroup>
     <PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
-    <PackageReference Include="Yw.BIMFace.SDK.Core" Version="3.0.1" />
     <PackageReference Include="Yw.BLL.Bimface.Core" Version="3.0.1" />
     <PackageReference Include="Yw.WebBrower.Core" Version="3.0.2" />
     <PackageReference Include="Yw.WebView2.WinFrmUI.Core" Version="3.0.0" />
   </ItemGroup>
 
   <ItemGroup>
+    <ProjectReference Include="..\..\Component\Yw.BIMFace.SDK.Core\Yw.BIMFace.SDK.Core.csproj" />
     <ProjectReference Include="..\Yw.WinFrmUI.Core\Yw.WinFrmUI.Core.csproj" />
   </ItemGroup>
 

--
Gitblit v1.9.3