From ec0d0b6f8e3ac7791c736ae8aad69c4a1587cad9 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期三, 11 九月 2024 10:14:44 +0800
Subject: [PATCH] xhs 和 bimface vmo改造

---
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/01-basic-info/XhsProjectBasicInfoHydroCtrl.cs                   |    2 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/03-mgr/XhsProjectMgrViewModel.cs                               |    5 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/02-asset-mgr/XhsSchemeAssetMgrPage.cs                           |    2 
 Vmo/HStation.Vmo.Xhs.Core/01-project/XhsProjectExtensionsVmo.cs                                               |   31 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/00-core/ImportXhsProjectFileHelper.cs                   |    7 
 BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProjectExtensions.cs                                    |    1 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/04-scheme/XhsProjectSimulationSchemeMgrCtrl.Designer.cs     |    2 
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/BimfaceFileMgrViewModel.cs                                          |    8 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/02-asset-mgr/XhsProjectAssetsBimfaceCtrl.cs                     |    6 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs               |   22 
 BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject.cs                                                     |  177 ++
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationInfoPage.Designer.cs            |  165 +++
 BLL/HStation.BLL.Xhs.Core/04-bll/00-core/CALCreateHelper.cs                                                   |    5 
 BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectExtensions_Instance.cs                                  |   90 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/03-hydraulic-simulation/XhsSchemeHydraulicSimulationPage.cs     |    2 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationBimfaceInfoCtrl.resx            |  120 ++
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/01-project/HomeXhsProjectTreeViewModel.cs                         |    8 
 BLL/HStation.BLL.Xhs.Core/04-bll/03-scheme/XhsScheme_Instance.cs                                              |   84 +
 BLL/HStation.BLL.Xhs.Core/HStation.BLL.Xhs.Core.csproj                                                        |    1 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.Designer.cs                     |   99 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.resx                            |    3 
 BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSite_Instance.cs                                   |   84 +
 BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectExtensions.cs                                           |  177 +-
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/EditProjectDlg.cs                                       |   14 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user                                    |    3 
 Vmo/HStation.Vmo.Xhs.Core/01-project/XhsProjectVmo.cs                                                         |   35 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/01-project/HomeXhsProjectTreeListCtrl.cs                          |   13 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/03-property/HomeXhsProjectPropertyCtrl.cs                         |    3 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/05-function/XhsProjectSimulationFunctionMgrCtrl.Designer.cs |    4 
 Vmo/HStation.Vmo.Xhs.Core/GlobalUsings.cs                                                                     |    1 
 Vmo/HStation.Vmo.Xhs.Core/HStation.Vmo.Xhs.Core.csproj                                                        |    5 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/03-q3d/XhsProjectSimulationQ3dCtrl.cs                       |   32 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/03-q3d/XhsProjectSimulationQ3dCtrl.resx                     |  145 ++
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage.cs                                        |    8 
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/AddBimfaceFileDlg.cs                                                |   20 
 BLL/HStation.BLL.Xhs.Core/04-bll/03-scheme/XhsScheme.cs                                                       |  205 ++
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/MapProjectViewModel.cs                                     |    5 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/03-q3d/XhsProjectSimulationQ3dCtrl.Designer.cs              |   62 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/03-MapLocation/SetXhsProjectMapLocationWizardPage.cs |    9 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/03-property/HomeXhsProjectPropertyViewModel.cs                    |    8 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/01-basic-info/XhsProjectBasicInfoBimfaceCtrl.cs                 |    6 
 BLL/HStation.BLL.Xhs.Core/02-httpclient/02-project-site/XhsProjectSite.cs                                     |   14 
 BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProject.cs                                              |   12 
 BLL/HStation.BLL.Core/HStation.BLL.Core.csproj                                                                |    6 
 Vmo/HStation.Vmo.Xhs.Core/03-scheme/XhsSchemeVmo.cs                                                           |   80 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.cs                                             |   17 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/AddProjectDlg.cs                                        |   12 
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj                                             |    2 
 BLL/HStation.BLL.Xhs.Core/00-core/Mapper.cs                                                                   |   21 
 Vmo/HStation.Vmo.Xhs.Core/02-project-site/XhsProjectSiteVmo.cs                                                |   68 +
 BLL/HStation.BLL.Xhs.Core/01-interface/03-scheme/IXhsScheme.cs                                                |    4 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationBimfaceInfoCtrl.cs              |   59 +
 BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProject.cs                                             |   27 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationInfoPage.resx                   |  120 ++
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/02-bimface/ViewXhsProjectBimfacePage.cs                        |   16 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.cs                              |  423 +++++++
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/Bimface3dViewPage.cs                                                |    6 
 BLL/HStation.BLL.Xhs.Core/01-interface/02-project-site/IXhsProjectSite.cs                                     |    7 
 BLL/HStation.BLL.Xhs.Core/02-httpclient/03-scheme/XhsScheme.cs                                                |    3 
 BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject_Instance.cs                                            |   84 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-property/XhsProjectSimulationPropertyCtrl.Designer.cs    |    4 
 Vmo/HStation.Vmo.Core/HStation.Vmo.Core.csproj                                                                |    6 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj                                         |   14 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectHelper.cs                    |   16 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage_Bak.cs                                         |   15 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage_Bak2.cs                                   |   24 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/MapViewProjectListContainer.cs                             |    6 
 BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSite.cs                                            |  196 ++
 BLL/HStation.BLL.Xhs.Core/GlobalUsings.cs                                                                     |    8 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/05-function/XhsProjectSimulationFunctionMgrCtrl.cs          |   55 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationBimfaceInfoCtrl.Designer.cs     |   57 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/IMapViewProjectListContainer.cs                            |    6 
 /dev/null                                                                                                     |   47 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationInfoPage.cs                     |   37 
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/EditBimfaceFileDlg.cs                                               |    7 
 BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProject.cs                                              |   15 
 BLL/HStation.BLL.Xhs.Core/03-localclient/02-project-site/XhsProjectSite.cs                                    |   12 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMgrListCtrl.cs                                         |    5 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage_Bak.cs                                    |   18 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/00-core/BimfaceFileStateHelper.cs                                         |    9 
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/BimfaceFileMgrPage.cs                                               |    2 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/04-scheme/XhsProjectSimulationSchemeMgrCtrl.cs              |    8 
 82 files changed, 2,699 insertions(+), 528 deletions(-)

diff --git a/BLL/HStation.BLL.Core/HStation.BLL.Core.csproj b/BLL/HStation.BLL.Core/HStation.BLL.Core.csproj
index db52a79..82127c7 100644
--- a/BLL/HStation.BLL.Core/HStation.BLL.Core.csproj
+++ b/BLL/HStation.BLL.Core/HStation.BLL.Core.csproj
@@ -7,13 +7,11 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.CAL.HttpClient.Core" Version="3.1.0" />
-    <PackageReference Include="Yw.CALFactory.Core" Version="3.0.2" />
-    <PackageReference Include="Yw.Mapster.Core" Version="3.0.0" />
+    <PackageReference Include="Yw.BLL.Core" Version="3.0.8" />
   </ItemGroup>
 
   <ItemGroup>
-    <ProjectReference Include="..\..\Dto\HStation.Dto.Core\HStation.Dto.Core.csproj" />
+    <ProjectReference Include="..\..\Vmo\HStation.Vmo.Core\HStation.Vmo.Core.csproj" />
   </ItemGroup>
 
 </Project>
diff --git a/BLL/HStation.BLL.Xhs.Core/00-core/Mapper.cs b/BLL/HStation.BLL.Xhs.Core/00-core/Mapper.cs
index d6e570b..62c9efd 100644
--- a/BLL/HStation.BLL.Xhs.Core/00-core/Mapper.cs
+++ b/BLL/HStation.BLL.Xhs.Core/00-core/Mapper.cs
@@ -33,8 +33,6 @@
               .Map(dest => dest.Paras, src => src.Paras)
               .Map(dest => dest.Flags, src => src.Flags);
 
-
-
             #endregion
 
             #region project-site
@@ -58,6 +56,25 @@
               .Map(dest => dest.Flags, src => src.Flags);
 
             #endregion
+
+            #region project-site
+
+            config.ForType<AddXhsSchemeInput, Model.XhsScheme>()
+                .Map(dest => dest.Paras, src => src.Paras)
+                .Map(dest => dest.Flags, src => src.Flags)
+                .Map(dest => dest.UseStatus, src => Yw.Model.eUseStatus.Enable);
+
+
+            config.ForType<UpdateXhsSchemeInput, Model.XhsScheme>()
+              .Map(dest => dest.Paras, src => src.Paras)
+              .Map(dest => dest.Flags, src => src.Flags);
+
+            config.ForType<Model.XhsScheme, XhsSchemeDto>()
+              .Map(dest => dest.Paras, src => src.Paras)
+              .Map(dest => dest.Flags, src => src.Flags);
+
+            #endregion
+
         }
     }
 }
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProject.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProject.cs
index 8c05689..4fe8c44 100644
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProject.cs
+++ b/BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProject.cs
@@ -5,18 +5,8 @@
     /// <summary>
     /// 
     /// </summary>
-    public interface IXhsProject : IBaseCAL<AddXhsProjectInput, UpdateXhsProjectInput, XhsProjectDto>, IUpdateParas, IUpdateFlags, IUpdateTagName, IUpdateSorter
+    public interface IXhsProject : IBaseCAL<AddXhsProjectInput, UpdateXhsProjectInput, XhsProjectDto>, IUpdateSorter, IUpdateParas, IUpdateFlags, IUpdateTagName
     {
-
-        /// <summary>
-        /// 
-        /// </summary>
-        Task<bool> Publish(long ID);
-
-        /// <summary>
-        /// 
-        /// </summary>
-        Task<bool> Deprecate(long ID);
 
         /// <summary>
         /// 
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProjectExtensions.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProjectExtensions.cs
index 391b9cf..c71168d 100644
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProjectExtensions.cs
+++ b/BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProjectExtensions.cs
@@ -7,5 +7,6 @@
     /// </summary>
     public interface IXhsProjectExtensions : IBaseCAL<AddXhsProjectExtensionsInput, UpdateXhsProjectExtensionsInput, XhsProjectExtensionsDto>
     {
+
     }
 }
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProjectStd.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProjectStd.cs
deleted file mode 100644
index 2bb5c92..0000000
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProjectStd.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-锘縰sing Yw.CAL;
-
-namespace HStation.CAL
-{
-    /// <summary>
-    /// 
-    /// </summary>
-    public interface IXhsProjectStd : IBaseCAL
-    {
-        /// <summary>
-        /// 
-        /// </summary>
-        Task<List<XhsProjectStdDto>> GetAll();
-
-        /// <summary>
-        /// 
-        /// </summary>
-        Task<XhsProjectStdDto> GetByID(long ID);
-    }
-}
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/02-project-site/IXhsProjectSite.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/02-project-site/IXhsProjectSite.cs
index 1fd10db..92bfeb0 100644
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/02-project-site/IXhsProjectSite.cs
+++ b/BLL/HStation.BLL.Xhs.Core/01-interface/02-project-site/IXhsProjectSite.cs
@@ -5,7 +5,7 @@
     /// <summary>
     /// 
     /// </summary>
-    public interface IXhsProjectSite : IBaseCAL<AddXhsProjectSiteInput, UpdateXhsProjectSiteInput, XhsProjectSiteDto>, IUpdateParas, IUpdateFlags, IUpdateSorter, IUpdateUseStatus
+    public interface IXhsProjectSite : IBaseCAL<AddXhsProjectSiteInput, UpdateXhsProjectSiteInput, XhsProjectSiteDto>, IUpdateSorter, IUpdateParas, IUpdateFlags, IUpdateUseStatus
     {
 
         /// <summary>
@@ -16,6 +16,11 @@
         /// <summary>
         /// 
         /// </summary>
+        Task<XhsProjectSiteDto> GetDefaultByProjectID(long ProjectID);
+
+        /// <summary>
+        /// 
+        /// </summary>
         Task<bool> IsExistByProjectID(long ProjectID);
 
         /// <summary>
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/02-project-site/IXhsProjectSiteStd.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/02-project-site/IXhsProjectSiteStd.cs
deleted file mode 100644
index 33efaf1..0000000
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/02-project-site/IXhsProjectSiteStd.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-锘縰sing Yw.CAL;
-
-namespace HStation.CAL
-{
-    /// <summary>
-    /// 
-    /// </summary>
-    public interface IXhsProjectSiteStd : IBaseCAL
-    {
-
-        /// <summary>
-        /// 
-        /// </summary>
-        Task<List<XhsProjectSiteStdDto>> GetAll();
-
-        /// <summary>
-        /// 
-        /// </summary>
-        Task<List<XhsProjectSiteStdDto>> GetByProjectID(long ProjectID);
-
-        /// <summary>
-        /// 
-        /// </summary>
-        Task<XhsProjectSiteStdDto> GetDefaultByProjectID(long ProjectID);
-
-
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/03-scheme/IXhsScheme.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/03-scheme/IXhsScheme.cs
index 7c31751..bde44e4 100644
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/03-scheme/IXhsScheme.cs
+++ b/BLL/HStation.BLL.Xhs.Core/01-interface/03-scheme/IXhsScheme.cs
@@ -5,10 +5,8 @@
     /// <summary>
     /// 鎶ヨ绛夌骇
     /// </summary>
-    public interface IXhsScheme : IBaseCAL<AddXhsSchemeInput, UpdateXhsSchemeInput, XhsSchemeDto>, IUpdateParas, IUpdateFlags, IUpdateSorter, IUpdateUseStatus
+    public interface IXhsScheme : IBaseCAL<AddXhsSchemeInput, UpdateXhsSchemeInput, XhsSchemeDto>, IUpdateSorter, IUpdateParas, IUpdateFlags, IUpdateUseStatus
     {
-
-
 
         /// <summary>
         /// 
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/03-scheme/IXhsSchemeStd.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/03-scheme/IXhsSchemeStd.cs
deleted file mode 100644
index d1e7fac..0000000
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/03-scheme/IXhsSchemeStd.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-锘縰sing Yw.CAL;
-
-namespace HStation.CAL
-{
-    /// <summary>
-    /// 
-    /// </summary>
-    public interface IXhsSchemeStd : IBaseCAL
-    {
-
-        /// <summary>
-        /// 
-        /// </summary>
-        Task<List<XhsSchemeStdDto>> GetAll();
-
-        /// <summary>
-        /// 
-        /// </summary>
-        Task<List<XhsSchemeStdDto>> GetByProjectID(long ProjectID);
-
-        /// <summary>
-        /// 
-        /// </summary>
-        Task<List<XhsSchemeStdDto>> GetBySiteID(long SiteID);
-
-
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProject.cs b/BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProject.cs
index ddb10db..bfe13da 100644
--- a/BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProject.cs
+++ b/BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProject.cs
@@ -12,21 +12,6 @@
             get { return $"{HStation.BLL.Xhs.ConfigHelper.HttpUrl}/Xhs/Project"; }
         }
 
-        /// <summary>
-        /// 
-        /// </summary>
-        public async Task<bool> Publish(long ID)
-        {
-            return await GetUrl("Publish@V1.0").Put<bool>(new { ID });
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        public async Task<bool> Deprecate(long ID)
-        {
-            return await GetUrl("Deprecate@V1.0").Put<bool>(new { ID });
-        }
 
         /// <summary>
         /// 
diff --git a/BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProjectStd.cs b/BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProjectStd.cs
deleted file mode 100644
index a044251..0000000
--- a/BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProjectStd.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-锘縰sing Yw.CAL.HttpClient;
-
-namespace HStation.CAL.HttpClient
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectStd : BaseCAL, IXhsProjectStd
-    {
-        protected override string Prefix
-        {
-            get { return $"{HStation.BLL.Xhs.ConfigHelper.HttpUrl}/Xhs/Project/Std"; }
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        public async Task<List<XhsProjectStdDto>> GetAll()
-        {
-            return await GetUrl("GetAll@V1.0").Get<List<XhsProjectStdDto>>();
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        public async Task<XhsProjectStdDto> GetByID(long ID)
-        {
-            var paras = new List<(string Name, object Value)>()
-            {
-                (nameof(ID),ID)
-            };
-            return await GetUrl("GetByID@V1.0").Get<XhsProjectStdDto>(paras);
-        }
-
-
-
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/02-httpclient/02-project-site/XhsProjectSite.cs b/BLL/HStation.BLL.Xhs.Core/02-httpclient/02-project-site/XhsProjectSite.cs
index 718b56c..371c75b 100644
--- a/BLL/HStation.BLL.Xhs.Core/02-httpclient/02-project-site/XhsProjectSite.cs
+++ b/BLL/HStation.BLL.Xhs.Core/02-httpclient/02-project-site/XhsProjectSite.cs
@@ -27,6 +27,18 @@
         /// <summary>
         /// 
         /// </summary>
+        public async Task<XhsProjectSiteDto> GetDefaultByProjectID(long ProjectID)
+        {
+            var paras = new List<(string Name, object Value)>()
+            {
+                (nameof(ProjectID),ProjectID)
+            };
+            return await GetUrl("GetDefaultByProjectID@V1.0").Get<XhsProjectSiteDto>(paras);
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
         public async Task<bool> IsExistByProjectID(long ProjectID)
         {
             var paras = new List<(string Name, object Value)>()
@@ -47,8 +59,6 @@
             };
             return await GetUrl("DeleteByProjectID@V1.0").Delete<bool>(paras);
         }
-
-
 
 
     }
diff --git a/BLL/HStation.BLL.Xhs.Core/02-httpclient/02-project-site/XhsProjectSiteStd.cs b/BLL/HStation.BLL.Xhs.Core/02-httpclient/02-project-site/XhsProjectSiteStd.cs
deleted file mode 100644
index 5e0549c..0000000
--- a/BLL/HStation.BLL.Xhs.Core/02-httpclient/02-project-site/XhsProjectSiteStd.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-锘縰sing Yw.CAL.HttpClient;
-
-namespace HStation.CAL.HttpClient
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectSiteStd : BaseCAL, IXhsProjectSiteStd
-    {
-        protected override string Prefix
-        {
-            get { return $"{HStation.BLL.Xhs.ConfigHelper.HttpUrl}/Xhs/Project/Site"; }
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        public async Task<List<XhsProjectSiteStdDto>> GetAll()
-        {
-            return await GetUrl("GetAll@V1.0").Get<List<XhsProjectSiteStdDto>>();
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        public async Task<List<XhsProjectSiteStdDto>> GetByProjectID(long ProjectID)
-        {
-            var paras = new List<(string Name, object Value)>()
-            {
-                (nameof(ProjectID),ProjectID)
-            };
-            return await GetUrl("GetByProjectID@V1.0").Get<List<XhsProjectSiteStdDto>>(paras);
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        public async Task<XhsProjectSiteStdDto> GetDefaultByProjectID(long ProjectID)
-        {
-            var paras = new List<(string Name, object Value)>()
-            {
-                (nameof(ProjectID),ProjectID)
-            };
-            return await GetUrl("GetDefaultByProjectID@V1.0").Get<XhsProjectSiteStdDto>(paras);
-        }
-
-
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/02-httpclient/03-scheme/XhsScheme.cs b/BLL/HStation.BLL.Xhs.Core/02-httpclient/03-scheme/XhsScheme.cs
index a64bdd9..cbcb412 100644
--- a/BLL/HStation.BLL.Xhs.Core/02-httpclient/03-scheme/XhsScheme.cs
+++ b/BLL/HStation.BLL.Xhs.Core/02-httpclient/03-scheme/XhsScheme.cs
@@ -1,5 +1,4 @@
-锘縰sing System.Security.Policy;
-using Yw.CAL.HttpClient;
+锘縰sing Yw.CAL.HttpClient;
 using Yw.Untity;
 
 namespace HStation.CAL.HttpClient
diff --git a/BLL/HStation.BLL.Xhs.Core/02-httpclient/03-scheme/XhsSchemeStd.cs b/BLL/HStation.BLL.Xhs.Core/02-httpclient/03-scheme/XhsSchemeStd.cs
deleted file mode 100644
index 10610a1..0000000
--- a/BLL/HStation.BLL.Xhs.Core/02-httpclient/03-scheme/XhsSchemeStd.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-锘縰sing Yw.CAL.HttpClient;
-
-namespace HStation.CAL.HttpClient
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsSchemeStd : BaseCAL, IXhsSchemeStd
-    {
-        protected override string Prefix
-        {
-            get { return $"{HStation.BLL.Xhs.ConfigHelper.HttpUrl}/Xhs/Scheme"; }
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<XhsSchemeStdDto>> GetAll()
-        {
-            return await GetUrl("GetAll@V1.0").Get<List<XhsSchemeStdDto>>();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<XhsSchemeStdDto>> GetByProjectID(long ProjectID)
-        {
-            var paras = new List<(string Name, object Value)>()
-            {
-                (nameof(ProjectID),ProjectID)
-            };
-            return await GetUrl("GetByProjectID@V1.0").Get<List<XhsSchemeStdDto>>(paras);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<XhsSchemeStdDto>> GetBySiteID(long SiteID)
-        {
-            var paras = new List<(string Name, object Value)>()
-            {
-                (nameof(SiteID),SiteID)
-            };
-            return await GetUrl("GetBySiteID@V1.0").Get<List<XhsSchemeStdDto>>(paras);
-        }
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProject.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProject.cs
index 7dbdcca..eb34f6b 100644
--- a/BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProject.cs
+++ b/BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProject.cs
@@ -214,33 +214,6 @@
             });
         }
 
-        /// <summary>
-        /// 
-        /// </summary>
-        public async Task<bool> Publish(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        public async Task<bool> Deprecate(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-                //var bol = _service.Deprecate(ID, out string Msg);
-                //if (!bol)
-                //{
-                //    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, Msg);
-                //}
-                //return bol;
-            });
-        }
 
         #endregion Update
 
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProjectStd.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProjectStd.cs
deleted file mode 100644
index 6e8fd95..0000000
--- a/BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProjectStd.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-锘�
-namespace HStation.CAL.LocalClient
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public class XhsProjectStd : IXhsProjectStd
-    {
-        private readonly HStation.Service.XhsProject _service = new();
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <returns></returns>
-        /// <exception cref="NotImplementedException"></exception>
-        public async Task<List<XhsProjectStdDto>> GetAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetAll();
-                var vm_list = list?.Select(x => new XhsProjectStdDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="ID"></param>
-        /// <returns></returns>
-        /// <exception cref="NotImplementedException"></exception>
-        public async Task<XhsProjectStdDto> GetByID(long ID)
-        {
-
-            return await Task.Run(() =>
-            {
-                var model = _service.GetByID(ID);
-                return model == null ? null : new XhsProjectStdDto(model);
-            });
-        }
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/02-project-site/XhsProjectSite.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/02-project-site/XhsProjectSite.cs
index 584000a..369910a 100644
--- a/BLL/HStation.BLL.Xhs.Core/03-localclient/02-project-site/XhsProjectSite.cs
+++ b/BLL/HStation.BLL.Xhs.Core/03-localclient/02-project-site/XhsProjectSite.cs
@@ -36,6 +36,18 @@
         }
 
         /// <summary>
+        /// 閫氳繃 ProjectID 鑾峰彇
+        /// </summary>
+        public async Task<XhsProjectSiteDto> GetDefaultByProjectID(long ProjectID)
+        {
+            return await Task.Factory.StartNew(() =>
+            {
+                var model = _service.GetDefaultByProjectID(ProjectID);
+                return model == null ? null : new XhsProjectSiteDto(model);
+            });
+        }
+
+        /// <summary>
         /// 閫氳繃 ID 鑾峰彇
         /// </summary>
         public async Task<XhsProjectSiteDto> GetByID(long ID)
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/02-project-site/XhsProjectSiteStd.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/02-project-site/XhsProjectSiteStd.cs
deleted file mode 100644
index a0e2908..0000000
--- a/BLL/HStation.BLL.Xhs.Core/03-localclient/02-project-site/XhsProjectSiteStd.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-锘�
-namespace HStation.CAL.LocalClient
-{
-    /// <summary>
-    /// 
-    /// </summary>
-    public class XhsProjectSiteStd : IXhsProjectSiteStd
-    {
-        private readonly HStation.Service.XhsProjectSite _service = new();
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <returns></returns>
-        public async Task<List<XhsProjectSiteStdDto>> GetAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetAll();
-                var vm_list = list?.Select(x => new XhsProjectSiteStdDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="ProjectID"></param>
-        /// <returns></returns>
-        /// <exception cref="NotImplementedException"></exception>
-        public async Task<List<XhsProjectSiteStdDto>> GetByProjectID(long ProjectID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetByProjectID(ProjectID);
-                var vmList = list?.Select(x => new XhsProjectSiteStdDto(x)).ToList();
-                return vmList;
-            });
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="ProjectID"></param>
-        /// <returns></returns>
-        /// <exception cref="NotImplementedException"></exception>
-        public async Task<XhsProjectSiteStdDto> GetDefaultByProjectID(long ProjectID)
-        {
-            return await Task.Run(() =>
-            {
-                var model = _service.GetDefaultByProjectID(ProjectID);
-                return model == null ? null : new XhsProjectSiteStdDto(model);
-            });
-        }
-
-
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/03-scheme/XhsSchemeStd.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/03-scheme/XhsSchemeStd.cs
deleted file mode 100644
index df7c0b2..0000000
--- a/BLL/HStation.BLL.Xhs.Core/03-localclient/03-scheme/XhsSchemeStd.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-锘�
-namespace HStation.CAL.LocalClient
-{
-    /// <summary>
-    /// 
-    /// </summary>
-    public class XhsSchemeStd : IXhsSchemeStd
-    {
-        private readonly HStation.Service.XhsScheme _service = new();
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <returns></returns>
-        public async Task<List<XhsSchemeStdDto>> GetAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetAll();
-                var vm_list = list?.Select(x => new XhsSchemeStdDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="ProjectID"></param>
-        /// <returns></returns>
-        /// <exception cref="NotImplementedException"></exception>
-        public async Task<List<XhsSchemeStdDto>> GetByProjectID(long ProjectID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetByProjectID(ProjectID);
-                var vmList = list?.Select(x => new XhsSchemeStdDto(x)).ToList();
-                return vmList;
-            });
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        public async Task<List<XhsSchemeStdDto>> GetBySiteID(long SiteID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetBySiteID(SiteID);
-                var vmList = list?.Select(x => new XhsSchemeStdDto(x)).ToList();
-                return vmList;
-            });
-        }
-
-
-
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/00-core/CALCreateHelper.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/00-core/CALCreateHelper.cs
index db41fda..5b1cff3 100644
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/00-core/CALCreateHelper.cs
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/00-core/CALCreateHelper.cs
@@ -6,7 +6,7 @@
     internal class CALCreateHelper
     {
         /// <summary>
-        /// 鍒涘缓DAL
+        /// 鍒涘缓CAL
         /// </summary>
         /// <typeparam name="T"></typeparam>
         /// <returns></returns>
@@ -15,5 +15,8 @@
             var type = Settings.XhsParasHelper.Xhs.CAL.CALType;
             return Yw.CALFactory.CreateCAL<T>(type);
         }
+
+
+
     }
 }
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject.cs
index a952056..95adbcc 100644
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject.cs
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject.cs
@@ -1,117 +1,190 @@
-锘縰sing HStation.CAL;
+锘縰sing Yw.BLL;
 
 namespace HStation.BLL
 {
     /// <summary>
     ///
     /// </summary>
-    public class XhsProject : IXhsProject
+    public partial class XhsProject
     {
         private readonly HStation.CAL.IXhsProject _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsProject>();
 
-        public Task<bool> BulkInserts(List<AddXhsProjectInput> list)
+        #region Query
+
+        /// <summary>
+        /// 鑾峰彇鎵�鏈�
+        /// </summary>
+        public async virtual Task<List<XhsProjectVmo>> GetAll()
         {
-            return _cal.BulkInserts(list);
+            var dtoList = await _cal.GetAll();
+            return Dto2Vmos(dtoList);
         }
 
-        public Task<bool> BulkUpdates(List<UpdateXhsProjectInput> list)
+        /// <summary>
+        /// 閫氳繃 ID 鑾峰彇
+        /// </summary>
+        public async virtual Task<XhsProjectVmo> GetByID(long ID)
         {
-            return _cal.BulkUpdates(list);
+            var dto = await _cal.GetByID(ID);
+            return Dto2Vmo(dto);
         }
 
-        public Task<bool> DeleteAll()
+        /// <summary>
+        /// 閫氳繃 Ids 鑾峰彇
+        /// </summary>
+        public async virtual Task<List<XhsProjectVmo>> GetByIds(List<long> Ids)
         {
-            return _cal.DeleteAll();
+            var dtoList = await _cal.GetByIds(Ids);
+            return Dto2Vmos(dtoList);
         }
 
-        public Task<bool> DeleteByID(long ID)
+
+        #endregion
+
+        #region Insert
+
+        /// <summary>
+        /// 鎻掑叆涓�鏉�
+        /// </summary>
+        public async virtual Task<long> Insert(XhsProjectVmo vmo)
         {
-            return _cal.DeleteByID(ID);
+            var dto = Vmo2AddDto(vmo);
+            var id = await _cal.Insert(dto);
+            return id;
         }
 
-        public Task<bool> DeleteByIds(List<long> Ids)
+        /// <summary>
+        /// 鎻掑叆澶氭潯
+        /// </summary>
+        public async virtual Task<bool> Inserts(List<XhsProjectVmo> vmoList)
         {
-            return _cal.DeleteByIds(Ids);
+            var dtoList = Vmo2AddDtos(vmoList);
+            var bol = await _cal.Inserts(dtoList);
+            return bol;
         }
 
-        public Task<bool> Deprecate(long ID)
+        #endregion
+
+        #region Update
+
+        /// <summary>
+        /// 鏇存柊
+        /// </summary>
+        public async virtual Task<bool> Update(XhsProjectVmo vmo)
         {
-            return _cal.Deprecate(ID);
+            var dto = Vmo2UpdateDto(vmo);
+            var bol = await _cal.Update(dto);
+            return bol;
         }
 
-        public Task<List<XhsProjectDto>> GetAll()
+        /// <summary>
+        /// 鎵归噺鏇存柊
+        /// </summary>
+        public async virtual Task<bool> Updates(List<XhsProjectVmo> vmoList)
         {
-            return _cal.GetAll();
+            var dtoList = Vmo2UpdateDtos(vmoList);
+            var bol = await _cal.Updates(dtoList);
+            return bol;
         }
 
-        public Task<XhsProjectDto> GetByID(long ID)
+        /// <summary>
+        /// 鏇存柊鎺掑簭鐮�
+        /// </summary>
+        public async virtual Task<bool> UpdateSortCode(long ID, int SortCode)
         {
-            return _cal.GetByID(ID);
+            var bol = await _cal.UpdateSortCode(ID, SortCode);
+            return bol;
         }
 
-        public Task<List<XhsProjectDto>> GetByIds(List<long> Ids)
+        /// <summary>
+        /// 鎵归噺鏇存柊缂栫爜
+        /// </summary>
+        public async virtual Task<bool> UpdateSorter(List<Yw.Vmo.Sorter> Sorters)
         {
-            return _cal.GetByIds(Ids);
+            var dtoList = Sorters.ToDtoList();
+            var bol = await _cal.UpdateSorter(dtoList);
+            return bol;
         }
 
-        public Task<long> Insert(AddXhsProjectInput model)
+        /// <summary>
+        /// 鏇存柊 Flags
+        /// </summary>
+        public async virtual Task<bool> UpdateFlags(long ID, List<string> Flags)
         {
-            return _cal.Insert(model);
+            return await _cal.UpdateFlags(ID, Flags);
         }
 
-        public Task<bool> Inserts(List<AddXhsProjectInput> list)
+        /// <summary>
+        /// 鏇存柊 Paras
+        /// </summary>
+        public async virtual Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
         {
-            return _cal.Inserts(list);
+            return await _cal.UpdateParas(ID, Paras);
         }
 
-        public Task<bool> IsExistTagName(string TagName)
+        /// <summary>
+        /// 鏇存柊 TagName
+        /// </summary>
+        public async virtual Task<bool> UpdateTagName(long ID, string TagName)
         {
-            return _cal.IsExistTagName(TagName);
+            return await _cal.UpdateTagName(ID, TagName);
         }
 
-        public Task<bool> IsExistTagNameExceptID(string TagName, long ExceptID)
+        #endregion
+
+        #region Exist
+
+        /// <summary>
+        /// 鍒ゆ柇 TagName 鏄惁瀛樺湪
+        /// </summary>
+        public async virtual Task<bool> IsExistTagName(string TagName)
         {
-            return _cal.IsExistTagNameExceptID(TagName, ExceptID);
+            return await _cal.IsExistTagName(TagName);
         }
 
-        public Task<bool> Publish(long ID)
+        /// <summary>
+        /// 鍒ゆ柇TagName鏄惁瀛樺湪 ExceptID
+        /// </summary>
+        public async virtual Task<bool> IsExistTagNameExceptID(string TagName, long ExceptID)
         {
-            return _cal.Publish(ID);
+            return await _cal.IsExistTagNameExceptID(TagName, ExceptID);
         }
 
-        public Task<bool> Update(UpdateXhsProjectInput model)
+
+        #endregion
+
+        #region Delete
+
+        /// <summary>
+        /// 鍏ㄩ儴鍒犻櫎
+        /// </summary>
+        public async virtual Task<bool> DeleteAll()
         {
-            return _cal.Update(model);
+            var bol = await _cal.DeleteAll();
+            return bol;
         }
 
-        public Task<bool> UpdateFlags(long ID, List<string> Flags)
+        /// <summary>
+        /// 閫氳繃 ID 鍒犻櫎
+        /// </summary>
+        public async virtual Task<bool> DeleteByID(long ID)
         {
-            return _cal.UpdateFlags(ID, Flags);
+            var bol = await _cal.DeleteByID(ID);
+            return bol;
         }
 
-        public Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
+        /// <summary>
+        /// 閫氳繃 Ids 鍒犻櫎
+        /// </summary>
+        public async virtual Task<bool> DeleteByIds(List<long> Ids)
         {
-            return _cal.UpdateParas(ID, Paras);
+            var bol = await _cal.DeleteByIds(Ids);
+            return bol;
         }
 
-        public Task<bool> Updates(List<UpdateXhsProjectInput> list)
-        {
-            return _cal.Updates(list);
-        }
+        #endregion
 
-        public Task<bool> UpdateSortCode(long ID, int SortCode)
-        {
-            return _cal.UpdateSortCode(ID, SortCode);
-        }
 
-        public Task<bool> UpdateSorter(List<UpdateSortCodeInput> Sorters)
-        {
-            return _cal.UpdateSorter(Sorters);
-        }
 
-        public Task<bool> UpdateTagName(long ID, string TagName)
-        {
-            return _cal.UpdateTagName(ID, TagName);
-        }
     }
 }
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectExtensions.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectExtensions.cs
index 6177dce..8ca6690 100644
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectExtensions.cs
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectExtensions.cs
@@ -1,141 +1,114 @@
-锘縰sing AutoMapper;
-using Yw.Basic;
-
-namespace HStation.BLL
+锘縩amespace HStation.BLL
 {
     /// <summary>
     ///
     /// </summary>
-    public class XhsProjectExtensions
+    public partial class XhsProjectExtensions
     {
         private readonly HStation.CAL.IXhsProjectExtensions _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsProjectExtensions>();
 
-        public async Task<bool> BulkInserts(List<Vmo.Xhs.XhsProjectExtensions> list)
+        #region Query
+
+        /// <summary>
+        /// 鑾峰彇鎵�鏈�
+        /// </summary>
+        /// <returns></returns>
+        public async virtual Task<List<XhsProjectExtensionsVmo>> GetAll()
         {
-            var mapper = new MapperConfiguration(cfg =>
-            {
-                cfg.CreateMap<Vmo.Xhs.XhsProjectSite, AddXhsProjectSiteExtensionsInput>();
-                cfg.CreateMap<Vmo.Xhs.XhsProjectExtensions, AddXhsProjectExtensionsInput>();
-            }).CreateMapper();
-            var vmoList = mapper.Map<List<Vmo.Xhs.XhsProjectExtensions>, List<AddXhsProjectExtensionsInput>>(list);
-            return await _cal.BulkInserts(vmoList); ;
+            var dtoList = await _cal.GetAll();
+            var vmList = dtoList?.Select(x => new XhsProjectExtensionsVmo(x)).ToList();
+            return vmList;
         }
 
-        public Task<bool> BulkUpdates(List<Vmo.Xhs.XhsProjectExtensions> list)
+        /// <summary>
+        /// 閫氳繃 ID 鑾峰彇
+        /// </summary>
+        public async virtual Task<XhsProjectExtensionsVmo> GetByID(long ID)
         {
-            var mapper = new MapperConfiguration(cfg =>
-            {
-                cfg.CreateMap<Vmo.Xhs.XhsProjectSite, UpdateXhsProjectSiteInput>();
-                cfg.CreateMap<Vmo.Xhs.XhsProjectExtensions, UpdateXhsProjectExtensionsInput>();
-            }).CreateMapper();
-            var vmoList = mapper.Map<List<Vmo.Xhs.XhsProjectExtensions>, List<UpdateXhsProjectExtensionsInput>>(list);
-
-            return _cal.BulkUpdates(vmoList);
+            var dto = await _cal.GetByID(ID);
+            var vm = dto == null ? null : new XhsProjectExtensionsVmo(dto);
+            return vm;
         }
 
-        public Task<bool> DeleteAll()
+        /// <summary>
+        /// 閫氳繃 Ids 鑾峰彇
+        /// </summary>
+        public async virtual Task<List<XhsProjectExtensionsVmo>> GetByIds(List<long> Ids)
         {
-            return _cal.DeleteAll();
+            var dtoList = await _cal.GetByIds(Ids);
+            var vmList = dtoList?.Select(x => new XhsProjectExtensionsVmo(x)).ToList();
+            return vmList;
         }
 
-        public Task<bool> DeleteByID(long ID)
+        #endregion
+
+        #region Insert
+
+        /// <summary>
+        /// 鎻掑叆涓�鏉�
+        /// </summary>
+        public async virtual Task<long> Insert(XhsProjectExtensionsVmo vmo)
         {
-            return _cal.DeleteByID(ID);
+            var dto = Vmo2AddDto(vmo);
+            return await _cal.Insert(dto);
         }
 
-        public Task<bool> DeleteByIds(List<long> Ids)
+        /// <summary>
+        /// 鎻掑叆澶氭潯
+        /// </summary>
+        public async virtual Task<bool> Inserts(List<XhsProjectExtensionsVmo> vmoList)
         {
-            return _cal.DeleteByIds(Ids);
+            var dtoList = Vmo2AddDtos(vmoList);
+            return await _cal.Inserts(dtoList);
         }
 
-        public async Task<List<Vmo.Xhs.XhsProjectExtensions>> GetAll()
+        #endregion
+
+        #region Update
+
+        /// <summary>
+        /// 鏇存柊涓�鏉�
+        /// </summary>
+        public async virtual Task<bool> Update(XhsProjectExtensionsVmo vmo)
         {
-            var DtoList = await _cal.GetAll();
-            var mapper = new MapperConfiguration(
-                cfg =>
-                {
-                    cfg.CreateMap<XhsProjectExtensionsDto, Vmo.Xhs.XhsProjectExtensions>();
-                    cfg.CreateMap<XhsProjectSiteDto, Vmo.Xhs.XhsProjectSite>();
-                }
-).CreateMapper();
-            var vmoList = mapper.Map<List<XhsProjectExtensionsDto>, List<Vmo.Xhs.XhsProjectExtensions>>(DtoList);
-            return vmoList;
+            var dto = Vmo2UpdateDto(vmo);
+            return await _cal.Update(dto);
         }
 
-        public async Task<Vmo.Xhs.XhsProjectExtensions> GetByID(long ID)
+        /// <summary>
+        /// 鏇存柊澶氭潯
+        /// </summary>
+        public async virtual Task<bool> Updates(List<XhsProjectExtensionsVmo> vmoList)
         {
-            var Dto = await _cal.GetByID(ID);
-            var mapper = new MapperConfiguration(
-                cfg =>
-                {
-                    cfg.CreateMap<XhsProjectExtensionsDto, Vmo.Xhs.XhsProjectExtensions>();
-                    cfg.CreateMap<XhsProjectSiteDto, Vmo.Xhs.XhsProjectSite>();
-                }
-).CreateMapper();
-            var vmo = mapper.Map<XhsProjectExtensionsDto, Vmo.Xhs.XhsProjectExtensions>(Dto);
-            return vmo;
+            var dtoList = Vmo2UpdateDtos(vmoList);
+            return await _cal.Updates(dtoList);
         }
 
-        public async Task<List<Vmo.Xhs.XhsProjectExtensions>> GetByIds(List<long> Ids)
-        {
-            var DtoList = await _cal.GetByIds(Ids);
-            var mapper = new MapperConfiguration(
-                cfg =>
-                {
-                    cfg.CreateMap<XhsProjectExtensionsDto, Vmo.Xhs.XhsProjectExtensions>();
-                    cfg.CreateMap<XhsProjectSiteDto, Vmo.Xhs.XhsProjectSite>();
-                }
-).CreateMapper();
-            var vmoList = mapper.Map<List<XhsProjectExtensionsDto>, List<Vmo.Xhs.XhsProjectExtensions>>(DtoList);
 
-            return vmoList;
+        #endregion
+
+        #region Delete
+
+        /// <summary>
+        /// 閫氳繃 ID 鍒犻櫎
+        /// </summary>
+        public async virtual Task<bool> DeleteByID(long ID)
+        {
+            return await _cal.DeleteByID(ID);
         }
 
-        public Task<long> Insert(Vmo.Xhs.XhsProjectExtensions model)
-        {
-            var mapper = new MapperConfiguration(cfg =>
-           {
-               cfg.CreateMap<Vmo.Xhs.XhsProjectSite, AddXhsProjectSiteExtensionsInput>();
-               cfg.CreateMap<Vmo.Xhs.XhsProjectExtensions, AddXhsProjectExtensionsInput>();
-           }).CreateMapper();
-            var vmo = mapper.Map<Vmo.Xhs.XhsProjectExtensions, AddXhsProjectExtensionsInput>(model);
-            return _cal.Insert(vmo);
-        }
+        #endregion
 
-        public Task<bool> Inserts(List<Vmo.Xhs.XhsProjectExtensions> list)
-        {
-            var mapper = new MapperConfiguration(cfg =>
-            {
-                cfg.CreateMap<Vmo.Xhs.XhsProjectSite, AddXhsProjectSiteExtensionsInput>();
-                cfg.CreateMap<Vmo.Xhs.XhsProjectExtensions, AddXhsProjectExtensionsInput>();
-            }).CreateMapper();
-            var vmoList = mapper.Map<List<Vmo.Xhs.XhsProjectExtensions>, List<AddXhsProjectExtensionsInput>>(list);
 
-            return _cal.Inserts(vmoList);
-        }
 
-        public Task<bool> Update(Vmo.Xhs.XhsProjectExtensions model)
-        {
-            var mapper = new MapperConfiguration(cfg =>
-            {
-                cfg.CreateMap<Vmo.Xhs.XhsProjectSite, UpdateXhsProjectSiteInput>();
-                cfg.CreateMap<Vmo.Xhs.XhsProjectExtensions, UpdateXhsProjectExtensionsInput>();
-            }).CreateMapper();
-            var vmo = mapper.Map<Vmo.Xhs.XhsProjectExtensions, UpdateXhsProjectExtensionsInput>(model);
 
-            return _cal.Update(vmo);
-        }
 
-        public Task<bool> Updates(List<Vmo.Xhs.XhsProjectExtensions> list)
-        {
-            var mapper = new MapperConfiguration(cfg =>
-            {
-                cfg.CreateMap<Vmo.Xhs.XhsProjectSite, UpdateXhsProjectSiteInput>();
-                cfg.CreateMap<Vmo.Xhs.XhsProjectExtensions, UpdateXhsProjectExtensionsInput>();
-            }).CreateMapper();
-            var vmoList = mapper.Map<List<Vmo.Xhs.XhsProjectExtensions>, List<UpdateXhsProjectExtensionsInput>>(list);
 
-            return _cal.Updates(vmoList);
-        }
+
+
+
+
+
+
     }
 }
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectExtensions_Instance.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectExtensions_Instance.cs
new file mode 100644
index 0000000..76ddb31
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectExtensions_Instance.cs
@@ -0,0 +1,90 @@
+锘縩amespace HStation.BLL
+{
+    public partial class XhsProjectExtensions
+    {
+        //dto to vmo
+        internal static HStation.Vmo.XhsProjectExtensionsVmo Dto2Vmo(HStation.Dto.XhsProjectExtensionsDto dto)
+        {
+            if (dto == null)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Dto.XhsProjectExtensionsDto, HStation.Vmo.XhsProjectExtensionsVmo>()
+            .ForMember(d => d.SiteList, opt => opt.MapFrom(src => XhsProjectSite.Dto2Vmos(src.SiteList)))
+            ).CreateMapper();
+            var vmo = mapper.Map<HStation.Dto.XhsProjectExtensionsDto, HStation.Vmo.XhsProjectExtensionsVmo>(dto);
+            return vmo;
+        }
+
+        //dto to vmos
+        internal static List<HStation.Vmo.XhsProjectExtensionsVmo> Dto2Vmos(List<HStation.Dto.XhsProjectExtensionsDto> dtos)
+        {
+            if (dtos == null || dtos.Count < 1)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Dto.XhsProjectExtensionsDto, HStation.Vmo.XhsProjectExtensionsVmo>()
+            .ForMember(d => d.SiteList, opt => opt.MapFrom(src => XhsProjectSite.Dto2Vmos(src.SiteList)))
+            ).CreateMapper();
+            var vmos = mapper.Map<List<HStation.Dto.XhsProjectExtensionsDto>, List<HStation.Vmo.XhsProjectExtensionsVmo>>(dtos);
+            return vmos;
+        }
+
+        //vmo to add dto
+        internal static HStation.Dto.AddXhsProjectExtensionsInput Vmo2AddDto(HStation.Vmo.XhsProjectExtensionsVmo vmo)
+        {
+            if (vmo == null)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsProjectExtensionsVmo, HStation.Dto.AddXhsProjectExtensionsInput>()
+            .ForMember(d => d.SiteList, opt => opt.MapFrom(src => XhsProjectSite.Vmo2AddDtos(src.SiteList)))
+            ).CreateMapper();
+            var dto = mapper.Map<HStation.Vmo.XhsProjectExtensionsVmo, HStation.Dto.AddXhsProjectExtensionsInput>(vmo);
+            return dto;
+        }
+
+        //vmo to add dtos
+        internal static List<HStation.Dto.AddXhsProjectExtensionsInput> Vmo2AddDtos(List<HStation.Vmo.XhsProjectExtensionsVmo> vmoList)
+        {
+            if (vmoList == null || vmoList.Count < 1)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsProjectExtensionsVmo, HStation.Dto.AddXhsProjectExtensionsInput>()
+            .ForMember(d => d.SiteList, opt => opt.MapFrom(src => XhsProjectSite.Vmo2AddDtos(src.SiteList)))
+            ).CreateMapper();
+            var dtoList = mapper.Map<List<HStation.Vmo.XhsProjectExtensionsVmo>, List<HStation.Dto.AddXhsProjectExtensionsInput>>(vmoList);
+            return dtoList;
+        }
+
+        //vmo to update dto
+        internal static HStation.Dto.UpdateXhsProjectExtensionsInput Vmo2UpdateDto(HStation.Vmo.XhsProjectExtensionsVmo vmo)
+        {
+            if (vmo == null)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsProjectExtensionsVmo, HStation.Dto.UpdateXhsProjectExtensionsInput>()
+            .ForMember(d => d.SiteList, opt => opt.MapFrom(src => XhsProjectSite.Vmo2UpdateDtos(src.SiteList)))
+            ).CreateMapper();
+            var dto = mapper.Map<HStation.Vmo.XhsProjectExtensionsVmo, HStation.Dto.UpdateXhsProjectExtensionsInput>(vmo);
+            return dto;
+        }
+
+        //vmo to update dtos
+        internal static List<HStation.Dto.UpdateXhsProjectExtensionsInput> Vmo2UpdateDtos(List<HStation.Vmo.XhsProjectExtensionsVmo> vmoList)
+        {
+            if (vmoList == null || vmoList.Count < 1)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsProjectExtensionsVmo, HStation.Dto.UpdateXhsProjectExtensionsInput>()
+            .ForMember(d => d.SiteList, opt => opt.MapFrom(src => XhsProjectSite.Vmo2UpdateDtos(src.SiteList)))
+            ).CreateMapper();
+            var dtoList = mapper.Map<List<HStation.Vmo.XhsProjectExtensionsVmo>, List<HStation.Dto.UpdateXhsProjectExtensionsInput>>(vmoList);
+            return dtoList;
+        }
+
+    }
+}
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectStd.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectStd.cs
deleted file mode 100644
index 379e731..0000000
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectStd.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-锘縰sing HStation.CAL;
-
-namespace HStation.BLL
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectStd : IXhsProjectStd
-    {
-        private readonly HStation.CAL.IXhsProjectStd _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsProjectStd>();
-
-        public Task<List<XhsProjectStdDto>> GetAll()
-        {
-            return _cal.GetAll();
-        }
-
-        public Task<XhsProjectStdDto> GetByID(long ID)
-        {
-            return _cal.GetByID(ID);
-        }
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject_Instance.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject_Instance.cs
new file mode 100644
index 0000000..c1f9c96
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject_Instance.cs
@@ -0,0 +1,84 @@
+锘縩amespace HStation.BLL
+{
+    public partial class XhsProject
+    {
+        //dto to vmo
+        internal static HStation.Vmo.XhsProjectVmo Dto2Vmo(HStation.Dto.XhsProjectDto dto)
+        {
+            if (dto == null)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Dto.XhsProjectDto, HStation.Vmo.XhsProjectVmo>()
+            ).CreateMapper();
+            var vmo = mapper.Map<HStation.Dto.XhsProjectDto, HStation.Vmo.XhsProjectVmo>(dto);
+            return vmo;
+        }
+
+        //dto to vmos
+        internal static List<HStation.Vmo.XhsProjectVmo> Dto2Vmos(List<HStation.Dto.XhsProjectDto> dtos)
+        {
+            if (dtos == null || dtos.Count < 1)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Dto.XhsProjectDto, HStation.Vmo.XhsProjectVmo>()
+            ).CreateMapper();
+            var vmos = mapper.Map<List<HStation.Dto.XhsProjectDto>, List<HStation.Vmo.XhsProjectVmo>>(dtos);
+            return vmos;
+        }
+
+        //vmo to add dto
+        internal static HStation.Dto.AddXhsProjectInput Vmo2AddDto(HStation.Vmo.XhsProjectVmo vmo)
+        {
+            if (vmo == null)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsProjectVmo, HStation.Dto.AddXhsProjectInput>()
+            ).CreateMapper();
+            var dto = mapper.Map<HStation.Vmo.XhsProjectVmo, HStation.Dto.AddXhsProjectInput>(vmo);
+            return dto;
+        }
+
+        //vmo to add dtos
+        internal static List<HStation.Dto.AddXhsProjectInput> Vmo2AddDtos(List<HStation.Vmo.XhsProjectVmo> vmoList)
+        {
+            if (vmoList == null || vmoList.Count < 1)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsProjectVmo, HStation.Dto.AddXhsProjectInput>()
+            ).CreateMapper();
+            var dtoList = mapper.Map<List<HStation.Vmo.XhsProjectVmo>, List<HStation.Dto.AddXhsProjectInput>>(vmoList);
+            return dtoList;
+        }
+
+        //vmo to update dto
+        internal static HStation.Dto.UpdateXhsProjectInput Vmo2UpdateDto(HStation.Vmo.XhsProjectVmo vmo)
+        {
+            if (vmo == null)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsProjectVmo, HStation.Dto.UpdateXhsProjectInput>()
+            ).CreateMapper();
+            var dto = mapper.Map<HStation.Vmo.XhsProjectVmo, HStation.Dto.UpdateXhsProjectInput>(vmo);
+            return dto;
+        }
+
+        //vmo to update dtos
+        internal static List<HStation.Dto.UpdateXhsProjectInput> Vmo2UpdateDtos(List<HStation.Vmo.XhsProjectVmo> vmoList)
+        {
+            if (vmoList == null || vmoList.Count < 1)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsProjectVmo, HStation.Dto.UpdateXhsProjectInput>()
+            ).CreateMapper();
+            var dtoList = mapper.Map<List<HStation.Vmo.XhsProjectVmo>, List<HStation.Dto.UpdateXhsProjectInput>>(vmoList);
+            return dtoList;
+        }
+
+    }
+}
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSite.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSite.cs
index 1febae8..7e02072 100644
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSite.cs
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSite.cs
@@ -1,112 +1,220 @@
-锘縰sing HStation.CAL;
+锘縰sing Yw.BLL;
 
 namespace HStation.BLL
 {
     /// <summary>
     ///
     /// </summary>
-    public class XhsProjectSite : IXhsProjectSite
+    public partial class XhsProjectSite
     {
         private readonly HStation.CAL.IXhsProjectSite _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsProjectSite>();
 
-        public Task<bool> BulkInserts(List<AddXhsProjectSiteInput> list)
+        #region Query
+
+        /// <summary>
+        /// 鑾峰彇鎵�鏈�
+        /// </summary>
+        public async virtual Task<List<XhsProjectSiteVmo>> GetAll()
         {
-            return _cal.BulkInserts(list);
+            var dtoList = await _cal.GetAll();
+            return Dto2Vmos(dtoList);
         }
 
-        public Task<bool> BulkUpdates(List<UpdateXhsProjectSiteInput> list)
+        /// <summary>
+        /// 閫氳繃 ProjectID 鑾峰彇
+        /// </summary>
+        public async virtual Task<List<XhsProjectSiteVmo>> GetByProjectID(long ProjectID)
         {
-            return _cal.BulkUpdates(list);
+            var dtoList = await _cal.GetByProjectID(ProjectID);
+            return Dto2Vmos(dtoList);
         }
 
-        public Task<bool> DeleteAll()
+        /// <summary>
+        /// 閫氳繃 ProjectID 鑾峰彇榛樿
+        /// </summary>
+        public async virtual Task<XhsProjectSiteVmo> GetDefaultByProjectID(long ProjectID)
         {
-            return _cal.DeleteAll();
+            var dto = await _cal.GetDefaultByProjectID(ProjectID);
+            return Dto2Vmo(dto);
         }
 
-        public Task<bool> DeleteByID(long ID)
+        /// <summary>
+        /// 閫氳繃 ID 鑾峰彇
+        /// </summary>
+        public async virtual Task<XhsProjectSiteVmo> GetByID(long ID)
         {
-            return _cal.DeleteByID(ID);
+            var dto = await _cal.GetByID(ID);
+            return Dto2Vmo(dto);
         }
 
-        public Task<bool> DeleteByIds(List<long> Ids)
+        /// <summary>
+        /// 閫氳繃 Ids 鑾峰彇
+        /// </summary>
+        public async virtual Task<List<XhsProjectSiteVmo>> GetByIds(List<long> Ids)
         {
-            return _cal.DeleteByIds(Ids);
+            var dtoList = await _cal.GetByIds(Ids);
+            return Dto2Vmos(dtoList);
         }
 
-        public Task<bool> DeleteByProjectID(long ProjectID)
+        #endregion
+
+        #region Insert
+
+        /// <summary>
+        /// 鎻掑叆涓�鏉�
+        /// </summary>
+        public async virtual Task<long> Insert(XhsProjectSiteVmo vmo)
         {
-            return _cal.DeleteByProjectID(ProjectID);
+            var dto = Vmo2AddDto(vmo);
+            var id = await _cal.Insert(dto);
+            return id;
         }
 
-        public Task<List<XhsProjectSiteDto>> GetAll()
+        /// <summary>
+        /// 鎻掑叆澶氭潯
+        /// </summary>
+        public async virtual Task<bool> Inserts(List<XhsProjectSiteVmo> vmoList)
         {
-            return _cal.GetAll();
+            var dtoList = Vmo2AddDtos(vmoList);
+            var bol = await _cal.Inserts(dtoList);
+            return bol;
         }
 
-        public Task<XhsProjectSiteDto> GetByID(long ID)
+        #endregion
+
+        #region Update
+
+        /// <summary>
+        /// 鏇存柊
+        /// </summary>
+        public async virtual Task<bool> Update(XhsProjectSiteVmo vmo)
         {
-            return _cal.GetByID(ID);
+            var dto = Vmo2UpdateDto(vmo);
+            var bol = await _cal.Update(dto);
+            return bol;
         }
 
-        public Task<List<XhsProjectSiteDto>> GetByIds(List<long> Ids)
+        /// <summary>
+        /// 鎵归噺鏇存柊
+        /// </summary>
+        public async virtual Task<bool> Updates(List<XhsProjectSiteVmo> vmoList)
         {
-            return _cal.GetByIds(Ids);
+            var dtoList = Vmo2UpdateDtos(vmoList);
+            var bol = await _cal.Updates(dtoList);
+            return bol;
         }
 
-        public Task<List<XhsProjectSiteDto>> GetByProjectID(long ProjectID)
+        /// <summary>
+        /// 鏇存柊鎺掑簭鐮�
+        /// </summary>
+        public async virtual Task<bool> UpdateSortCode(long ID, int SortCode)
         {
-            return _cal.GetByProjectID(ProjectID);
+            var bol = await _cal.UpdateSortCode(ID, SortCode);
+            return bol;
         }
 
-        public Task<long> Insert(AddXhsProjectSiteInput model)
+        /// <summary>
+        /// 鎵归噺鏇存柊缂栫爜
+        /// </summary>
+        public async virtual Task<bool> UpdateSorter(List<Yw.Vmo.Sorter> Sorters)
         {
-            return _cal.Insert(model);
+            var dtoList = Sorters.ToDtoList();
+            var bol = await _cal.UpdateSorter(dtoList);
+            return bol;
         }
 
-        public Task<bool> Inserts(List<AddXhsProjectSiteInput> list)
+        /// <summary>
+        /// 鏇存柊 Paras
+        /// </summary>
+        public async virtual Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
         {
-            return _cal.Inserts(list);
+            return await _cal.UpdateParas(ID, Paras);
         }
 
-        public Task<bool> IsExistByProjectID(long ProjectID)
+        /// <summary>
+        /// 鏇存柊 Flags
+        /// </summary>
+        public async virtual Task<bool> UpdateFlags(long ID, List<string> Flags)
         {
-            return _cal.IsExistByProjectID(ProjectID);
+            return await _cal.UpdateFlags(ID, Flags);
         }
 
-        public Task<bool> Update(UpdateXhsProjectSiteInput model)
+        /// <summary>
+        /// 鏇存柊 UseStatus
+        /// </summary>
+        public async virtual Task<bool> UpdateUseStatus(long ID, int UseStatus)
         {
-            return _cal.Update(model);
+            return await _cal.UpdateUseStatus(ID, UseStatus);
         }
 
-        public Task<bool> UpdateFlags(long ID, List<string> Flags)
+        #endregion
+
+        #region Exist
+
+        /// <summary>
+        /// 閫氳繃 ProjectID 鍒ゆ柇鏄惁瀛樺湪
+        /// </summary>
+        public async virtual Task<bool> IsExistByProjectID(long ProjectID)
         {
-            return _cal.UpdateFlags(ID, Flags);
+            return await _cal.IsExistByProjectID(ProjectID);
         }
 
-        public Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
+
+        #endregion
+
+        #region Delete
+
+        /// <summary>
+        /// 鍏ㄩ儴鍒犻櫎
+        /// </summary>
+        public async virtual Task<bool> DeleteAll()
         {
-            return _cal.UpdateParas(ID, Paras);
+            var bol = await _cal.DeleteAll();
+            return bol;
         }
 
-        public Task<bool> Updates(List<UpdateXhsProjectSiteInput> list)
+        /// <summary>
+        /// 閫氳繃 ID 鍒犻櫎
+        /// </summary>
+        public async virtual Task<bool> DeleteByID(long ID)
         {
-            return _cal.Updates(list);
+            var bol = await _cal.DeleteByID(ID);
+            return bol;
         }
 
-        public Task<bool> UpdateSortCode(long ID, int SortCode)
+        /// <summary>
+        /// 閫氳繃 Ids 鍒犻櫎
+        /// </summary>
+        public async virtual Task<bool> DeleteByIds(List<long> Ids)
         {
-            return _cal.UpdateSortCode(ID, SortCode);
+            var bol = await _cal.DeleteByIds(Ids);
+            return bol;
         }
 
-        public Task<bool> UpdateSorter(List<UpdateSortCodeInput> Sorters)
+        /// <summary>
+        /// 閫氳繃 ProjectID 鍒犻櫎
+        /// </summary>
+        public async virtual Task<bool> DeleteByProjectID(long ProjectID)
         {
-            return _cal.UpdateSorter(Sorters);
+            return await _cal.DeleteByProjectID(ProjectID);
         }
 
-        public Task<bool> UpdateUseStatus(long ID, int UseStatus)
-        {
-            return _cal.UpdateUseStatus(ID, UseStatus);
-        }
+        #endregion
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
     }
 }
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSiteStd.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSiteStd.cs
deleted file mode 100644
index f6e5f91..0000000
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSiteStd.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-锘縰sing HStation.CAL;
-
-namespace HStation.BLL
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectSiteStd : IXhsProjectSiteStd
-    {
-        private readonly HStation.CAL.IXhsProjectSiteStd _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsProjectSiteStd>();
-
-        public Task<List<XhsProjectSiteStdDto>> GetAll()
-        {
-            return _cal.GetAll();
-        }
-
-        public Task<List<XhsProjectSiteStdDto>> GetByProjectID(long ProjectID)
-        {
-            return _cal.GetByProjectID(ProjectID);
-        }
-
-        public Task<XhsProjectSiteStdDto> GetDefaultByProjectID(long ProjectID)
-        {
-            return _cal.GetDefaultByProjectID(ProjectID);
-        }
-
-
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSite_Instance.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSite_Instance.cs
new file mode 100644
index 0000000..96895f8
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSite_Instance.cs
@@ -0,0 +1,84 @@
+锘縩amespace HStation.BLL
+{
+    public partial class XhsProjectSite
+    {
+        //dto to vmo
+        internal static HStation.Vmo.XhsProjectSiteVmo Dto2Vmo(HStation.Dto.XhsProjectSiteDto dto)
+        {
+            if (dto == null)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Dto.XhsProjectSiteDto, HStation.Vmo.XhsProjectSiteVmo>()
+            ).CreateMapper();
+            var vmo = mapper.Map<HStation.Dto.XhsProjectSiteDto, HStation.Vmo.XhsProjectSiteVmo>(dto);
+            return vmo;
+        }
+
+        //dto to vmos
+        internal static List<HStation.Vmo.XhsProjectSiteVmo> Dto2Vmos(List<HStation.Dto.XhsProjectSiteDto> dtos)
+        {
+            if (dtos == null || dtos.Count < 1)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Dto.XhsProjectSiteDto, HStation.Vmo.XhsProjectSiteVmo>()
+            ).CreateMapper();
+            var vmos = mapper.Map<List<HStation.Dto.XhsProjectSiteDto>, List<HStation.Vmo.XhsProjectSiteVmo>>(dtos);
+            return vmos;
+        }
+
+        //vmo to add dto
+        internal static HStation.Dto.AddXhsProjectSiteInput Vmo2AddDto(HStation.Vmo.XhsProjectSiteVmo vmo)
+        {
+            if (vmo == null)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsProjectSiteVmo, HStation.Dto.AddXhsProjectSiteInput>()
+            ).CreateMapper();
+            var dto = mapper.Map<HStation.Vmo.XhsProjectSiteVmo, HStation.Dto.AddXhsProjectSiteInput>(vmo);
+            return dto;
+        }
+
+        //vmo to add dtos
+        internal static List<HStation.Dto.AddXhsProjectSiteInput> Vmo2AddDtos(List<HStation.Vmo.XhsProjectSiteVmo> vmoList)
+        {
+            if (vmoList == null || vmoList.Count < 1)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsProjectSiteVmo, HStation.Dto.AddXhsProjectSiteInput>()
+            ).CreateMapper();
+            var dtoList = mapper.Map<List<HStation.Vmo.XhsProjectSiteVmo>, List<HStation.Dto.AddXhsProjectSiteInput>>(vmoList);
+            return dtoList;
+        }
+
+        //vmo to update dto
+        internal static HStation.Dto.UpdateXhsProjectSiteInput Vmo2UpdateDto(HStation.Vmo.XhsProjectSiteVmo vmo)
+        {
+            if (vmo == null)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsProjectSiteVmo, HStation.Dto.UpdateXhsProjectSiteInput>()
+            ).CreateMapper();
+            var dto = mapper.Map<HStation.Vmo.XhsProjectSiteVmo, HStation.Dto.UpdateXhsProjectSiteInput>(vmo);
+            return dto;
+        }
+
+        //vmo to update dtos
+        internal static List<HStation.Dto.UpdateXhsProjectSiteInput> Vmo2UpdateDtos(List<HStation.Vmo.XhsProjectSiteVmo> vmoList)
+        {
+            if (vmoList == null || vmoList.Count < 1)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsProjectSiteVmo, HStation.Dto.UpdateXhsProjectSiteInput>()
+            ).CreateMapper();
+            var dtoList = mapper.Map<List<HStation.Vmo.XhsProjectSiteVmo>, List<HStation.Dto.UpdateXhsProjectSiteInput>>(vmoList);
+            return dtoList;
+        }
+
+    }
+}
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/03-scheme/XhsScheme.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/03-scheme/XhsScheme.cs
index bf68e43..64c864d 100644
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/03-scheme/XhsScheme.cs
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/03-scheme/XhsScheme.cs
@@ -1,122 +1,227 @@
-锘縰sing HStation.CAL;
+锘縰sing System.Security.Policy;
+using Yw.BLL;
 
 namespace HStation.BLL
 {
     /// <summary>
     ///
     /// </summary>
-    public class XhsScheme : IXhsScheme
+    public partial class XhsScheme
     {
         private readonly HStation.CAL.IXhsScheme _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsScheme>();
 
-        public Task<bool> BulkInserts(List<AddXhsSchemeInput> list)
+        #region Query
+
+        /// <summary>
+        /// 鑾峰彇鎵�鏈�
+        /// </summary>
+        public async virtual Task<List<XhsSchemeVmo>> GetAll()
         {
-            return _cal.BulkInserts(list);
+            var dtoList = await _cal.GetAll();
+            return Dto2Vmos(dtoList);
         }
 
-        public Task<bool> BulkUpdates(List<UpdateXhsSchemeInput> list)
+        /// <summary>
+        /// 閫氳繃 ID 鑾峰彇
+        /// </summary>
+        public async virtual Task<XhsSchemeVmo> GetByID(long ID)
         {
-            return _cal.BulkUpdates(list);
+            var dto = await _cal.GetByID(ID);
+            return Dto2Vmo(dto);
         }
 
-        public Task<bool> DeleteAll()
+        /// <summary>
+        /// 閫氳繃 Ids 鑾峰彇
+        /// </summary>
+        public async virtual Task<List<XhsSchemeVmo>> GetByIds(List<long> Ids)
         {
-            return _cal.DeleteAll();
+            var dtoList = await _cal.GetByIds(Ids);
+            return Dto2Vmos(dtoList);
         }
 
-        public Task<bool> DeleteByID(long ID)
+        /// <summary>
+        /// 閫氳繃 ProjectID 鑾峰彇
+        /// </summary>
+        public async virtual Task<List<XhsSchemeVmo>> GetByProjectID(long ProjectID)
         {
-            return _cal.DeleteByID(ID);
+            var dtoList = await _cal.GetByProjectID(ProjectID);
+            return Dto2Vmos(dtoList);
         }
 
-        public Task<bool> DeleteByIds(List<long> Ids)
+        /// <summary>
+        /// 閫氳繃 SiteID 鑾峰彇
+        /// </summary>
+        public async virtual Task<List<XhsSchemeVmo>> GetBySiteID(long SiteID)
         {
-            return _cal.DeleteByIds(Ids);
+            var dtoList = await _cal.GetBySiteID(SiteID);
+            return Dto2Vmos(dtoList);
         }
 
-        public Task<List<XhsSchemeDto>> GetAll()
+        /// <summary>
+        /// 閫氳繃 SiteIds 鑾峰彇
+        /// </summary>
+        public async virtual Task<List<XhsSchemeVmo>> GetBySiteIds(List<long> SiteIds)
         {
-            return _cal.GetAll();
+            var dtoList = await _cal.GetBySiteIds(SiteIds);
+            return Dto2Vmos(dtoList);
         }
 
-        public Task<XhsSchemeDto> GetByID(long ID)
+        #endregion
+
+        #region Insert
+
+        /// <summary>
+        /// 鎻掑叆涓�鏉�
+        /// </summary>
+        public async virtual Task<long> Insert(XhsSchemeVmo vmo)
         {
-            return _cal.GetByID(ID);
+            var dto = Vmo2AddDto(vmo);
+            var id = await _cal.Insert(dto);
+            return id;
         }
 
-        public Task<List<XhsSchemeDto>> GetByIds(List<long> Ids)
+        /// <summary>
+        /// 鎻掑叆澶氭潯
+        /// </summary>
+        public async virtual Task<bool> Inserts(List<XhsSchemeVmo> vmoList)
         {
-            return _cal.GetByIds(Ids);
+            var dtoList = Vmo2AddDtos(vmoList);
+            var bol = await _cal.Inserts(dtoList);
+            return bol;
         }
 
-        public Task<List<XhsSchemeDto>> GetByProjectID(long ProjectID)
+        #endregion
+
+        #region Update
+
+        /// <summary>
+        /// 鏇存柊
+        /// </summary>
+        public async virtual Task<bool> Update(XhsSchemeVmo vmo)
         {
-            return _cal.GetByProjectID(ProjectID);
+            var dto = Vmo2UpdateDto(vmo);
+            var bol = await _cal.Update(dto);
+            return bol;
         }
 
-        public Task<List<XhsSchemeDto>> GetBySiteID(long SiteID)
+        /// <summary>
+        /// 鎵归噺鏇存柊
+        /// </summary>
+        public async virtual Task<bool> Updates(List<XhsSchemeVmo> vmoList)
         {
-            return _cal.GetBySiteID(SiteID);
+            var dtoList = Vmo2UpdateDtos(vmoList);
+            var bol = await _cal.Updates(dtoList);
+            return bol;
         }
 
-        public Task<List<XhsSchemeDto>> GetBySiteIds(List<long> SiteIds)
+        /// <summary>
+        /// 鏇存柊鎺掑簭鐮�
+        /// </summary>
+        public async virtual Task<bool> UpdateSortCode(long ID, int SortCode)
         {
-            return _cal.GetBySiteIds(SiteIds);
+            var bol = await _cal.UpdateSortCode(ID, SortCode);
+            return bol;
         }
 
-        public Task<long> Insert(AddXhsSchemeInput model)
+        /// <summary>
+        /// 鎵归噺鏇存柊缂栫爜
+        /// </summary>
+        public async virtual Task<bool> UpdateSorter(List<Yw.Vmo.Sorter> Sorters)
         {
-            return _cal.Insert(model);
+            var dtoList = Sorters.ToDtoList();
+            var bol = await _cal.UpdateSorter(dtoList);
+            return bol;
         }
 
-        public Task<bool> Inserts(List<AddXhsSchemeInput> list)
+        /// <summary>
+        /// 鏇存柊 Paras
+        /// </summary>
+        public async virtual Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
         {
-            return _cal.Inserts(list);
+            return await _cal.UpdateParas(ID, Paras);
         }
 
-        public Task<bool> IsExistByProjectID(long ProjectID)
+        /// <summary>
+        /// 鏇存柊 Flags
+        /// </summary>
+        public async virtual Task<bool> UpdateFlags(long ID, List<string> Flags)
         {
-            return _cal.IsExistByProjectID(ProjectID);
+            return await _cal.UpdateFlags(ID, Flags);
         }
 
-        public Task<bool> IsExistBySiteID(long SiteID)
+        /// <summary>
+        /// 鏇存柊 UseStatus
+        /// </summary>
+        public async virtual Task<bool> UpdateUseStatus(long ID, int UseStatus)
         {
-            return _cal.IsExistBySiteID(SiteID);
+            return await _cal.UpdateUseStatus(ID, UseStatus);
         }
 
-        public Task<bool> Update(UpdateXhsSchemeInput model)
+        #endregion
+
+        #region Exist
+
+        /// <summary>
+        /// 閫氳繃 ProjectID 鍒ゆ柇鏄惁瀛樺湪
+        /// </summary>
+        public async virtual Task<bool> IsExistByProjectID(long ProjectID)
         {
-            return _cal.Update(model);
+            return await _cal.IsExistByProjectID(ProjectID);
         }
 
-        public Task<bool> UpdateFlags(long ID, List<string> Flags)
+        /// <summary>
+        /// 閫氳繃 SiteID 鍒ゆ柇鏄惁瀛樺湪
+        /// </summary>
+        public async virtual Task<bool> IsExistBySiteID(long SiteID)
         {
-            return _cal.UpdateFlags(ID, Flags);
+            return await _cal.IsExistBySiteID(SiteID);
         }
 
-        public Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
+        #endregion
+
+        #region Delete
+
+        /// <summary>
+        /// 鍏ㄩ儴鍒犻櫎
+        /// </summary>
+        public async virtual Task<bool> DeleteAll()
         {
-            return _cal.UpdateParas(ID, Paras);
+            var bol = await _cal.DeleteAll();
+            return bol;
         }
 
-        public Task<bool> Updates(List<UpdateXhsSchemeInput> list)
+        /// <summary>
+        /// 閫氳繃 ID 鍒犻櫎
+        /// </summary>
+        public async virtual Task<bool> DeleteByID(long ID)
         {
-            return _cal.Updates(list);
+            var bol = await _cal.DeleteByID(ID);
+            return bol;
         }
 
-        public Task<bool> UpdateSortCode(long ID, int SortCode)
+        /// <summary>
+        /// 閫氳繃 Ids 鍒犻櫎
+        /// </summary>
+        public async virtual Task<bool> DeleteByIds(List<long> Ids)
         {
-            return _cal.UpdateSortCode(ID, SortCode);
+            var bol = await _cal.DeleteByIds(Ids);
+            return bol;
         }
 
-        public Task<bool> UpdateSorter(List<UpdateSortCodeInput> Sorters)
-        {
-            return _cal.UpdateSorter(Sorters);
-        }
 
-        public Task<bool> UpdateUseStatus(long ID, int UseStatus)
-        {
-            return _cal.UpdateUseStatus(ID, UseStatus);
-        }
+        #endregion
+
+
+
+
+
+
+
+
+
+
+
+
+
     }
 }
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/03-scheme/XhsSchemeStd.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/03-scheme/XhsSchemeStd.cs
deleted file mode 100644
index cfb7eee..0000000
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/03-scheme/XhsSchemeStd.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-锘縰sing HStation.CAL;
-
-namespace HStation.BLL
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsSchemeStd : IXhsSchemeStd
-    {
-        private readonly HStation.CAL.IXhsSchemeStd _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsSchemeStd>();
-
-        public Task<List<XhsSchemeStdDto>> GetAll()
-        {
-            return _cal.GetAll();
-        }
-
-        public Task<List<XhsSchemeStdDto>> GetByProjectID(long ProjectID)
-        {
-            return _cal.GetByProjectID(ProjectID);
-        }
-
-        public Task<List<XhsSchemeStdDto>> GetBySiteID(long SiteID)
-        {
-            return _cal.GetBySiteID(SiteID);
-        }
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/03-scheme/XhsScheme_Instance.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/03-scheme/XhsScheme_Instance.cs
new file mode 100644
index 0000000..556c835
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/03-scheme/XhsScheme_Instance.cs
@@ -0,0 +1,84 @@
+锘縩amespace HStation.BLL
+{
+    public partial class XhsScheme
+    {
+        //dto to vmo
+        private static HStation.Vmo.XhsSchemeVmo Dto2Vmo(HStation.Dto.XhsSchemeDto dto)
+        {
+            if (dto == null)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Dto.XhsSchemeDto, HStation.Vmo.XhsSchemeVmo>()
+            ).CreateMapper();
+            var vmo = mapper.Map<HStation.Dto.XhsSchemeDto, HStation.Vmo.XhsSchemeVmo>(dto);
+            return vmo;
+        }
+
+        //dto to vmos
+        private static List<HStation.Vmo.XhsSchemeVmo> Dto2Vmos(List<HStation.Dto.XhsSchemeDto> dtos)
+        {
+            if (dtos == null || dtos.Count < 1)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Dto.XhsSchemeDto, HStation.Vmo.XhsSchemeVmo>()
+            ).CreateMapper();
+            var vmos = mapper.Map<List<HStation.Dto.XhsSchemeDto>, List<HStation.Vmo.XhsSchemeVmo>>(dtos);
+            return vmos;
+        }
+
+        //vmo to add dto
+        private static HStation.Dto.AddXhsSchemeInput Vmo2AddDto(HStation.Vmo.XhsSchemeVmo vmo)
+        {
+            if (vmo == null)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsSchemeVmo, HStation.Dto.AddXhsSchemeInput>()
+            ).CreateMapper();
+            var dto = mapper.Map<HStation.Vmo.XhsSchemeVmo, HStation.Dto.AddXhsSchemeInput>(vmo);
+            return dto;
+        }
+
+        //vmo to add dtos
+        private static List<HStation.Dto.AddXhsSchemeInput> Vmo2AddDtos(List<HStation.Vmo.XhsSchemeVmo> vmoList)
+        {
+            if (vmoList == null || vmoList.Count < 1)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsSchemeVmo, HStation.Dto.AddXhsSchemeInput>()
+            ).CreateMapper();
+            var dtoList = mapper.Map<List<HStation.Vmo.XhsSchemeVmo>, List<HStation.Dto.AddXhsSchemeInput>>(vmoList);
+            return dtoList;
+        }
+
+        //vmo to update dto
+        private static HStation.Dto.UpdateXhsSchemeInput Vmo2UpdateDto(HStation.Vmo.XhsSchemeVmo vmo)
+        {
+            if (vmo == null)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsSchemeVmo, HStation.Dto.UpdateXhsSchemeInput>()
+            ).CreateMapper();
+            var dto = mapper.Map<HStation.Vmo.XhsSchemeVmo, HStation.Dto.UpdateXhsSchemeInput>(vmo);
+            return dto;
+        }
+
+        //vmo to update dtos
+        private static List<HStation.Dto.UpdateXhsSchemeInput> Vmo2UpdateDtos(List<HStation.Vmo.XhsSchemeVmo> vmoList)
+        {
+            if (vmoList == null || vmoList.Count < 1)
+            {
+                return default;
+            }
+            var mapper = new MapperConfiguration(cfg => cfg.CreateMap<HStation.Vmo.XhsSchemeVmo, HStation.Dto.UpdateXhsSchemeInput>()
+            ).CreateMapper();
+            var dtoList = mapper.Map<List<HStation.Vmo.XhsSchemeVmo>, List<HStation.Dto.UpdateXhsSchemeInput>>(vmoList);
+            return dtoList;
+        }
+
+    }
+}
diff --git a/BLL/HStation.BLL.Xhs.Core/GlobalUsings.cs b/BLL/HStation.BLL.Xhs.Core/GlobalUsings.cs
index 56d1037..1ec0820 100644
--- a/BLL/HStation.BLL.Xhs.Core/GlobalUsings.cs
+++ b/BLL/HStation.BLL.Xhs.Core/GlobalUsings.cs
@@ -1,6 +1,8 @@
-锘縢lobal using HStation.BLL.Xhs;
-global using HStation.Dto;
-global using Mapster;
+锘縢lobal using Mapster;
 global using System.Linq;
+global using AutoMapper;
 global using Yw.Dto;
+global using HStation.Dto;
+global using HStation.Vmo;
+global using HStation.BLL.Xhs;
 
diff --git a/BLL/HStation.BLL.Xhs.Core/HStation.BLL.Xhs.Core.csproj b/BLL/HStation.BLL.Xhs.Core/HStation.BLL.Xhs.Core.csproj
index b8a9e31..037c7be 100644
--- a/BLL/HStation.BLL.Xhs.Core/HStation.BLL.Xhs.Core.csproj
+++ b/BLL/HStation.BLL.Xhs.Core/HStation.BLL.Xhs.Core.csproj
@@ -37,7 +37,6 @@
 	</ItemGroup>
 
 	<ItemGroup>
-	  <ProjectReference Include="..\..\Dto\HStation.Dto.Xhs.Core\HStation.Dto.Xhs.Core.csproj" />
 	  <ProjectReference Include="..\..\Vmo\HStation.Vmo.Xhs.Core\HStation.Vmo.Xhs.Core.csproj" />
 	  <ProjectReference Include="..\HStation.BLL.Core\HStation.BLL.Core.csproj" />
 	</ItemGroup>
diff --git a/Vmo/HStation.Vmo.Core/HStation.Vmo.Core.csproj b/Vmo/HStation.Vmo.Core/HStation.Vmo.Core.csproj
index 2011792..8cd47a9 100644
--- a/Vmo/HStation.Vmo.Core/HStation.Vmo.Core.csproj
+++ b/Vmo/HStation.Vmo.Core/HStation.Vmo.Core.csproj
@@ -7,7 +7,11 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.Vmo.Core" Version="3.0.1" />
+    <PackageReference Include="Yw.Vmo.Core" Version="3.0.3" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Dto\HStation.Dto.Core\HStation.Dto.Core.csproj" />
   </ItemGroup>
 
 </Project>
diff --git a/Vmo/HStation.Vmo.Xhs.Core/01-project/XhsProjectExtensionsVmo.cs b/Vmo/HStation.Vmo.Xhs.Core/01-project/XhsProjectExtensionsVmo.cs
new file mode 100644
index 0000000..dc2fa8e
--- /dev/null
+++ b/Vmo/HStation.Vmo.Xhs.Core/01-project/XhsProjectExtensionsVmo.cs
@@ -0,0 +1,31 @@
+锘縩amespace HStation.Vmo
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class XhsProjectExtensionsVmo : XhsProjectVmo
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public XhsProjectExtensionsVmo() { }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public XhsProjectExtensionsVmo(XhsProjectDto project, List<XhsProjectSiteDto> siteList) : base(project)
+        {
+            this.SiteList = siteList?.Select(x => new XhsProjectSiteVmo(x)).ToList();
+        }
+
+        public XhsProjectExtensionsVmo(XhsProjectExtensionsDto rhs) : base(rhs)
+        {
+            this.SiteList = rhs.SiteList?.Select(x => new XhsProjectSiteVmo(x)).ToList();
+        }
+
+        /// <summary>
+        /// 绔欑偣鍒楄〃
+        /// </summary>
+        public List<XhsProjectSiteVmo> SiteList { get; set; }
+    }
+}
diff --git a/Vmo/HStation.Vmo.Xhs.Core/XhsProjectExtensions.cs b/Vmo/HStation.Vmo.Xhs.Core/01-project/XhsProjectVmo.cs
similarity index 64%
rename from Vmo/HStation.Vmo.Xhs.Core/XhsProjectExtensions.cs
rename to Vmo/HStation.Vmo.Xhs.Core/01-project/XhsProjectVmo.cs
index cd27192..90bf9ba 100644
--- a/Vmo/HStation.Vmo.Xhs.Core/XhsProjectExtensions.cs
+++ b/Vmo/HStation.Vmo.Xhs.Core/01-project/XhsProjectVmo.cs
@@ -1,7 +1,33 @@
-锘縩amespace HStation.Vmo.Xhs
+锘縩amespace HStation.Vmo
 {
-    public class XhsProjectExtensions
+    /// <summary>
+    ///
+    /// </summary>
+    public class XhsProjectVmo
     {
+        /// <summary>
+        ///
+        /// </summary>
+        public XhsProjectVmo() { }
+
+        /// <summary>
+        ///
+        /// </summary>
+        public XhsProjectVmo(XhsProjectDto rhs)
+        {
+            this.ID = rhs.ID;
+            this.ParentID = rhs.ParentID;
+            this.NO = rhs.NO;
+            this.Name = rhs.Name;
+            this.Address = rhs.Address;
+            this.Customer = rhs.Customer;
+            this.Paras = rhs.Paras;
+            this.Flags = rhs.Flags;
+            this.TagName = rhs.TagName;
+            this.SortCode = rhs.SortCode;
+            this.Description = rhs.Description;
+        }
+
         /// <summary>
         /// id
         /// </summary>
@@ -56,10 +82,5 @@
         /// 璇存槑
         /// </summary>
         public string Description { get; set; }
-
-        /// <summary>
-        /// 绔欑偣鍒楄〃
-        /// </summary>
-        public List<XhsProjectSite> SiteList { get; set; }
     }
 }
\ No newline at end of file
diff --git a/Vmo/HStation.Vmo.Xhs.Core/02-project-site/XhsProjectSiteVmo.cs b/Vmo/HStation.Vmo.Xhs.Core/02-project-site/XhsProjectSiteVmo.cs
new file mode 100644
index 0000000..c55f4fa
--- /dev/null
+++ b/Vmo/HStation.Vmo.Xhs.Core/02-project-site/XhsProjectSiteVmo.cs
@@ -0,0 +1,68 @@
+锘縩amespace HStation.Vmo
+{
+    /// <summary>
+    ///
+    /// </summary>
+    public class XhsProjectSiteVmo
+    {
+        /// <summary>
+        ///
+        /// </summary>
+        public XhsProjectSiteVmo() { }
+
+        /// <summary>
+        ///
+        /// </summary>
+        public XhsProjectSiteVmo(XhsProjectSiteDto rhs)
+        {
+            this.ID = rhs.ID;
+            this.ProjectID = rhs.ProjectID;
+            this.Name = rhs.Name;
+            this.Paras = rhs.Paras;
+            this.Flags = rhs.Flags;
+            this.UseStatus = rhs.UseStatus;
+            this.SortCode = rhs.SortCode;
+            this.Description = rhs.Description;
+        }
+
+        /// <summary>
+        /// id
+        /// </summary>
+        public long ID { get; set; }
+
+        /// <summary>
+        /// 椤圭洰id
+        /// </summary>
+        public long ProjectID { get; set; }
+
+        /// <summary>
+        /// 鍚嶇О
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 鍙傛暟
+        /// </summary>
+        public Dictionary<string, string> Paras { get; set; }
+
+        /// <summary>
+        /// 鏍囩
+        /// </summary>
+        public List<string> Flags { get; set; }
+
+        /// <summary>
+        /// 浣跨敤鐘舵��
+        /// </summary>
+        public Yw.Model.eUseStatus UseStatus { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭鐮�
+        /// </summary>
+        public int SortCode { get; set; }
+
+        /// <summary>
+        /// 璇存槑
+        /// </summary>
+        public string Description { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/Vmo/HStation.Vmo.Xhs.Core/03-scheme/XhsSchemeVmo.cs b/Vmo/HStation.Vmo.Xhs.Core/03-scheme/XhsSchemeVmo.cs
new file mode 100644
index 0000000..6b2a91c
--- /dev/null
+++ b/Vmo/HStation.Vmo.Xhs.Core/03-scheme/XhsSchemeVmo.cs
@@ -0,0 +1,80 @@
+锘縩amespace HStation.Vmo
+{
+    /// <summary>
+    ///
+    /// </summary>
+    public class XhsSchemeVmo
+    {
+        /// <summary>
+        ///
+        /// </summary>
+        public XhsSchemeVmo() { }
+
+        /// <summary>
+        ///
+        /// </summary>
+        public XhsSchemeVmo(XhsSchemeDto rhs)
+        {
+            this.ID = rhs.ID;
+            this.SiteID = rhs.SiteID;
+            this.NO = rhs.NO;
+            this.Name = rhs.Name;
+            this.SchemeType = rhs.SchemeType;
+            this.Paras = rhs.Paras;
+            this.Flags = rhs.Flags;
+            this.UseStatus = rhs.UseStatus;
+            this.SortCode = rhs.SortCode;
+            this.Description = rhs.Description;
+        }
+
+        /// <summary>
+        /// id
+        /// </summary>
+        public long ID { get; set; }
+
+        /// <summary>
+        /// 椤圭洰绔檌d
+        /// </summary>
+        public long SiteID { get; set; }
+
+        /// <summary>
+        /// 缂栧彿
+        /// </summary>
+        public string NO { get; set; }
+
+        /// <summary>
+        /// 鍚嶇О
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 鏂规绫诲瀷
+        /// </summary>
+        public HStation.Xhs.eSchemeType SchemeType { get; set; }
+
+        /// <summary>
+        /// 鍙傛暟
+        /// </summary>
+        public Dictionary<string, string> Paras { get; set; }
+
+        /// <summary>
+        /// 鏍囩
+        /// </summary>
+        public List<string> Flags { get; set; }
+
+        /// <summary>
+        /// 浣跨敤鐘舵��
+        /// </summary>
+        public Yw.Model.eUseStatus UseStatus { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭鐮�
+        /// </summary>
+        public int SortCode { get; set; }
+
+        /// <summary>
+        /// 璇存槑
+        /// </summary>
+        public string Description { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/Vmo/HStation.Vmo.Xhs.Core/GlobalUsings.cs b/Vmo/HStation.Vmo.Xhs.Core/GlobalUsings.cs
new file mode 100644
index 0000000..4d3b2ad
--- /dev/null
+++ b/Vmo/HStation.Vmo.Xhs.Core/GlobalUsings.cs
@@ -0,0 +1 @@
+锘縢lobal using HStation.Dto;
\ No newline at end of file
diff --git a/Vmo/HStation.Vmo.Xhs.Core/HStation.Vmo.Xhs.Core.csproj b/Vmo/HStation.Vmo.Xhs.Core/HStation.Vmo.Xhs.Core.csproj
index 2011792..adceaeb 100644
--- a/Vmo/HStation.Vmo.Xhs.Core/HStation.Vmo.Xhs.Core.csproj
+++ b/Vmo/HStation.Vmo.Xhs.Core/HStation.Vmo.Xhs.Core.csproj
@@ -3,11 +3,12 @@
   <PropertyGroup>
     <TargetFramework>net6.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
-    <Nullable>enable</Nullable>
+    <Nullable>disable</Nullable>
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.Vmo.Core" Version="3.0.1" />
+    <ProjectReference Include="..\..\Dto\HStation.Dto.Xhs.Core\HStation.Dto.Xhs.Core.csproj" />
+    <ProjectReference Include="..\HStation.Vmo.Core\HStation.Vmo.Core.csproj" />
   </ItemGroup>
 
 </Project>
diff --git a/Vmo/HStation.Vmo.Xhs.Core/XhsProjectSite.cs b/Vmo/HStation.Vmo.Xhs.Core/XhsProjectSite.cs
deleted file mode 100644
index 639c430..0000000
--- a/Vmo/HStation.Vmo.Xhs.Core/XhsProjectSite.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-锘縰sing Yw.Vmo;
-
-namespace HStation.Vmo.Xhs
-{
-    public class XhsProjectSite
-    {
-        /// <summary>
-        /// id
-        /// </summary>
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 椤圭洰id
-        /// </summary>
-        public long ProjectID { get; set; }
-
-        /// <summary>
-        /// 鍚嶇О
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 鍙傛暟
-        /// </summary>
-        public Dictionary<string, string> Paras { get; set; }
-
-        /// <summary>
-        /// 鏍囩
-        /// </summary>
-        public List<string> Flags { get; set; }
-
-        /// <summary>
-        /// 浣跨敤鐘舵��
-        /// </summary>
-        public eUseStatus UseStatus { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/00-core/BimfaceFileStateHelper.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/00-core/BimfaceFileStateHelper.cs
index dd323fd..82ad544 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/00-core/BimfaceFileStateHelper.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/00-core/BimfaceFileStateHelper.cs
@@ -1,24 +1,25 @@
 锘縰sing Yw.Dto;
+using Yw.Vmo;
 
 namespace HStation.WinFrmUI
 {
     public class BimfaceFileStateHelper
     {
         //鏌ユ壘椤圭洰鏄惁瀛樺湪妯″瀷
-        public static async Task<BimfaceFileStdDto> IsHaveBimFace(long ProjectID)
+        public static async Task<BimfaceFileVmo> IsHaveBimFace(long ProjectID)
         {
-            var projectSite = await new BLL.XhsProjectSiteStd().GetDefaultByProjectID(ProjectID);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(ProjectID);
             if (projectSite == null)
             {
                 return null;
             }
-            var relation = await new Yw.BLL.BimfaceFileRelationStd()
+            var relation = await BLLFactory<Yw.BLL.BimfaceFileRelation>.Instance
                .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, projectSite.ID, Yw.Bimface.Purpose.Simulation);
             if (relation == null)
             {
                 return null;
             }
-            var bimfaceFile = await new Yw.BLL.BimfaceFileStd().GetByID(relation.BimfaceFileID);
+            var bimfaceFile = await BLLFactory<Yw.BLL.BimfaceFile>.Instance.GetByID(relation.BimfaceFileID);
             if (bimfaceFile == null)
             {
                 return null;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/01-project/HomeXhsProjectTreeListCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/01-project/HomeXhsProjectTreeListCtrl.cs
index 0f09f7a..26762d2 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/01-project/HomeXhsProjectTreeListCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/01-project/HomeXhsProjectTreeListCtrl.cs
@@ -1,4 +1,5 @@
 锘縰sing DevExpress.Utils;
+using HStation.Vmo;
 using NetTaste;
 using Yw.WinFrmUI.Page;
 
@@ -17,14 +18,14 @@
         /// <summary>
         /// 閫夋嫨椤圭洰浜嬩欢
         /// </summary>
-        public event Action<XhsProjectStdDto> SelectProjectEvent;
+        public event Action<XhsProjectVmo> SelectProjectEvent;
 
         /// <summary>
         /// 鍒锋柊鏁版嵁浜嬩欢
         /// </summary>
         public event Action RefreshDataEvent;
 
-        public event Action<XhsProjectStdDto> JumpDirectEvent;
+        public event Action<XhsProjectVmo> JumpDirectEvent;
 
         /// <summary>
         /// 椤圭洰瀵煎叆瀹屾垚浜嬩欢
@@ -36,7 +37,7 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public async void SetBindingData(List<XhsProjectStdDto> allProjectList)
+        public async void SetBindingData(List<XhsProjectVmo> allProjectList)
         {
             _allBindingList = new List<HomeXhsProjectTreeViewModel>();
             foreach (var item in allProjectList)
@@ -60,18 +61,18 @@
         //鏌ユ壘椤圭洰鏄惁瀛樺湪妯″瀷
         private async Task<bool> IsHaveBimFace(long ProjectID)
         {
-            var projectSite = await new BLL.XhsProjectSiteStd().GetDefaultByProjectID(ProjectID);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(ProjectID);
             if (projectSite == null)
             {
                 return false;
             }
-            var relation = await new Yw.BLL.BimfaceFileRelationStd()
+            var relation = await BLLFactory<Yw.BLL.BimfaceFileRelation>.Instance
                .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, projectSite.ID, Yw.Bimface.Purpose.Simulation);
             if (relation == null)
             {
                 return false;
             }
-            var bimfaceFile = await new Yw.BLL.BimfaceFileStd().GetByID(relation.BimfaceFileID);
+            var bimfaceFile = await BLLFactory<Yw.BLL.BimfaceFile>.Instance.GetByID(relation.BimfaceFileID);
             if (bimfaceFile == null)
             {
                 return false;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/01-project/HomeXhsProjectTreeViewModel.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/01-project/HomeXhsProjectTreeViewModel.cs
index 8484bdd..1be3a3f 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/01-project/HomeXhsProjectTreeViewModel.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/01-project/HomeXhsProjectTreeViewModel.cs
@@ -1,4 +1,6 @@
-锘縩amespace HStation.WinFrmUI
+锘縰sing HStation.Vmo;
+
+namespace HStation.WinFrmUI
 {
     /// <summary>
     ///
@@ -14,7 +16,7 @@
         /// <summary>
         ///
         /// </summary>
-        public HomeXhsProjectTreeViewModel(XhsProjectStdDto rhs, bool IsHave)
+        public HomeXhsProjectTreeViewModel(XhsProjectVmo rhs, bool IsHave)
         {
             this.ID = rhs.ID;
             this.ParentID = rhs.ParentID;
@@ -56,7 +58,7 @@
         /// <summary>
         /// 椤圭洰
         /// </summary>
-        public XhsProjectStdDto Project { get; set; }
+        public XhsProjectVmo Project { get; set; }
 
         /// <summary>
         /// 鍥炬爣绱㈠紩
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/IMapViewProjectListContainer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/IMapViewProjectListContainer.cs
index ba0cbcb..300e5aa 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/IMapViewProjectListContainer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/IMapViewProjectListContainer.cs
@@ -1,4 +1,6 @@
-锘縩amespace HStation.WinFrmUI
+锘縰sing HStation.Vmo;
+
+namespace HStation.WinFrmUI
 {
     /// <summary>
     /// 鏌ョ湅椤圭洰鍒楄〃瀹瑰櫒
@@ -13,7 +15,7 @@
         /// <summary>
         /// 璁剧疆椤圭洰鍒楄〃
         /// </summary>
-        Task<bool> SetProjectList(List<XhsProjectStdDto> allProjectList);
+        Task<bool> SetProjectList(List<XhsProjectVmo> allProjectList);
 
         /// <summary>
         /// 閫夋嫨椤圭洰
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/MapProjectViewModel.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/MapProjectViewModel.cs
index 3dcdbf2..5e08c15 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/MapProjectViewModel.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/MapProjectViewModel.cs
@@ -1,4 +1,5 @@
-锘縰sing Yw.Dto;
+锘縰sing HStation.Vmo;
+using Yw.Dto;
 
 namespace HStation.WinFrmUI
 {
@@ -15,7 +16,7 @@
         /// <summary>
         /// 
         /// </summary>
-        public MapProjectViewModel(XhsProjectStdDto project, MapInfoStdDto mapInfo)
+        public MapProjectViewModel(XhsProjectVmo project, MapInfoStdDto mapInfo)
         {
             this.Id = project.ID.ToString();
             this.Name = project.Name;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/MapViewProjectListContainer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/MapViewProjectListContainer.cs
index c91fac5..c1d8583 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/MapViewProjectListContainer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/02-map/MapViewProjectListContainer.cs
@@ -1,4 +1,6 @@
-锘縩amespace HStation.WinFrmUI
+锘縰sing HStation.Vmo;
+
+namespace HStation.WinFrmUI
 {
     public partial class MapViewProjectListContainer : UserControl, IMapViewProjectListContainer
     {
@@ -73,7 +75,7 @@
         /// <summary>
         /// 璁剧疆椤圭洰鍒楄〃
         /// </summary>
-        public async Task<bool> SetProjectList(List<XhsProjectStdDto> allProjectList)
+        public async Task<bool> SetProjectList(List<XhsProjectVmo> allProjectList)
         {
             if (!_isInitialized)
             {
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/03-property/HomeXhsProjectPropertyCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/03-property/HomeXhsProjectPropertyCtrl.cs
index 53def88..fdfe987 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/03-property/HomeXhsProjectPropertyCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/03-property/HomeXhsProjectPropertyCtrl.cs
@@ -3,6 +3,7 @@
 using DevExpress.XtraEditors.Repository;
 using DevExpress.XtraLayout.Utils;
 using DevExpress.XtraVerticalGrid.Events;
+using HStation.Vmo;
 
 namespace HStation.WinFrmUI
 {
@@ -19,7 +20,7 @@
         /// <summary>
         /// 璺宠浆浜嬩欢
         /// </summary>
-        public event Action<XhsProjectStdDto> JumpDirectEvent;
+        public event Action<XhsProjectVmo> JumpDirectEvent;
 
         /// <summary>
         /// 缁戝畾瀵硅薄
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/03-property/HomeXhsProjectPropertyViewModel.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/03-property/HomeXhsProjectPropertyViewModel.cs
index 33d96a1..e7d4de7 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/03-property/HomeXhsProjectPropertyViewModel.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/03-property/HomeXhsProjectPropertyViewModel.cs
@@ -1,4 +1,6 @@
-锘縩amespace HStation.WinFrmUI
+锘縰sing HStation.Vmo;
+
+namespace HStation.WinFrmUI
 {
     /// <summary>
     ///
@@ -15,7 +17,7 @@
         /// <summary>
         ///
         /// </summary>
-        public HomeXhsProjectPropertyViewModel(XhsProjectStdDto rhs)
+        public HomeXhsProjectPropertyViewModel(XhsProjectVmo rhs)
         {
             this.NO = rhs.NO;
             this.Name = rhs.Name;
@@ -97,6 +99,6 @@
         ///
         /// </summary>
         [Browsable(false)]
-        public XhsProjectStdDto Project { get; set; }
+        public XhsProjectVmo Project { get; set; }
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.cs
index 03ea776..d2b72ba 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage.cs
@@ -1,4 +1,5 @@
 锘縰sing DevExpress.Utils.Svg;
+using HStation.Vmo;
 using HStation.WinFrmUI.Xhs.PumpProduct;
 using Yw.WinFrmUI.Page;
 
@@ -24,8 +25,7 @@
             public SvgImage Image { get; set; }
         }
 
-        private Lazy<BLL.XhsProjectStd> _bllProjectStd = new(() => new BLL.XhsProjectStd());
-        private List<XhsProjectStdDto> _allProjectList = null;
+        private List<XhsProjectVmo> _allProjectList = null;
 
         private Lazy<BLL.PumpMain> _bllPump = new(() => new BLL.PumpMain());
 
@@ -41,7 +41,7 @@
 
         private async void SetBindingData()
         {
-            _allProjectList = await _bllProjectStd.Value.GetAll();
+            _allProjectList = await BLLFactory<HStation.BLL.XhsProject>.Instance.GetAll();
             var allPump = await _bllPump.Value.GetAll();
             var vm = new CurrentViewModel()
             {
@@ -81,7 +81,7 @@
         public override async void RefreshData()
         {
             base.RefreshData();
-            _allProjectList = await _bllProjectStd.Value.GetAll();
+            _allProjectList = await BLLFactory<HStation.BLL.XhsProject>.Instance.GetAll();
             await this.mapViewProjectListContainer1.SetProjectList(_allProjectList);
             this.homeXhsProjectTreeListCtrl1.SetBindingData(_allProjectList);
             SetBindingData();
@@ -95,7 +95,7 @@
         }
 
         //閫夋嫨椤圭洰浜嬩欢
-        private async void homeXhsProjectTreeListCtrl1_SelectProjectEvent(XhsProjectStdDto obj)
+        private async void homeXhsProjectTreeListCtrl1_SelectProjectEvent(XhsProjectVmo obj)
         {
             await this.mapViewProjectListContainer1.SelectProject(obj.ID);
             var vm = new HomeXhsProjectPropertyViewModel(obj);
@@ -109,7 +109,7 @@
         }
 
         //璺宠浆浜嬩欢
-        private async void homeXhsProjectPropertyCtrl1_JumpDirectEvent(XhsProjectStdDto obj)
+        private async void homeXhsProjectPropertyCtrl1_JumpDirectEvent(XhsProjectVmo obj)
         {
             var bimfacefile = await BimfaceFileStateHelper.IsHaveBimFace(obj.ID);
             if (bimfacefile == null)
@@ -142,7 +142,10 @@
 
                 if (!IsExistPage(guid, true))
                 {
-                    var page = new XhsSchemeMultiMgrPage();
+                    // var page = new XhsSchemeMultiMgrPage();
+                    // await page.SetBindingData(obj.ID);
+
+                    var page = new XhsProjectSimulationMgrPage();
                     await page.SetBindingData(obj.ID);
                     //var page = new XhsProjectSimulationMgrPage();
                     CreatePage(page, guid);
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage_Bak.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage_Bak.cs
index e97cfbf..765df68 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage_Bak.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/01-home/HomeXhsProjectPage_Bak.cs
@@ -1,4 +1,6 @@
-锘縩amespace HStation.WinFrmUI
+锘縰sing HStation.Vmo;
+
+namespace HStation.WinFrmUI
 {
     public partial class HomeXhsProjectPage_Bak : DocumentPage
     {
@@ -12,15 +14,14 @@
             this.PageTitle.AllowClose = false;
         }
 
-        private Lazy<BLL.XhsProjectStd> _bllProjectStd = new(() => new BLL.XhsProjectStd());
-        private List<XhsProjectStdDto> _allProjectList = null;
+        private List<XhsProjectVmo> _allProjectList = null;
 
         /// <summary>
         /// 鍒濆鍖栨暟鎹簮
         /// </summary>
         public override async void InitialDataSource()
         {
-            _allProjectList = await _bllProjectStd.Value.GetAll();
+            _allProjectList = await BLLFactory<HStation.BLL.XhsProject>.Instance.GetAll();
             this.tileItemForProject.Text = (_allProjectList == null ? 0 : _allProjectList.Count).ToString();
             this.mapViewProjectListContainer1.LoadCompletedEvent += MapViewProjectListContainer1_LoadCompletedEvent;
             await this.mapViewProjectListContainer1.InitialContainer();
@@ -32,7 +33,7 @@
         public override async void RefreshData()
         {
             base.RefreshData();
-            _allProjectList = await _bllProjectStd.Value.GetAll();
+            _allProjectList = await BLLFactory<HStation.BLL.XhsProject>.Instance.GetAll();
             this.tileItemForProject.Text = (_allProjectList == null ? 0 : _allProjectList.Count).ToString();
             await this.mapViewProjectListContainer1.SetProjectList(_allProjectList);
             this.homeXhsProjectTreeListCtrl1.SetBindingData(_allProjectList);
@@ -46,7 +47,7 @@
         }
 
         //閫夋嫨椤圭洰浜嬩欢
-        private async void homeXhsProjectTreeListCtrl1_SelectProjectEvent(XhsProjectStdDto obj)
+        private async void homeXhsProjectTreeListCtrl1_SelectProjectEvent(XhsProjectVmo obj)
         {
             await this.mapViewProjectListContainer1.SelectProject(obj.ID);
             var vm = new HomeXhsProjectPropertyViewModel(obj);
@@ -60,7 +61,7 @@
         }
 
         //璺宠浆浜嬩欢
-        private async void homeXhsProjectPropertyCtrl1_JumpDirectEvent(XhsProjectStdDto obj)
+        private async void homeXhsProjectPropertyCtrl1_JumpDirectEvent(XhsProjectVmo obj)
         {
             var guid = new PageGuid()
             {
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectHelper.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectHelper.cs
index 56ac5b7..5b02142 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectHelper.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectHelper.cs
@@ -1,4 +1,5 @@
 锘縰sing DevExpress.XtraEditors;
+using HStation.Vmo;
 using static DevExpress.XtraEditors.XtraInputBox;
 using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;
 
@@ -49,7 +50,7 @@
 
             var bllXhsProjectExtensions = new Lazy<BLL.XhsProjectExtensions>(() => new BLL.XhsProjectExtensions());
 
-            var project = new Vmo.Xhs.XhsProjectExtensions();
+            var project = new Vmo.XhsProjectExtensionsVmo();
             project.NO = vm.NO;
             project.Name = vm.Name;
             project.Address = vm.Address;
@@ -58,8 +59,8 @@
             project.TagName = vm.TagName;
             project.Description = vm.Description;
 
-            project.SiteList = new List<Vmo.Xhs.XhsProjectSite>() {
-                new Vmo.Xhs.XhsProjectSite(){
+            project.SiteList = new List<XhsProjectSiteVmo>() {
+                new XhsProjectSiteVmo(){
                     Name=vm.Name,
                     Description=vm.Description
                 }
@@ -127,7 +128,7 @@
             }
             else
             {
-                 IsContinue = false;
+                IsContinue = false;
             }
 
             if (IsContinue)
@@ -193,8 +194,7 @@
 
             #region 绗叚姝� 鍏宠仈姘村姏缁撴瀯妯″瀷锛堣繘搴� 40%锛�
 
-            var bllXhsProjectSite = new BLL.XhsProjectSiteStd();
-            var projectSite = await bllXhsProjectSite.GetDefaultByProjectID(projectId);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(projectId);
             if (projectSite == null)
             {
                 feedBackMsg?.Invoke("椤圭洰绔欎俊鎭敊璇�...", Color.Red);
@@ -262,7 +262,7 @@
 
             feedBackMsg?.Invoke("姝e湪淇濆瓨Bimface鏂囦欢...", Color.Black);
 
-            var bimfaceFile = new Yw.Dto.AddBimfaceFileInput();
+            var bimfaceFile = new Yw.Vmo.BimfaceFileVmo();
             bimfaceFile.BimfaceId = bimfaceId.ToString();
             bimfaceFile.Name = vm.Name;
             bimfaceFile.ModelType = (int)Yw.Bimface.eModelType.File;
@@ -291,7 +291,7 @@
 
             feedBackMsg?.Invoke("姝e湪鍏宠仈Bimface鏂囦欢...", Color.Black);
 
-            var bimfaceRelation = new Yw.Dto.AddBimfaceFileRelationInput();
+            var bimfaceRelation = new Yw.Vmo.BimfaceFileRelationVmo();
             bimfaceRelation.ObjectType = HStation.Xhs.DataType.XhsProjectSite;
             bimfaceRelation.ObjectID = projectSiteId;
             bimfaceRelation.BimfaceFileID = bimfaceFileId;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/03-MapLocation/SetXhsProjectMapLocationWizardPage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/03-MapLocation/SetXhsProjectMapLocationWizardPage.cs
index e251d98..95596aa 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/03-MapLocation/SetXhsProjectMapLocationWizardPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/03-MapLocation/SetXhsProjectMapLocationWizardPage.cs
@@ -1,4 +1,5 @@
-锘縰sing NPOI.HSSF.Record;
+锘縰sing HStation.Vmo;
+using NPOI.HSSF.Record;
 
 namespace HStation.WinFrmUI
 {
@@ -122,7 +123,7 @@
         private async Task<bool> InsertProject()
         {
             var bllXhsProjectExtensions = new BLL.XhsProjectExtensions();
-            var project = new Vmo.Xhs.XhsProjectExtensions();
+            var project = new XhsProjectExtensionsVmo();
             project.NO = _vm.NO;
             project.Name = _vm.Name;
             project.Address = _vm.Address;
@@ -130,8 +131,8 @@
             project.Flags = _vm.Flags;
             project.TagName = _vm.TagName;
             project.Description = _vm.Description;
-            project.SiteList = new List<Vmo.Xhs.XhsProjectSite>() {
-                new Vmo.Xhs.XhsProjectSite(){
+            project.SiteList = new List<XhsProjectSiteVmo>() {
+                new XhsProjectSiteVmo(){
                     Name=_vm.Name,
                     Description=_vm.Description
                 }
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/02-bimface/ViewXhsProjectBimfacePage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/02-bimface/ViewXhsProjectBimfacePage.cs
index b30e077..998a3ed 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/02-bimface/ViewXhsProjectBimfacePage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/02-bimface/ViewXhsProjectBimfacePage.cs
@@ -1,4 +1,6 @@
-锘縩amespace HStation.WinFrmUI
+锘縰sing HStation.Vmo;
+
+namespace HStation.WinFrmUI
 {
     public partial class ViewXhsProjectBimfacePage : DocumentPage
     {
@@ -10,7 +12,7 @@
             this.PageTitle.SvgImageSize = new Size(24, 24);
         }
 
-        private XhsProjectStdDto _project = null;
+        private XhsProjectVmo _project = null;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
@@ -18,7 +20,7 @@
         /// <param name="projectId">椤圭洰id</param>
         public async Task SetBindingData(long projectId)
         {
-            _project = await new BLL.XhsProjectStd().GetByID(projectId);
+            _project = await BLLFactory<HStation.BLL.XhsProject>.Instance.GetByID(projectId);
             this.PageTitle.Caption = $"{_project?.Name}\n妯″瀷瑙嗗浘";
         }
 
@@ -26,7 +28,7 @@
         /// 缁戝畾鏁版嵁
         /// </summary>
         /// <param name="project">椤圭洰</param>
-        public void SetBindingData(HStation.Dto.XhsProjectStdDto project)
+        public void SetBindingData(XhsProjectVmo project)
         {
             _project = project;
             this.PageTitle.Caption = $"{_project?.Name}\n妯″瀷瑙嗗浘";
@@ -52,20 +54,20 @@
                 return;
             }
 
-            var projectSite = await new BLL.XhsProjectSiteStd().GetDefaultByProjectID(_project.ID);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_project.ID);
             if (projectSite == null)
             {
                 return;
             }
 
-            var relation = await new Yw.BLL.BimfaceFileRelationStd()
+            var relation = await BLLFactory<Yw.BLL.BimfaceFileRelation>.Instance
                 .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, projectSite.ID, Yw.Bimface.Purpose.Simulation);
             if (relation == null)
             {
                 return;
             }
 
-            var bimfaceFile = await new Yw.BLL.BimfaceFileStd().GetByID(relation.BimfaceFileID);
+            var bimfaceFile = await BLLFactory<Yw.BLL.BimfaceFile>.Instance.GetByID(relation.BimfaceFileID);
             if (bimfaceFile == null)
             {
                 return;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/03-mgr/XhsProjectMgrViewModel.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/03-mgr/XhsProjectMgrViewModel.cs
index dbb3bc6..20df790 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/03-mgr/XhsProjectMgrViewModel.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/03-mgr/XhsProjectMgrViewModel.cs
@@ -1,5 +1,6 @@
 锘縰sing DevExpress.Pdf.Native;
 using HStation.Service.Xhs;
+using HStation.Vmo;
 
 namespace HStation.WinFrmUI
 {
@@ -71,7 +72,7 @@
             Noupload,
         }
 
-        public XhsProjectMgrViewModel(Vmo.Xhs.XhsProjectExtensions project, bool IsHaveBimface, int BimfaceState, Yw.Vmo.Map.MapInfo mapInfo)
+        public XhsProjectMgrViewModel(XhsProjectExtensionsVmo project, bool IsHaveBimface, int BimfaceState, Yw.Vmo.Map.MapInfo mapInfo)
         {
             this.ID = project.ID;
             this.ParentID = project.ParentID;
@@ -92,7 +93,7 @@
             this.ModelState = (eFileStatus)BimfaceState;
         }
 
-        public void Reset(Vmo.Xhs.XhsProjectExtensions project)
+        public void Reset(XhsProjectExtensionsVmo project)
         {
             this.ID = project.ID;
             this.ParentID = project.ParentID;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/00-core/ImportXhsProjectFileHelper.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/00-core/ImportXhsProjectFileHelper.cs
index ff6cf1d..b35d302 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/00-core/ImportXhsProjectFileHelper.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/00-core/ImportXhsProjectFileHelper.cs
@@ -105,8 +105,7 @@
 
             #region 绗叚姝� 鍏宠仈姘村姏缁撴瀯妯″瀷锛堣繘搴� 40%锛�
 
-            var bllXhsProjectSite = new BLL.XhsProjectSiteStd();
-            var projectSite = await bllXhsProjectSite.GetDefaultByProjectID((long)vm.ProjectID);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID((long)vm.ProjectID);
             if (projectSite == null)
             {
                 feedBackMsg?.Invoke("椤圭洰绔欎俊鎭敊璇�...", Color.Red);
@@ -174,7 +173,7 @@
 
             feedBackMsg?.Invoke("姝e湪淇濆瓨Bimface鏂囦欢...", Color.Black);
 
-            var bimfaceFile = new Yw.Dto.AddBimfaceFileInput();
+            var bimfaceFile = new Yw.Vmo.BimfaceFileVmo();
             bimfaceFile.BimfaceId = bimfaceId.ToString();
             bimfaceFile.Name = vm.Name;
             bimfaceFile.ModelType = (int)Yw.Bimface.eModelType.File;
@@ -203,7 +202,7 @@
 
             feedBackMsg?.Invoke("姝e湪鍏宠仈Bimface鏂囦欢...", Color.Black);
 
-            var bimfaceRelation = new Yw.Dto.AddBimfaceFileRelationInput();
+            var bimfaceRelation = new Yw.Vmo.BimfaceFileRelationVmo();
             bimfaceRelation.ObjectType = HStation.Xhs.DataType.XhsProjectSite;
             bimfaceRelation.ObjectID = projectSiteId;
             bimfaceRelation.BimfaceFileID = bimfaceFileId;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/AddProjectDlg.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/AddProjectDlg.cs
index 75c07ec..c14417d 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/AddProjectDlg.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/AddProjectDlg.cs
@@ -1,4 +1,6 @@
-锘縩amespace HStation.WinFrmUI.Xhs
+锘縰sing HStation.Vmo;
+
+namespace HStation.WinFrmUI.Xhs
 {
     public partial class AddProjectDlg : DevExpress.XtraEditors.XtraForm
     {
@@ -14,7 +16,7 @@
             await this.mapSetSimpleMarkerContainer1.InitialContainer();
         }
 
-        public event Func<Vmo.Xhs.XhsProjectExtensions, Yw.Vmo.Map.MapInfo, Task<bool>> ReloadDataEvent;
+        public event Func<XhsProjectExtensionsVmo, Yw.Vmo.Map.MapInfo, Task<bool>> ReloadDataEvent;
 
         private Yw.Model.Map.Marker _maker = null; //鍦板浘鐐逛俊鎭�
 
@@ -49,15 +51,15 @@
         {
             if (!Valid())
                 return;
-            var model = new Vmo.Xhs.XhsProjectExtensions();
+            var model = new XhsProjectExtensionsVmo();
             model.Address = this.TextAddress.Text.Trim();
             model.Customer = this.TextCustomerName.Text.Trim();
             model.Description = this.TextDescription.Text.Trim();
             model.Name = this.TextProjectName.Text.Trim();
             model.TagName = this.TextTagName.Text.Trim();
-            model.SiteList = new List<Vmo.Xhs.XhsProjectSite>
+            model.SiteList = new List<XhsProjectSiteVmo>
             {
-                new Vmo.Xhs.XhsProjectSite
+                new XhsProjectSiteVmo
                 {
                     Name=this.TextProjectName.Text,
                     Description=this.TextDescription.Text,
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/EditProjectDlg.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/EditProjectDlg.cs
index 4f633b0..f8fd86a 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/EditProjectDlg.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/04-dlg/EditProjectDlg.cs
@@ -1,4 +1,6 @@
-锘縩amespace HStation.WinFrmUI.Xhs
+锘縰sing HStation.Vmo;
+
+namespace HStation.WinFrmUI.Xhs
 {
     public partial class EditProjectDlg : DevExpress.XtraEditors.XtraForm
     {
@@ -15,9 +17,9 @@
             await this.mapSetSimpleMarkerContainer1.InitialContainer();
         }
 
-        public event Func<Vmo.Xhs.XhsProjectExtensions, Yw.Vmo.Map.MapInfo, Task<bool>> ReloadDataEvent;
+        public event Func<XhsProjectExtensionsVmo, Yw.Vmo.Map.MapInfo, Task<bool>> ReloadDataEvent;
 
-        private Vmo.Xhs.XhsProjectExtensions _xhsProjectExtensions;
+        private XhsProjectExtensionsVmo _xhsProjectExtensions;
 
         private Yw.Model.Map.Marker _maker = null; //鍦板浘鐐逛俊鎭�
 
@@ -37,7 +39,7 @@
             if (mapinfo != null)
             {
                 _mapinfo = mapinfo;
-                 this.TextAddress.Text = Yw.Model.Map.Marker.ToModel(_mapinfo.Position).Address;
+                this.TextAddress.Text = Yw.Model.Map.Marker.ToModel(_mapinfo.Position).Address;
             }
         }
 
@@ -84,9 +86,9 @@
             _xhsProjectExtensions.Description = this.TextDescription.Text.Trim();
             _xhsProjectExtensions.Name = this.TextProjectName.Text.Trim();
             _xhsProjectExtensions.TagName = this.TextTagName.Text.Trim();
-            _xhsProjectExtensions.SiteList = new List<Vmo.Xhs.XhsProjectSite>
+            _xhsProjectExtensions.SiteList = new List<XhsProjectSiteVmo>
             {
-                new Vmo.Xhs.XhsProjectSite
+                new XhsProjectSiteVmo
                 {
                     Name=this.TextProjectName.Text,
                     Description=this.TextDescription.Text,
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/01-basic-info/XhsProjectBasicInfoBimfaceCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/01-basic-info/XhsProjectBasicInfoBimfaceCtrl.cs
index 4befda6..35a7c39 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/01-basic-info/XhsProjectBasicInfoBimfaceCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/01-basic-info/XhsProjectBasicInfoBimfaceCtrl.cs
@@ -26,20 +26,20 @@
         /// </summary>
         private async void BimfaceInterop3dContainer1_LoadCompletedEvent()
         {
-            var projectSite = await new BLL.XhsProjectSiteStd().GetDefaultByProjectID(_projectId);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_projectId);
             if (projectSite == null)
             {
                 return;
             }
 
-            var relation = await new Yw.BLL.BimfaceFileRelationStd()
+            var relation = await BLLFactory<Yw.BLL.BimfaceFileRelation>.Instance
                 .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, projectSite.ID, Yw.Bimface.Purpose.Simulation);
             if (relation == null)
             {
                 return;
             }
 
-            var bimfaceFile = await new Yw.BLL.BimfaceFileStd().GetByID(relation.BimfaceFileID);
+            var bimfaceFile = await BLLFactory<Yw.BLL.BimfaceFile>.Instance.GetByID(relation.BimfaceFileID);
             if (bimfaceFile == null)
             {
                 return;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/01-basic-info/XhsProjectBasicInfoHydroCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/01-basic-info/XhsProjectBasicInfoHydroCtrl.cs
index a77c762..66c386d 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/01-basic-info/XhsProjectBasicInfoHydroCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/01-basic-info/XhsProjectBasicInfoHydroCtrl.cs
@@ -23,7 +23,7 @@
         /// </summary>
         public async void SetBindingData(long projectId)
         {
-            var projectSite = await new HStation.BLL.XhsProjectSiteStd().GetDefaultByProjectID(projectId);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(projectId);
             if (projectSite == null)
             {
                 return;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/02-asset-mgr/XhsProjectAssetsBimfaceCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/02-asset-mgr/XhsProjectAssetsBimfaceCtrl.cs
index 284f0a9..4e80934 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/02-asset-mgr/XhsProjectAssetsBimfaceCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/02-asset-mgr/XhsProjectAssetsBimfaceCtrl.cs
@@ -25,20 +25,20 @@
         //椤甸潰鍔犺浇瀹屾垚鍚庤Е鍙�
         private async void BimfaceInterop3dContainer1_LoadCompletedEvent()
         {
-            var projectSite = await new BLL.XhsProjectSiteStd().GetDefaultByProjectID(_projectId);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_projectId);
             if (projectSite == null)
             {
                 return;
             }
 
-            var relation = await new Yw.BLL.BimfaceFileRelationStd()
+            var relation = await BLLFactory<Yw.BLL.BimfaceFileRelation>.Instance
                 .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, projectSite.ID, Yw.Bimface.Purpose.Simulation);
             if (relation == null)
             {
                 return;
             }
 
-            var bimfaceFile = await new Yw.BLL.BimfaceFileStd().GetByID(relation.BimfaceFileID);
+            var bimfaceFile = await BLLFactory<Yw.BLL.BimfaceFile>.Instance.GetByID(relation.BimfaceFileID);
             if (bimfaceFile == null)
             {
                 return;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/02-asset-mgr/XhsSchemeAssetMgrPage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/02-asset-mgr/XhsSchemeAssetMgrPage.cs
index b89380d..fb5a995 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/02-asset-mgr/XhsSchemeAssetMgrPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/02-asset-mgr/XhsSchemeAssetMgrPage.cs
@@ -22,7 +22,7 @@
         public async Task SetBindingData(long projectId)
         {
             _projectId = projectId;
-            var projectSite = await new HStation.BLL.XhsProjectSiteStd().GetDefaultByProjectID(projectId);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(projectId);
             if (projectSite == null)
             {
                 return;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/03-hydraulic-simulation/XhsSchemeHydraulicSimulationPage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/03-hydraulic-simulation/XhsSchemeHydraulicSimulationPage.cs
index f13d4c3..78c3e6c 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/03-hydraulic-simulation/XhsSchemeHydraulicSimulationPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/03-hydraulic-simulation/XhsSchemeHydraulicSimulationPage.cs
@@ -29,7 +29,7 @@
         public async Task SetBindingData(long projectId)
         {
             _projectId = projectId;
-            var projectSite = await new HStation.BLL.XhsProjectSiteStd().GetDefaultByProjectID(projectId);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(projectId);
             if (projectSite == null)
             {
                 return;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMgrListCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMgrListCtrl.cs
index 23ba2f8..3f5ae0b 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMgrListCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMgrListCtrl.cs
@@ -1,6 +1,7 @@
 锘縰sing DevExpress.Utils.MVVM;
 using DevExpress.XtraEditors;
 using DevExpress.XtraEditors.Controls;
+using HStation.Vmo;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -23,7 +24,7 @@
         }
 
         private long _projectId;//椤圭洰id
-        private List<HStation.Dto.XhsProjectSiteStdDto> _allProjectSiteList = null;//鎵�鏈夐」鐩珯鍒楄〃
+        private List<XhsProjectSiteVmo> _allProjectSiteList = null;//鎵�鏈夐」鐩珯鍒楄〃
         private List<HStation.Dto.XhsSchemeDto> _allSchemeList = null;//鎵�鏈夋柟妗堝垪琛�
 
 
@@ -32,7 +33,7 @@
         /// </summary>
         public async void SetBindingData(long projectId)
         {
-            _allProjectSiteList = await new BLL.XhsProjectSiteStd().GetByProjectID(projectId);
+            _allProjectSiteList = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetByProjectID(projectId);
             InitialProjectSiteList();
         }
 
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage.cs
index d55e63b..c608415 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage.cs
@@ -1,5 +1,7 @@
 锘縰sing DevExpress.XtraBars.Docking;
 using DevExpress.XtraBars.Docking2010.Views;
+using HStation.Vmo;
+using Yw;
 using Yw.WinFrmUI.Page;
 
 namespace HStation.WinFrmUI
@@ -15,7 +17,7 @@
 
         }
 
-        private XhsProjectStdDto _project = null;
+        private XhsProjectVmo _project = null;
         private Yw.Model.HydroModelInfo _hydroInfo = null;
 
         /// <summary>
@@ -33,9 +35,9 @@
         public async Task SetBindingData(long projectId)
         {
             this.xhsSchemeMgrListCtrl1.SetBindingData(projectId);
-            _project = await new BLL.XhsProjectStd().GetByID(projectId);
+            _project = await BLLFactory<HStation.BLL.XhsProject>.Instance.GetByID(projectId);
             this.PageTitle.Caption = $"{_project?.Name}\r\n鏂规绠$悊";
-            var projectSite = await new BLL.XhsProjectSiteStd().GetDefaultByProjectID(_project.ID);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_project.ID);
             if (projectSite == null)
             {
                 return;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage_Bak.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage_Bak.cs
index 2b9125b..daa2b1e 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage_Bak.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage_Bak.cs
@@ -1,4 +1,6 @@
-锘縩amespace HStation.WinFrmUI
+锘縰sing HStation.Vmo;
+
+namespace HStation.WinFrmUI
 {
     public partial class XhsSchemeMultiMgrPage_Bak : DocumentPage
     {
@@ -10,7 +12,7 @@
             this.PageTitle.SvgImageSize = new Size(24, 24);
         }
 
-        private XhsProjectStdDto _project = null;
+        private XhsProjectVmo _project = null;
         private Yw.Model.HydroModelInfo _hydroInfo = null;
 
         /// <summary>
@@ -19,9 +21,9 @@
         /// <param name="projectId">椤圭洰id</param>
         public async Task SetBindingData(long projectId)
         {
-            _project = await new BLL.XhsProjectStd().GetByID(projectId);
+            _project = await BLLFactory<HStation.BLL.XhsProject>.Instance.GetByID(projectId);
             this.PageTitle.Caption = $"{_project?.Name}\r\n鏂规绠$悊";
-            var projectSite = await new BLL.XhsProjectSiteStd().GetDefaultByProjectID(_project.ID);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_project.ID);
             if (projectSite == null)
             {
                 return;
@@ -41,7 +43,7 @@
         /// 缁戝畾鏁版嵁
         /// </summary>
         /// <param name="project">椤圭洰</param>
-        public void SetBindingData(HStation.Dto.XhsProjectStdDto project)
+        public void SetBindingData(XhsProjectVmo project)
         {
             _project = project;
             this.PageTitle.Caption = $"{_project?.Name}\n鏂规绠$悊";
@@ -68,20 +70,20 @@
                 return;
             }
 
-            var projectSite = await new BLL.XhsProjectSiteStd().GetDefaultByProjectID(_project.ID);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_project.ID);
             if (projectSite == null)
             {
                 return;
             }
 
-            var relation = await new Yw.BLL.BimfaceFileRelationStd()
+            var relation = await BLLFactory<Yw.BLL.BimfaceFileRelation>.Instance
                 .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, projectSite.ID, Yw.Bimface.Purpose.Simulation);
             if (relation == null)
             {
                 return;
             }
 
-            var bimfaceFile = await new Yw.BLL.BimfaceFileStd().GetByID(relation.BimfaceFileID);
+            var bimfaceFile = await BLLFactory<Yw.BLL.BimfaceFile>.Instance.GetByID(relation.BimfaceFileID);
             if (bimfaceFile == null)
             {
                 return;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage_Bak2.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage_Bak2.cs
index 83b110f..668b2e1 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage_Bak2.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage_Bak2.cs
@@ -1,4 +1,6 @@
-锘縩amespace HStation.WinFrmUI
+锘縰sing HStation.Vmo;
+
+namespace HStation.WinFrmUI
 {
     public partial class XhsSchemeMultiMgrPage_Bak2 : DocumentPage
     {
@@ -7,11 +9,11 @@
             InitializeComponent();
             this.PageTitle.Caption = "椤圭洰鏂规";
             this.PageTitle.HeaderSvgImage = this.svgImg32[0];
-            this.PageTitle.SvgImageSize = new Size(24, 24); 
-          
+            this.PageTitle.SvgImageSize = new Size(24, 24);
+
         }
 
-        private XhsProjectStdDto _project = null;
+        private XhsProjectVmo _project = null;
         private Yw.Model.HydroModelInfo _hydroInfo = null;
 
         /// <summary>
@@ -21,9 +23,9 @@
         public async Task SetBindingData(long projectId)
         {
             this.xhsSchemeMgrListCtrl1.SetBindingData(projectId);
-            _project = await new BLL.XhsProjectStd().GetByID(projectId);
+            _project = await BLLFactory<HStation.BLL.XhsProject>.Instance.GetByID(projectId);
             this.PageTitle.Caption = $"{_project?.Name}\r\n鏂规绠$悊";
-            var projectSite = await new BLL.XhsProjectSiteStd().GetDefaultByProjectID(_project.ID);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_project.ID);
             if (projectSite == null)
             {
                 return;
@@ -43,7 +45,7 @@
         /// 缁戝畾鏁版嵁
         /// </summary>
         /// <param name="project">椤圭洰</param>
-        public void SetBindingData(HStation.Dto.XhsProjectStdDto project)
+        public void SetBindingData(XhsProjectVmo project)
         {
             _project = project;
             this.PageTitle.Caption = $"{_project?.Name}\n鏂规绠$悊";
@@ -70,20 +72,20 @@
                 return;
             }
 
-            var projectSite = await new BLL.XhsProjectSiteStd().GetDefaultByProjectID(_project.ID);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_project.ID);
             if (projectSite == null)
             {
                 return;
             }
 
-            var relation = await new Yw.BLL.BimfaceFileRelationStd()
+            var relation = await BLLFactory<Yw.BLL.BimfaceFileRelation>.Instance
                 .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, projectSite.ID, Yw.Bimface.Purpose.Simulation);
             if (relation == null)
             {
                 return;
             }
 
-            var bimfaceFile = await new Yw.BLL.BimfaceFileStd().GetByID(relation.BimfaceFileID);
+            var bimfaceFile = await BLLFactory<Yw.BLL.BimfaceFile>.Instance.GetByID(relation.BimfaceFileID);
             if (bimfaceFile == null)
             {
                 return;
@@ -116,6 +118,6 @@
             //}
         }
 
-        
+
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationBimfaceInfoCtrl.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationBimfaceInfoCtrl.Designer.cs
new file mode 100644
index 0000000..6342794
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationBimfaceInfoCtrl.Designer.cs
@@ -0,0 +1,57 @@
+锘縩amespace HStation.WinFrmUI
+{
+    partial class XhsProjectSimulationBimfaceInfoCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            bimfaceInterop3dContainer1 = new BimfaceInterop3dContainer();
+            SuspendLayout();
+            // 
+            // bimfaceInterop3dContainer1
+            // 
+            bimfaceInterop3dContainer1.Dock = DockStyle.Fill;
+            bimfaceInterop3dContainer1.Location = new Point(0, 0);
+            bimfaceInterop3dContainer1.Margin = new Padding(4, 2, 4, 2);
+            bimfaceInterop3dContainer1.Name = "bimfaceInterop3dContainer1";
+            bimfaceInterop3dContainer1.Size = new Size(784, 505);
+            bimfaceInterop3dContainer1.TabIndex = 1;
+            // 
+            // XhsProjectBasicInfoBimfaceCtrl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(bimfaceInterop3dContainer1);
+            Name = "XhsProjectBasicInfoBimfaceCtrl";
+            Size = new Size(784, 505);
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private BimfaceInterop3dContainer bimfaceInterop3dContainer1;
+    }
+}
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationBimfaceInfoCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationBimfaceInfoCtrl.cs
new file mode 100644
index 0000000..01983fe
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationBimfaceInfoCtrl.cs
@@ -0,0 +1,59 @@
+锘縩amespace HStation.WinFrmUI
+{
+    public partial class XhsProjectSimulationBimfaceInfoCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public XhsProjectSimulationBimfaceInfoCtrl()
+        {
+            InitializeComponent();
+            this.bimfaceInterop3dContainer1.LoadCompletedEvent += BimfaceInterop3dContainer1_LoadCompletedEvent;
+        }
+
+
+
+        private long _projectId;//椤圭洰id
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public async void SetBindingData(long projectId)
+        {
+            _projectId = projectId;
+            await this.bimfaceInterop3dContainer1.InitialContainer();
+        }
+
+        /// <summary>
+        /// 椤甸潰鍔犺浇瀹屾垚鍚庤Е鍙�
+        /// </summary>
+        private async void BimfaceInterop3dContainer1_LoadCompletedEvent()
+        {
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_projectId);
+            if (projectSite == null)
+            {
+                return;
+            }
+
+            var relation = await BLLFactory<Yw.BLL.BimfaceFileRelation>.Instance
+                .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, projectSite.ID, HStation.Xhs.Purpose.Simulation);
+            if (relation == null)
+            {
+                return;
+            }
+
+            var bimfaceFile = await BLLFactory<Yw.BLL.BimfaceFile>
+                .Instance.GetByID(relation.BimfaceFileID);
+            if (bimfaceFile == null)
+            {
+                return;
+            }
+
+            var viewToken = await BimfaceHelper.GetViewToken(bimfaceFile.BimfaceId);
+            if (string.IsNullOrEmpty(viewToken))
+            {
+                return;
+            }
+            await this.bimfaceInterop3dContainer1.LoadView(viewToken);
+
+        }
+
+    }
+}
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationBimfaceInfoCtrl.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationBimfaceInfoCtrl.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationBimfaceInfoCtrl.resx
@@ -0,0 +1,120 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationInfoPage.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationInfoPage.Designer.cs
new file mode 100644
index 0000000..1df0fd6
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationInfoPage.Designer.cs
@@ -0,0 +1,165 @@
+锘縩amespace HStation.WinFrmUI
+{
+    partial class XhsProjectSimulationInfoPage
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            DevExpress.XtraLayout.ColumnDefinition columnDefinition1 = new DevExpress.XtraLayout.ColumnDefinition();
+            DevExpress.XtraLayout.ColumnDefinition columnDefinition2 = new DevExpress.XtraLayout.ColumnDefinition();
+            DevExpress.XtraLayout.RowDefinition rowDefinition1 = new DevExpress.XtraLayout.RowDefinition();
+            DevExpress.XtraLayout.RowDefinition rowDefinition2 = new DevExpress.XtraLayout.RowDefinition();
+            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            xhsProjectBasicInfoBimfaceCtrl1 = new XhsProjectBasicInfoBimfaceCtrl();
+            xhsProjectBasicInfoViewCtrl1 = new XhsProjectBasicInfoViewCtrl();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            xhsProjectBasicInfoHydroCtrl1 = new XhsProjectBasicInfoHydroCtrl();
+            layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            ((ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((ISupportInitialize)Root).BeginInit();
+            ((ISupportInitialize)layoutControlItem1).BeginInit();
+            ((ISupportInitialize)layoutControlItem2).BeginInit();
+            ((ISupportInitialize)layoutControlItem3).BeginInit();
+            SuspendLayout();
+            // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(xhsProjectBasicInfoHydroCtrl1);
+            layoutControl1.Controls.Add(xhsProjectBasicInfoBimfaceCtrl1);
+            layoutControl1.Controls.Add(xhsProjectBasicInfoViewCtrl1);
+            layoutControl1.Dock = DockStyle.Fill;
+            layoutControl1.Location = new Point(0, 0);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new Size(951, 587);
+            layoutControl1.TabIndex = 0;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // xhsProjectBasicInfoBimfaceCtrl1
+            // 
+            xhsProjectBasicInfoBimfaceCtrl1.Location = new Point(477, 12);
+            xhsProjectBasicInfoBimfaceCtrl1.Name = "xhsProjectBasicInfoBimfaceCtrl1";
+            xhsProjectBasicInfoBimfaceCtrl1.Size = new Size(462, 279);
+            xhsProjectBasicInfoBimfaceCtrl1.TabIndex = 7;
+            // 
+            // xhsProjectBasicInfoViewCtrl1
+            // 
+            xhsProjectBasicInfoViewCtrl1.Location = new Point(12, 12);
+            xhsProjectBasicInfoViewCtrl1.Name = "xhsProjectBasicInfoViewCtrl1";
+            xhsProjectBasicInfoViewCtrl1.Size = new Size(461, 279);
+            xhsProjectBasicInfoViewCtrl1.TabIndex = 4;
+            // 
+            // Root
+            // 
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem2, layoutControlItem3 });
+            Root.LayoutMode = DevExpress.XtraLayout.Utils.LayoutMode.Table;
+            Root.Name = "Root";
+            columnDefinition1.SizeType = SizeType.Percent;
+            columnDefinition1.Width = 100D;
+            columnDefinition2.SizeType = SizeType.Percent;
+            columnDefinition2.Width = 100D;
+            Root.OptionsTableLayoutGroup.ColumnDefinitions.AddRange(new DevExpress.XtraLayout.ColumnDefinition[] { columnDefinition1, columnDefinition2 });
+            rowDefinition1.Height = 100D;
+            rowDefinition1.SizeType = SizeType.Percent;
+            rowDefinition2.Height = 100D;
+            rowDefinition2.SizeType = SizeType.Percent;
+            Root.OptionsTableLayoutGroup.RowDefinitions.AddRange(new DevExpress.XtraLayout.RowDefinition[] { rowDefinition1, rowDefinition2 });
+            Root.Size = new Size(951, 587);
+            Root.TextVisible = false;
+            // 
+            // layoutControlItem1
+            // 
+            layoutControlItem1.Control = xhsProjectBasicInfoViewCtrl1;
+            layoutControlItem1.Location = new Point(0, 0);
+            layoutControlItem1.Name = "layoutControlItem1";
+            layoutControlItem1.Size = new Size(465, 283);
+            layoutControlItem1.TextSize = new Size(0, 0);
+            layoutControlItem1.TextVisible = false;
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.Control = xhsProjectBasicInfoBimfaceCtrl1;
+            layoutControlItem2.Location = new Point(465, 0);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.OptionsTableLayoutItem.ColumnIndex = 1;
+            layoutControlItem2.Size = new Size(466, 283);
+            layoutControlItem2.TextSize = new Size(0, 0);
+            layoutControlItem2.TextVisible = false;
+            // 
+            // xhsProjectBasicInfoHydroCtrl1
+            // 
+            xhsProjectBasicInfoHydroCtrl1.Location = new Point(12, 295);
+            xhsProjectBasicInfoHydroCtrl1.Name = "xhsProjectBasicInfoHydroCtrl1";
+            xhsProjectBasicInfoHydroCtrl1.Size = new Size(927, 280);
+            xhsProjectBasicInfoHydroCtrl1.TabIndex = 8;
+            // 
+            // layoutControlItem3
+            // 
+            layoutControlItem3.Control = xhsProjectBasicInfoHydroCtrl1;
+            layoutControlItem3.Location = new Point(0, 283);
+            layoutControlItem3.Name = "layoutControlItem3";
+            layoutControlItem3.OptionsTableLayoutItem.ColumnSpan = 2;
+            layoutControlItem3.OptionsTableLayoutItem.RowIndex = 1;
+            layoutControlItem3.Size = new Size(931, 284);
+            layoutControlItem3.TextSize = new Size(0, 0);
+            layoutControlItem3.TextVisible = false;
+            // 
+            // XhsSchemeBasicInfoPage
+            // 
+            Appearance.BackColor = SystemColors.Control;
+            Appearance.Options.UseBackColor = true;
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(layoutControl1);
+            Margin = new Padding(2);
+            Name = "XhsSchemeBasicInfoPage";
+            Size = new Size(951, 587);
+            ((ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)Root).EndInit();
+            ((ISupportInitialize)layoutControlItem1).EndInit();
+            ((ISupportInitialize)layoutControlItem2).EndInit();
+            ((ISupportInitialize)layoutControlItem3).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private XhsProjectBasicInfoViewCtrl xhsProjectBasicInfoViewCtrl1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private XhsProjectBasicInfoBimfaceCtrl xhsProjectBasicInfoBimfaceCtrl1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private XhsProjectBasicInfoHydroCtrl xhsProjectBasicInfoHydroCtrl1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+    }
+}
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationInfoPage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationInfoPage.cs
new file mode 100644
index 0000000..b2a7645
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationInfoPage.cs
@@ -0,0 +1,37 @@
+锘縩amespace HStation.WinFrmUI
+{
+    public partial class XhsProjectSimulationInfoPage : DocumentPage
+    {
+        public XhsProjectSimulationInfoPage()
+        {
+            InitializeComponent();
+        }
+
+        private long _projectId;//椤圭洰id
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(long projectId)
+        {
+            _projectId = projectId;
+        }
+
+
+        /// <summary>
+        /// 鍒濆鍖栨暟鎹�
+        /// </summary>
+        public override void InitialDataSource()
+        {
+            base.InitialDataSource();
+            this.xhsProjectBasicInfoViewCtrl1.SetBindingData(_projectId);
+            this.xhsProjectBasicInfoBimfaceCtrl1.SetBindingData(_projectId);
+            this.xhsProjectBasicInfoHydroCtrl1.SetBindingData(_projectId);
+        }
+
+
+
+
+
+    }
+}
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationInfoPage.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationInfoPage.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-info/XhsProjectSimulationInfoPage.resx
@@ -0,0 +1,120 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-property/XhsProjectSimulationPropertyCtrl.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-property/XhsProjectSimulationPropertyCtrl.Designer.cs
index b9739ef..e2c1289 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-property/XhsProjectSimulationPropertyCtrl.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/01-property/XhsProjectSimulationPropertyCtrl.Designer.cs
@@ -37,7 +37,7 @@
             hydroParterPropertyCtrl1.Location = new Point(0, 0);
             hydroParterPropertyCtrl1.Name = "hydroParterPropertyCtrl1";
             hydroParterPropertyCtrl1.SelectedObject = null;
-            hydroParterPropertyCtrl1.Size = new Size(297, 564);
+            hydroParterPropertyCtrl1.Size = new Size(250, 504);
             hydroParterPropertyCtrl1.TabIndex = 0;
             // 
             // XhsProjectSimulationPropertyCtrl
@@ -46,7 +46,7 @@
             AutoScaleMode = AutoScaleMode.Font;
             Controls.Add(hydroParterPropertyCtrl1);
             Name = "XhsProjectSimulationPropertyCtrl";
-            Size = new Size(297, 564);
+            Size = new Size(250, 504);
             ResumeLayout(false);
         }
 
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs
index 854605e..a5856e1 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs
@@ -9,6 +9,9 @@
             this.bimfaceInterop3dContainer1.ClickInEvent += BimfaceInterop3dContainer1_ClickInEvent;
         }
 
+        /// <summary>
+        /// 鐐瑰嚮缁勪欢浜嬩欢
+        /// </summary>
         public event Action<string> ClickParterEvent;
 
         private long _projectId;//椤圭洰id
@@ -25,20 +28,20 @@
         //椤甸潰鍔犺浇瀹屾垚鍚庤Е鍙�
         private async void BimfaceInterop3dContainer1_LoadCompletedEvent()
         {
-            var projectSite = await new BLL.XhsProjectSiteStd().GetDefaultByProjectID(_projectId);
+            var projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_projectId);
             if (projectSite == null)
             {
                 return;
             }
 
-            var relation = await new Yw.BLL.BimfaceFileRelationStd()
-                .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, projectSite.ID, Yw.Bimface.Purpose.Simulation);
+            var relation = await BLLFactory<Yw.BLL.BimfaceFileRelation>.Instance
+                .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, projectSite.ID, HStation.Xhs.Purpose.Simulation);
             if (relation == null)
             {
                 return;
             }
 
-            var bimfaceFile = await new Yw.BLL.BimfaceFileStd().GetByID(relation.BimfaceFileID);
+            var bimfaceFile = await BLLFactory<Yw.BLL.BimfaceFile>.Instance.GetByID(relation.BimfaceFileID);
             if (bimfaceFile == null)
             {
                 return;
@@ -50,7 +53,6 @@
                 return;
             }
             await this.bimfaceInterop3dContainer1.LoadView(viewToken);
-
         }
 
         //鏋勪欢鐐瑰嚮
@@ -78,11 +80,21 @@
             await this.bimfaceInterop3dContainer1.ShowAllComponents();
         }
 
+        /// <summary>
+        /// 鍗婇�忔槑鏋勪欢
+        /// </summary>
+        /// <param name="elementIds">鏋勪欢id鍒楄〃</param>
+        /// <returns></returns>
         public async Task TranslucentComponents(List<string> elementIds)
         {
             await this.bimfaceInterop3dContainer1.TranslucentComponents(elementIds);
         }
 
+        /// <summary>
+        /// 鍙栨秷鏋勪欢鍗婇�忔槑
+        /// </summary>
+        /// <param name="elementIds">鏋勪欢id鍒楄〃</param>
+        /// <returns></returns>
         public async Task OpaqueComponents(List<string> elementIds)
         {
             await this.bimfaceInterop3dContainer1.OpaqueComponents(elementIds);
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/03-q3d/XhsProjectSimulationQ3dCtrl.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/03-q3d/XhsProjectSimulationQ3dCtrl.Designer.cs
new file mode 100644
index 0000000..ba083fa
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/03-q3d/XhsProjectSimulationQ3dCtrl.Designer.cs
@@ -0,0 +1,62 @@
+锘縩amespace HStation.WinFrmUI
+{
+    partial class XhsProjectSimulationQ3dCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            ComponentResourceManager resources = new ComponentResourceManager(typeof(XhsProjectHydroQ3dCtrl));
+            drawer1 = new Yw.WinFrmUI.Q3d.Drawer();
+            SuspendLayout();
+            // 
+            // drawer1
+            // 
+            drawer1.BackColor = Color.Transparent;
+            drawer1.Dock = DockStyle.Fill;
+            drawer1.IsEditMode = true;
+            drawer1.Location = new Point(0, 0);
+            drawer1.MapCenter = (PointF)resources.GetObject("drawer1.MapCenter");
+            drawer1.mapOption = (Yw.WinFrmUI.Q3d.MapDimensions)resources.GetObject("drawer1.mapOption");
+            drawer1.Name = "drawer1";
+            drawer1.Size = new Size(889, 597);
+            drawer1.TabIndex = 0;
+            drawer1.zoom = 1F;
+            // 
+            // XhsProjectHydroQ3dCtrl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(drawer1);
+            Name = "XhsProjectHydroQ3dCtrl";
+            Size = new Size(889, 597);
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private Yw.WinFrmUI.Q3d.Drawer drawer1;
+    }
+}
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/03-q3d/XhsProjectSimulationQ3dCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/03-q3d/XhsProjectSimulationQ3dCtrl.cs
new file mode 100644
index 0000000..7338ade
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/03-q3d/XhsProjectSimulationQ3dCtrl.cs
@@ -0,0 +1,32 @@
+锘縩amespace HStation.WinFrmUI
+{
+    public partial class XhsProjectSimulationQ3dCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public XhsProjectSimulationQ3dCtrl()
+        {
+            InitializeComponent();
+            this.drawer1.SelectedObjectsChanged += Drawer1_SelectedObjectsChanged;
+        }
+
+        public event Action<string> ClickParterEvent;
+
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo rhs)
+        {
+
+            var netWork = Yw.WinFrmUI.HydroQ3dTransferHelper.ToNetworkViewModel(rhs);
+
+            this.drawer1.SetData(netWork);
+        }
+
+        private void Drawer1_SelectedObjectsChanged(object sender, List<Yw.WinFrmUI.Q3d.IBaseViewModel> e)
+        {
+            this.ClickParterEvent?.Invoke(e.FirstOrDefault()?.ID);
+        }
+
+
+    }
+}
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/03-q3d/XhsProjectSimulationQ3dCtrl.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/03-q3d/XhsProjectSimulationQ3dCtrl.resx
new file mode 100644
index 0000000..b27f0a7
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/03-q3d/XhsProjectSimulationQ3dCtrl.resx
@@ -0,0 +1,145 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="drawer1.MapCenter" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
+        dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABVTeXN0ZW0uRHJh
+        d2luZy5Qb2ludEYCAAAAAXgBeQAACwsCAAAAAAAAAAAAAAAL
+</value>
+  </data>
+  <data name="drawer1.mapOption" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAEBZdy5XaW5Gcm1VSS5IeWRyby5RM2QuQ29yZSwgQ3VsdHVyZT1u
+        ZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsDAMAAABRU3lzdGVtLkRyYXdpbmcsIFZlcnNpb249NC4w
+        LjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iMDNmNWY3ZjExZDUwYTNhBQEAAAAd
+        WXcuV2luRnJtVUkuUTNkLk1hcERpbWVuc2lvbnMNAAAAFzxDZW50ZXI+a19fQmFja2luZ0ZpZWxkFTx6
+        b29tPmtfX0JhY2tpbmdGaWVsZBk8cm90YXRpb24+a19fQmFja2luZ0ZpZWxkCl9yb3RhdGlvbkYaPFNo
+        b3dGbG9vcj5rX19CYWNraW5nRmllbGQaPGlzU2hvd1BpYz5rX19CYWNraW5nRmllbGQVaXNBdXRvQmFj
+        a2dyb3VuZEltYWdlHjxpc1Nob3dVbmZhdm9yPmtfX0JhY2tpbmdGaWVsZBs8TG9jazJEVmlldz5rX19C
+        YWNraW5nRmllbGQbPGlzRWRpdE1vZGU+a19fQmFja2luZ0ZpZWxkGDxJc09ydGhvPmtfX0JhY2tpbmdG
+        aWVsZBs8Q29sb3VyTm9kZT5rX19CYWNraW5nRmllbGQbPENvbG91ckxpbms+a19fQmFja2luZ0ZpZWxk
+        BAAAAAAAAAAAAAAEBBVTeXN0ZW0uRHJhd2luZy5Qb2ludEYDAAAACwYGCAEBAQEBARpZdy5XaW5Gcm1V
+        SS5RM2QuQ29sb3VyVHlwZQIAAAAaWXcuV2luRnJtVUkuUTNkLkNvbG91clR5cGUCAAAAAgAAAAX8////
+        FVN5c3RlbS5EcmF3aW5nLlBvaW50RgIAAAABeAF5AAALCwMAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAA
+        AAAAAAAAAAAAgAEAAQABAQX7////Gll3LldpbkZybVVJLlEzZC5Db2xvdXJUeXBlAQAAAAd2YWx1ZV9f
+        AAgCAAAAAAAAAAH6////+////wAAAAAL
+</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/04-scheme/XhsProjectSimulationSchemeMgrCtrl.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/04-scheme/XhsProjectSimulationSchemeMgrCtrl.Designer.cs
index 683301a..e3930a7 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/04-scheme/XhsProjectSimulationSchemeMgrCtrl.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/04-scheme/XhsProjectSimulationSchemeMgrCtrl.Designer.cs
@@ -1,6 +1,6 @@
 锘縩amespace HStation.WinFrmUI
 {
-    partial class XhsSchemeMgrListCtrl
+    partial class XhsProjectSimulationSchemeMgrCtrl
     {
         /// <summary> 
         /// Required designer variable.
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/04-scheme/XhsProjectSimulationSchemeMgrCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/04-scheme/XhsProjectSimulationSchemeMgrCtrl.cs
index 3b4211a..fc04312 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/04-scheme/XhsProjectSimulationSchemeMgrCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/04-scheme/XhsProjectSimulationSchemeMgrCtrl.cs
@@ -10,16 +10,16 @@
         }
 
         private long _projectId;//椤圭洰id
-        private List<HStation.Dto.XhsProjectSiteStdDto> _allProjectSiteList = null;//鎵�鏈夐」鐩珯鍒楄〃
-        private List<HStation.Dto.XhsSchemeDto> _allSchemeList = null;//鎵�鏈夋柟妗堝垪琛�
+        private List<HStation.Vmo.XhsProjectSiteVmo> _allProjectSiteList = null;//鎵�鏈夐」鐩珯鍒楄〃
+        private List<HStation.Vmo.XhsSchemeVmo> _allSchemeList = null;//鎵�鏈夋柟妗堝垪琛�
 
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public async void SetBindingData(long projectId)
+        public async Task SetBindingData(long projectId)
         {
-            _allProjectSiteList = await new BLL.XhsProjectSiteStd().GetByProjectID(projectId);
+            _allProjectSiteList = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetByProjectID(projectId);
             InitialProjectSiteList();
         }
 
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/05-function/XhsProjectSimulationFunctionMgrCtrl.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/05-function/XhsProjectSimulationFunctionMgrCtrl.Designer.cs
index 85d6f5f..3124d0a 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/05-function/XhsProjectSimulationFunctionMgrCtrl.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/05-function/XhsProjectSimulationFunctionMgrCtrl.Designer.cs
@@ -61,7 +61,7 @@
             accordionControl1.OptionsMinimizing.AllowFooterResizing = false;
             accordionControl1.OptionsMinimizing.AllowMinimizeMode = DevExpress.Utils.DefaultBoolean.False;
             accordionControl1.ScrollBarMode = DevExpress.XtraBars.Navigation.ScrollBarMode.Fluent;
-            accordionControl1.Size = new Size(302, 673);
+            accordionControl1.Size = new Size(262, 609);
             accordionControl1.TabIndex = 1;
             accordionControl1.ViewType = DevExpress.XtraBars.Navigation.AccordionControlViewType.HamburgerMenu;
             accordionControl1.ElementClick += accordionControl1_ElementClick;
@@ -123,7 +123,7 @@
             AutoScaleMode = AutoScaleMode.Font;
             Controls.Add(accordionControl1);
             Name = "XhsProjectSimulationFunctionMgrCtrl";
-            Size = new Size(302, 673);
+            Size = new Size(262, 609);
             ((ISupportInitialize)accordionControl1).EndInit();
             ((ISupportInitialize)svgImg32).EndInit();
             ResumeLayout(false);
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/05-function/XhsProjectSimulationFunctionMgrCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/05-function/XhsProjectSimulationFunctionMgrCtrl.cs
index 25782ba..0e0e5ff 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/05-function/XhsProjectSimulationFunctionMgrCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/05-function/XhsProjectSimulationFunctionMgrCtrl.cs
@@ -1,4 +1,6 @@
-锘縩amespace HStation.WinFrmUI
+锘縰sing DevExpress.Utils.Svg;
+
+namespace HStation.WinFrmUI
 {
     public partial class XhsProjectSimulationFunctionMgrCtrl : DevExpress.XtraEditors.XtraUserControl
     {
@@ -7,9 +9,58 @@
             InitializeComponent();
         }
 
+        /// <summary>
+        /// 鏄剧ず寰幆姘撮」鐩俊鎭簨浠�
+        /// </summary>
+        public event Action<SvgImage> ShowXhsProjectInfoEvent;
+
+        /// <summary>
+        /// 鏄剧ず寰幆姘撮」鐩按鍔涙ā鎷熶簨浠�
+        /// </summary>
+        public event Action<SvgImage> ShowXhsProjectSimulationEvent;
+
+        /// <summary>
+        /// 鍒涘缓寰幆姘撮」鐩柟妗堜簨浠�
+        /// </summary>
+        public event Action<SvgImage> CreateXhsProjectSchemeEvent;
+
+        /// <summary>
+        /// 姣旇緝寰幆姘撮」鐩柟妗堜簨浠�
+        /// </summary>
+        public event Action<SvgImage> CompareXhsProjectSchemeEvent;
+
+        //鍏冪礌鐐瑰嚮浜嬩欢
         private void accordionControl1_ElementClick(object sender, DevExpress.XtraBars.Navigation.ElementClickEventArgs e)
         {
-
+            var tag = e.Element.Tag?.ToString();
+            switch (tag)
+            {
+                case "info":
+                    {
+                        this.ShowXhsProjectInfoEvent?.Invoke(this.svgImg32[0]);
+                    }
+                    break;
+                case "simulation":
+                    {
+                        this.ShowXhsProjectSimulationEvent?.Invoke(this.svgImg32[1]);
+                    }
+                    break;
+                case "scheme-create":
+                    {
+                        this.CreateXhsProjectSchemeEvent?.Invoke(this.svgImg32[3]);
+                    }
+                    break;
+                case "scheme-compare":
+                    {
+                        this.CompareXhsProjectSchemeEvent?.Invoke(this.svgImg32[4]);
+                    }
+                    break;
+                default: break;
+            }
         }
+
+
+
+
     }
 }
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.Designer.cs
index 3fa1cc3..18d0487 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.Designer.cs
@@ -31,8 +31,22 @@
             components = new Container();
             svgImg32 = new DevExpress.Utils.SvgImageCollection(components);
             dockManager1 = new DevExpress.XtraBars.Docking.DockManager(components);
+            dockMgr = new DevExpress.XtraBars.Docking.DockPanel();
+            dockPanel1_Container = new DevExpress.XtraBars.Docking.ControlContainer();
+            sidePanel2 = new SidePanel();
+            xhsProjectSimulationFunctionMgrCtrl1 = new XhsProjectSimulationFunctionMgrCtrl();
+            sidePanel1 = new SidePanel();
+            xhsProjectSimulationSchemeMgrCtrl1 = new XhsProjectSimulationSchemeMgrCtrl();
+            documentManager1 = new DevExpress.XtraBars.Docking2010.DocumentManager(components);
+            tabbedView1 = new DevExpress.XtraBars.Docking2010.Views.Tabbed.TabbedView(components);
             ((ISupportInitialize)svgImg32).BeginInit();
             ((ISupportInitialize)dockManager1).BeginInit();
+            dockMgr.SuspendLayout();
+            dockPanel1_Container.SuspendLayout();
+            sidePanel2.SuspendLayout();
+            sidePanel1.SuspendLayout();
+            ((ISupportInitialize)documentManager1).BeginInit();
+            ((ISupportInitialize)tabbedView1).BeginInit();
             SuspendLayout();
             // 
             // svgImg32
@@ -47,7 +61,77 @@
             // dockManager1
             // 
             dockManager1.Form = this;
+            dockManager1.RootPanels.AddRange(new DevExpress.XtraBars.Docking.DockPanel[] { dockMgr });
             dockManager1.TopZIndexControls.AddRange(new string[] { "DevExpress.XtraBars.BarDockControl", "DevExpress.XtraBars.StandaloneBarDockControl", "System.Windows.Forms.MenuStrip", "System.Windows.Forms.StatusStrip", "System.Windows.Forms.StatusBar", "DevExpress.XtraBars.Ribbon.RibbonStatusBar", "DevExpress.XtraBars.Ribbon.RibbonControl", "DevExpress.XtraBars.Navigation.OfficeNavigationBar", "DevExpress.XtraBars.Navigation.TileNavPane", "DevExpress.XtraBars.TabFormControl", "DevExpress.XtraBars.FluentDesignSystem.FluentDesignFormControl", "DevExpress.XtraBars.ToolbarForm.ToolbarFormControl" });
+            // 
+            // dockMgr
+            // 
+            dockMgr.Controls.Add(dockPanel1_Container);
+            dockMgr.Dock = DevExpress.XtraBars.Docking.DockingStyle.Left;
+            dockMgr.ID = new Guid("0770f1b3-876e-49a8-91d8-f72117b01187");
+            dockMgr.Location = new Point(0, 0);
+            dockMgr.Name = "dockMgr";
+            dockMgr.OriginalSize = new Size(230, 200);
+            dockMgr.Size = new Size(230, 669);
+            dockMgr.Text = "鏂规鍒楄〃";
+            // 
+            // dockPanel1_Container
+            // 
+            dockPanel1_Container.Controls.Add(sidePanel2);
+            dockPanel1_Container.Controls.Add(sidePanel1);
+            dockPanel1_Container.Location = new Point(3, 26);
+            dockPanel1_Container.Name = "dockPanel1_Container";
+            dockPanel1_Container.Size = new Size(223, 640);
+            dockPanel1_Container.TabIndex = 0;
+            // 
+            // sidePanel2
+            // 
+            sidePanel2.Controls.Add(xhsProjectSimulationFunctionMgrCtrl1);
+            sidePanel2.Dock = DockStyle.Fill;
+            sidePanel2.Location = new Point(0, 265);
+            sidePanel2.Name = "sidePanel2";
+            sidePanel2.Size = new Size(223, 375);
+            sidePanel2.TabIndex = 1;
+            sidePanel2.Text = "sidePanel2";
+            // 
+            // xhsProjectSimulationFunctionMgrCtrl1
+            // 
+            xhsProjectSimulationFunctionMgrCtrl1.Dock = DockStyle.Fill;
+            xhsProjectSimulationFunctionMgrCtrl1.Location = new Point(0, 0);
+            xhsProjectSimulationFunctionMgrCtrl1.Name = "xhsProjectSimulationFunctionMgrCtrl1";
+            xhsProjectSimulationFunctionMgrCtrl1.Size = new Size(223, 375);
+            xhsProjectSimulationFunctionMgrCtrl1.TabIndex = 0;
+            // 
+            // sidePanel1
+            // 
+            sidePanel1.Controls.Add(xhsProjectSimulationSchemeMgrCtrl1);
+            sidePanel1.Dock = DockStyle.Top;
+            sidePanel1.Location = new Point(0, 0);
+            sidePanel1.Name = "sidePanel1";
+            sidePanel1.Size = new Size(223, 265);
+            sidePanel1.TabIndex = 0;
+            sidePanel1.Text = "sidePanel1";
+            // 
+            // xhsProjectSimulationSchemeMgrCtrl1
+            // 
+            xhsProjectSimulationSchemeMgrCtrl1.Dock = DockStyle.Fill;
+            xhsProjectSimulationSchemeMgrCtrl1.Location = new Point(0, 0);
+            xhsProjectSimulationSchemeMgrCtrl1.Name = "xhsProjectSimulationSchemeMgrCtrl1";
+            xhsProjectSimulationSchemeMgrCtrl1.Size = new Size(223, 264);
+            xhsProjectSimulationSchemeMgrCtrl1.TabIndex = 0;
+            // 
+            // documentManager1
+            // 
+            documentManager1.ContainerControl = this;
+            documentManager1.View = tabbedView1;
+            documentManager1.ViewCollection.AddRange(new DevExpress.XtraBars.Docking2010.Views.BaseView[] { tabbedView1 });
+            // 
+            // tabbedView1
+            // 
+            tabbedView1.DocumentDeselected += tabbedView1_DocumentSelected;
+            tabbedView1.DocumentAdded += tabbedView1_DocumentAdded;
+            tabbedView1.DocumentActivated += tabbedView1_DocumentActivated;
+            tabbedView1.DocumentClosed += tabbedView1_DocumentClosed;
             // 
             // XhsProjectSimulationMgrPage
             // 
@@ -55,10 +139,17 @@
             Appearance.Options.UseBackColor = true;
             AutoScaleDimensions = new SizeF(7F, 14F);
             AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(dockMgr);
             Name = "XhsProjectSimulationMgrPage";
             Size = new Size(1055, 669);
             ((ISupportInitialize)svgImg32).EndInit();
             ((ISupportInitialize)dockManager1).EndInit();
+            dockMgr.ResumeLayout(false);
+            dockPanel1_Container.ResumeLayout(false);
+            sidePanel2.ResumeLayout(false);
+            sidePanel1.ResumeLayout(false);
+            ((ISupportInitialize)documentManager1).EndInit();
+            ((ISupportInitialize)tabbedView1).EndInit();
             ResumeLayout(false);
         }
 
@@ -66,5 +157,13 @@
 
         private DevExpress.Utils.SvgImageCollection svgImg32;
         private DevExpress.XtraBars.Docking.DockManager dockManager1;
+        private DevExpress.XtraBars.Docking.DockPanel dockMgr;
+        private DevExpress.XtraBars.Docking.ControlContainer dockPanel1_Container;
+        private SidePanel sidePanel1;
+        private SidePanel sidePanel2;
+        private XhsProjectSimulationFunctionMgrCtrl xhsProjectSimulationFunctionMgrCtrl1;
+        private XhsProjectSimulationSchemeMgrCtrl xhsProjectSimulationSchemeMgrCtrl1;
+        private DevExpress.XtraBars.Docking2010.DocumentManager documentManager1;
+        private DevExpress.XtraBars.Docking2010.Views.Tabbed.TabbedView tabbedView1;
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.cs
index 83eb05a..982592f 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.cs
@@ -1,4 +1,8 @@
-锘縩amespace HStation.WinFrmUI
+锘縰sing DevExpress.XtraBars.Docking;
+using DevExpress.XtraBars.Docking2010.Views;
+using Yw.WinFrmUI.Page;
+
+namespace HStation.WinFrmUI
 {
     public partial class XhsProjectSimulationMgrPage : Yw.WinFrmUI.DocumentPage
     {
@@ -6,6 +10,423 @@
         {
             InitializeComponent();
             this.PageTitle.Caption = "姘村姏妯℃嫙";
+            this.PageTitle.HeaderSvgImage = this.svgImg32[0];
+            this.PageTitle.SvgImageSize = new Size(24, 24);
+
         }
+
+        private XhsProjectStdDto _project = null;
+        private Yw.Model.HydroModelInfo _hydroInfo = null;
+
+        /// <summary>
+        /// 鍒濆鍖栨暟鎹簮
+        /// </summary>
+        public override void InitialDataSource()
+        {
+            base.InitialDataSource();
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        /// <param name="projectId">椤圭洰id</param>
+        public async Task SetBindingData(long projectId)
+        {
+            //this.xhsSchemeMgrListCtrl1.SetBindingData(projectId);
+            //_project = await new BLL.XhsProjectStd().GetByID(projectId);
+            //this.PageTitle.Caption = $"{_project?.Name}\r\n鏂规绠$悊";
+            //var projectSite = await new BLL.XhsProjectSiteStd().GetDefaultByProjectID(_project.ID);
+            //if (projectSite == null)
+            //{
+            //    return;
+            //}
+
+            //var relation = await new Yw.BLL.HydroModelRelation()
+            //    .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, projectSite.ID, Yw.Bimface.Purpose.Simulation);
+            //if (relation == null)
+            //{
+            //    return;
+            //}
+
+            //_hydroInfo = await new Yw.BLL.HydroModelInfo().GetByID(relation.ModelID);
+        }
+
+
+        //鍔熻兘鐐瑰嚮
+        private async void accordionControl1_ElementClick(object sender, DevExpress.XtraBars.Navigation.ElementClickEventArgs e)
+        {
+            var tag = e.Element.Tag;
+            if (tag is not string code)
+                return;
+
+            var svg_image_size = new Size(24, 24);
+            switch (code)
+            {
+                case "basic_info":
+                    {
+                        var guid = new PageGuid()
+                        {
+                            Modular = this.PageGuid.Modular,
+                            MoudingType = eMoudingType.Tab,
+                            Function = "basic_info",
+                        };
+                        if (!IsExistPage(guid, true))
+                        {
+                            var page = new XhsSchemeBasicInfoPage();
+                            page.SetBindingData(_project.ID);
+                            page.PageTitle.Caption = e.Element.Text;
+                            page.PageTitle.HeaderSvgImage = e.Element.ImageOptions.SvgImage;
+                            page.PageTitle.SvgImageSize = svg_image_size;
+                            CreatePage(page, guid);
+                        }
+                    }
+                    break;
+                case "asset_mgr":
+                    {
+                        var guid = new PageGuid()
+                        {
+                            Modular = this.PageGuid.Modular,
+                            MoudingType = eMoudingType.Tab,
+                            Function = "asset_mgr",
+                        };
+                        if (!IsExistPage(guid, true))
+                        {
+                            var page = new XhsSchemeAssetMgrPage();
+                            await page.SetBindingData(_project.ID);
+                            page.PageTitle.Caption = e.Element.Text;
+                            page.PageTitle.HeaderSvgImage = e.Element.ImageOptions.SvgImage;
+                            page.PageTitle.SvgImageSize = svg_image_size;
+                            CreatePage(page, guid);
+                        }
+                    }
+                    break;
+                case "hydraulic_simulation":
+                    {
+                        var guid = new PageGuid()
+                        {
+                            Modular = this.PageGuid.Modular,
+                            MoudingType = eMoudingType.Tab,
+                            Function = "hydraulic_simulation",
+                        };
+                        if (!IsExistPage(guid, true))
+                        {
+                            var page = new XhsSchemeHydraulicSimulationPage();
+                            await page.SetBindingData(_project.ID);
+                            page.PageTitle.Caption = e.Element.Text;
+                            page.PageTitle.HeaderSvgImage = e.Element.ImageOptions.SvgImage;
+                            page.PageTitle.SvgImageSize = svg_image_size;
+                            CreatePage(page, guid);
+                        }
+                    }
+                    break;
+                case "create_scheme":
+                    {
+                        var dlg = new CreateSchemeDlg();
+                        dlg.ShowDialog();
+                    }
+                    break;
+                case "scheme_comparison":
+                    {
+                        var guid = new PageGuid()
+                        {
+                            Modular = this.PageGuid.Modular,
+                            MoudingType = eMoudingType.Tab,
+                            Function = "scheme_comparison",
+                        };
+                        if (!IsExistPage(guid, true))
+                        {
+                            var page = new XhsSchemeComparisonPage();
+                            page.PageTitle.Caption = e.Element.Text;
+                            page.PageTitle.HeaderSvgImage = e.Element.ImageOptions.SvgImage;
+                            page.PageTitle.SvgImageSize = svg_image_size;
+                            CreatePage(page, guid);
+                        }
+                    }
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        #region TabbedView 鐩稿叧浜嬩欢澶勭悊绋嬪簭
+
+        //閫変腑
+        private void tabbedView1_DocumentSelected(object sender, DocumentEventArgs e)
+        {
+            if (e.Document == null)
+                return;
+            var surfaceGuid = e.Document.Tag as PageGuid;
+            if (surfaceGuid == null)
+                return;
+        }
+
+        //娣诲姞
+        private void tabbedView1_DocumentAdded(object sender, DocumentEventArgs e)
+        {
+        }
+
+        //婵�娲�
+        private void tabbedView1_DocumentActivated(object sender, DocumentEventArgs e)
+        {
+            var page = e.Document.Control as DocumentPage;
+            if (page == null)
+                return;
+        }
+
+        //鍏抽棴 姝ゆ椂鎺т欢宸茬粡涓虹┖
+        private void tabbedView1_DocumentClosed(object sender, DocumentEventArgs e)
+        {
+        }
+
+        #endregion TabbedView 鐩稿叧浜嬩欢澶勭悊绋嬪簭
+
+        #region Page
+
+        //鏄惁瀛樺湪Page
+        private new bool IsExistPage(PageGuid pguid, bool isActivePage)
+        {
+            if (pguid == null)
+            {
+                return false;
+            }
+            if (this.dockManager1.Panels != null && this.dockManager1.Panels.Count > 0)
+            {
+                foreach (DockPanel panel in this.dockManager1.Panels)
+                {
+                    if (panel.Tag != null)
+                    {
+                        if (panel.Tag is PageGuid)
+                        {
+                            if ((panel.Tag as PageGuid).ToString() == pguid.ToString())
+                            {
+                                if (isActivePage)
+                                {
+                                    panel.Show();
+                                }
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+
+            if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
+            {
+                foreach (BaseDocument doc in this.tabbedView1.Documents)
+                {
+                    if (doc.Tag != null)
+                    {
+                        if (doc.Tag is PageGuid)
+                        {
+                            if ((doc.Tag as PageGuid).ToString() == pguid.ToString())
+                            {
+                                if (isActivePage)
+                                {
+                                    this.tabbedView1.Controller.Activate(doc);
+                                }
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+
+            return false;
+        }
+
+        //鏇存柊鏁版嵁
+        private new void RefreshPageData(PageGuid pguid)
+        {
+            if (pguid == null)
+            {
+                return;
+            }
+            if (this.dockManager1.Panels != null && this.dockManager1.Panels.Count > 0)
+            {
+                var panel = this.dockManager1.Panels.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                if (panel != null)
+                {
+                    if (panel.ControlContainer.Controls.Count > 0)
+                    {
+                        var page = panel.ControlContainer.Controls[0] as DocumentPage;
+                        if (page != null)
+                        {
+                            page.RefreshData();
+                        }
+                    }
+                    return;
+                }
+            }
+
+            if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
+            {
+                var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                if (doc != null)
+                {
+                    var page = doc.Control as DocumentPage;
+                    if (page != null)
+                    {
+                        page.RefreshData();
+                    }
+                    return;
+                }
+            }
+        }
+
+        //鏇存柊PageTitle
+        private new void UpdatePageTitle(PageGuid pguid, PageTitle title)
+        {
+            if (pguid == null || title == null)
+                return;
+
+            if (this.dockManager1.Panels != null && this.dockManager1.Panels.Count > 0)
+            {
+                var panel = this.dockManager1.Panels.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                if (panel != null)
+                {
+                    panel.Text = title.Caption;
+                    panel.ImageOptions.Image = title.HeaderImage;
+                    panel.ImageOptions.SvgImage = title.HeaderSvgImage;
+                    panel.ImageOptions.SvgImageSize = title.SvgImageSize;
+                    if (panel.ControlContainer.Controls.Count > 0)
+                    {
+                        var page = panel.ControlContainer.Controls[0] as DocumentPage;
+                        if (page != null)
+                        {
+                            page.PageTitle = title;
+                        }
+                    }
+                    return;
+                }
+            }
+
+            if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
+            {
+                var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                if (doc != null)
+                {
+                    doc.Caption = title.Caption;
+                    doc.ImageOptions.Image = title.HeaderImage;
+                    doc.ImageOptions.SvgImage = title.HeaderSvgImage;
+                    doc.ImageOptions.SvgImageSize = title.SvgImageSize;
+                    var page = doc.Control as DocumentPage;
+                    if (page != null)
+                    {
+                        page.PageTitle = title;
+                    }
+                    return;
+                }
+            }
+        }
+
+        //鍒涘缓Page
+        private new bool CreatePage(DocumentPage page, PageGuid pguid)
+        {
+            if (page == null || pguid == null)
+            {
+                return false;
+            }
+            page.PageGuid = pguid;
+            page.Dock = DockStyle.Fill;
+            page.IsExistPageEvent += IsExistPage;
+            page.CreatePageEvent += CreatePage;
+            page.RefreshPageDataEvent += RefreshPageData;
+            page.UpdatePageTitleEvent += UpdatePageTitle;
+            page.ClosePageEvent += ClosePage;
+            page.RegistEvents();
+            switch (pguid.MoudingType)
+            {
+                case eMoudingType.Dock:
+                    {
+                        this.dockManager1.BeginUpdate();
+                        DockPanel docPnl = null;
+                        if (pguid.DockType == eDockType.Left)
+                        {
+                            docPnl = this.dockManager1.AddPanel(DockingStyle.Left);
+                        }
+                        else if (pguid.DockType == eDockType.Right)
+                        {
+                            docPnl = this.dockManager1.AddPanel(DockingStyle.Right);
+                        }
+
+                        docPnl.Footer = Directory.GetCurrentDirectory();
+                        if (page.PageTitle != null)
+                        {
+                            docPnl.Text = page.PageTitle.Caption;
+                            docPnl.ImageOptions.Image = page.PageTitle.HeaderImage;
+                            docPnl.ImageOptions.SvgImage = page.PageTitle.HeaderSvgImage;
+                            docPnl.ImageOptions.SvgImageSize = page.PageTitle.SvgImageSize;
+                            docPnl.Options.ShowCloseButton = page.PageTitle.AllowClose;
+                        }
+                        docPnl.ControlContainer.Controls.Add(page);
+                        docPnl.Tag = pguid;
+                        this.dockManager1.EndUpdate();
+                        docPnl.Show();
+                    }
+                    break;
+
+                case eMoudingType.Tab:
+                    {
+                        this.tabbedView1.BeginUpdate();
+                        var doc = this.tabbedView1.AddDocument(page);
+                        doc.Footer = Directory.GetCurrentDirectory();
+                        if (page.PageTitle != null)
+                        {
+                            doc.Caption = page.PageTitle.Caption;
+                            doc.ImageOptions.Image = page.PageTitle.HeaderImage;
+                            doc.ImageOptions.SvgImage = page.PageTitle.HeaderSvgImage;
+                            doc.ImageOptions.SvgImageSize = page.PageTitle.SvgImageSize;
+                            doc.Properties.AllowClose = page.PageTitle.AllowClose ? DevExpress.Utils.DefaultBoolean.True : DevExpress.Utils.DefaultBoolean.False;
+                        }
+                        doc.Tag = pguid;
+                        this.tabbedView1.EndUpdate();
+                        this.tabbedView1.Controller.Activate(doc);
+                    }
+                    break;
+
+                default: break;
+            }
+            page.InitialDataSource();
+            return true;
+        }
+
+        //鍏抽棴Page
+        private new void ClosePage(PageGuid pguid)
+        {
+            switch (pguid.MoudingType)
+            {
+                case eMoudingType.Dock:
+                    {
+                        if (this.dockManager1.Panels != null && this.dockManager1.Panels.Count > 0)
+                        {
+                            var panel = this.dockManager1.Panels.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                            if (panel != null)
+                            {
+                                if (panel.Visibility != DockVisibility.Hidden)
+                                    panel.Close();//浼氳Е鍙戞鍦ㄥ叧闂拰鍏抽棴浜嬩欢
+                                                  //this.dockManager1.RemovePanel(panel);//涓嶄細瑙﹀彂姝e湪鍏抽棴鍜屽叧闂簨浠�
+                            }
+                        }
+                    }
+                    break;
+
+                case eMoudingType.Tab:
+                    {
+                        if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
+                        {
+                            var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                            if (doc != null)
+                            {
+                                this.tabbedView1.Controller.Close(doc);//浼氳Е鍙戞鍦ㄥ叧闂拰鍏抽棴浜嬩欢
+                            }
+                        }
+                    }
+                    break;
+
+                default: break;
+            }
+        }
+
+        #endregion Page
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.resx
index bf7fb6f..c4b29ad 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.resx
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.resx
@@ -123,4 +123,7 @@
   <metadata name="dockManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>129, 17</value>
   </metadata>
+  <metadata name="documentManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>273, 17</value>
+  </metadata>
 </root>
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj
index 6ab631c..4bf389f 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj
@@ -31,8 +31,6 @@
     <Compile Remove="03-scheme\03-hydraulic-simulation\01-PumpMainCurveChoice\PumpMainChoicePage.Designer.cs" />
     <Compile Remove="03-scheme\03-hydraulic-simulation\01-PumpMainCurveChoice\PumpMainForm-bak.cs" />
     <Compile Remove="03-scheme\03-hydraulic-simulation\01-PumpMainCurveChoice\PumpMainForm-bak.Designer.cs" />
-    <Compile Remove="04-simulation\04-scheme\XhsProjectSimulationSchemeMgrCtrl.cs" />
-    <Compile Remove="04-simulation\04-scheme\XhsProjectSimulationSchemeMgrCtrl.Designer.cs" />
   </ItemGroup>
 
   <ItemGroup>
@@ -40,7 +38,6 @@
     <EmbeddedResource Remove="02-project\03-mgr\XhsProjectMgrPage - 澶嶅埗.resx" />
     <EmbeddedResource Remove="03-scheme\03-hydraulic-simulation\01-PumpMainCurveChoice\PumpMainChoicePage.resx" />
     <EmbeddedResource Remove="03-scheme\03-hydraulic-simulation\01-PumpMainCurveChoice\PumpMainForm-bak.resx" />
-    <EmbeddedResource Remove="04-simulation\04-scheme\XhsProjectSimulationSchemeMgrCtrl.resx" />
   </ItemGroup>
 
   <ItemGroup>
@@ -68,8 +65,6 @@
 
   <ItemGroup>
     <Folder Include="04-simulation\02-bimface\" />
-    <Folder Include="04-simulation\03-q3d\" />
-    <Folder Include="04-simulation\04-scheme\" />
     <Folder Include="map\gaode\css\" />
     <Folder Include="Resources\" />
   </ItemGroup>
@@ -127,6 +122,15 @@
     <Compile Update="03-scheme\XhsSchemeMultiMgrPage_Bak.cs">
       <SubType>UserControl</SubType>
     </Compile>
+    <Compile Update="04-simulation\01-info\XhsProjectSimulationBimfaceInfoCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="04-simulation\01-info\XhsProjectSimulationInfoPage.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="04-simulation\03-q3d\XhsProjectSimulationQ3dCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Update="Properties\Resources.Designer.cs">
       <DesignTime>True</DesignTime>
       <AutoGen>True</AutoGen>
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user
index 8fdb616..10ff196 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user
@@ -97,6 +97,9 @@
     <Compile Update="04-simulation\02-bimface\XhsProjectSimulationBimfaceCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
+    <Compile Update="04-simulation\04-scheme\XhsProjectSimulationSchemeMgrCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Update="04-simulation\05-function\XhsProjectSimulationFunctionMgrCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/AddBimfaceFileDlg.cs b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/AddBimfaceFileDlg.cs
index 7d7d80d..a4f3fd4 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/AddBimfaceFileDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/AddBimfaceFileDlg.cs
@@ -106,17 +106,17 @@
             {
                 return;
             }
-            var dto = new Yw.Dto.AddBimfaceFileInput();
-            dto.BimfaceId = this.txtBimFaceFileID.Text.Trim();
-            dto.Name = this.txtFileName.Text.Trim();
-            dto.ModelType = (int)(eModelType)this.imgCmbBimfaceModelType.EditValue;
-            dto.FormatType = (int)(eFormatType)this.imgCmbFormatType.EditValue;
-            dto.FileStatus = (int)(eFileStatus)this.imgCmbFileStatus.EditValue;
-            dto.FileSuffix = this.txtExtension.Text.Trim();
-            dto.FileSize = this.txtFileSize.Text.Trim();
-            dto.Description = this.txtDescription.Text.Trim();
+            var vmo = new Vmo.BimfaceFileVmo();
+            vmo.BimfaceId = this.txtBimFaceFileID.Text.Trim();
+            vmo.Name = this.txtFileName.Text.Trim();
+            vmo.ModelType = (int)(eModelType)this.imgCmbBimfaceModelType.EditValue;
+            vmo.FormatType = (int)(eFormatType)this.imgCmbFormatType.EditValue;
+            vmo.FileStatus = (int)(eFileStatus)this.imgCmbFileStatus.EditValue;
+            vmo.FileSuffix = this.txtExtension.Text.Trim();
+            vmo.FileSize = this.txtFileSize.Text.Trim();
+            vmo.Description = this.txtDescription.Text.Trim();
 
-            var id = await _bll.Value.Insert(dto);
+            var id = await _bll.Value.Insert(vmo);
             if (id < 1)
             {
                 XtraMessageBox.Show("娣诲姞澶辫触锛�");
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/Bimface3dViewPage.cs b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/Bimface3dViewPage.cs
index bf00227..ca98507 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/Bimface3dViewPage.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/Bimface3dViewPage.cs
@@ -10,18 +10,16 @@
             this.PageTitle.SvgImageSize = new Size(24, 24);
         }
 
-        private Lazy<Yw.BLL.BimfaceFileStd> _bllBimfaceFileStd = new(() => new Yw.BLL.BimfaceFileStd());
         private long _bimfaceFileId;//bimface鏂囦欢id
-        private Yw.Dto.BimfaceFileStdDto _bimfaceFile = null;//bimface鏂囦欢
+        private Yw.Vmo.BimfaceFileVmo _bimfaceFile = null;//bimface鏂囦欢
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        /// <param name="bimfaceFileId"></param>
         public async Task SetBindingData(long bimfaceFileId)
         {
             _bimfaceFileId = bimfaceFileId;
-            _bimfaceFile = await _bllBimfaceFileStd.Value.GetByID(bimfaceFileId);
+            _bimfaceFile = await BLLFactory<Yw.BLL.BimfaceFile>.Instance.GetByID(bimfaceFileId);
             this.PageTitle.Caption = $"{_bimfaceFile.Name}\r\n妯″瀷瑙嗗浘";
         }
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/BimfaceFileMgrPage.cs b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/BimfaceFileMgrPage.cs
index baef353..46c62a1 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/BimfaceFileMgrPage.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/BimfaceFileMgrPage.cs
@@ -147,7 +147,7 @@
                 vm.FileStatus = eFileStatus.UploadSucceed;
                 this.bimfaceFileMgrViewModelBindingSource.ResetBindings(false);
 
-                var addModel = vm.Adapt<BimfaceFileMgrViewModel, Yw.Dto.AddBimfaceFileInput>();
+                var addModel = vm.Adapt<BimfaceFileMgrViewModel, Yw.Vmo.BimfaceFileVmo>();
                 vm.ID = await _bllBimfaceFile.Value.Insert(addModel);
                 if (vm.ID < 1)
                 {
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/BimfaceFileMgrViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/BimfaceFileMgrViewModel.cs
index 85d88b6..e79102f 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/BimfaceFileMgrViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/BimfaceFileMgrViewModel.cs
@@ -1,4 +1,6 @@
-锘縩amespace Yw.WinFrmUI
+锘縰sing Yw.Vmo;
+
+namespace Yw.WinFrmUI
 {
     /// <summary>
     /// 
@@ -13,7 +15,7 @@
         /// <summary>
         /// 
         /// </summary>
-        public BimfaceFileMgrViewModel(Yw.Dto.BimfaceFileDto rhs, bool hasRelation)
+        public BimfaceFileMgrViewModel(BimfaceFileVmo rhs, bool hasRelation)
         {
             this.ID = rhs.ID;
             this.BimfaceId = rhs.BimfaceId;
@@ -37,7 +39,7 @@
         /// <summary>
         /// 
         /// </summary>
-        public void Reset(Yw.Dto.BimfaceFileDto rhs)
+        public void Reset(BimfaceFileVmo rhs)
         {
             this.ID = rhs.ID;
             this.BimfaceId = rhs.BimfaceId;
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/EditBimfaceFileDlg.cs b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/EditBimfaceFileDlg.cs
index 071770c..8b4d2b9 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/EditBimfaceFileDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/02-file/EditBimfaceFileDlg.cs
@@ -16,8 +16,7 @@
         }
 
         public event Action<long> ReloadDataEvent;
-        private Yw.Dto.UpdateBimfaceFileInput _updateModel = null;
-        private Lazy<Yw.BLL.BimfaceFile> _bll = new(() => new Yw.BLL.BimfaceFile());
+        private Yw.Vmo.BimfaceFileVmo _updateModel = null;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
@@ -27,7 +26,7 @@
             InitialModelType();
             InitialFormatType();
             InitialFileStatus();
-            _updateModel = vm.Adapt<BimfaceFileMgrViewModel, Yw.Dto.UpdateBimfaceFileInput>();
+            _updateModel = vm.Adapt<BimfaceFileMgrViewModel, Yw.Vmo.BimfaceFileVmo>();
             this.txtBimfaceId.EditValue = vm.BimfaceId;
             this.txtName.EditValue = vm.Name;
             this.imgCmbBimfaceModelType.EditValue = vm.ModelType;
@@ -123,7 +122,7 @@
             _updateModel.FileSize = this.txtFileSize.Text.Trim();
             _updateModel.Description = this.txtDescription.Text.Trim();
 
-            if (!await _bll.Value.Update(_updateModel))
+            if (!await BLLFactory<Yw.BLL.BimfaceFile>.Instance.Update(_updateModel))
             {
                 XtraMessageBox.Show("鏇存柊澶辫触锛�");
                 return;
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 d007b29..b5346ba 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
@@ -86,7 +86,7 @@
   <ItemGroup>
     <PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
     <PackageReference Include="Yw.BIMFace.SDK.Core" Version="3.0.5" />
-    <PackageReference Include="Yw.BLL.Bimface.Core" Version="3.0.6" />
+    <PackageReference Include="Yw.BLL.Bimface.Core" Version="3.0.7" />
     <PackageReference Include="Yw.WebBrower.Core" Version="3.0.2" />
     <PackageReference Include="Yw.WebView2.WinFrmUI.Core" Version="3.0.1" />
   </ItemGroup>

--
Gitblit v1.9.3