From 644a8b70b8ca49f6dc08d922ff18bf7509af9b07 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期四, 18 七月 2024 17:04:32 +0800
Subject: [PATCH] BLL更改

---
 BLL/HStation.BLL.Xhs.Core/04-bll/09-dbfirst/XhsDbFirstHelper.cs                           |   15 
 BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectStd.cs                              |   17 
 BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProjectExtensions.cs                |   11 
 BLL/HStation.BLL.Xhs.Core/01-interface/09-dbfirst/IXhsDbFirstHelper.cs                    |   15 
 Service/HStation.Service.Xhs.Core/05-service/01-project/XhsProject.cs                     |  142 ++
 Dto/HStation.Dto.Xhs.Core/02-project-site/AddXhsProjectSiteInput.cs                       |   34 
 BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject.cs                                 |  117 ++
 Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/AddXhsProjectExtensionsInput.cs        |   13 
 Dto/HStation.Dto.Xhs.Core/01-project/01-normal/AddXhsProjectInput.cs                      |   33 
 Application/HStation.Application.Xhs.Core/02-project-site/XhsProjectSite_StdController.cs |   52 +
 Application/HStation.Application.Xhs.Core/09-dbfirst/XhsDbFirst_Controller.cs             |   28 
 Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/XhsProjectExtensionsDto.cs             |   26 
 BLL/HStation.BLL.Xhs.Core/HStation.BLL.Xhs.Core.csproj                                    |    9 
 Application/HStation.Application.Xhs.Core/HStation.Application.Xhs.Core.csproj            |   14 
 BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectExtensions.cs                       |   72 +
 BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSiteStd.cs                     |   22 
 Dto/HStation.Dto.Xhs.Core/01-project/01-normal/XhsProjectStdDto.cs                        |  104 ++
 BLL/HStation.BLL.Xhs.Core/03-localclient/02-project-site/XhsProjectSiteStd.cs             |   41 
 BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProjectStd.cs                      |   28 
 Dto/HStation.Dto.Xhs.Core/01-project/01-normal/UpdateXhsProjectInput.cs                   |   40 
 Service/HStation.Service.Xhs.Core/04-dal/02-postgresql/XhsProject.cs                      |   78 
 BLL/HStation.BLL.Xhs.Core/02-httpclient/02-project-site/XhsProjectSite.cs                 |   55 +
 Dto/HStation.Dto.Xhs.Core/02-project-site/XhsProjectSiteDto.cs                            |   25 
 BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProject.cs                          |   31 
 BLL/HStation.BLL.Core/HStation.BLL.Core.csproj                                            |   19 
 Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/AddXhsProjectSiteExtensionsInput.cs    |   31 
 Dto/HStation.Dto.Xhs.Core/02-project-site/UpdateXhsProjectSiteInput.cs                    |   35 
 BLL/HStation.BLL.Xhs.Core/00-core/Mapper.cs                                               |   39 
 Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/UpdateXhsProjectExtensionsInput.cs     |   13 
 Application/HStation.Application.Xhs.Core/01-project/XhsProject_ExtensionsController.cs   |  168 +++
 Application/HStation.Application.Xhs.Core/00-core/Mapper.cs                               |   36 
 BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProject.cs                         |  146 +-
 BLL/HStation.BLL.Xhs.Core/01-interface/02-project-site/IXhsProjectSite.cs                 |   26 
 BLL/HStation.BLL.Xhs.Core/02-httpclient/02-project-site/XhsProjectSiteStd.cs              |   39 
 Dto/HStation.Dto.Xhs.Core/GlobalUsings.cs                                                 |    3 
 Application/HStation.Application.Core/HStation.Application.Core.csproj                    |   17 
 Dto/HStation.Dto.Xhs.Core/01-project/01-normal/XhsProjectDto.cs                           |  104 ++
 BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProjectExtensions.cs                |   18 
 BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProjectExtensions.cs               |  234 +++++
 BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSite.cs                        |  112 ++
 HStation.Xhs.Core.sln                                                                     |   23 
 Application/HStation.Application.Xhs.Core/01-project/XhsProject_Controller.cs             |   44 
 BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProjectStd.cs                       |   15 
 BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProjectStd.cs                       |   27 
 Application/HStation.Application.Xhs.Core/02-project-site/XhsProjectSite_Controller.cs    |  125 +-
 Service/HStation.Service.Xhs.Core/05-service/02-project-site/XhsProjectSite.cs            |   13 
 Dto/HStation.Dto.Xhs.Core/02-project-site/XhsProjectSiteStdDto.cs                         |   25 
 /dev/null                                                                                 |   26 
 BLL/HStation.BLL.Xhs.Core/02-httpclient/09-dbfirst/XhsDbFirstHelper.cs                    |   24 
 Application/HStation.Application.Xhs.Core/01-project/XhsProject_StdController.cs          |    2 
 BLL/HStation.BLL.Xhs.Core/01-interface/02-project-site/IXhsProjectSiteStd.cs              |   23 
 BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProject.cs                          |   58 +
 Service/HStation.Service.Xhs.Core/04-dal/03-sqlite/XhsProject.cs                          |   78 
 BLL/HStation.BLL.Xhs.Core/03-localclient/02-project-site/XhsProjectSite.cs                |  166 +-
 Dto/Hstation.Dto.Core/Hstation.Dto.Core.csproj                                            |    5 
 BLL/HStation.BLL.Xhs.Core/03-localclient/09-dbfirst/XhsDbFirstHelper.cs                   |   25 
 Service/HStation.Service.Xhs.Core/04-dal/01-interface/IXhsProject.cs                      |    4 
 57 files changed, 2,300 insertions(+), 445 deletions(-)

diff --git a/Application/HStation.Application.Core/HStation.Application.Core.csproj b/Application/HStation.Application.Core/HStation.Application.Core.csproj
new file mode 100644
index 0000000..e47d167
--- /dev/null
+++ b/Application/HStation.Application.Core/HStation.Application.Core.csproj
@@ -0,0 +1,17 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>disable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Yw.Application.Core" Version="3.1.0" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Dto\HStation.Dto.Core\HStation.Dto.Core.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/Application/HStation.Application.Xhs.Core/00-core/Mapper.cs b/Application/HStation.Application.Xhs.Core/00-core/Mapper.cs
index 57fcf10..5a37fdb 100644
--- a/Application/HStation.Application.Xhs.Core/00-core/Mapper.cs
+++ b/Application/HStation.Application.Xhs.Core/00-core/Mapper.cs
@@ -12,23 +12,53 @@
         public void Register(TypeAdapterConfig config)
         {
 
-            #region xhs-project
+            #region project
 
             config.ForType<AddXhsProjectInput, Model.XhsProject>()
              .Map(dest => dest.Paras, src => src.Paras)
-             .Map(dest => dest.Flags, src => src.Flags)
-             .Map(dest => dest.UseStatus, src => Yw.Model.eUseStatus.Enable);
+             .Map(dest => dest.Flags, src => src.Flags);
+
+            config.ForType<AddXhsProjectExtensionsInput, Model.XhsProject>()
+            .Map(dest => dest.Paras, src => src.Paras)
+            .Map(dest => dest.Flags, src => src.Flags);
 
             config.ForType<UpdateXhsProjectInput, Model.XhsProject>()
               .Map(dest => dest.Paras, src => src.Paras)
               .Map(dest => dest.Flags, src => src.Flags);
 
+            config.ForType<UpdateXhsProjectExtensionsInput, Model.XhsProject>()
+            .Map(dest => dest.Paras, src => src.Paras)
+            .Map(dest => dest.Flags, src => src.Flags);
+
             config.ForType<Model.XhsProject, XhsProjectDto>()
               .Map(dest => dest.Paras, src => src.Paras)
               .Map(dest => dest.Flags, src => src.Flags);
 
+
+
             #endregion
 
+            #region project-site
+
+            config.ForType<AddXhsProjectSiteInput, Model.XhsProjectSite>()
+                .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<AddXhsProjectSiteExtensionsInput, Model.XhsProjectSite>()
+               .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<UpdateXhsProjectSiteInput, Model.XhsProjectSite>()
+              .Map(dest => dest.Paras, src => src.Paras)
+              .Map(dest => dest.Flags, src => src.Flags);
+
+            config.ForType<Model.XhsProjectSite, XhsProjectSiteDto>()
+              .Map(dest => dest.Paras, src => src.Paras)
+              .Map(dest => dest.Flags, src => src.Flags);
+
+            #endregion
 
 
         }
diff --git a/Application/HStation.Application.Xhs.Core/01-project/XhsProject_Controller.cs b/Application/HStation.Application.Xhs.Core/01-project/XhsProject_Controller.cs
index 23f0dcf..f8d0ce0 100644
--- a/Application/HStation.Application.Xhs.Core/01-project/XhsProject_Controller.cs
+++ b/Application/HStation.Application.Xhs.Core/01-project/XhsProject_Controller.cs
@@ -47,7 +47,7 @@
             return vmList;
         }
 
-        #endregion Query
+        #endregion 
 
         #region Insert
 
@@ -66,23 +66,12 @@
                 }
             }
             var model = input.Adapt<AddXhsProjectInput, Model.XhsProject>();
-            model.SortCode = _service.GetMaxSortCode() + 1;
+            model.SortCode = _service.GetMaxSortCode(0) + 1;
             var id = _service.Insert(model);
             return id;
         }
 
-        /*        /// <summary>
-                /// 鎻掑叆鎷撳睍
-                /// </summary>
-                [Route("InsertEx@V1.0")]
-                [HttpPost]
-                public long InsertsEx(ProjectInputs text)
-                {
-                    var id = _service.InsertsEx(project, Item, Model, Map);
-                    return id;
-                }*/
-
-        #endregion Insert
+        #endregion 
 
         #region Update
 
@@ -179,13 +168,32 @@
         }
 
         /// <summary>
-        /// 鏇存柊 UseStatus
+        ///  鍙戝竷
         /// </summary>
-        [Route("UpdateUseStatus@V1.0")]
+        [Route("Publish@V1.0")]
         [HttpPut]
-        public bool UpdateUseStatus([Required] UpdateUseStatusInput input)
+        public bool Publish([Required] IDInput input)
         {
-            var bol = _service.UpdateUseStatus(input.ID, (Yw.Model.eUseStatus)input.UseStatus);
+            var bol = _service.Publish(input.ID, out string Msg);
+            if (!bol)
+            {
+                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, Msg);
+            }
+            return bol;
+        }
+
+        /// <summary>
+        /// 寮冪敤锛堣皑鎱庢搷浣滐級
+        /// </summary>
+        [Route("Deprecate@V1.0")]
+        [HttpPut]
+        public bool Deprecate([Required] IDInput input)
+        {
+            var bol = _service.Deprecate(input.ID, out string Msg);
+            if (!bol)
+            {
+                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, Msg);
+            }
             return bol;
         }
 
diff --git a/Application/HStation.Application.Xhs.Core/01-project/XhsProject_ExtensionsController.cs b/Application/HStation.Application.Xhs.Core/01-project/XhsProject_ExtensionsController.cs
new file mode 100644
index 0000000..c94da4d
--- /dev/null
+++ b/Application/HStation.Application.Xhs.Core/01-project/XhsProject_ExtensionsController.cs
@@ -0,0 +1,168 @@
+锘縩amespace HStation.Application
+{
+    /// <summary>
+    /// XhsProject
+    /// </summary>
+    [Route("Xhs/Project/Extensions")]
+    [ApiDescriptionSettings("Xhs", Name = "椤圭洰(Extensions)", Order = 99000)]
+    public class XhsProject_ExtensionsController : IDynamicApiController
+    {
+        private readonly Service.XhsProject _service = new();
+
+        #region Query
+
+        /// <summary>
+        /// 鑾峰彇鎵�鏈�
+        /// </summary>
+        [Route("GetAll@V1.0")]
+        [HttpGet]
+        public List<XhsProjectExtensionsDto> GetAll()
+        {
+            var allList = _service.GetAll();
+            if (allList == null || allList.Count < 1)
+            {
+                return default;
+            }
+
+            var allIds = allList.Select(x => x.ID).Distinct().ToList();
+            var allSiteList = new HStation.Service.XhsProjectSite().GetByProjectIds(allIds);
+
+            var vmList = new List<XhsProjectExtensionsDto>();
+            foreach (var project in allList)
+            {
+                var siteList = allSiteList?.Where(x => x.ProjectID == project.ID).OrderBy(x => x.SortCode).ToList();
+                var vm = new XhsProjectExtensionsDto(project, siteList);
+                vmList.Add(vm);
+            }
+
+            return vmList;
+        }
+
+        /// <summary>
+        /// 閫氳繃 ID 鑾峰彇
+        /// </summary>
+        [Route("GetByID@V1.0")]
+        [HttpGet]
+        public XhsProjectExtensionsDto GetByID([FromQuery][Required] IDInput input)
+        {
+            var project = _service.GetByID(input.ID);
+            if (project == null)
+            {
+                return default;
+            }
+            var siteList = new HStation.Service.XhsProjectSite().GetByProjectID(project.ID);
+            return new XhsProjectExtensionsDto(project, siteList);
+        }
+
+        /// <summary>
+        /// 閫氳繃 Ids 鑾峰彇
+        /// </summary>
+        [Route("GetByIds@V1.0")]
+        [HttpGet]
+        public List<XhsProjectExtensionsDto> GetByIds([FromQuery][Required] IdsInput input)
+        {
+            var ids = LongListHelper.ToList(input.Ids);
+            var allList = _service.GetByIds(ids);
+            if (allList == null || allList.Count < 1)
+            {
+                return default;
+            }
+            var allIds = allList.Select(x => x.ID).Distinct().ToList();
+            var allSiteList = new HStation.Service.XhsProjectSite().GetByProjectIds(allIds);
+
+            var vmList = new List<XhsProjectExtensionsDto>();
+            foreach (var project in allList)
+            {
+                var siteList = allSiteList?.Where(x => x.ProjectID == project.ID).OrderBy(x => x.SortCode).ToList();
+                var vm = new XhsProjectExtensionsDto(project, siteList);
+                vmList.Add(vm);
+            }
+
+            return vmList; ;
+        }
+
+        #endregion 
+
+        #region Insert
+
+        /// <summary>
+        /// 鎻掑叆涓�鏉�
+        /// </summary>
+        [Route("Insert@V1.0")]
+        [HttpPost]
+        public long Insert([Required] AddXhsProjectExtensionsInput input)
+        {
+            if (!string.IsNullOrEmpty(input.TagName))
+            {
+                if (_service.IsExistTagName(input.TagName))
+                {
+                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, $"TagName:{input.TagName}", "鏍囪宸插瓨鍦�");
+                }
+            }
+            var project = input.Adapt<AddXhsProjectInput, Model.XhsProject>();
+            project.SortCode = _service.GetMaxSortCode(0) + 1;
+
+            var siteList = input.SiteList?.Select(x => x.Adapt<AddXhsProjectSiteExtensionsInput, Model.XhsProjectSite>()).ToList();
+            var id = _service.InsertEx(project, siteList);
+            return id;
+        }
+
+        #endregion 
+
+        #region Update
+
+        /// <summary>
+        /// 鏇存柊涓�鏉�
+        /// </summary>
+        [Route("Update@V1.0")]
+        [HttpPut]
+        public bool Update([Required] UpdateXhsProjectExtensionsInput input)
+        {
+            var project = _service.GetByID(input.ID);
+            var project_rhs = new Model.XhsProject(project);
+            input.Adapt(project_rhs);
+
+            List<Model.XhsProjectSite> site_rhs_list = null;
+            if (input.SiteList != null && input.SiteList.Count > 0)
+            {
+                site_rhs_list = new List<Model.XhsProjectSite>();
+                var site_id_list = input.SiteList.Select(x => x.ID).Distinct().ToList();
+                var site_list = new HStation.Service.XhsProjectSite().GetByIds(site_id_list);
+                foreach (var site in site_list)
+                {
+                    var site_input = input.SiteList.Find(x => x.ID == site.ID);
+                    var site_rhs = new Model.XhsProjectSite(site);
+                    site_input.Adapt(site_rhs);
+                    site_rhs_list.Add(site_rhs);
+                }
+            }
+            var bol = _service.UpdateEx(project_rhs, site_rhs_list);
+            return bol;
+        }
+
+
+
+        #endregion
+
+        #region Delete
+
+        /// <summary>
+        /// 鍒犻櫎
+        /// </summary>
+        [Route("DeleteByID@V1.0")]
+        [HttpDelete]
+        public bool DeleteByID([FromQuery][Required] IDInput input)
+        {
+            var bol = _service.DeleteExByID(input.ID, out string Msg);
+            if (!bol)
+            {
+                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D999, Msg);
+            }
+            return bol;
+        }
+
+        #endregion 
+
+
+    }
+}
\ No newline at end of file
diff --git a/Application/HStation.Application.Xhs.Core/01-project/XhsProject_StdController.cs b/Application/HStation.Application.Xhs.Core/01-project/XhsProject_StdController.cs
index 5a432e8..124176e 100644
--- a/Application/HStation.Application.Xhs.Core/01-project/XhsProject_StdController.cs
+++ b/Application/HStation.Application.Xhs.Core/01-project/XhsProject_StdController.cs
@@ -4,7 +4,7 @@
     /// XhsProject
     /// </summary>
     [Route("Xhs/Project/Std")]
-    [ApiDescriptionSettings("Xhs", Name = "椤圭洰(Std)", Order = 99000)]
+    [ApiDescriptionSettings("Xhs", Name = "椤圭洰(Std)", Order = 98000)]
     public class XhsProject_StdController : IDynamicApiController
     {
         /// <summary>
diff --git a/Application/HStation.Application.Xhs.Core/02-projectItem/XhsProjectItem_Controller.cs b/Application/HStation.Application.Xhs.Core/02-project-site/XhsProjectSite_Controller.cs
similarity index 60%
rename from Application/HStation.Application.Xhs.Core/02-projectItem/XhsProjectItem_Controller.cs
rename to Application/HStation.Application.Xhs.Core/02-project-site/XhsProjectSite_Controller.cs
index 41a5dbf..313f430 100644
--- a/Application/HStation.Application.Xhs.Core/02-projectItem/XhsProjectItem_Controller.cs
+++ b/Application/HStation.Application.Xhs.Core/02-project-site/XhsProjectSite_Controller.cs
@@ -1,13 +1,13 @@
 锘縩amespace HStation.Application
 {
     /// <summary>
-    /// XhsProject
+    /// XhsProjectSite
     /// </summary>
-    [Route("Xhs/Project/item")]
-    [ApiDescriptionSettings("Xhs", Name = "item", Order = 100000)]
-    public class XhsProjectItem_Controller : IDynamicApiController
+    [Route("Xhs/Project/Site")]
+    [ApiDescriptionSettings("Xhs", Name = "椤圭洰绔欑偣", Order = 90000)]
+    public class XhsProjectSite_Controller : IDynamicApiController
     {
-        private readonly Service.XhsProjectItem _service = new();
+        private readonly Service.XhsProjectSite _service = new();
 
         #region Query
 
@@ -16,10 +16,22 @@
         /// </summary>
         [Route("GetAll@V1.0")]
         [HttpGet]
-        public List<XhsProjectItemDto> GetAll()
+        public List<XhsProjectSiteDto> GetAll()
         {
             var list = _service.GetAll();
-            var vmList = list?.Select(x => new XhsProjectItemDto(x)).ToList();
+            var vmList = list?.Select(x => new XhsProjectSiteDto(x)).ToList();
+            return vmList;
+        }
+
+        /// <summary>
+        /// 閫氳繃 ProjectID 鑾峰彇
+        /// </summary>
+        [Route("GetByProjectID@V1.0")]
+        [HttpGet]
+        public List<XhsProjectSiteDto> GetByProjectID([FromQuery][Required] ProjectIDInput input)
+        {
+            var list = _service.GetByProjectID(input.ProjectID);
+            var vmList = list?.Select(x => new XhsProjectSiteDto(x)).ToList();
             return vmList;
         }
 
@@ -28,10 +40,10 @@
         /// </summary>
         [Route("GetByID@V1.0")]
         [HttpGet]
-        public XhsProjectItemDto GetByID([FromQuery][Required] IDInput input)
+        public XhsProjectSiteDto GetByID([FromQuery][Required] IDInput input)
         {
             var model = _service.GetByID(input.ID);
-            return model == null ? null : new XhsProjectItemDto(model);
+            return model == null ? null : new XhsProjectSiteDto(model);
         }
 
         /// <summary>
@@ -39,15 +51,15 @@
         /// </summary>
         [Route("GetByIds@V1.0")]
         [HttpGet]
-        public List<XhsProjectItemDto> GetByIds([FromQuery][Required] IdsInput input)
+        public List<XhsProjectSiteDto> GetByIds([FromQuery][Required] IdsInput input)
         {
             var ids = LongListHelper.ToList(input.Ids);
             var list = _service.GetByIds(ids);
-            var vmList = list?.Select(x => new XhsProjectItemDto(x)).ToList();
+            var vmList = list?.Select(x => new XhsProjectSiteDto(x)).ToList();
             return vmList;
         }
 
-        #endregion Query
+        #endregion 
 
         #region Insert
 
@@ -56,22 +68,21 @@
         /// </summary>
         [Route("Insert@V1.0")]
         [HttpPost]
-        public long Insert([Required] AddXhsProjectItemInput input)
+        public long Insert([Required] AddXhsProjectSiteInput input)
         {
-            if (!string.IsNullOrEmpty(input.TagName))
+            var project = new HStation.Service.XhsProject().GetByID(input.ProjectID);
+            if (project == null)
             {
-                if (_service.IsExistTagName(input.TagName))
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, $"TagName:{input.TagName}", "鏍囪宸插瓨鍦�");
-                }
+                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ProjectID:{input.ProjectID} 鏁版嵁涓嶅瓨鍦�");
             }
-            var model = input.Adapt<AddXhsProjectItemInput, Model.XhsProjectItem>();
-            model.SortCode = _service.GetMaxSortCode() + 1;
+
+            var model = input.Adapt<AddXhsProjectSiteInput, Model.XhsProjectSite>();
+            model.SortCode = _service.GetMaxSortCode(input.ProjectID) + 1;
             var id = _service.Insert(model);
             return id;
         }
 
-        #endregion Insert
+        #endregion 
 
         #region Update
 
@@ -87,14 +98,7 @@
             {
                 throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ID:{input.ID} 鏁版嵁涓嶅瓨鍦�");
             }
-            if (!string.IsNullOrEmpty(input.TagName))
-            {
-                if (_service.IsExistTagNameExceptID(input.TagName, input.ID))
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, $"TagName:{input.TagName}", "鏍囪宸插瓨鍦�");
-                }
-            }
-            var rhs = new Model.XhsProjectItem(model);
+            var rhs = new Model.XhsProjectSite(model);
             input.Adapt(rhs);
             var bol = _service.Update(rhs);
             return bol;
@@ -150,24 +154,6 @@
         }
 
         /// <summary>
-        /// 鏇存柊TagName
-        /// </summary>
-        [Route("UpdateTagName@V1.0")]
-        [HttpPut]
-        public bool UpdateTagName([Required] UpdateTagNameInput input)
-        {
-            if (!string.IsNullOrEmpty(input.TagName))
-            {
-                if (_service.IsExistTagNameExceptID(input.TagName, input.ID))
-                {
-                    throw Oops.Oh(InternalErrorCodes.V001, $"TagName:{input.TagName}", "鏍囪鍚嶇О宸插瓨鍦�");
-                }
-            }
-            var bol = _service.UpdateTagName(input.ID, input.TagName);
-            return bol;
-        }
-
-        /// <summary>
         /// 鏇存柊 UseStatus
         /// </summary>
         [Route("UpdateUseStatus@V1.0")]
@@ -178,38 +164,26 @@
             return bol;
         }
 
-        #endregion Update
+        #endregion
 
         #region Exist
 
         /// <summary>
-        /// 鍒ゆ柇TagName鏄惁瀛樺湪
+        /// 閫氳繃 ProjectID 鍒ゆ柇鏄惁瀛樺湪
         /// </summary>
-        [Route("IsExistTagName@V1.0")]
+        [Route("IsExistByProjectID@V1.0")]
         [HttpGet]
-        public bool IsExistTagName([FromQuery][Required] TagNameInput input)
+        public bool IsExistByProjectID([FromQuery][Required] ProjectIDInput input)
         {
-            var bol = _service.IsExistTagName(input.TagName);
-            return bol;
+            return _service.IsExistByProjectID(input.ProjectID);
         }
 
-        /// <summary>
-        ///  鍒ゆ柇TagName鏄惁瀛樺湪 ExceptID
-        /// </summary>
-        [Route("IsExistTagNameExceptID@V1.0")]
-        [HttpGet]
-        public bool IsExistTagNameExceptID([FromQuery][Required] TagNameExceptInput input)
-        {
-            var bol = _service.IsExistTagNameExceptID(input.TagName, input.ExceptID);
-            return bol;
-        }
-
-        #endregion Exist
+        #endregion
 
         #region Delete
 
         /// <summary>
-        /// 鍒犻櫎
+        /// 閫氳繃 ID 鍒犻櫎
         /// </summary>
         [Route("DeleteByID@V1.0")]
         [HttpDelete]
@@ -218,11 +192,26 @@
             var bol = _service.DeleteByID(input.ID, out string Msg);
             if (!bol)
             {
-                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, Msg);
+                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D999, Msg);
             }
             return bol;
         }
 
-        #endregion Delete
+        /// <summary>
+        /// 閫氳繃 ProjectID 鍒犻櫎
+        /// </summary>
+        [Route("DeleteByProjectID@V1.0")]
+        [HttpDelete]
+        public bool DeleteByProjectID([FromQuery][Required] ProjectIDInput input)
+        {
+            var bol = _service.DeleteByProjectID(input.ProjectID, out string Msg);
+            if (!bol)
+            {
+                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D999, Msg);
+            }
+            return bol;
+        }
+
+        #endregion 
     }
 }
\ No newline at end of file
diff --git a/Application/HStation.Application.Xhs.Core/02-project-site/XhsProjectSite_StdController.cs b/Application/HStation.Application.Xhs.Core/02-project-site/XhsProjectSite_StdController.cs
new file mode 100644
index 0000000..df83b59
--- /dev/null
+++ b/Application/HStation.Application.Xhs.Core/02-project-site/XhsProjectSite_StdController.cs
@@ -0,0 +1,52 @@
+锘縩amespace HStation.Application
+{
+    /// <summary>
+    /// XhsProjectSite
+    /// </summary>
+    [Route("Xhs/Project/Site/Std")]
+    [ApiDescriptionSettings("Xhs", Name = "椤圭洰绔欑偣(Std)", Order = 89000)]
+    public class XhsProjectSite_StdController : IDynamicApiController
+    {
+        /// <summary>
+        /// 鑾峰彇鎵�鏈�
+        /// </summary>
+        [Route("GetAll@V1.0")]
+        [HttpGet]
+        public List<XhsProjectSiteStdDto> GetAll()
+        {
+            var keyContent = $"Xhs_Project_Site_Std_GetAll";
+            var cacheKey = MemoryCacheKeyHelper.GetKey(MemoryCacheKey.WebApiLevel, MemoryCacheKey.Module, keyContent);
+
+            var vm_list = Yw.MemoryCacheHelper.GetSet(cacheKey, () =>
+            {
+                var all = new Service.XhsProjectSite().GetAll();
+                Service.XhsProjectSite.PublishCache(cacheKey);
+                var vmList = all?.Select(x => new XhsProjectSiteStdDto(x)).ToList();
+                return vmList;
+            }, Yw.Service.ConfigHelper.CacheLevel1);
+            return vm_list;
+        }
+
+        /// <summary>
+        /// 閫氳繃 ProjectID 鑾峰彇
+        /// </summary>
+        [Route("GetByProjectID@V1.0")]
+        [HttpGet]
+        public List<XhsProjectSiteStdDto> GetByProjectID([FromQuery][Required] ProjectIDInput input)
+        {
+            var keyContent = $"Xhs_Project_Site_Std_GetByProjectID_{input.ProjectID}";
+            var cacheKey = MemoryCacheKeyHelper.GetKey(MemoryCacheKey.WebApiLevel, MemoryCacheKey.Module, keyContent);
+
+            var vm_list = Yw.MemoryCacheHelper.GetSet(cacheKey, () =>
+            {
+                var all = new Service.XhsProjectSite().GetByProjectID(input.ProjectID);
+                Service.XhsProjectSite.PublishCache(cacheKey);
+                var vmList = all?.Select(x => new XhsProjectSiteStdDto(x)).ToList();
+                return vmList;
+            }, Yw.Service.ConfigHelper.CacheLevel3);
+            return vm_list;
+        }
+
+
+    }
+}
\ No newline at end of file
diff --git a/Application/HStation.Application.Xhs.Core/03-projectItemmodel/XhsProjectItemModel_Controller.cs b/Application/HStation.Application.Xhs.Core/03-projectItemmodel/XhsProjectItemModel_Controller.cs
deleted file mode 100644
index 0f710bd..0000000
--- a/Application/HStation.Application.Xhs.Core/03-projectItemmodel/XhsProjectItemModel_Controller.cs
+++ /dev/null
@@ -1,228 +0,0 @@
-锘縩amespace HStation.Application
-{
-    /// <summary>
-    /// XhsProject
-    /// </summary>
-    [Route("Xhs/Project/Item/Model")]
-    [ApiDescriptionSettings("Xhs", Name = "Model", Order = 100000)]
-    public class XhsProjectItemModel_Controller : IDynamicApiController
-    {
-        private readonly Service.XhsProjectItemModel _service = new();
-
-        #region Query
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈�
-        /// </summary>
-        [Route("GetAll@V1.0")]
-        [HttpGet]
-        public List<XhsProjectItemModelDto> GetAll()
-        {
-            var list = _service.GetAll();
-            var vmList = list?.Select(x => new XhsProjectItemModelDto(x)).ToList();
-            return vmList;
-        }
-
-        /// <summary>
-        /// 閫氳繃 ID 鑾峰彇
-        /// </summary>
-        [Route("GetByID@V1.0")]
-        [HttpGet]
-        public XhsProjectItemModelDto GetByID([FromQuery][Required] IDInput input)
-        {
-            var model = _service.GetByID(input.ID);
-            return model == null ? null : new XhsProjectItemModelDto(model);
-        }
-
-        /// <summary>
-        /// 閫氳繃 Ids 鑾峰彇
-        /// </summary>
-        [Route("GetByIds@V1.0")]
-        [HttpGet]
-        public List<XhsProjectItemModelDto> GetByIds([FromQuery][Required] IdsInput input)
-        {
-            var ids = LongListHelper.ToList(input.Ids);
-            var list = _service.GetByIds(ids);
-            var vmList = list?.Select(x => new XhsProjectItemModelDto(x)).ToList();
-            return vmList;
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        /// 鎻掑叆涓�鏉�
-        /// </summary>
-        [Route("Insert@V1.0")]
-        [HttpPost]
-        public long Insert([Required] AddXhsProjectItemModelInput input)
-        {
-            if (!string.IsNullOrEmpty(input.TagName))
-            {
-                if (_service.IsExistTagName(input.TagName))
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, $"TagName:{input.TagName}", "鏍囪宸插瓨鍦�");
-                }
-            }
-            var model = input.Adapt<AddXhsProjectItemModelInput, Model.XhsProjectItemModel>();
-            model.SortCode = _service.GetMaxSortCode() + 1;
-            var id = _service.Insert(model);
-            return id;
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        /// 鏇存柊涓�鏉�
-        /// </summary>
-        [Route("Update@V1.0")]
-        [HttpPut]
-        public bool Update([Required] UpdateXhsProjectItemModelInput input)
-        {
-            var model = _service.GetByID(input.ID);
-            if (model == null)
-            {
-                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ID:{input.ID} 鏁版嵁涓嶅瓨鍦�");
-            }
-            if (!string.IsNullOrEmpty(input.TagName))
-            {
-                if (_service.IsExistTagNameExceptID(input.TagName, input.ID))
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, $"TagName:{input.TagName}", "鏍囪宸插瓨鍦�");
-                }
-            }
-            var rhs = new Model.XhsProjectItemModel(model);
-            input.Adapt(rhs);
-            var bol = _service.Update(rhs);
-            return bol;
-        }
-
-        /// <summary>
-        /// 鏇存柊鎺掑簭鐮�
-        /// </summary>
-        [Route("UpdateSortCode@V1.0")]
-        [HttpPut]
-        public bool UpdateSortCode([Required] UpdateSortCodeInput input)
-        {
-            var bol = _service.UpdateSortCode(input.ID, input.SortCode);
-            return bol;
-        }
-
-        /// <summary>
-        /// 鏇存柊鎺掑簭
-        /// </summary>
-        [Route("UpdateSorter@V1.0")]
-        [HttpPut]
-        public bool UpdateSorter([Required] List<UpdateSortCodeInput> inputList)
-        {
-            if (inputList == null || inputList.Count < 1)
-            {
-                return false;
-            }
-            var list = inputList.Select(x => x.Adapt<Yw.Model.Sorter>()).ToList();
-            var bol = _service.UpdateSorter(list);
-            return bol;
-        }
-
-        /// <summary>
-        /// 鏇存柊 Paras
-        /// </summary>
-        [Route("UpdateParas@V1.0")]
-        [HttpPut]
-        public bool UpdateParas([Required] UpdateParasInput input)
-        {
-            var bol = _service.UpdateParas(input.ID, input.Paras);
-            return bol;
-        }
-
-        /// <summary>
-        /// 鏇存柊 Flags
-        /// </summary>
-        [Route("UpdateFlags@V1.0")]
-        [HttpPut]
-        public bool UpdateFlags([Required] UpdateFlagsInput input)
-        {
-            var bol = _service.UpdateFlags(input.ID, input.Flags);
-            return bol;
-        }
-
-        /// <summary>
-        /// 鏇存柊TagName
-        /// </summary>
-        [Route("UpdateTagName@V1.0")]
-        [HttpPut]
-        public bool UpdateTagName([Required] UpdateTagNameInput input)
-        {
-            if (!string.IsNullOrEmpty(input.TagName))
-            {
-                if (_service.IsExistTagNameExceptID(input.TagName, input.ID))
-                {
-                    throw Oops.Oh(InternalErrorCodes.V001, $"TagName:{input.TagName}", "鏍囪鍚嶇О宸插瓨鍦�");
-                }
-            }
-            var bol = _service.UpdateTagName(input.ID, input.TagName);
-            return bol;
-        }
-
-        /// <summary>
-        /// 鏇存柊 UseStatus
-        /// </summary>
-        [Route("UpdateUseStatus@V1.0")]
-        [HttpPut]
-        public bool UpdateUseStatus([Required] UpdateUseStatusInput input)
-        {
-            var bol = _service.UpdateUseStatus(input.ID, (Yw.Model.eUseStatus)input.UseStatus);
-            return bol;
-        }
-
-        #endregion Update
-
-        #region Exist
-
-        /// <summary>
-        /// 鍒ゆ柇TagName鏄惁瀛樺湪
-        /// </summary>
-        [Route("IsExistTagName@V1.0")]
-        [HttpGet]
-        public bool IsExistTagName([FromQuery][Required] TagNameInput input)
-        {
-            var bol = _service.IsExistTagName(input.TagName);
-            return bol;
-        }
-
-        /// <summary>
-        ///  鍒ゆ柇TagName鏄惁瀛樺湪 ExceptID
-        /// </summary>
-        [Route("IsExistTagNameExceptID@V1.0")]
-        [HttpGet]
-        public bool IsExistTagNameExceptID([FromQuery][Required] TagNameExceptInput input)
-        {
-            var bol = _service.IsExistTagNameExceptID(input.TagName, input.ExceptID);
-            return bol;
-        }
-
-        #endregion Exist
-
-        #region Delete
-
-        /// <summary>
-        /// 鍒犻櫎
-        /// </summary>
-        [Route("DeleteByID@V1.0")]
-        [HttpDelete]
-        public bool DeleteByID([FromQuery][Required] IDInput input)
-        {
-            var bol = _service.DeleteByID(input.ID, out string Msg);
-            if (!bol)
-            {
-                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, Msg);
-            }
-            return bol;
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/Application/HStation.Application.Xhs.Core/04-projectItemmodelMap/XhsProjectItemModelMap_Controller.cs b/Application/HStation.Application.Xhs.Core/04-projectItemmodelMap/XhsProjectItemModelMap_Controller.cs
deleted file mode 100644
index 0adeb42..0000000
--- a/Application/HStation.Application.Xhs.Core/04-projectItemmodelMap/XhsProjectItemModelMap_Controller.cs
+++ /dev/null
@@ -1,139 +0,0 @@
-锘縩amespace HStation.Application
-{
-    /// <summary>
-    /// XhsProject
-    /// </summary>
-    [Route("Xhs/Project/Item/Model/Map")]
-    [ApiDescriptionSettings("Xhs", Name = "Map", Order = 100000)]
-    public class XhsProjectItemModelMap_Controller : IDynamicApiController
-    {
-        private readonly Service.XhsProjectItemModelMap _service = new();
-
-        #region Query
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈�
-        /// </summary>
-        [Route("GetAll@V1.0")]
-        [HttpGet]
-        public List<XhsProjectItemModelMapDto> GetAll()
-        {
-            var list = _service.GetAll();
-            var vmList = list?.Select(x => new XhsProjectItemModelMapDto(x)).ToList();
-            return vmList;
-        }
-
-        /// <summary>
-        /// 閫氳繃 ID 鑾峰彇
-        /// </summary>
-        [Route("GetByID@V1.0")]
-        [HttpGet]
-        public XhsProjectItemModelMapDto GetByID([FromQuery][Required] IDInput input)
-        {
-            var model = _service.GetByID(input.ID);
-            return model == null ? null : new XhsProjectItemModelMapDto(model);
-        }
-
-        /// <summary>
-        /// 閫氳繃 Ids 鑾峰彇
-        /// </summary>
-        [Route("GetByIds@V1.0")]
-        [HttpGet]
-        public List<XhsProjectItemModelMapDto> GetByIds([FromQuery][Required] IdsInput input)
-        {
-            var ids = LongListHelper.ToList(input.Ids);
-            var list = _service.GetByIds(ids);
-            var vmList = list?.Select(x => new XhsProjectItemModelMapDto(x)).ToList();
-            return vmList;
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /*        /// <summary>
-                /// 鎻掑叆涓�鏉�
-                /// </summary>
-                [Route("Insert@V1.0")]
-                [HttpPost]
-                public long Insert([Required] AddXhsProjectItemModelInput input)
-                {
-                    if (!string.IsNullOrEmpty(input.TagName))
-                    {
-                        if (_service.IsExistTagName(input.TagName))
-                        {
-                            throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, $"TagName:{input.TagName}", "鏍囪宸插瓨鍦�");
-                        }
-                    }
-                    var model = input.Adapt<AddXhsProjectItemModelInput, Model.XhsProjectItemModelMap222>();
-                    model.SortCode = _service.GetMaxSortCode() + 1;
-                    var id = _service.Insert(model);
-                    return id;
-                }*/
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        /// 鏇存柊涓�鏉�
-        /// </summary>
-        [Route("Update@V1.0")]
-        [HttpPut]
-        public bool Update([Required] UpdateXhsProjectItemModelInput input)
-        {
-            var model = _service.GetByID(input.ID);
-            if (model == null)
-            {
-                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ID:{input.ID} 鏁版嵁涓嶅瓨鍦�");
-            }
-            var rhs = new Model.XhsProjectItemModelMap(model);
-            input.Adapt(rhs);
-            var bol = _service.Update(rhs);
-            return bol;
-        }
-
-        /// <summary>
-        /// 鏇存柊 Flags
-        /// </summary>
-        [Route("UpdateFlags@V1.0")]
-        [HttpPut]
-        public bool UpdateFlags([Required] UpdateFlagsInput input)
-        {
-            var bol = _service.UpdateFlags(input.ID, input.Flags);
-            return bol;
-        }
-
-        /// <summary>
-        /// 鏇存柊 UseStatus
-        /// </summary>
-        [Route("UpdateUseStatus@V1.0")]
-        [HttpPut]
-        public bool UpdateUseStatus([Required] UpdateUseStatusInput input)
-        {
-            var bol = _service.UpdateUseStatus(input.ID, (Yw.Model.eUseStatus)input.UseStatus);
-            return bol;
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        /// 鍒犻櫎
-        /// </summary>
-        [Route("DeleteByID@V1.0")]
-        [HttpDelete]
-        public bool DeleteByID([FromQuery][Required] IDInput input)
-        {
-            var bol = _service.DeleteByID(input.ID, out string Msg);
-            if (!bol)
-            {
-                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, Msg);
-            }
-            return bol;
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/Application/HStation.Application.Xhs.Core/09-dbfirst/XhsDbFirst_Controller.cs b/Application/HStation.Application.Xhs.Core/09-dbfirst/XhsDbFirst_Controller.cs
new file mode 100644
index 0000000..816fc6e
--- /dev/null
+++ b/Application/HStation.Application.Xhs.Core/09-dbfirst/XhsDbFirst_Controller.cs
@@ -0,0 +1,28 @@
+锘縩amespace Yw.Application
+{
+    /// <summary>
+    /// DbFirst
+    /// </summary>
+    [Route("Xhs/DbFirst")]
+    [ApiDescriptionSettings("Xhs", Name = "DbFirst", Order = 10000)]
+    public class XhsDbFirst_Controller : IDynamicApiController
+    {
+        /// <summary>
+        /// 鍒濆鍖�
+        /// </summary>
+        [Route("Initial@V1.0")]
+        [HttpGet]
+        public bool Initial()
+        {
+            var bol = HStation.Service.Xhs.DbFirstHelper.Initial(out string Msg);
+            if (!bol)
+            {
+                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.L001, Msg);
+            }
+            return bol;
+        }
+
+
+
+    }
+}
\ No newline at end of file
diff --git a/Application/HStation.Application.Xhs.Core/HStation.Application.Xhs.Core.csproj b/Application/HStation.Application.Xhs.Core/HStation.Application.Xhs.Core.csproj
index cdaf7d4..25029b6 100644
--- a/Application/HStation.Application.Xhs.Core/HStation.Application.Xhs.Core.csproj
+++ b/Application/HStation.Application.Xhs.Core/HStation.Application.Xhs.Core.csproj
@@ -25,6 +25,11 @@
   </ItemGroup>
 
   <ItemGroup>
+    <ProjectReference Include="..\..\Dto\HStation.Dto.Xhs.Core\HStation.Dto.Xhs.Core.csproj" />
+    <ProjectReference Include="..\HStation.Application.Core\HStation.Application.Core.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
     <Content Update="C:\Users\admin\.nuget\packages\yw.jwt.core\1.0.1\contentFiles\any\net6.0\JWT.json">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>
@@ -37,15 +42,6 @@
     <Content Update="C:\Users\admin\.nuget\packages\yw.yitter.core\1.0.0\contentFiles\any\net6.0\paras_yitter_settings.json">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>
-  </ItemGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Yw.Application.Core" Version="3.0.7" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\..\Dto\HStation.Dto.Xhs.Core\HStation.Dto.Xhs.Core.csproj" />
-    <ProjectReference Include="..\..\Service\HStation.Service.Xhs.Project.Core\HStation.Service.Xhs.Project.csproj" />
   </ItemGroup>
 
 </Project>
diff --git a/BLL/HStation.BLL.Core/HStation.BLL.Core.csproj b/BLL/HStation.BLL.Core/HStation.BLL.Core.csproj
new file mode 100644
index 0000000..1b08946
--- /dev/null
+++ b/BLL/HStation.BLL.Core/HStation.BLL.Core.csproj
@@ -0,0 +1,19 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>disable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Yw.CAL.HttpClient.Core" Version="3.0.9" />
+    <PackageReference Include="Yw.CALFactory.Core" Version="3.0.2" />
+    <PackageReference Include="Yw.Mapster.Core" Version="3.0.0" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Dto\HStation.Dto.Core\HStation.Dto.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 49d4254..d6e570b 100644
--- a/BLL/HStation.BLL.Xhs.Core/00-core/Mapper.cs
+++ b/BLL/HStation.BLL.Xhs.Core/00-core/Mapper.cs
@@ -13,32 +13,51 @@
         {
             #region project
 
-            config.ForType<AddXhsProjectItemInput, Model.XhsProject>()
-              .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<AddXhsProjectInput, Model.XhsProject>()
+             .Map(dest => dest.Paras, src => src.Paras)
+             .Map(dest => dest.Flags, src => src.Flags);
+
+            config.ForType<AddXhsProjectExtensionsInput, Model.XhsProject>()
+            .Map(dest => dest.Paras, src => src.Paras)
+            .Map(dest => dest.Flags, src => src.Flags);
 
             config.ForType<UpdateXhsProjectInput, Model.XhsProject>()
               .Map(dest => dest.Paras, src => src.Paras)
               .Map(dest => dest.Flags, src => src.Flags);
 
-            config.ForType<Model.XhsProject, XhsProjectItemDto>()
+            config.ForType<UpdateXhsProjectExtensionsInput, Model.XhsProject>()
+            .Map(dest => dest.Paras, src => src.Paras)
+            .Map(dest => dest.Flags, src => src.Flags);
+
+            config.ForType<Model.XhsProject, XhsProjectDto>()
               .Map(dest => dest.Paras, src => src.Paras)
               .Map(dest => dest.Flags, src => src.Flags);
 
-            config.ForType<AddPumpSeriesDto, Model.PumpSeries>()
+
+
+            #endregion
+
+            #region project-site
+
+            config.ForType<AddXhsProjectSiteInput, Model.XhsProjectSite>()
+                .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<AddXhsProjectSiteExtensionsInput, Model.XhsProjectSite>()
                .Map(dest => dest.Paras, src => src.Paras)
-               .Map(dest => dest.Flags, src => src.Flags);
+               .Map(dest => dest.Flags, src => src.Flags)
+               .Map(dest => dest.UseStatus, src => Yw.Model.eUseStatus.Enable);
 
-            config.ForType<UpdatePumpSeriesDto, Model.PumpSeries>()
+            config.ForType<UpdateXhsProjectSiteInput, Model.XhsProjectSite>()
               .Map(dest => dest.Paras, src => src.Paras)
               .Map(dest => dest.Flags, src => src.Flags);
 
-            config.ForType<Model.PumpSeries, PumpSeriesDto>()
+            config.ForType<Model.XhsProjectSite, XhsProjectSiteDto>()
               .Map(dest => dest.Paras, src => src.Paras)
               .Map(dest => dest.Flags, src => src.Flags);
 
-            #endregion project
+            #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
new file mode 100644
index 0000000..8c05689
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProject.cs
@@ -0,0 +1,31 @@
+锘縰sing Yw.CAL;
+
+namespace HStation.CAL
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public interface IXhsProject : IBaseCAL<AddXhsProjectInput, UpdateXhsProjectInput, XhsProjectDto>, IUpdateParas, IUpdateFlags, IUpdateTagName, IUpdateSorter
+    {
+
+        /// <summary>
+        /// 
+        /// </summary>
+        Task<bool> Publish(long ID);
+
+        /// <summary>
+        /// 
+        /// </summary>
+        Task<bool> Deprecate(long ID);
+
+        /// <summary>
+        /// 
+        /// </summary>
+        Task<bool> IsExistTagName(string TagName);
+
+        /// <summary>
+        /// 
+        /// </summary>
+        Task<bool> IsExistTagNameExceptID(string TagName, long ExceptID);
+    }
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..391b9cf
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProjectExtensions.cs
@@ -0,0 +1,11 @@
+锘縰sing Yw.CAL;
+
+namespace HStation.CAL
+{
+    /// <summary>
+    /// 
+    /// </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
new file mode 100644
index 0000000..feefd32
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/01-interface/01-project/IXhsProjectStd.cs
@@ -0,0 +1,15 @@
+锘縰sing Yw.CAL;
+
+namespace HStation.CAL
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public interface IXhsProjectStd : IBaseCAL
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        Task<List<XhsProjectStdDto>> GetAll();
+    }
+}
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
new file mode 100644
index 0000000..f15641c
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/01-interface/02-project-site/IXhsProjectSite.cs
@@ -0,0 +1,26 @@
+锘縰sing Yw.CAL;
+
+namespace HStation.CAL
+{
+    /// <summary>
+    /// 鎶ヨ绛夌骇
+    /// </summary>
+    public interface IXhsProjectSite : IBaseCAL<AddXhsProjectSiteInput, UpdateXhsProjectSiteInput, XhsProjectSiteDto>, IUpdateParas, IUpdateFlags, IUpdateSorter, IUpdateUseStatus
+    {
+
+        /// <summary>
+        /// 
+        /// </summary>
+        Task<List<XhsProjectSiteDto>> GetByProjectID(long ProjectID);
+
+        /// <summary>
+        /// 
+        /// </summary>
+        Task<bool> IsExistByProjectID(long ProjectID);
+
+        /// <summary>
+        /// 
+        /// </summary>
+        Task<bool> DeleteByProjectID(long ProjectID);
+    }
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..8e2af1a
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/01-interface/02-project-site/IXhsProjectSiteStd.cs
@@ -0,0 +1,23 @@
+锘縰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);
+
+
+    }
+}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/09-dbfirst/IXhsDbFirstHelper.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/09-dbfirst/IXhsDbFirstHelper.cs
new file mode 100644
index 0000000..c5e025e
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/01-interface/09-dbfirst/IXhsDbFirstHelper.cs
@@ -0,0 +1,15 @@
+锘縰sing Yw.CAL;
+
+namespace HStation.CAL
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public interface IXhsDbFirstHelper : IBaseCAL
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        Task<bool> Initial();
+    }
+}
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpGroup.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpGroup.cs
deleted file mode 100644
index 3f4ffed..0000000
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpGroup.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-锘縰sing Yw.CAL;
-
-namespace HStation.CAL
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public interface IPumpGroup : IBaseCAL<AddPumpGroupDto, UpdatePumpGroupDto, PumpGroupDto>, IUpdateParas, IUpdateFlags, IUpdateTagName, IUpdateSorter
-    {
-        /// <summary>
-        /// 鍒犻櫎鎷撳睍
-        /// </summary>
-        /// <param name="ID"></param>
-        /// <returns></returns>
-        bool DeleteEx(long ID);
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpGroupAndMainMap.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpGroupAndMainMap.cs
deleted file mode 100644
index 483c2c2..0000000
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpGroupAndMainMap.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-锘縰sing Yw.CAL;
-
-namespace HStation.CAL
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public interface IPumpGroupAndMainMap : IBaseCAL<AddPumpGroupAndMainMapDto, UpdatePumpGroupAndMainMapDto, PumpGroupAndMainMapDto>, IUpdateParas, IUpdateFlags, IUpdateTagName
-    {
-        List<long> GetByGroupID(long ID);
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpMain.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpMain.cs
deleted file mode 100644
index 884aec9..0000000
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpMain.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-锘縰sing Yw.CAL;
-
-namespace HStation.CAL
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public interface IPumpMain : IBaseCAL<AddPumpMainDto, UpdatePumpMainDto, PumpMainDto>, IUpdateParas, IUpdateFlags, IUpdateTagName, IUpdateSorter
-    {
-        Task<List<PumpMainDto>> GetByPumpSeriesID(long ID);
-
-        Task<long> InsertEx(AddPumpMainDto input, AddPumpGroupAndMainMapDto map);
-
-        Task<bool> DeleteMapByMainID(long ID);
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpMainAndPartMap.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpMainAndPartMap.cs
deleted file mode 100644
index 5201252..0000000
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpMainAndPartMap.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-锘縰sing Yw.CAL;
-
-namespace HStation.CAL
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public interface IPumpMainAndPartMap : IBaseCAL<AddPumpMainAndPartMapDto, UpdatePumpMainAndPartMapDto, PumpMainAndPartMapDto>
-    {
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpPartMain.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpPartMain.cs
deleted file mode 100644
index 04829bc..0000000
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpPartMain.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-锘縰sing Yw.CAL;
-
-namespace HStation.CAL
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public interface IPumpPartMain : IBaseCAL<AddPumpPartMainDto, UpdatePumpPartMainDto, PumpPartMainDto>
-    {
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpPartPropContent.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpPartPropContent.cs
deleted file mode 100644
index 0220840..0000000
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpPartPropContent.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-锘縰sing Yw.CAL;
-
-namespace HStation.CAL
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public interface IPumpPartPropContent : IBaseCAL<AddPumpPropContentDto, UpdatePumpPropContentDto, PumpPropContentDto>
-    {
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpSeries.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpSeries.cs
deleted file mode 100644
index 8b983a2..0000000
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProduct/IPumpSeries.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-锘縰sing Yw.CAL;
-
-namespace HStation.CAL
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public interface IPumpSeries : IBaseCAL<AddPumpSeriesDto, UpdatePumpSeriesDto, PumpSeriesDto>, IUpdateParas, IUpdateFlags, IUpdateTagName, IUpdateSorter, IUpdateUseStatus
-    {
-        /// <summary>
-        /// 鍒犻櫎鎷撳睍
-        /// </summary>
-        /// <param name="ID"></param>
-        /// <returns></returns>
-        bool DeleteEx(long ID);
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProject/IXhsProject.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProject/IXhsProject.cs
deleted file mode 100644
index e6cfa69..0000000
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProject/IXhsProject.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-锘縰sing Yw.CAL;
-
-namespace HStation.CAL
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public interface IXhsProject : IBaseCAL<AddXhsProjectInput, UpdateXhsProjectInput, XhsProjectDto>, IUpdateParas, IUpdateFlags, IUpdateTagName, IUpdateSorter, IUpdateUseStatus
-    {
-        /// <summary>
-        /// 鎻掑叆鎷撳睍
-        /// </summary>
-        Task<long> InsertEx(AddXhsProjectInput projectInput, AddXhsProjectItemInput itemInput, AddXhsProjectItemModelInput modelInput, AddXhsProjectItemModelMapInput MapInput);
-
-        //鍒犻櫎鎷撳睍
-        Task<bool> DeleteEx(long ID);
-
-        //缂栬緫鎷撳睍
-        Task<bool> UpdateEx(UpdateXhsProjectInput projectInput, UpdateXhsProjectItemInput itemInput);
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProject/IXhsProjectItem.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProject/IXhsProjectItem.cs
deleted file mode 100644
index 2887c3c..0000000
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProject/IXhsProjectItem.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-锘縰sing Yw.CAL;
-
-namespace HStation.CAL
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public interface IXhsProjectItem : IBaseCAL<AddXhsProjectItemInput, UpdateXhsProjectItemInput, XhsProjectItemDto>, IUpdateParas, IUpdateFlags, IUpdateTagName, IUpdateSorter, IUpdateUseStatus
-    {
-        //閫氳繃椤圭洰id鏌ユ壘
-        Task<XhsProjectItemDto> GetByPrjID(long ID);
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProject/IXhsProjectItemModel.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProject/IXhsProjectItemModel.cs
deleted file mode 100644
index dc1dac8..0000000
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProject/IXhsProjectItemModel.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-锘縰sing Yw.CAL;
-
-namespace HStation.CAL
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public interface IXhsProjectItemModel : IBaseCAL<AddXhsProjectItemModelInput, UpdateXhsProjectItemModelInput, XhsProjectItemModelDto>, IUpdateParas, IUpdateFlags, IUpdateTagName, IUpdateSorter, IUpdateUseStatus
-    {
-        //鏍规嵁椤圭洰ID鏌ユ壘
-        Task<List<XhsProjectItemModelDto>> GetByPrjID(long ID);
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProject/IXhsProjectItemModelMap.cs b/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProject/IXhsProjectItemModelMap.cs
deleted file mode 100644
index 1c9fe8c..0000000
--- a/BLL/HStation.BLL.Xhs.Core/01-interface/IPumpProject/IXhsProjectItemModelMap.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-锘縰sing Yw.CAL;
-
-namespace HStation.CAL
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public interface IXhsProjectItemModelMap : IBaseCAL<AddXhsProjectItemModelMapInput, UpdateXhsProjectItemModelMapInput, XhsProjectItemModelMapDto>, IUpdateUseStatus
-    {
-    }
-}
\ 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
new file mode 100644
index 0000000..ddb10db
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProject.cs
@@ -0,0 +1,58 @@
+锘縰sing Yw.CAL.HttpClient;
+
+namespace HStation.CAL.HttpClient
+{
+    /// <summary>
+    ///
+    /// </summary>
+    public class XhsProject : BaseCAL_Paras_Flags_TagName_Sorter<AddXhsProjectInput, UpdateXhsProjectInput, XhsProjectDto>, IXhsProject
+    {
+        protected override string Prefix
+        {
+            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>
+        /// 
+        /// </summary>
+        public async Task<bool> IsExistTagName(string TagName)
+        {
+            var paras = new List<(string Name, object Value)>()
+            {
+                (nameof(TagName),TagName)
+            };
+            return await GetUrl("IsExistTagName@V1.0").Get<bool>(paras);
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public async Task<bool> IsExistTagNameExceptID(string TagName, long ExceptID)
+        {
+            var paras = new List<(string Name, object Value)>()
+            {
+                (nameof(TagName),TagName),
+                (nameof(ExceptID),ExceptID)
+            };
+            return await GetUrl("IsExistTagNameExceptID@V1.0").Get<bool>(paras);
+        }
+
+
+    }
+}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProjectExtensions.cs b/BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProjectExtensions.cs
new file mode 100644
index 0000000..edcc515
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProjectExtensions.cs
@@ -0,0 +1,18 @@
+锘縰sing Yw.CAL.HttpClient;
+
+namespace HStation.CAL.HttpClient
+{
+    /// <summary>
+    ///
+    /// </summary>
+    public class XhsProjectExtensions : BaseCAL<AddXhsProjectExtensionsInput, UpdateXhsProjectExtensionsInput, XhsProjectExtensionsDto>, IXhsProjectExtensions
+    {
+        protected override string Prefix
+        {
+            get { return $"{HStation.BLL.Xhs.ConfigHelper.HttpUrl}/Xhs/Project/Extensions"; }
+        }
+
+
+
+    }
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..2585782
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/02-httpclient/01-project/XhsProjectStd.cs
@@ -0,0 +1,27 @@
+锘縰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>>();
+        }
+
+
+
+
+    }
+}
\ 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
new file mode 100644
index 0000000..718b56c
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/02-httpclient/02-project-site/XhsProjectSite.cs
@@ -0,0 +1,55 @@
+锘縰sing Yw.CAL.HttpClient;
+
+namespace HStation.CAL.HttpClient
+{
+    /// <summary>
+    ///
+    /// </summary>
+    public class XhsProjectSite : BaseCAL_Paras_Flags_Sorter_UseStatus<AddXhsProjectSiteInput, UpdateXhsProjectSiteInput, XhsProjectSiteDto>, IXhsProjectSite
+    {
+        protected override string Prefix
+        {
+            get { return $"{HStation.BLL.Xhs.ConfigHelper.HttpUrl}/Xhs/Project/Site"; }
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public async Task<List<XhsProjectSiteDto>> GetByProjectID(long ProjectID)
+        {
+            var paras = new List<(string Name, object Value)>()
+            {
+                (nameof(ProjectID),ProjectID)
+            };
+            return await GetUrl("GetByProjectID@V1.0").Get<List<XhsProjectSiteDto>>(paras);
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public async Task<bool> IsExistByProjectID(long ProjectID)
+        {
+            var paras = new List<(string Name, object Value)>()
+            {
+                (nameof(ProjectID),ProjectID)
+            };
+            return await GetUrl("IsExistByProjectID@V1.0").Get<bool>(paras);
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public async Task<bool> DeleteByProjectID(long ProjectID)
+        {
+            var paras = new List<(string Name, object Value)>()
+            {
+                (nameof(ProjectID),ProjectID)
+            };
+            return await GetUrl("DeleteByProjectID@V1.0").Delete<bool>(paras);
+        }
+
+
+
+
+    }
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..6d82541
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/02-httpclient/02-project-site/XhsProjectSiteStd.cs
@@ -0,0 +1,39 @@
+锘縰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);
+        }
+
+
+
+
+    }
+}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/02-httpclient/09-dbfirst/XhsDbFirstHelper.cs b/BLL/HStation.BLL.Xhs.Core/02-httpclient/09-dbfirst/XhsDbFirstHelper.cs
new file mode 100644
index 0000000..e29c095
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/02-httpclient/09-dbfirst/XhsDbFirstHelper.cs
@@ -0,0 +1,24 @@
+锘�
+using Yw.CAL.HttpClient;
+
+namespace HStation.CAL.HttpClient
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class XhsDbFirstHelper : BaseCAL, IXhsDbFirstHelper
+    {
+        protected override string Prefix
+        {
+            get { return $"{HStation.BLL.Xhs.ConfigHelper.HttpUrl}/Xhs/DbFirst"; }
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public async Task<bool> Initial()
+        {
+            return await GetUrl("Initial@V1.0").Get<bool>();
+        }
+    }
+}
diff --git a/BLL/HStation.BLL.Xhs.Core/02-httpclient/XhsProject.cs b/BLL/HStation.BLL.Xhs.Core/02-httpclient/XhsProject.cs
deleted file mode 100644
index 55966f0..0000000
--- a/BLL/HStation.BLL.Xhs.Core/02-httpclient/XhsProject.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-锘縰sing Yw.CAL.HttpClient;
-
-namespace HStation.CAL.HttpClient
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProject : BaseCAL_Paras_Flags_TagName_Sorter_UseStatus<AddXhsProjectInput, UpdateXhsProjectInput, XhsProjectDto>, IXhsProject
-    {
-        protected override string Prefix
-        {
-            get { return $"{HStation.BLL.Xhs.ConfigHelper.HttpUrl}/Xhs/Project"; }
-        }
-
-        public Task<bool> DeleteEx(long ID)
-        {
-            return default;
-        }
-
-        public class ProjectInputs
-        {
-            public AddXhsProjectInput ProjectInput { get; set; }
-            public AddXhsProjectItemInput ItemInput { get; set; }
-            public AddXhsProjectItemModelInput ModelInput { get; set; }
-            public AddXhsProjectItemModelMapInput MapInput { get; set; }
-        }
-
-        public async Task<long> InsertEx(AddXhsProjectInput projectInput, AddXhsProjectItemInput itemInput, AddXhsProjectItemModelInput modelInput, AddXhsProjectItemModelMapInput MapInput)
-        {
-            var posttext = new ProjectInputs
-            {
-                ItemInput = itemInput,
-                ModelInput = modelInput,
-                MapInput = MapInput,
-                ProjectInput = projectInput,
-            };
-            return await GetUrl("InsertEx@V1.0").Post<long>(posttext);
-        }
-
-        public Task<bool> UpdateEx(UpdateXhsProjectInput projectInput, UpdateXhsProjectItemInput itemInput)
-        {
-            throw new NotImplementedException();
-        }
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/02-httpclient/XhsProjectItem.cs b/BLL/HStation.BLL.Xhs.Core/02-httpclient/XhsProjectItem.cs
deleted file mode 100644
index d5be948..0000000
--- a/BLL/HStation.BLL.Xhs.Core/02-httpclient/XhsProjectItem.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-锘縰sing Yw.CAL.HttpClient;
-
-namespace HStation.CAL.HttpClient
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectItem : BaseCAL_Paras_Flags_TagName_Sorter_UseStatus<AddXhsProjectItemInput, UpdateXhsProjectItemInput, XhsProjectItemDto>, IXhsProjectItem
-    {
-        protected override string Prefix
-        {
-            get { return $"{HStation.BLL.Xhs.ConfigHelper.HttpUrl}/Xhs/Project/Item"; }
-        }
-
-        public Task<XhsProjectItemDto> GetByPrjID(long ID)
-        {
-            throw new NotImplementedException();
-        }
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/02-httpclient/XhsProjectItemModel.cs b/BLL/HStation.BLL.Xhs.Core/02-httpclient/XhsProjectItemModel.cs
deleted file mode 100644
index f0429a7..0000000
--- a/BLL/HStation.BLL.Xhs.Core/02-httpclient/XhsProjectItemModel.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-锘縰sing Yw.CAL.HttpClient;
-
-namespace HStation.CAL.HttpClient
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectItemModel : BaseCAL_Paras_Flags_TagName_Sorter_UseStatus<AddXhsProjectItemModelInput, UpdateXhsProjectItemModelInput, XhsProjectItemModelDto>, IXhsProjectItemModel
-    {
-        protected override string Prefix
-        {
-            get { return $"{HStation.BLL.Xhs.ConfigHelper.HttpUrl}/Xhs/Project/Item/Model"; }
-        }
-
-        public Task<List<XhsProjectItemModelDto>> GetByPrjID(long ID)
-        {
-            throw new NotImplementedException();
-        }
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/02-httpclient/XhsProjectItemModelMap.cs b/BLL/HStation.BLL.Xhs.Core/02-httpclient/XhsProjectItemModelMap.cs
deleted file mode 100644
index cc353b3..0000000
--- a/BLL/HStation.BLL.Xhs.Core/02-httpclient/XhsProjectItemModelMap.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-锘縰sing Yw.CAL.HttpClient;
-
-namespace HStation.CAL.HttpClient
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectItemModelMap : BaseCAL_Paras_Flags_TagName_Sorter_UseStatus<AddXhsProjectItemModelMapInput, UpdateXhsProjectItemModelMapInput, XhsProjectItemModelMapDto>, IXhsProjectItemModelMap
-    {
-        protected override string Prefix
-        {
-            get { return $"{HStation.BLL.Xhs.ConfigHelper.HttpUrl}/Xhs/Project/Model/Map"; }
-        }
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/XhsProject.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProject.cs
similarity index 74%
rename from BLL/HStation.BLL.Xhs.Core/03-localclient/XhsProject.cs
rename to BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProject.cs
index b2ee939..a8614f2 100644
--- a/BLL/HStation.BLL.Xhs.Core/03-localclient/XhsProject.cs
+++ b/BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProject.cs
@@ -1,7 +1,4 @@
-锘縰sing HStation.Xhs;
-using Yw.Dto;
-
-namespace HStation.CAL.LocalClient
+锘縩amespace HStation.CAL.LocalClient
 {
     /// <summary>
     /// 鎶ヨ绛夌骇
@@ -50,7 +47,7 @@
             });
         }
 
-        #endregion Query
+        #endregion 
 
         #region Insert
 
@@ -61,8 +58,15 @@
         {
             return await Task.Factory.StartNew(() =>
             {
+                if (!string.IsNullOrEmpty(input.TagName))
+                {
+                    if (_service.IsExistTagName(input.TagName))
+                    {
+                        throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, $"TagName:{input.TagName}", "鏍囪宸插瓨鍦�");
+                    }
+                }
                 var model = input.Adapt<AddXhsProjectInput, Model.XhsProject>();
-                model.SortCode = _service.GetMaxSortCode() + 1;
+                model.SortCode = _service.GetMaxSortCode(0) + 1;
                 var id = _service.Insert(model);
                 return id;
             });
@@ -75,13 +79,7 @@
         {
             return await Task.Factory.StartNew(() =>
             {
-                var list = inputList.Select(x => x.Adapt<AddXhsProjectInput, Model.XhsProject>()).ToList();
-                list.ForEach(x =>
-                {
-                    x.SortCode = _service.GetMaxSortCode() + 1 + list.IndexOf(x);
-                });
-                var bol = _service.Inserts(list);
-                return bol;
+                return false;
             });
         }
 
@@ -112,7 +110,13 @@
                 {
                     throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ID:{input.ID} 鏁版嵁涓嶅瓨鍦�");
                 }
-
+                if (!string.IsNullOrEmpty(input.TagName))
+                {
+                    if (_service.IsExistTagNameExceptID(input.TagName, input.ID))
+                    {
+                        throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, $"TagName:{input.TagName}", "鏍囪宸插瓨鍦�");
+                    }
+                }
                 var rhs = new Model.XhsProject(model);
                 input.Adapt(rhs);
                 var bol = _service.Update(rhs);
@@ -127,13 +131,7 @@
         {
             return await Task.Factory.StartNew(() =>
             {
-                if (inputList == null || inputList.Count < 1)
-                {
-                    return false;
-                }
-                var list = inputList.Select(x => x.Adapt<UpdateXhsProjectInput, Model.XhsProject>()).ToList();
-                var bol = _service.Updates(list);
-                return bol;
+                return false;
             });
         }
 
@@ -141,17 +139,6 @@
         /// 澶ф壒閲忔洿鏂�
         /// </summary>
         public async Task<bool> BulkUpdates(List<UpdateXhsProjectInput> list)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊缂栫爜
-        /// </summary>
-        public async Task<bool> UpdateCode(long ID, string Code)
         {
             return await Task.Factory.StartNew(() =>
             {
@@ -215,24 +202,79 @@
         {
             return await Task.Factory.StartNew(() =>
             {
+                if (!string.IsNullOrEmpty(TagName))
+                {
+                    if (_service.IsExistTagNameExceptID(TagName, ID))
+                    {
+                        throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, $"TagName:{TagName}", "鏍囪鍚嶇О宸插瓨鍦�");
+                    }
+                }
                 var bol = _service.UpdateTagName(ID, TagName);
                 return bol;
             });
         }
 
         /// <summary>
-        /// 鏇存柊 UseStatus
+        /// 
         /// </summary>
-        public async Task<bool> UpdateUseStatus(long ID, int UseStatus)
+        public async Task<bool> Publish(long ID)
         {
             return await Task.Factory.StartNew(() =>
             {
-                var bol = _service.UpdateUseStatus(ID, (Yw.Model.eUseStatus)UseStatus);
+                var bol = _service.Publish(ID, out string Msg);
+                if (!bol)
+                {
+                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, Msg);
+                }
+                return bol;
+            });
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public async Task<bool> Deprecate(long ID)
+        {
+            return await Task.Factory.StartNew(() =>
+            {
+                var bol = _service.Deprecate(ID, out string Msg);
+                if (!bol)
+                {
+                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, Msg);
+                }
                 return bol;
             });
         }
 
         #endregion Update
+
+        #region Exist
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public async Task<bool> IsExistTagName(string TagName)
+        {
+            return await Task.Factory.StartNew(() =>
+            {
+                var bol = _service.IsExistTagName(TagName);
+                return bol;
+            });
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public async Task<bool> IsExistTagNameExceptID(string TagName, long ExceptID)
+        {
+            return await Task.Factory.StartNew(() =>
+            {
+                var bol = _service.IsExistTagNameExceptID(TagName, ExceptID);
+                return bol;
+            });
+        }
+
+        #endregion
 
         #region Delete
 
@@ -275,39 +317,7 @@
             });
         }
 
-        public Task<long> InsertEx(AddXhsProjectInput projectInput, AddXhsProjectItemInput itemInput, AddXhsProjectItemModelInput modelInput, AddXhsProjectItemModelMapInput MapInput)
-        {
-            return Task.Factory.StartNew(() =>
-            {
-                var project = projectInput.Adapt<AddXhsProjectInput, Model.XhsProject>();
-                var item = itemInput.Adapt<AddXhsProjectItemInput, Model.XhsProjectItem>();
-                var model = modelInput.Adapt<AddXhsProjectItemModelInput, Model.XhsProjectItemModel>();
-                var map = MapInput.Adapt<AddXhsProjectItemModelMapInput, Model.XhsProjectItemModelMap>();
-                var bol = _service.InsertsEx(project, item, model, map);
-                return bol;
-            });
-        }
 
-        public Task<bool> DeleteEx(long ID)
-        {
-            return Task.Factory.StartNew(() =>
-            {
-                var bol = _service.DeleteEx(ID);
-                return bol;
-            });
-        }
-
-        public Task<bool> UpdateEx(UpdateXhsProjectInput projectInput, UpdateXhsProjectItemInput itemInput)
-        {
-            return Task.Factory.StartNew(() =>
-            {
-                var project = projectInput.Adapt<UpdateXhsProjectInput, Model.XhsProject>();
-                var item = itemInput.Adapt<UpdateXhsProjectItemInput, Model.XhsProjectItem>();
-                var bol = _service.UpdateEx(project, item);
-                return bol;
-            });
-        }
-
-        #endregion Delete
+        #endregion 
     }
 }
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProjectExtensions.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProjectExtensions.cs
new file mode 100644
index 0000000..a9883ee
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProjectExtensions.cs
@@ -0,0 +1,234 @@
+锘�
+using Yw.Dto;
+
+namespace HStation.CAL.LocalClient
+{
+    /// <summary>
+    /// 鎶ヨ绛夌骇
+    /// </summary>
+    public class XhsProjectExtensions : IXhsProjectExtensions
+    {
+        private readonly HStation.Service.XhsProject _service = new();
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="list"></param>
+        /// <returns></returns>
+        public async Task<bool> BulkInserts(List<AddXhsProjectExtensionsInput> list)
+        {
+            return await Task.Run(() =>
+            {
+                return false;
+            });
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="list"></param>
+        /// <returns></returns>
+        public async Task<bool> BulkUpdates(List<UpdateXhsProjectExtensionsInput> list)
+        {
+            return await Task.Run(() =>
+            {
+                return false;
+            });
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public async Task<bool> DeleteAll()
+        {
+            return await Task.Run(() =>
+            {
+                return false;
+            });
+        }
+
+        public async Task<bool> DeleteByID(long ID)
+        {
+            return await Task.Run(() =>
+            {
+                var bol = _service.DeleteExByID(ID, out string Msg);
+                if (!bol)
+                {
+                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D999, Msg);
+                }
+                return bol;
+            });
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="Ids"></param>
+        /// <returns></returns>
+        public async Task<bool> DeleteByIds(List<long> Ids)
+        {
+            return await Task.Run(() =>
+            {
+                return false;
+            });
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public async Task<List<XhsProjectExtensionsDto>> GetAll()
+        {
+            return await Task.Run(() =>
+            {
+                var allList = _service.GetAll();
+                if (allList == null || allList.Count < 1)
+                {
+                    return default;
+                }
+
+                var allIds = allList.Select(x => x.ID).Distinct().ToList();
+                var allSiteList = new HStation.Service.XhsProjectSite().GetByProjectIds(allIds);
+
+                var vmList = new List<XhsProjectExtensionsDto>();
+                foreach (var project in allList)
+                {
+                    var siteList = allSiteList?.Where(x => x.ProjectID == project.ID).OrderBy(x => x.SortCode).ToList();
+                    var vm = new XhsProjectExtensionsDto(project, siteList);
+                    vmList.Add(vm);
+                }
+
+                return vmList;
+            });
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="ID"></param>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public async Task<XhsProjectExtensionsDto> GetByID(long ID)
+        {
+            return await Task.Run(() =>
+            {
+                var project = _service.GetByID(ID);
+                if (project == null)
+                {
+                    return default;
+                }
+                var siteList = new HStation.Service.XhsProjectSite().GetByProjectID(project.ID);
+                return new XhsProjectExtensionsDto(project, siteList);
+            });
+        }
+
+        public async Task<List<XhsProjectExtensionsDto>> GetByIds(List<long> Ids)
+        {
+            return await Task.Run(() =>
+            {
+                var allList = _service.GetByIds(Ids);
+                if (allList == null || allList.Count < 1)
+                {
+                    return default;
+                }
+                var allIds = allList.Select(x => x.ID).Distinct().ToList();
+                var allSiteList = new HStation.Service.XhsProjectSite().GetByProjectIds(allIds);
+
+                var vmList = new List<XhsProjectExtensionsDto>();
+                foreach (var project in allList)
+                {
+                    var siteList = allSiteList?.Where(x => x.ProjectID == project.ID).OrderBy(x => x.SortCode).ToList();
+                    var vm = new XhsProjectExtensionsDto(project, siteList);
+                    vmList.Add(vm);
+                }
+
+                return vmList; ;
+            });
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public async Task<long> Insert(AddXhsProjectExtensionsInput input)
+        {
+            return await Task.Run(() =>
+            {
+                if (!string.IsNullOrEmpty(input.TagName))
+                {
+                    if (_service.IsExistTagName(input.TagName))
+                    {
+                        throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, $"TagName:{input.TagName}", "鏍囪宸插瓨鍦�");
+                    }
+                }
+                var project = input.Adapt<AddXhsProjectInput, Model.XhsProject>();
+                project.SortCode = _service.GetMaxSortCode(0) + 1;
+
+                var siteList = input.SiteList?.Select(x => x.Adapt<AddXhsProjectSiteExtensionsInput, Model.XhsProjectSite>()).ToList();
+                var id = _service.InsertEx(project, siteList);
+                return id;
+            });
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="list"></param>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public async Task<bool> Inserts(List<AddXhsProjectExtensionsInput> list)
+        {
+            return await Task.Run(() =>
+            {
+                return false;
+            });
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public async Task<bool> Update(UpdateXhsProjectExtensionsInput input)
+        {
+            return await Task.Run(() =>
+            {
+                var project = _service.GetByID(input.ID);
+                var project_rhs = new Model.XhsProject(project);
+                input.Adapt(project_rhs);
+
+                List<Model.XhsProjectSite> site_rhs_list = null;
+                if (input.SiteList != null && input.SiteList.Count > 0)
+                {
+                    site_rhs_list = new List<Model.XhsProjectSite>();
+                    var site_id_list = input.SiteList.Select(x => x.ID).Distinct().ToList();
+                    var site_list = new HStation.Service.XhsProjectSite().GetByIds(site_id_list);
+                    foreach (var site in site_list)
+                    {
+                        var site_input = input.SiteList.Find(x => x.ID == site.ID);
+                        var site_rhs = new Model.XhsProjectSite(site);
+                        site_input.Adapt(site_rhs);
+                        site_rhs_list.Add(site_rhs);
+                    }
+                }
+                var bol = _service.UpdateEx(project_rhs, site_rhs_list);
+                return bol;
+            });
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="list"></param>
+        /// <returns></returns>
+        public async Task<bool> Updates(List<UpdateXhsProjectExtensionsInput> list)
+        {
+            return await Task.Run(() =>
+            {
+                return false;
+            });
+        }
+    }
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..38169fe
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/03-localclient/01-project/XhsProjectStd.cs
@@ -0,0 +1,28 @@
+锘�
+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;
+            });
+        }
+
+
+    }
+}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/XhsProjectItem.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/02-project-site/XhsProjectSite.cs
similarity index 70%
rename from BLL/HStation.BLL.Xhs.Core/03-localclient/XhsProjectItem.cs
rename to BLL/HStation.BLL.Xhs.Core/03-localclient/02-project-site/XhsProjectSite.cs
index 339e6f9..b13a5b4 100644
--- a/BLL/HStation.BLL.Xhs.Core/03-localclient/XhsProjectItem.cs
+++ b/BLL/HStation.BLL.Xhs.Core/03-localclient/02-project-site/XhsProjectSite.cs
@@ -1,77 +1,84 @@
-锘縰sing HStation.Xhs;
-
-namespace HStation.CAL.LocalClient
+锘縩amespace HStation.CAL.LocalClient
 {
     /// <summary>
     /// 鎶ヨ绛夌骇
     /// </summary>
-    public class XhsProjectItem : IXhsProjectItem
+    public class XhsProjectSite : IXhsProjectSite
     {
-        private readonly HStation.Service.XhsProjectItem _service = new();
+        private readonly HStation.Service.XhsProjectSite _service = new();
 
         #region Query
 
         /// <summary>
         /// 鑾峰彇鎵�鏈�
         /// </summary>
-        public async Task<List<XhsProjectItemDto>> GetAll()
+        public async Task<List<XhsProjectSiteDto>> GetAll()
         {
             return await Task.Factory.StartNew(() =>
             {
                 var list = _service.GetAll();
-                var vm_list = list?.Select(x => new XhsProjectItemDto(x)).ToList();
+                var vm_list = list?.Select(x => new XhsProjectSiteDto(x)).ToList();
                 return vm_list;
+            });
+        }
+
+        /// <summary>
+        /// 閫氳繃 ProjectID 鑾峰彇
+        /// </summary>
+        public async Task<List<XhsProjectSiteDto>> GetByProjectID(long ProjectID)
+        {
+            return await Task.Factory.StartNew(() =>
+            {
+                var list = _service.GetByProjectID(ProjectID);
+                var vmList = list?.Select(x => new XhsProjectSiteDto(x)).ToList();
+                return vmList;
             });
         }
 
         /// <summary>
         /// 閫氳繃 ID 鑾峰彇
         /// </summary>
-        public async Task<XhsProjectItemDto> GetByID(long ID)
+        public async Task<XhsProjectSiteDto> GetByID(long ID)
         {
             return await Task.Factory.StartNew(() =>
             {
                 var model = _service.GetByID(ID);
-                return model == null ? null : new XhsProjectItemDto(model);
+                return model == null ? null : new XhsProjectSiteDto(model);
             });
-        }
-
-        /// <summary>
-        /// 閫氳繃 椤圭洰ID 鑾峰彇
-        /// </summary>
-        public async Task<XhsProjectItemDto> GetByPrjID(long ID)
-        {
-            var all = await GetAll();
-            var model = all.Where(x => x.ProjectID == ID).FirstOrDefault();
-            return model == null ? null : model;
         }
 
         /// <summary>
         /// 閫氳繃 Ids 鑾峰彇
         /// </summary>
-        public async Task<List<XhsProjectItemDto>> GetByIds(List<long> Ids)
+        public async Task<List<XhsProjectSiteDto>> GetByIds(List<long> Ids)
         {
             return await Task.Factory.StartNew(() =>
             {
                 var list = _service.GetByIds(Ids);
-                var vm_list = list?.Select(x => new XhsProjectItemDto(x)).ToList();
+                var vm_list = list?.Select(x => new XhsProjectSiteDto(x)).ToList();
                 return vm_list;
             });
         }
 
-        #endregion Query
+        #endregion
 
         #region Insert
 
         /// <summary>
         /// 鎻掑叆涓�鏉�
         /// </summary>
-        public async Task<long> Insert(AddXhsProjectItemInput input)
+        public async Task<long> Insert(AddXhsProjectSiteInput input)
         {
             return await Task.Factory.StartNew(() =>
             {
-                var model = input.Adapt<AddXhsProjectItemInput, Model.XhsProjectItem>();
-                model.SortCode = _service.GetMaxSortCode() + 1;
+                var project = new HStation.Service.XhsProject().GetByID(input.ProjectID);
+                if (project == null)
+                {
+                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ProjectID:{input.ProjectID} 鏁版嵁涓嶅瓨鍦�");
+                }
+
+                var model = input.Adapt<AddXhsProjectSiteInput, Model.XhsProjectSite>();
+                model.SortCode = _service.GetMaxSortCode(input.ProjectID) + 1;
                 var id = _service.Insert(model);
                 return id;
             });
@@ -80,24 +87,7 @@
         /// <summary>
         /// 鎵归噺鎻掑叆
         /// </summary>
-        public async Task<bool> Inserts(List<AddXhsProjectItemInput> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = inputList.Select(x => x.Adapt<AddXhsProjectItemInput, Model.XhsProjectItem>()).ToList();
-                list.ForEach(x =>
-                {
-                    x.SortCode = _service.GetMaxSortCode() + 1 + list.IndexOf(x);
-                });
-                var bol = _service.Inserts(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 澶ф壒閲忔彃鍏�
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddXhsProjectItemInput> list)
+        public async Task<bool> Inserts(List<AddXhsProjectSiteInput> inputList)
         {
             return await Task.Factory.StartNew(() =>
             {
@@ -105,14 +95,25 @@
             });
         }
 
-        #endregion Insert
+        /// <summary>
+        /// 澶ф壒閲忔彃鍏�
+        /// </summary>
+        public async Task<bool> BulkInserts(List<AddXhsProjectSiteInput> list)
+        {
+            return await Task.Factory.StartNew(() =>
+            {
+                return false;
+            });
+        }
+
+        #endregion 
 
         #region Update
 
         /// <summary>
         /// 鏇存柊涓�鏉�
         /// </summary>
-        public async Task<bool> Update(UpdateXhsProjectItemInput input)
+        public async Task<bool> Update(UpdateXhsProjectSiteInput input)
         {
             return await Task.Factory.StartNew(() =>
             {
@@ -121,8 +122,7 @@
                 {
                     throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ID:{input.ID} 鏁版嵁涓嶅瓨鍦�");
                 }
-
-                var rhs = new Model.XhsProjectItem(model);
+                var rhs = new Model.XhsProjectSite(model);
                 input.Adapt(rhs);
                 var bol = _service.Update(rhs);
                 return bol;
@@ -132,24 +132,7 @@
         /// <summary>
         /// 鎵归噺鏇存柊
         /// </summary>
-        public async Task<bool> Updates(List<UpdateXhsProjectItemInput> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                if (inputList == null || inputList.Count < 1)
-                {
-                    return false;
-                }
-                var list = inputList.Select(x => x.Adapt<UpdateXhsProjectItemInput, Model.XhsProjectItem>()).ToList();
-                var bol = _service.Updates(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 澶ф壒閲忔洿鏂�
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdateXhsProjectItemInput> list)
+        public async Task<bool> Updates(List<UpdateXhsProjectSiteInput> inputList)
         {
             return await Task.Factory.StartNew(() =>
             {
@@ -158,9 +141,9 @@
         }
 
         /// <summary>
-        /// 鏇存柊缂栫爜
+        /// 澶ф壒閲忔洿鏂�
         /// </summary>
-        public async Task<bool> UpdateCode(long ID, string Code)
+        public async Task<bool> BulkUpdates(List<UpdateXhsProjectSiteInput> list)
         {
             return await Task.Factory.StartNew(() =>
             {
@@ -218,18 +201,6 @@
         }
 
         /// <summary>
-        /// 鏇存柊 TagName
-        /// </summary>
-        public async Task<bool> UpdateTagName(long ID, string TagName)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateTagName(ID, TagName);
-                return bol;
-            });
-        }
-
-        /// <summary>
         /// 鏇存柊 UseStatus
         /// </summary>
         public async Task<bool> UpdateUseStatus(long ID, int UseStatus)
@@ -241,7 +212,24 @@
             });
         }
 
-        #endregion Update
+        #endregion
+
+        #region Exist
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="ProjectID"></param>
+        /// <returns></returns>
+        public async Task<bool> IsExistByProjectID(long ProjectID)
+        {
+            return await Task.Factory.StartNew(() =>
+            {
+                return _service.IsExistByProjectID(ProjectID);
+            });
+        }
+
+        #endregion
 
         #region Delete
 
@@ -284,6 +272,22 @@
             });
         }
 
-        #endregion Delete
+        /// <summary>
+        /// 
+        /// </summary>
+        public async Task<bool> DeleteByProjectID(long ProjectID)
+        {
+            return await Task.Factory.StartNew(() =>
+            {
+                var bol = _service.DeleteByProjectID(ProjectID, out string Msg);
+                if (!bol)
+                {
+                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D999, Msg);
+                }
+                return bol;
+            });
+        }
+
+        #endregion 
     }
 }
\ No newline at end of file
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
new file mode 100644
index 0000000..601aedb
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/03-localclient/02-project-site/XhsProjectSiteStd.cs
@@ -0,0 +1,41 @@
+锘�
+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;
+            });
+        }
+    }
+}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/09-dbfirst/XhsDbFirstHelper.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/09-dbfirst/XhsDbFirstHelper.cs
new file mode 100644
index 0000000..2a11f10
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/03-localclient/09-dbfirst/XhsDbFirstHelper.cs
@@ -0,0 +1,25 @@
+锘縩amespace HStation.CAL.LocalClient
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class XhsDbFirstHelper : IXhsDbFirstHelper
+    {
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public async Task<bool> Initial()
+        {
+            return await Task.Run(() =>
+            {
+                var bol = HStation.Service.Xhs.DbFirstHelper.Initial(out string Msg);
+                if (!bol)
+                {
+                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.L001, Msg);
+                }
+                return bol;
+            });
+        }
+    }
+}
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/Pump/PumpGroup.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/Pump/PumpGroup.cs
deleted file mode 100644
index 8d9c7ba..0000000
--- a/BLL/HStation.BLL.Xhs.Core/03-localclient/Pump/PumpGroup.cs
+++ /dev/null
@@ -1,283 +0,0 @@
-锘縰sing HStation.Xhs;
-using Yw.Dto;
-
-namespace HStation.CAL.LocalClient
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public class PumpGroup : IPumpGroup
-    {
-        private readonly HStation.Service.PumpGroup _service = new();
-
-        #region Query
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈�
-        /// </summary>
-        public async Task<List<PumpGroupDto>> GetAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetAll();
-                var vm_list = list?.Select(x => new PumpGroupDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 ID 鑾峰彇
-        /// </summary>
-        public async Task<PumpGroupDto> GetByID(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = _service.GetByID(ID);
-                return model == null ? null : new PumpGroupDto(model);
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 Ids 鑾峰彇
-        /// </summary>
-        public async Task<List<PumpGroupDto>> GetByIds(List<long> Ids)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetByIds(Ids);
-                var vm_list = list?.Select(x => new PumpGroupDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        /// 鎻掑叆涓�鏉�
-        /// </summary>
-        public async Task<long> Insert(AddPumpGroupDto input)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = input.Adapt<AddPumpGroupDto, Model.PumpGroup>();
-                model.SortCode = _service.GetMaxSortCode() + 1;
-                var id = _service.Insert(model);
-                return id;
-            });
-        }
-
-        /// <summary>
-        /// 鎵归噺鎻掑叆
-        /// </summary>
-        public async Task<bool> Inserts(List<AddPumpGroupDto> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = inputList.Select(x => x.Adapt<AddPumpGroupDto, Model.PumpGroup>()).ToList();
-                list.ForEach(x =>
-                {
-                    x.SortCode = _service.GetMaxSortCode() + 1 + list.IndexOf(x);
-                });
-                var bol = _service.Inserts(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 澶ф壒閲忔彃鍏�
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddPumpGroupDto> list)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        /// 鏇存柊涓�鏉�
-        /// </summary>
-        public async Task<bool> Update(UpdatePumpGroupDto input)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = _service.GetByID(input.ID);
-                if (model == null)
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ID:{input.ID} 鏁版嵁涓嶅瓨鍦�");
-                }
-
-                var rhs = new Model.PumpGroup(model);
-                input.Adapt(rhs);
-                var bol = _service.Update(rhs);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鎵归噺鏇存柊
-        /// </summary>
-        public async Task<bool> Updates(List<UpdatePumpGroupDto> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                if (inputList == null || inputList.Count < 1)
-                {
-                    return false;
-                }
-                var list = inputList.Select(x => x.Adapt<UpdatePumpGroupDto, Model.PumpGroup>()).ToList();
-                var bol = _service.Updates(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 澶ф壒閲忔洿鏂�
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdatePumpGroupDto> list)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊缂栫爜
-        /// </summary>
-        public async Task<bool> UpdateCode(long ID, string Code)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊鎺掑簭鐮�
-        /// </summary>
-        public async Task<bool> UpdateSortCode(long ID, int SortCode)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateSortCode(ID, SortCode);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊鎺掑簭
-        /// </summary>
-        public async Task<bool> UpdateSorter(List<UpdateSortCodeInput> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = inputList.Select(x => x.Adapt<Yw.Model.Sorter>()).ToList();
-                var bol = _service.UpdateSorter(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 Paras
-        /// </summary>
-        public async Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateParas(ID, Paras);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 Flags
-        /// </summary>
-        public async Task<bool> UpdateFlags(long ID, List<string> Flags)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateFlags(ID, Flags);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 TagName
-        /// </summary>
-        public async Task<bool> UpdateTagName(long ID, string TagName)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateTagName(ID, TagName);
-                return bol;
-            });
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        /// 閫氳繃 ID 鍒犻櫎
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.DeleteByID(ID, out string msg);
-                if (!bol)
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D999, msg);
-                }
-                return true;
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 Ids 鍒犻櫎
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鍒犻櫎鍏ㄩ儴
-        /// </summary>
-        /// <returns></returns>
-        public async Task<bool> DeleteAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鍒犻櫎鎷撳睍
-        /// </summary>
-        /// <param name="ID"></param>
-        /// <returns></returns>
-        public bool DeleteEx(long ID)
-        {
-            if (ID > 0)
-            {
-                var bol = _service.DeleteEx(ID);
-                return bol;
-            }
-            return false;
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/Pump/PumpGroupAndMainMap.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/Pump/PumpGroupAndMainMap.cs
deleted file mode 100644
index dddfc83..0000000
--- a/BLL/HStation.BLL.Xhs.Core/03-localclient/Pump/PumpGroupAndMainMap.cs
+++ /dev/null
@@ -1,247 +0,0 @@
-锘縰sing HStation.Xhs;
-using Yw.Dto;
-
-namespace HStation.CAL.LocalClient
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public class PumpGroupAndMainMap : IPumpGroupAndMainMap
-    {
-        private readonly HStation.Service.PumpGroupAndMainMap _service = new();
-
-        #region Query
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈�
-        /// </summary>
-        public async Task<List<PumpGroupAndMainMapDto>> GetAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetAll();
-                var vm_list = list?.Select(x => new PumpGroupAndMainMapDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 ID 鑾峰彇
-        /// </summary>
-        public async Task<PumpGroupAndMainMapDto> GetByID(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = _service.GetByID(ID);
-                return model == null ? null : new PumpGroupAndMainMapDto(model);
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 ID 鑾峰彇
-        /// </summary>
-        public List<long> GetByGroupID(long ID)
-        {
-            var model = Service.PumpGroupAndMainMap.GetMainIDByGroupID(ID);
-            return model;
-        }
-
-        /// <summary>
-        /// 閫氳繃 Ids 鑾峰彇
-        /// </summary>
-        public async Task<List<PumpGroupAndMainMapDto>> GetByIds(List<long> Ids)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetByIds(Ids);
-                var vm_list = list?.Select(x => new PumpGroupAndMainMapDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        /// 鎻掑叆涓�鏉�
-        /// </summary>
-        public async Task<long> Insert(AddPumpGroupAndMainMapDto input)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = input.Adapt<AddPumpGroupAndMainMapDto, Model.PumpGroupAndMainMap>();
-                var id = _service.Insert(model);
-                return id;
-            });
-        }
-
-        /// <summary>
-        /// 鎵归噺鎻掑叆
-        /// </summary>
-        public async Task<bool> Inserts(List<AddPumpGroupAndMainMapDto> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = inputList.Select(x => x.Adapt<AddPumpGroupAndMainMapDto, Model.PumpGroupAndMainMap>()).ToList();
-                var bol = _service.Inserts(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 澶ф壒閲忔彃鍏�
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddPumpGroupAndMainMapDto> list)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        /// 鏇存柊涓�鏉�
-        /// </summary>
-        public async Task<bool> Update(UpdatePumpGroupAndMainMapDto input)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = _service.GetByID(input.ID);
-                if (model == null)
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ID:{input.ID} 鏁版嵁涓嶅瓨鍦�");
-                }
-
-                var rhs = new Model.PumpGroupAndMainMap(model);
-                input.Adapt(rhs);
-                var bol = _service.Update(rhs);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鎵归噺鏇存柊
-        /// </summary>
-        public async Task<bool> Updates(List<UpdatePumpGroupAndMainMapDto> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                if (inputList == null || inputList.Count < 1)
-                {
-                    return false;
-                }
-                var list = inputList.Select(x => x.Adapt<UpdatePumpGroupAndMainMapDto, Model.PumpGroupAndMainMap>()).ToList();
-                var bol = _service.Updates(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 澶ф壒閲忔洿鏂�
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdatePumpGroupAndMainMapDto> list)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊缂栫爜
-        /// </summary>
-        public async Task<bool> UpdateCode(long ID, string Code)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 Paras
-        /// </summary>
-        public async Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateParas(ID, Paras);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 Flags
-        /// </summary>
-        public async Task<bool> UpdateFlags(long ID, List<string> Flags)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateFlags(ID, Flags);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 TagName
-        /// </summary>
-        public async Task<bool> UpdateTagName(long ID, string TagName)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateTagName(ID, TagName);
-                return bol;
-            });
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        /// 閫氳繃 ID 鍒犻櫎
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.DeleteByID(ID, out string msg);
-                if (!bol)
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D999, msg);
-                }
-                return true;
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 Ids 鍒犻櫎
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鍒犻櫎鍏ㄩ儴
-        /// </summary>
-        /// <returns></returns>
-        public async Task<bool> DeleteAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/Pump/PumpMain.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/Pump/PumpMain.cs
deleted file mode 100644
index c01835e..0000000
--- a/BLL/HStation.BLL.Xhs.Core/03-localclient/Pump/PumpMain.cs
+++ /dev/null
@@ -1,312 +0,0 @@
-锘縰sing HStation.Xhs;
-using Yw.Dto;
-
-namespace HStation.CAL.LocalClient
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public class PumpMain : IPumpMain
-    {
-        private readonly HStation.Service.PumpMain _service = new();
-
-        #region Query
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈�
-        /// </summary>
-        public async Task<List<PumpMainDto>> GetAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetAll();
-                var vm_list = list?.Select(x => new PumpMainDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 ID 鑾峰彇
-        /// </summary>
-        public async Task<PumpMainDto> GetByID(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = _service.GetByID(ID);
-                return model == null ? null : new PumpMainDto(model);
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 Ids 鑾峰彇
-        /// </summary>
-        public async Task<List<PumpMainDto>> GetByIds(List<long> Ids)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetByIds(Ids);
-                var vm_list = list?.Select(x => new PumpMainDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 绯诲垪ID 鑾峰彇
-        /// </summary>
-        public async Task<List<PumpMainDto>> GetByPumpSeriesID(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetByPumpSeriesID(ID);
-                var vm_list = list?.Select(x => new PumpMainDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        /// 鎻掑叆涓�鏉�
-        /// </summary>
-        public async Task<long> Insert(AddPumpMainDto input)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = input.Adapt<AddPumpMainDto, Model.PumpMain>();
-                model.SortCode = _service.GetMaxSortCode() + 1;
-                var id = _service.Insert(model);
-                return id;
-            });
-        }
-
-        /// <summary>
-        /// 鎻掑叆鎷撳睍(鎻掑叆鍨嬪彿鍜屾槧灏勮〃)
-        /// </summary>
-        public async Task<long> InsertEx(AddPumpMainDto input, AddPumpGroupAndMainMapDto map)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = input.Adapt<AddPumpMainDto, Model.PumpMain>();
-                var entity = map.Adapt<AddPumpGroupAndMainMapDto, Model.PumpGroupAndMainMap>();
-                model.SortCode = _service.GetMaxSortCode() + 1;
-                var id = _service.InsertEx(model, entity);
-                return id;
-            });
-        }
-
-        /// <summary>
-        /// 鎵归噺鎻掑叆
-        /// </summary>
-        public async Task<bool> Inserts(List<AddPumpMainDto> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = inputList.Select(x => x.Adapt<AddPumpMainDto, Model.PumpMain>()).ToList();
-                list.ForEach(x =>
-                {
-                    x.SortCode = _service.GetMaxSortCode() + 1 + list.IndexOf(x);
-                });
-                var bol = _service.Inserts(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 澶ф壒閲忔彃鍏�
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddPumpMainDto> list)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        /// 鏇存柊涓�鏉�
-        /// </summary>
-        public async Task<bool> Update(UpdatePumpMainDto input)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = _service.GetByID(input.ID);
-                if (model == null)
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ID:{input.ID} 鏁版嵁涓嶅瓨鍦�");
-                }
-
-                var rhs = new Model.PumpMain(model);
-                input.Adapt(rhs);
-                var bol = _service.Update(rhs);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鎵归噺鏇存柊
-        /// </summary>
-        public async Task<bool> Updates(List<UpdatePumpMainDto> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                if (inputList == null || inputList.Count < 1)
-                {
-                    return false;
-                }
-                var list = inputList.Select(x => x.Adapt<UpdatePumpMainDto, Model.PumpMain>()).ToList();
-                var bol = _service.Updates(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 澶ф壒閲忔洿鏂�
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdatePumpMainDto> list)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊缂栫爜
-        /// </summary>
-        public async Task<bool> UpdateCode(long ID, string Code)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊鎺掑簭鐮�
-        /// </summary>
-        public async Task<bool> UpdateSortCode(long ID, int SortCode)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateSortCode(ID, SortCode);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊鎺掑簭
-        /// </summary>
-        public async Task<bool> UpdateSorter(List<UpdateSortCodeInput> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = inputList.Select(x => x.Adapt<Yw.Model.Sorter>()).ToList();
-                var bol = _service.UpdateSorter(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 Paras
-        /// </summary>
-        public async Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateParas(ID, Paras);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 Flags
-        /// </summary>
-        public async Task<bool> UpdateFlags(long ID, List<string> Flags)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateFlags(ID, Flags);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 TagName
-        /// </summary>
-        public async Task<bool> UpdateTagName(long ID, string TagName)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateTagName(ID, TagName);
-                return bol;
-            });
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        /// 閫氳繃 ID 鍒犻櫎
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.DeleteByID(ID, out string msg);
-                if (!bol)
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D999, msg);
-                }
-                return true;
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃绯诲垪 ID 鍒犻櫎 鑷韩鍙妋ap鏄犲皠琛ㄤ腑ID
-        /// </summary>
-        public async Task<bool> DeleteMapByMainID(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.DeleteByMainIDEx(ID);
-                if (!bol)
-                {
-                    return false;
-                }
-                return true;
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 Ids 鍒犻櫎
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鍒犻櫎鍏ㄩ儴
-        /// </summary>
-        /// <returns></returns>
-        public async Task<bool> DeleteAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/Pump/PumpSeries.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/Pump/PumpSeries.cs
deleted file mode 100644
index 8d8b88c..0000000
--- a/BLL/HStation.BLL.Xhs.Core/03-localclient/Pump/PumpSeries.cs
+++ /dev/null
@@ -1,291 +0,0 @@
-锘縰sing HStation.Xhs;
-using Yw.Dto;
-
-namespace HStation.CAL.LocalClient
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public class PumpSeries : IPumpSeries
-    {
-        private readonly HStation.Service.PumpSeries _service = new();
-
-        #region Query
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈�
-        /// </summary>
-        public async Task<List<PumpSeriesDto>> GetAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetAll();
-                var vm_list = list?.Select(x => new PumpSeriesDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 ID 鑾峰彇
-        /// </summary>
-        public async Task<PumpSeriesDto> GetByID(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = _service.GetByID(ID);
-                return model == null ? null : new PumpSeriesDto(model);
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 Ids 鑾峰彇
-        /// </summary>
-        public async Task<List<PumpSeriesDto>> GetByIds(List<long> Ids)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetByIds(Ids);
-                var vm_list = list?.Select(x => new PumpSeriesDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        /// 鎻掑叆涓�鏉�
-        /// </summary>
-        public async Task<long> Insert(AddPumpSeriesDto input)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = input.Adapt<AddPumpSeriesDto, Model.PumpSeries>();
-                model.SortCode = _service.GetMaxSortCode() + 1;
-                var id = _service.Insert(model);
-                return id;
-            });
-        }
-
-        /// <summary>
-        /// 鎵归噺鎻掑叆
-        /// </summary>
-        public async Task<bool> Inserts(List<AddPumpSeriesDto> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = inputList.Select(x => x.Adapt<AddPumpSeriesDto, Model.PumpSeries>()).ToList();
-                list.ForEach(x =>
-                {
-                    x.SortCode = _service.GetMaxSortCode() + 1 + list.IndexOf(x);
-                });
-                var bol = _service.Inserts(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 澶ф壒閲忔彃鍏�
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddPumpSeriesDto> list)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        /// 鏇存柊涓�鏉�
-        /// </summary>
-        public async Task<bool> Update(UpdatePumpSeriesDto input)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = _service.GetByID(input.ID);
-                if (model == null)
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ID:{input.ID} 鏁版嵁涓嶅瓨鍦�");
-                }
-
-                var rhs = new Model.PumpSeries(model);
-                input.Adapt(rhs);
-                var bol = _service.Update(rhs);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鎵归噺鏇存柊
-        /// </summary>
-        public async Task<bool> Updates(List<UpdatePumpSeriesDto> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                if (inputList == null || inputList.Count < 1)
-                {
-                    return false;
-                }
-                var list = inputList.Select(x => x.Adapt<UpdatePumpSeriesDto, Model.PumpSeries>()).ToList();
-                var bol = _service.Updates(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 澶ф壒閲忔洿鏂�
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdatePumpSeriesDto> list)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊缂栫爜
-        /// </summary>
-        public async Task<bool> UpdateCode(long ID, string Code)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊鎺掑簭鐮�
-        /// </summary>
-        public async Task<bool> UpdateSortCode(long ID, int SortCode)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateSortCode(ID, SortCode);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊鎺掑簭
-        /// </summary>
-        public async Task<bool> UpdateSorter(List<UpdateSortCodeInput> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = inputList.Select(x => x.Adapt<Yw.Model.Sorter>()).ToList();
-                var bol = _service.UpdateSorter(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 Paras
-        /// </summary>
-        public async Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateParas(ID, Paras);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 Flags
-        /// </summary>
-        public async Task<bool> UpdateFlags(long ID, List<string> Flags)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateFlags(ID, Flags);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 TagName
-        /// </summary>
-        public async Task<bool> UpdateTagName(long ID, string TagName)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateTagName(ID, TagName);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 UseStatus
-        /// </summary>
-        public async Task<bool> UpdateUseStatus(long ID, int UseStatus)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateUseStatus(ID, (Yw.Model.eUseStatus)UseStatus);
-                return bol;
-            });
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        /// 閫氳繃 ID 鍒犻櫎
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.DeleteByID(ID, out string msg);
-                if (!bol)
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D999, msg);
-                }
-                return true;
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 Ids 鍒犻櫎
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鍒犻櫎鍏ㄩ儴
-        /// </summary>
-        /// <returns></returns>
-        public async Task<bool> DeleteAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        //鍒犻櫎鎷撳睍(鍒犻櫎绯诲垪涓嬫墍鏈夊唴瀹�)
-        public bool DeleteEx(long ID)
-        {
-            if (ID > 0)
-            {
-                var bol = _service.DeleteEx(ID);
-                return bol;
-            }
-            return false;
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/XhsProjectItemModel.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/XhsProjectItemModel.cs
deleted file mode 100644
index 2f28579..0000000
--- a/BLL/HStation.BLL.Xhs.Core/03-localclient/XhsProjectItemModel.cs
+++ /dev/null
@@ -1,289 +0,0 @@
-锘縰sing HStation.Xhs;
-
-namespace HStation.CAL.LocalClient
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public class XhsProjectItemModel : IXhsProjectItemModel
-    {
-        private readonly HStation.Service.XhsProjectItemModel _service = new();
-
-        #region Query
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈�
-        /// </summary>
-        public async Task<List<XhsProjectItemModelDto>> GetAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetAll();
-                var vm_list = list?.Select(x => new XhsProjectItemModelDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 ID 鑾峰彇
-        /// </summary>
-        public async Task<XhsProjectItemModelDto> GetByID(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = _service.GetByID(ID);
-                return model == null ? null : new XhsProjectItemModelDto(model);
-            });
-        }
-
-        public async Task<List<XhsProjectItemModelDto>> GetByPrjID(long ID)
-        {
-            var alllist = await GetAll();
-            if (alllist != null || alllist.Count > 0)
-            {
-                return alllist.Where(x => x.ProjectID == ID).ToList();
-            }
-            return null;
-        }
-
-        /// <summary>
-        /// 閫氳繃 Ids 鑾峰彇
-        /// </summary>
-        public async Task<List<XhsProjectItemModelDto>> GetByIds(List<long> Ids)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetByIds(Ids);
-                var vm_list = list?.Select(x => new XhsProjectItemModelDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        /// 鎻掑叆涓�鏉�
-        /// </summary>
-        public async Task<long> Insert(AddXhsProjectItemModelInput input)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = input.Adapt<AddXhsProjectItemModelInput, Model.XhsProjectItemModel>();
-                model.SortCode = _service.GetMaxSortCode() + 1;
-                var id = _service.Insert(model);
-                return id;
-            });
-        }
-
-        /// <summary>
-        /// 鎵归噺鎻掑叆
-        /// </summary>
-        public async Task<bool> Inserts(List<AddXhsProjectItemModelInput> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = inputList.Select(x => x.Adapt<AddXhsProjectItemModelInput, Model.XhsProjectItemModel>()).ToList();
-                list.ForEach(x =>
-                {
-                    x.SortCode = _service.GetMaxSortCode() + 1 + list.IndexOf(x);
-                });
-                var bol = _service.Inserts(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 澶ф壒閲忔彃鍏�
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddXhsProjectItemModelInput> list)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        /// 鏇存柊涓�鏉�
-        /// </summary>
-        public async Task<bool> Update(UpdateXhsProjectItemModelInput input)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = _service.GetByID(input.ID);
-                if (model == null)
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ID:{input.ID} 鏁版嵁涓嶅瓨鍦�");
-                }
-
-                var rhs = new Model.XhsProjectItemModel(model);
-                input.Adapt(rhs);
-                var bol = _service.Update(rhs);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鎵归噺鏇存柊
-        /// </summary>
-        public async Task<bool> Updates(List<UpdateXhsProjectItemModelInput> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                if (inputList == null || inputList.Count < 1)
-                {
-                    return false;
-                }
-                var list = inputList.Select(x => x.Adapt<UpdateXhsProjectItemModelInput, Model.XhsProjectItemModel>()).ToList();
-                var bol = _service.Updates(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 澶ф壒閲忔洿鏂�
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdateXhsProjectItemModelInput> list)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊缂栫爜
-        /// </summary>
-        public async Task<bool> UpdateCode(long ID, string Code)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊鎺掑簭鐮�
-        /// </summary>
-        public async Task<bool> UpdateSortCode(long ID, int SortCode)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateSortCode(ID, SortCode);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊鎺掑簭
-        /// </summary>
-        public async Task<bool> UpdateSorter(List<UpdateSortCodeInput> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = inputList.Select(x => x.Adapt<Yw.Model.Sorter>()).ToList();
-                var bol = _service.UpdateSorter(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 Paras
-        /// </summary>
-        public async Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateParas(ID, Paras);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 Flags
-        /// </summary>
-        public async Task<bool> UpdateFlags(long ID, List<string> Flags)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateFlags(ID, Flags);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 TagName
-        /// </summary>
-        public async Task<bool> UpdateTagName(long ID, string TagName)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateTagName(ID, TagName);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 UseStatus
-        /// </summary>
-        public async Task<bool> UpdateUseStatus(long ID, int UseStatus)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateUseStatus(ID, (Yw.Model.eUseStatus)UseStatus);
-                return bol;
-            });
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        /// 閫氳繃 ID 鍒犻櫎
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.DeleteByID(ID, out string msg);
-                if (!bol)
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D999, msg);
-                }
-                return true;
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 Ids 鍒犻櫎
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鍒犻櫎鍏ㄩ儴
-        /// </summary>
-        /// <returns></returns>
-        public async Task<bool> DeleteAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/03-localclient/XhsProjectItemModelMap.cs b/BLL/HStation.BLL.Xhs.Core/03-localclient/XhsProjectItemModelMap.cs
deleted file mode 100644
index 2e54218..0000000
--- a/BLL/HStation.BLL.Xhs.Core/03-localclient/XhsProjectItemModelMap.cs
+++ /dev/null
@@ -1,225 +0,0 @@
-锘縰sing HStation.Xhs;
-
-namespace HStation.CAL.LocalClient
-{
-    /// <summary>
-    /// 鎶ヨ绛夌骇
-    /// </summary>
-    public class XhsProjectItemModelMap : IXhsProjectItemModelMap
-    {
-        private readonly HStation.Service.XhsProjectItemModelMap _service = new();
-
-        #region Query
-
-        /// <summary>
-        /// 鑾峰彇鎵�鏈�
-        /// </summary>
-        public async Task<List<XhsProjectItemModelMapDto>> GetAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetAll();
-                var vm_list = list?.Select(x => new XhsProjectItemModelMapDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 ID 鑾峰彇
-        /// </summary>
-        public async Task<XhsProjectItemModelMapDto> GetByID(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = _service.GetByID(ID);
-                return model == null ? null : new XhsProjectItemModelMapDto(model);
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 Ids 鑾峰彇
-        /// </summary>
-        public async Task<List<XhsProjectItemModelMapDto>> GetByIds(List<long> Ids)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = _service.GetByIds(Ids);
-                var vm_list = list?.Select(x => new XhsProjectItemModelMapDto(x)).ToList();
-                return vm_list;
-            });
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        /// 鎻掑叆涓�鏉�
-        /// </summary>
-        public async Task<long> Insert(AddXhsProjectItemModelMapInput input)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = input.Adapt<AddXhsProjectItemModelMapInput, Model.XhsProjectItemModelMap>();
-                var id = _service.Insert(model);
-                return id;
-            });
-        }
-
-        /// <summary>
-        /// 鎵归噺鎻掑叆
-        /// </summary>
-        public async Task<bool> Inserts(List<AddXhsProjectItemModelMapInput> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var list = inputList.Select(x => x.Adapt<AddXhsProjectItemModelMapInput, Model.XhsProjectItemModelMap>()).ToList();
-                var bol = _service.Inserts(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 澶ф壒閲忔彃鍏�
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddXhsProjectItemModelMapInput> list)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        /// 鏇存柊涓�鏉�
-        /// </summary>
-        public async Task<bool> Update(UpdateXhsProjectItemModelMapInput input)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var model = _service.GetByID(input.ID);
-                if (model == null)
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ID:{input.ID} 鏁版嵁涓嶅瓨鍦�");
-                }
-
-                var rhs = new Model.XhsProjectItemModelMap(model);
-                input.Adapt(rhs);
-                var bol = _service.Update(rhs);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鎵归噺鏇存柊
-        /// </summary>
-        public async Task<bool> Updates(List<UpdateXhsProjectItemModelMapInput> inputList)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                if (inputList == null || inputList.Count < 1)
-                {
-                    return false;
-                }
-                var list = inputList.Select(x => x.Adapt<UpdateXhsProjectItemModelMapInput, Model.XhsProjectItemModelMap>()).ToList();
-                var bol = _service.Updates(list);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 澶ф壒閲忔洿鏂�
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdateXhsProjectItemModelMapInput> list)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊缂栫爜
-        /// </summary>
-        public async Task<bool> UpdateCode(long ID, string Code)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 Flags
-        /// </summary>
-        public async Task<bool> UpdateFlags(long ID, List<string> Flags)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateFlags(ID, Flags);
-                return bol;
-            });
-        }
-
-        /// <summary>
-        /// 鏇存柊 UseStatus
-        /// </summary>
-        public async Task<bool> UpdateUseStatus(long ID, int UseStatus)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.UpdateUseStatus(ID, (Yw.Model.eUseStatus)UseStatus);
-                return bol;
-            });
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        /// 閫氳繃 ID 鍒犻櫎
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                var bol = _service.DeleteByID(ID, out string msg);
-                if (!bol)
-                {
-                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D999, msg);
-                }
-                return true;
-            });
-        }
-
-        /// <summary>
-        /// 閫氳繃 Ids 鍒犻櫎
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        /// <summary>
-        /// 鍒犻櫎鍏ㄩ儴
-        /// </summary>
-        /// <returns></returns>
-        public async Task<bool> DeleteAll()
-        {
-            return await Task.Factory.StartNew(() =>
-            {
-                return false;
-            });
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/01-ProjectItem/01-project/XhsProject.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/01-ProjectItem/01-project/XhsProject.cs
deleted file mode 100644
index 226b89e..0000000
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/01-ProjectItem/01-project/XhsProject.cs
+++ /dev/null
@@ -1,188 +0,0 @@
-锘縰sing HStation.CAL;
-using Yw.DAL.Basic;
-
-namespace HStation.BLL
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProject : IXhsProject
-    {
-        private readonly HStation.CAL.IXhsProject _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsProject>();
-
-        #region Query
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<XhsProjectDto>> GetAll()
-        {
-            return await _cal.GetAll();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<XhsProjectDto> GetByID(long ID)
-        {
-            return await _cal.GetByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<XhsProjectDto>> GetByIds(List<long> Ids)
-        {
-            return await _cal.GetByIds(Ids);
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<long> Insert(AddXhsProjectInput model)
-        {
-            return await _cal.Insert(model);
-        }
-
-        public async Task<long> InsertEx(AddXhsProjectInput projectInput, AddXhsProjectItemInput itemInput, AddXhsProjectItemModelInput modelInput, AddXhsProjectItemModelMapInput MapInput)
-        {
-            return await _cal.InsertEx(projectInput, itemInput, modelInput, MapInput);
-        }
-
-        public async Task<bool> DeleteEx(long ID)
-        {
-            return await _cal.DeleteEx(ID);
-        }
-
-        public async Task<bool> UpdateEx(UpdateXhsProjectInput projectInput, UpdateXhsProjectItemInput itemInput)
-        {
-            return await _cal.UpdateEx(projectInput, itemInput);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Inserts(List<AddXhsProjectInput> list)
-        {
-            return await _cal.Inserts(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddXhsProjectInput> list)
-        {
-            return await _cal.BulkInserts(list);
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Update(UpdateXhsProjectInput model)
-        {
-            return await _cal.Update(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Updates(List<UpdateXhsProjectInput> list)
-        {
-            return await _cal.Updates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdateXhsProjectInput> list)
-        {
-            return await _cal.BulkUpdates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> UpdateSortCode(long ID, int SortCode)
-        {
-            return await _cal.UpdateSortCode(ID, SortCode);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> UpdateSorter(List<UpdateSortCodeInput> Sorters)
-        {
-            return await _cal.UpdateSorter(Sorters);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
-        {
-            return _cal.UpdateParas(ID, Paras);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateFlags(long ID, List<string> Flags)
-        {
-            return _cal.UpdateFlags(ID, Flags);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateTagName(long ID, string TagName)
-        {
-            return _cal.UpdateTagName(ID, TagName);
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await _cal.DeleteByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await _cal.DeleteByIds(Ids);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteAll()
-        {
-            return await _cal.DeleteAll();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateUseStatus(long ID, int UseStatus)
-        {
-            return _cal.UpdateUseStatus(ID, UseStatus);
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/01-ProjectItem/02-projectItem/XhsProjectItem.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/01-ProjectItem/02-projectItem/XhsProjectItem.cs
deleted file mode 100644
index 14bad92..0000000
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/01-ProjectItem/02-projectItem/XhsProjectItem.cs
+++ /dev/null
@@ -1,180 +0,0 @@
-锘縰sing HStation.CAL;
-
-namespace HStation.BLL
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectItem : IXhsProjectItem
-    {
-        private readonly HStation.CAL.IXhsProjectItem _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsProjectItem>();
-
-        #region Query
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<XhsProjectItemDto>> GetAll()
-        {
-            return await _cal.GetAll();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<XhsProjectItemDto> GetByID(long ID)
-        {
-            return await _cal.GetByID(ID);
-        }
-
-        /// <summary>
-        ///鏍规嵁椤圭洰id鏌ヨ
-        /// </summary>
-        public async Task<XhsProjectItemDto> GetByPrjID(long ID)
-        {
-            return await _cal.GetByPrjID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<XhsProjectItemDto>> GetByIds(List<long> Ids)
-        {
-            return await _cal.GetByIds(Ids);
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<long> Insert(AddXhsProjectItemInput model)
-        {
-            return await _cal.Insert(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Inserts(List<AddXhsProjectItemInput> list)
-        {
-            return await _cal.Inserts(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddXhsProjectItemInput> list)
-        {
-            return await _cal.BulkInserts(list);
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Update(UpdateXhsProjectItemInput model)
-        {
-            return await _cal.Update(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Updates(List<UpdateXhsProjectItemInput> list)
-        {
-            return await _cal.Updates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdateXhsProjectItemInput> list)
-        {
-            return await _cal.BulkUpdates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> UpdateSortCode(long ID, int SortCode)
-        {
-            return await _cal.UpdateSortCode(ID, SortCode);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> UpdateSorter(List<UpdateSortCodeInput> Sorters)
-        {
-            return await _cal.UpdateSorter(Sorters);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
-        {
-            return _cal.UpdateParas(ID, Paras);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateFlags(long ID, List<string> Flags)
-        {
-            return _cal.UpdateFlags(ID, Flags);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateTagName(long ID, string TagName)
-        {
-            return _cal.UpdateTagName(ID, TagName);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateUseStatus(long ID, int UseStatus)
-        {
-            return _cal.UpdateUseStatus(ID, UseStatus);
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await _cal.DeleteByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await _cal.DeleteByIds(Ids);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteAll()
-        {
-            return await _cal.DeleteAll();
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/01-ProjectItem/03-projectItemModel/XhsProjectItemModel.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/01-ProjectItem/03-projectItemModel/XhsProjectItemModel.cs
deleted file mode 100644
index 42fa5f0..0000000
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/01-ProjectItem/03-projectItemModel/XhsProjectItemModel.cs
+++ /dev/null
@@ -1,177 +0,0 @@
-锘縰sing HStation.CAL;
-
-namespace HStation.BLL
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectItemModel : IXhsProjectItemModel
-    {
-        private readonly HStation.CAL.IXhsProjectItemModel _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsProjectItemModel>();
-
-        #region Query
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<XhsProjectItemModelDto>> GetAll()
-        {
-            return await _cal.GetAll();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<XhsProjectItemModelDto> GetByID(long ID)
-        {
-            return await _cal.GetByID(ID);
-        }
-
-        public async Task<List<XhsProjectItemModelDto>> GetByPrjID(long ID)
-        {
-            return await _cal.GetByPrjID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<XhsProjectItemModelDto>> GetByIds(List<long> Ids)
-        {
-            return await _cal.GetByIds(Ids);
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<long> Insert(AddXhsProjectItemModelInput model)
-        {
-            return await _cal.Insert(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Inserts(List<AddXhsProjectItemModelInput> list)
-        {
-            return await _cal.Inserts(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddXhsProjectItemModelInput> list)
-        {
-            return await _cal.BulkInserts(list);
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Update(UpdateXhsProjectItemModelInput model)
-        {
-            return await _cal.Update(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Updates(List<UpdateXhsProjectItemModelInput> list)
-        {
-            return await _cal.Updates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdateXhsProjectItemModelInput> list)
-        {
-            return await _cal.BulkUpdates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> UpdateSortCode(long ID, int SortCode)
-        {
-            return await _cal.UpdateSortCode(ID, SortCode);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> UpdateSorter(List<UpdateSortCodeInput> Sorters)
-        {
-            return await _cal.UpdateSorter(Sorters);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
-        {
-            return _cal.UpdateParas(ID, Paras);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateFlags(long ID, List<string> Flags)
-        {
-            return _cal.UpdateFlags(ID, Flags);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateTagName(long ID, string TagName)
-        {
-            return _cal.UpdateTagName(ID, TagName);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateUseStatus(long ID, int UseStatus)
-        {
-            return _cal.UpdateUseStatus(ID, UseStatus);
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await _cal.DeleteByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await _cal.DeleteByIds(Ids);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteAll()
-        {
-            return await _cal.DeleteAll();
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/01-ProjectItem/04-projectItemModelMap/XhsProjectItemModelMap.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/01-ProjectItem/04-projectItemModelMap/XhsProjectItemModelMap.cs
deleted file mode 100644
index 1f15461..0000000
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/01-ProjectItem/04-projectItemModelMap/XhsProjectItemModelMap.cs
+++ /dev/null
@@ -1,132 +0,0 @@
-锘縰sing HStation.CAL;
-
-namespace HStation.BLL
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectItemModelMap : IXhsProjectItemModelMap
-    {
-        private readonly HStation.CAL.IXhsProjectItemModelMap _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsProjectItemModelMap>();
-
-        #region Query
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<XhsProjectItemModelMapDto>> GetAll()
-        {
-            return await _cal.GetAll();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<XhsProjectItemModelMapDto> GetByID(long ID)
-        {
-            return await _cal.GetByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<XhsProjectItemModelMapDto>> GetByIds(List<long> Ids)
-        {
-            return await _cal.GetByIds(Ids);
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<long> Insert(AddXhsProjectItemModelMapInput model)
-        {
-            return await _cal.Insert(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Inserts(List<AddXhsProjectItemModelMapInput> list)
-        {
-            return await _cal.Inserts(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddXhsProjectItemModelMapInput> list)
-        {
-            return await _cal.BulkInserts(list);
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Update(UpdateXhsProjectItemModelMapInput model)
-        {
-            return await _cal.Update(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Updates(List<UpdateXhsProjectItemModelMapInput> list)
-        {
-            return await _cal.Updates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdateXhsProjectItemModelMapInput> list)
-        {
-            return await _cal.BulkUpdates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateUseStatus(long ID, int UseStatus)
-        {
-            return _cal.UpdateUseStatus(ID, UseStatus);
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await _cal.DeleteByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await _cal.DeleteByIds(Ids);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteAll()
-        {
-            return await _cal.DeleteAll();
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
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
new file mode 100644
index 0000000..a952056
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject.cs
@@ -0,0 +1,117 @@
+锘縰sing HStation.CAL;
+
+namespace HStation.BLL
+{
+    /// <summary>
+    ///
+    /// </summary>
+    public class XhsProject : IXhsProject
+    {
+        private readonly HStation.CAL.IXhsProject _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsProject>();
+
+        public Task<bool> BulkInserts(List<AddXhsProjectInput> list)
+        {
+            return _cal.BulkInserts(list);
+        }
+
+        public Task<bool> BulkUpdates(List<UpdateXhsProjectInput> list)
+        {
+            return _cal.BulkUpdates(list);
+        }
+
+        public Task<bool> DeleteAll()
+        {
+            return _cal.DeleteAll();
+        }
+
+        public Task<bool> DeleteByID(long ID)
+        {
+            return _cal.DeleteByID(ID);
+        }
+
+        public Task<bool> DeleteByIds(List<long> Ids)
+        {
+            return _cal.DeleteByIds(Ids);
+        }
+
+        public Task<bool> Deprecate(long ID)
+        {
+            return _cal.Deprecate(ID);
+        }
+
+        public Task<List<XhsProjectDto>> GetAll()
+        {
+            return _cal.GetAll();
+        }
+
+        public Task<XhsProjectDto> GetByID(long ID)
+        {
+            return _cal.GetByID(ID);
+        }
+
+        public Task<List<XhsProjectDto>> GetByIds(List<long> Ids)
+        {
+            return _cal.GetByIds(Ids);
+        }
+
+        public Task<long> Insert(AddXhsProjectInput model)
+        {
+            return _cal.Insert(model);
+        }
+
+        public Task<bool> Inserts(List<AddXhsProjectInput> list)
+        {
+            return _cal.Inserts(list);
+        }
+
+        public Task<bool> IsExistTagName(string TagName)
+        {
+            return _cal.IsExistTagName(TagName);
+        }
+
+        public Task<bool> IsExistTagNameExceptID(string TagName, long ExceptID)
+        {
+            return _cal.IsExistTagNameExceptID(TagName, ExceptID);
+        }
+
+        public Task<bool> Publish(long ID)
+        {
+            return _cal.Publish(ID);
+        }
+
+        public Task<bool> Update(UpdateXhsProjectInput model)
+        {
+            return _cal.Update(model);
+        }
+
+        public Task<bool> UpdateFlags(long ID, List<string> Flags)
+        {
+            return _cal.UpdateFlags(ID, Flags);
+        }
+
+        public Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
+        {
+            return _cal.UpdateParas(ID, Paras);
+        }
+
+        public Task<bool> Updates(List<UpdateXhsProjectInput> list)
+        {
+            return _cal.Updates(list);
+        }
+
+        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
new file mode 100644
index 0000000..1547324
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectExtensions.cs
@@ -0,0 +1,72 @@
+锘縰sing HStation.CAL;
+
+namespace HStation.BLL
+{
+    /// <summary>
+    ///
+    /// </summary>
+    public class XhsProjectExtensions : IXhsProjectExtensions
+    {
+        private readonly HStation.CAL.IXhsProjectExtensions _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsProjectExtensions>();
+
+        public Task<bool> BulkInserts(List<AddXhsProjectExtensionsInput> list)
+        {
+            return _cal.BulkInserts(list);
+        }
+
+        public Task<bool> BulkUpdates(List<UpdateXhsProjectExtensionsInput> list)
+        {
+            return _cal.BulkUpdates(list);
+        }
+
+        public Task<bool> DeleteAll()
+        {
+            return _cal.DeleteAll();
+        }
+
+        public Task<bool> DeleteByID(long ID)
+        {
+            return _cal.DeleteByID(ID);
+        }
+
+        public Task<bool> DeleteByIds(List<long> Ids)
+        {
+            return _cal.DeleteByIds(Ids);
+        }
+
+        public Task<List<XhsProjectExtensionsDto>> GetAll()
+        {
+            return _cal.GetAll();
+        }
+
+        public Task<XhsProjectExtensionsDto> GetByID(long ID)
+        {
+            return _cal.GetByID(ID);
+        }
+
+        public Task<List<XhsProjectExtensionsDto>> GetByIds(List<long> Ids)
+        {
+            return _cal.GetByIds(Ids);
+        }
+
+        public Task<long> Insert(AddXhsProjectExtensionsInput model)
+        {
+            return _cal.Insert(model);
+        }
+
+        public Task<bool> Inserts(List<AddXhsProjectExtensionsInput> list)
+        {
+            return _cal.Inserts(list);
+        }
+
+        public Task<bool> Update(UpdateXhsProjectExtensionsInput model)
+        {
+            return _cal.Update(model);
+        }
+
+        public Task<bool> Updates(List<UpdateXhsProjectExtensionsInput> list)
+        {
+            return _cal.Updates(list);
+        }
+    }
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..bb3f3fe
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProjectStd.cs
@@ -0,0 +1,17 @@
+锘縰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();
+        }
+    }
+}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/01-PumpSeries/PumpSeries.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/01-PumpSeries/PumpSeries.cs
deleted file mode 100644
index a3fe656..0000000
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/01-PumpSeries/PumpSeries.cs
+++ /dev/null
@@ -1,183 +0,0 @@
-锘縰sing HStation.CAL;
-using HStation.DAL;
-using Yw.CAL;
-using Yw.DAL.Basic;
-
-namespace HStation.BLL
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class PumpSeries : CAL.IPumpSeries
-    {
-        private readonly HStation.CAL.IPumpSeries _cal = CALCreateHelper.CreateCAL<HStation.CAL.IPumpSeries>();
-
-        #region Query
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<PumpSeriesDto>> GetAll()
-        {
-            return await _cal.GetAll();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<PumpSeriesDto> GetByID(long ID)
-        {
-            return await _cal.GetByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<PumpSeriesDto>> GetByIds(List<long> Ids)
-        {
-            return await _cal.GetByIds(Ids);
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<long> Insert(AddPumpSeriesDto model)
-        {
-            return await _cal.Insert(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Inserts(List<AddPumpSeriesDto> list)
-        {
-            return await _cal.Inserts(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddPumpSeriesDto> list)
-        {
-            return await _cal.BulkInserts(list);
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Update(UpdatePumpSeriesDto model)
-        {
-            return await _cal.Update(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Updates(List<UpdatePumpSeriesDto> list)
-        {
-            return await _cal.Updates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdatePumpSeriesDto> list)
-        {
-            return await _cal.BulkUpdates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> UpdateSortCode(long ID, int SortCode)
-        {
-            return await _cal.UpdateSortCode(ID, SortCode);
-        }
-
-        public async Task<bool> UpdateSorter(List<UpdateSortCodeInput> Sorters)
-        {
-            return await _cal.UpdateSorter(Sorters);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
-        {
-            return _cal.UpdateParas(ID, Paras);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateFlags(long ID, List<string> Flags)
-        {
-            return _cal.UpdateFlags(ID, Flags);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateTagName(long ID, string TagName)
-        {
-            return _cal.UpdateTagName(ID, TagName);
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await _cal.DeleteByID(ID);
-        }
-
-        /// <summary>
-        /// 鍒犻櫎鎷撳睍
-        /// </summary>
-        /// <param name="ID"></param>
-        /// <returns></returns>
-        /// <exception cref="NotImplementedException"></exception>
-        public bool DeleteEx(long ID)
-        {
-            return _cal.DeleteEx(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await _cal.DeleteByIds(Ids);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteAll()
-        {
-            return await _cal.DeleteAll();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateUseStatus(long ID, int UseStatus)
-        {
-            return _cal.UpdateUseStatus(ID, UseStatus);
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/02-PumpGroup/PumpGroup.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/02-PumpGroup/PumpGroup.cs
deleted file mode 100644
index 6fa1e86..0000000
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/02-PumpGroup/PumpGroup.cs
+++ /dev/null
@@ -1,164 +0,0 @@
-锘縩amespace HStation.BLL
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class PumpGroup : CAL.IPumpGroup
-    {
-        private readonly HStation.CAL.IPumpGroup _cal = CALCreateHelper.CreateCAL<HStation.CAL.IPumpGroup>();
-
-        #region Query
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<PumpGroupDto>> GetAll()
-        {
-            return await _cal.GetAll();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<PumpGroupDto> GetByID(long ID)
-        {
-            return await _cal.GetByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<PumpGroupDto>> GetByIds(List<long> Ids)
-        {
-            return await _cal.GetByIds(Ids);
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<long> Insert(AddPumpGroupDto model)
-        {
-            return await _cal.Insert(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Inserts(List<AddPumpGroupDto> list)
-        {
-            return await _cal.Inserts(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddPumpGroupDto> list)
-        {
-            return await _cal.BulkInserts(list);
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Update(UpdatePumpGroupDto model)
-        {
-            return await _cal.Update(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Updates(List<UpdatePumpGroupDto> list)
-        {
-            return await _cal.Updates(list);
-        }
-
-        public bool DeleteEx(long ID)
-        {
-            return _cal.DeleteEx(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdatePumpGroupDto> list)
-        {
-            return await _cal.BulkUpdates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> UpdateSortCode(long ID, int SortCode)
-        {
-            return await _cal.UpdateSortCode(ID, SortCode);
-        }
-
-        public async Task<bool> UpdateSorter(List<UpdateSortCodeInput> Sorters)
-        {
-            return await _cal.UpdateSorter(Sorters);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
-        {
-            return _cal.UpdateParas(ID, Paras);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateFlags(long ID, List<string> Flags)
-        {
-            return _cal.UpdateFlags(ID, Flags);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateTagName(long ID, string TagName)
-        {
-            return _cal.UpdateTagName(ID, TagName);
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await _cal.DeleteByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await _cal.DeleteByIds(Ids);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteAll()
-        {
-            return await _cal.DeleteAll();
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/03-PumpMain/PumpMain.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/03-PumpMain/PumpMain.cs
deleted file mode 100644
index b7fb9f8..0000000
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/03-PumpMain/PumpMain.cs
+++ /dev/null
@@ -1,184 +0,0 @@
-锘縩amespace HStation.BLL
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class PumpMain : CAL.IPumpMain
-    {
-        private readonly HStation.CAL.IPumpMain _cal = CALCreateHelper.CreateCAL<HStation.CAL.IPumpMain>();
-
-        #region Query
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<PumpMainDto>> GetAll()
-        {
-            return await _cal.GetAll();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<PumpMainDto> GetByID(long ID)
-        {
-            return await _cal.GetByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<PumpMainDto>> GetByIds(List<long> Ids)
-        {
-            return await _cal.GetByIds(Ids);
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<long> Insert(AddPumpMainDto model)
-        {
-            return await _cal.Insert(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Inserts(List<AddPumpMainDto> list)
-        {
-            return await _cal.Inserts(list);
-        }
-
-        /// <summary>
-        /// 鎻掑叆鎷撳睍
-        /// </summary>
-        /// <param name="input"></param>
-        /// <param name="map"></param>
-        /// <returns></returns>
-        /// <exception cref="NotImplementedException"></exception>
-        public async Task<long> InsertEx(AddPumpMainDto input, AddPumpGroupAndMainMapDto map)
-        {
-            return await _cal.InsertEx(input, map);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddPumpMainDto> list)
-        {
-            return await _cal.BulkInserts(list);
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Update(UpdatePumpMainDto model)
-        {
-            return await _cal.Update(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Updates(List<UpdatePumpMainDto> list)
-        {
-            return await _cal.Updates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdatePumpMainDto> list)
-        {
-            return await _cal.BulkUpdates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> UpdateSortCode(long ID, int SortCode)
-        {
-            return await _cal.UpdateSortCode(ID, SortCode);
-        }
-
-        public async Task<bool> UpdateSorter(List<UpdateSortCodeInput> Sorters)
-        {
-            return await _cal.UpdateSorter(Sorters);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
-        {
-            return _cal.UpdateParas(ID, Paras);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateFlags(long ID, List<string> Flags)
-        {
-            return _cal.UpdateFlags(ID, Flags);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateTagName(long ID, string TagName)
-        {
-            return _cal.UpdateTagName(ID, TagName);
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await _cal.DeleteByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await _cal.DeleteByIds(Ids);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteAll()
-        {
-            return await _cal.DeleteAll();
-        }
-
-        public async Task<List<PumpMainDto>> GetByPumpSeriesID(long ID)
-        {
-            return await _cal.GetByPumpSeriesID(ID);
-        }
-
-        /// <summary>
-        ///閫氳繃鍨嬪彿ID鍒犻櫎Map涓搴旀暟鎹�
-        /// </summary>
-        public async Task<bool> DeleteMapByMainID(long ID)
-        {
-            return await _cal.DeleteMapByMainID(ID);
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/04-PumpGroupAndMainMap/PumpGroupAndMainMap.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/04-PumpGroupAndMainMap/PumpGroupAndMainMap.cs
deleted file mode 100644
index b2a28e1..0000000
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/04-PumpGroupAndMainMap/PumpGroupAndMainMap.cs
+++ /dev/null
@@ -1,152 +0,0 @@
-锘縩amespace HStation.BLL
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class PumpGroupAndMainMap : CAL.IPumpGroupAndMainMap
-    {
-        private readonly HStation.CAL.IPumpGroupAndMainMap _cal = CALCreateHelper.CreateCAL<HStation.CAL.IPumpGroupAndMainMap>();
-
-        #region Query
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<PumpGroupAndMainMapDto>> GetAll()
-        {
-            return await _cal.GetAll();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<PumpGroupAndMainMapDto> GetByID(long ID)
-        {
-            return await _cal.GetByID(ID);
-        }
-
-        //閫氳繃缁処d鏌ユ壘杩斿洖鍨嬪彿 ID
-        public List<long> GetByGroupID(long ID)
-        {
-            return _cal.GetByGroupID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<PumpGroupAndMainMapDto>> GetByIds(List<long> Ids)
-        {
-            return await _cal.GetByIds(Ids);
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<long> Insert(AddPumpGroupAndMainMapDto model)
-        {
-            return await _cal.Insert(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Inserts(List<AddPumpGroupAndMainMapDto> list)
-        {
-            return await _cal.Inserts(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddPumpGroupAndMainMapDto> list)
-        {
-            return await _cal.BulkInserts(list);
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Update(UpdatePumpGroupAndMainMapDto model)
-        {
-            return await _cal.Update(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Updates(List<UpdatePumpGroupAndMainMapDto> list)
-        {
-            return await _cal.Updates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdatePumpGroupAndMainMapDto> list)
-        {
-            return await _cal.BulkUpdates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
-        {
-            return _cal.UpdateParas(ID, Paras);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateFlags(long ID, List<string> Flags)
-        {
-            return _cal.UpdateFlags(ID, Flags);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public Task<bool> UpdateTagName(long ID, string TagName)
-        {
-            return _cal.UpdateTagName(ID, TagName);
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await _cal.DeleteByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await _cal.DeleteByIds(Ids);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteAll()
-        {
-            return await _cal.DeleteAll();
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/05-PumpPartMain/PumpPartMain.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/05-PumpPartMain/PumpPartMain.cs
deleted file mode 100644
index 81bc07f..0000000
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/05-PumpPartMain/PumpPartMain.cs
+++ /dev/null
@@ -1,122 +0,0 @@
-锘縩amespace HStation.BLL
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class PumpPartMain : CAL.IPumpPartMain
-    {
-        private readonly HStation.CAL.IPumpPartMain _cal = CALCreateHelper.CreateCAL<HStation.CAL.IPumpPartMain>();
-
-        #region Query
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<PumpPartMainDto>> GetAll()
-        {
-            return await _cal.GetAll();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<PumpPartMainDto> GetByID(long ID)
-        {
-            return await _cal.GetByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<PumpPartMainDto>> GetByIds(List<long> Ids)
-        {
-            return await _cal.GetByIds(Ids);
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<long> Insert(AddPumpPartMainDto model)
-        {
-            return await _cal.Insert(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Inserts(List<AddPumpPartMainDto> list)
-        {
-            return await _cal.Inserts(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddPumpPartMainDto> list)
-        {
-            return await _cal.BulkInserts(list);
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Update(UpdatePumpPartMainDto model)
-        {
-            return await _cal.Update(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Updates(List<UpdatePumpPartMainDto> list)
-        {
-            return await _cal.Updates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdatePumpPartMainDto> list)
-        {
-            return await _cal.BulkUpdates(list);
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await _cal.DeleteByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await _cal.DeleteByIds(Ids);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteAll()
-        {
-            return await _cal.DeleteAll();
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/06-PumpPropContent/PumpPartPropContent.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/06-PumpPropContent/PumpPartPropContent.cs
deleted file mode 100644
index c7590b6..0000000
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/06-PumpPropContent/PumpPartPropContent.cs
+++ /dev/null
@@ -1,122 +0,0 @@
-锘縩amespace HStation.BLL
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class PumpPartPropContent : CAL.IPumpPartPropContent
-    {
-        private readonly HStation.CAL.IPumpPartPropContent _cal = CALCreateHelper.CreateCAL<HStation.CAL.IPumpPartPropContent>();
-
-        #region Query
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<PumpPropContentDto>> GetAll()
-        {
-            return await _cal.GetAll();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<PumpPropContentDto> GetByID(long ID)
-        {
-            return await _cal.GetByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<PumpPropContentDto>> GetByIds(List<long> Ids)
-        {
-            return await _cal.GetByIds(Ids);
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<long> Insert(AddPumpPropContentDto model)
-        {
-            return await _cal.Insert(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Inserts(List<AddPumpPropContentDto> list)
-        {
-            return await _cal.Inserts(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddPumpPropContentDto> list)
-        {
-            return await _cal.BulkInserts(list);
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Update(UpdatePumpPropContentDto model)
-        {
-            return await _cal.Update(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Updates(List<UpdatePumpPropContentDto> list)
-        {
-            return await _cal.Updates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdatePumpPropContentDto> list)
-        {
-            return await _cal.BulkUpdates(list);
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await _cal.DeleteByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await _cal.DeleteByIds(Ids);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteAll()
-        {
-            return await _cal.DeleteAll();
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/07-PumpMainAndPartMap/PumpPartPropContent.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/07-PumpMainAndPartMap/PumpPartPropContent.cs
deleted file mode 100644
index b3e8c11..0000000
--- a/BLL/HStation.BLL.Xhs.Core/04-bll/02-PumpProdcuct/07-PumpMainAndPartMap/PumpPartPropContent.cs
+++ /dev/null
@@ -1,122 +0,0 @@
-锘縩amespace HStation.BLL
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class PumpMainAndPartMap : CAL.IPumpMainAndPartMap
-    {
-        private readonly HStation.CAL.IPumpMainAndPartMap _cal = CALCreateHelper.CreateCAL<HStation.CAL.IPumpMainAndPartMap>();
-
-        #region Query
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<PumpMainAndPartMapDto>> GetAll()
-        {
-            return await _cal.GetAll();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<PumpMainAndPartMapDto> GetByID(long ID)
-        {
-            return await _cal.GetByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<List<PumpMainAndPartMapDto>> GetByIds(List<long> Ids)
-        {
-            return await _cal.GetByIds(Ids);
-        }
-
-        #endregion Query
-
-        #region Insert
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<long> Insert(AddPumpMainAndPartMapDto model)
-        {
-            return await _cal.Insert(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Inserts(List<AddPumpMainAndPartMapDto> list)
-        {
-            return await _cal.Inserts(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkInserts(List<AddPumpMainAndPartMapDto> list)
-        {
-            return await _cal.BulkInserts(list);
-        }
-
-        #endregion Insert
-
-        #region Update
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Update(UpdatePumpMainAndPartMapDto model)
-        {
-            return await _cal.Update(model);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> Updates(List<UpdatePumpMainAndPartMapDto> list)
-        {
-            return await _cal.Updates(list);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> BulkUpdates(List<UpdatePumpMainAndPartMapDto> list)
-        {
-            return await _cal.BulkUpdates(list);
-        }
-
-        #endregion Update
-
-        #region Delete
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByID(long ID)
-        {
-            return await _cal.DeleteByID(ID);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteByIds(List<long> Ids)
-        {
-            return await _cal.DeleteByIds(Ids);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public async Task<bool> DeleteAll()
-        {
-            return await _cal.DeleteAll();
-        }
-
-        #endregion Delete
-    }
-}
\ No newline at end of file
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
new file mode 100644
index 0000000..1febae8
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSite.cs
@@ -0,0 +1,112 @@
+锘縰sing HStation.CAL;
+
+namespace HStation.BLL
+{
+    /// <summary>
+    ///
+    /// </summary>
+    public class XhsProjectSite : IXhsProjectSite
+    {
+        private readonly HStation.CAL.IXhsProjectSite _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsProjectSite>();
+
+        public Task<bool> BulkInserts(List<AddXhsProjectSiteInput> list)
+        {
+            return _cal.BulkInserts(list);
+        }
+
+        public Task<bool> BulkUpdates(List<UpdateXhsProjectSiteInput> list)
+        {
+            return _cal.BulkUpdates(list);
+        }
+
+        public Task<bool> DeleteAll()
+        {
+            return _cal.DeleteAll();
+        }
+
+        public Task<bool> DeleteByID(long ID)
+        {
+            return _cal.DeleteByID(ID);
+        }
+
+        public Task<bool> DeleteByIds(List<long> Ids)
+        {
+            return _cal.DeleteByIds(Ids);
+        }
+
+        public Task<bool> DeleteByProjectID(long ProjectID)
+        {
+            return _cal.DeleteByProjectID(ProjectID);
+        }
+
+        public Task<List<XhsProjectSiteDto>> GetAll()
+        {
+            return _cal.GetAll();
+        }
+
+        public Task<XhsProjectSiteDto> GetByID(long ID)
+        {
+            return _cal.GetByID(ID);
+        }
+
+        public Task<List<XhsProjectSiteDto>> GetByIds(List<long> Ids)
+        {
+            return _cal.GetByIds(Ids);
+        }
+
+        public Task<List<XhsProjectSiteDto>> GetByProjectID(long ProjectID)
+        {
+            return _cal.GetByProjectID(ProjectID);
+        }
+
+        public Task<long> Insert(AddXhsProjectSiteInput model)
+        {
+            return _cal.Insert(model);
+        }
+
+        public Task<bool> Inserts(List<AddXhsProjectSiteInput> list)
+        {
+            return _cal.Inserts(list);
+        }
+
+        public Task<bool> IsExistByProjectID(long ProjectID)
+        {
+            return _cal.IsExistByProjectID(ProjectID);
+        }
+
+        public Task<bool> Update(UpdateXhsProjectSiteInput model)
+        {
+            return _cal.Update(model);
+        }
+
+        public Task<bool> UpdateFlags(long ID, List<string> Flags)
+        {
+            return _cal.UpdateFlags(ID, Flags);
+        }
+
+        public Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
+        {
+            return _cal.UpdateParas(ID, Paras);
+        }
+
+        public Task<bool> Updates(List<UpdateXhsProjectSiteInput> list)
+        {
+            return _cal.Updates(list);
+        }
+
+        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> UpdateUseStatus(long ID, int UseStatus)
+        {
+            return _cal.UpdateUseStatus(ID, UseStatus);
+        }
+    }
+}
\ 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
new file mode 100644
index 0000000..01e92f2
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/02-project-site/XhsProjectSiteStd.cs
@@ -0,0 +1,22 @@
+锘縰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);
+        }
+    }
+}
\ No newline at end of file
diff --git a/BLL/HStation.BLL.Xhs.Core/04-bll/09-dbfirst/XhsDbFirstHelper.cs b/BLL/HStation.BLL.Xhs.Core/04-bll/09-dbfirst/XhsDbFirstHelper.cs
new file mode 100644
index 0000000..1f7e7cb
--- /dev/null
+++ b/BLL/HStation.BLL.Xhs.Core/04-bll/09-dbfirst/XhsDbFirstHelper.cs
@@ -0,0 +1,15 @@
+锘縩amespace HStation.BLL
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class XhsDbFirstHelper : HStation.CAL.IXhsDbFirstHelper
+    {
+        private readonly HStation.CAL.IXhsDbFirstHelper _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsDbFirstHelper>();
+
+        public Task<bool> Initial()
+        {
+            return _cal.Initial();
+        }
+    }
+}
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 f0f60dc..23d35c3 100644
--- a/BLL/HStation.BLL.Xhs.Core/HStation.BLL.Xhs.Core.csproj
+++ b/BLL/HStation.BLL.Xhs.Core/HStation.BLL.Xhs.Core.csproj
@@ -8,15 +8,8 @@
 	</PropertyGroup>
 
 	<ItemGroup>
-	  <PackageReference Include="Yw.CAL.HttpClient.Core" Version="3.0.9" />
-	  <PackageReference Include="Yw.CALFactory.Core" Version="3.0.2" />
-	  <PackageReference Include="Yw.Mapster.Core" Version="3.0.0" />
-	</ItemGroup>
-
-	<ItemGroup>
 	  <ProjectReference Include="..\..\Dto\HStation.Dto.Xhs.Core\HStation.Dto.Xhs.Core.csproj" />
-	  <ProjectReference Include="..\..\Service\HStation.Service.Xhs.Project.Core\HStation.Service.Xhs.Project.csproj" />
-	  <ProjectReference Include="..\..\Service\HStation.Service.Xhs.PumpProduct.Core\HStation.Service.Xhs.PumpProduct.csproj" />
+	  <ProjectReference Include="..\HStation.BLL.Core\HStation.BLL.Core.csproj" />
 	</ItemGroup>
 
 </Project>
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/01-Project/AddXhsProjectInput.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/01-Project/AddXhsProjectInput.cs
deleted file mode 100644
index 2332f91..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/01-Project/AddXhsProjectInput.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    public class AddXhsProjectInput
-    {
-        [Required]
-        public string GID { 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 string TagName { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓浜�
-        /// </summary>
-        public long CreateUserID { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓鏄剧ず鍚嶇О
-        /// </summary>
-        public string CreateUserDisplayName { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓鏃堕棿
-        /// </summary>
-        public DateTime CreateTime { get; set; }
-
-        /// <summary>
-        /// 鐗堟湰
-        /// </summary>
-        public int Version { get; set; }
-
-        /// <summary>
-        /// 椤圭洰鍦板潃(缁忓害,缁村害)
-        /// </summary>
-        public string MapPosition { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 椤圭洰璇︾粏鍦板潃
-        /// </summary>
-        public string Address { get; set; }
-
-        /// <summary>
-        /// 椤圭洰鐨勫鎴峰悕绉�
-        /// </summary>
-        public string CustomerName { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/01-Project/UpdateXhsProjectInput.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/01-Project/UpdateXhsProjectInput.cs
deleted file mode 100644
index 7230072..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/01-Project/UpdateXhsProjectInput.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-锘縰sing HStation.Dto;
-
-namespace Yw.Dto
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class UpdateXhsProjectInput
-    {
-        /// <summary>
-        /// id
-        /// </summary>
-        [Required, Range(1, long.MaxValue, ErrorMessage = "ID 蹇呴』澶т簬0")]
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 鍞竴鏍囪瘑ID
-        /// </summary>
-        public string GID { 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 string TagName { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓浜�
-        /// </summary>
-        public long CreateUserID { get; set; }
-        /// <summary>
-        /// 椤圭洰缂栧彿
-        /// </summary>
-        public string PrjNumber { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓鏄剧ず鍚嶇О
-        /// </summary>
-        public string CreateUserDisplayName { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓鏃堕棿
-        /// </summary>
-        public DateTime CreateTime { get; set; }
-
-        /// <summary>
-        /// 鐗堟湰
-        /// </summary>
-        public int Version { get; set; }
-
-        /// <summary>
-        /// 浣跨敤鐘舵��
-        /// </summary>
-        public int UseStatus { get; set; }
-
-        /// <summary>
-        /// 椤圭洰鍦板潃(缁忓害,缁村害)
-        /// </summary>
-        public string MapPosition { get; set; }
-
-        /// <summary>
-        /// 椤圭洰璇︾粏鍦板潃
-        /// </summary>
-        public string Address { get; set; }
-
-        /// <summary>
-        /// 椤圭洰鐨勫鎴峰悕绉�
-        /// </summary>
-        public string CustomerName { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/01-Project/XhsProjectDto.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/01-Project/XhsProjectDto.cs
deleted file mode 100644
index b2764b5..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/01-Project/XhsProjectDto.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectDto
-    {
-        /// <summary>
-        ///
-        /// </summary>
-        public XhsProjectDto()
-        { }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public XhsProjectDto(HStation.Model.XhsProject rhs)
-        {
-            this.GID = rhs.GID;
-            this.ID = rhs.ID;
-            this.Name = rhs.Name;
-            this.PrjNumber = rhs.PrjNumber;
-            this.Paras = rhs.Paras;
-            this.Flags = rhs.Flags;
-            this.TagName = rhs.TagName;
-            this.UseStatus = rhs.UseStatus;
-            this.SortCode = rhs.SortCode;
-            this.Description = rhs.Description;
-            this.CreateTime = rhs.CreateTime;
-            this.CreateUserID = rhs.CreateUserID;
-            this.CreateUserDisplayName = rhs.CreateUserDisplayName;
-            this.Version = rhs.Version;
-            this.Address = rhs.Address;
-            this.CustomerName = rhs.CustomerName;
-            this.MapPosition = rhs.MapPosition;
-        }
-
-        /// <summary>
-        /// GUID 鐢ㄤ簬鍗囩骇
-        /// </summary>
-        public string GID { get; set; }
-
-        /// <summary>
-        /// id
-        /// </summary>
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 椤圭洰缂栧彿
-        /// </summary>
-        public string PrjNumber { 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 string TagName { 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; }
-
-        /// <summary>
-        /// 鍒涘缓浜�
-        /// </summary>
-        public long CreateUserID { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓鏄剧ず鍚嶇О
-        /// </summary>
-        public string CreateUserDisplayName { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓鏃堕棿
-        /// </summary>
-        public DateTime CreateTime { get; set; }
-
-        /// <summary>
-        /// 鐗堟湰
-        /// </summary>
-        public int Version { get; set; }
-
-        /// <summary>
-        /// 椤圭洰鍦板潃(缁忓害,缁村害)
-        /// </summary>
-        public string MapPosition { get; set; }
-
-        /// <summary>
-        /// 椤圭洰璇︾粏鍦板潃
-        /// </summary>
-        public string Address { get; set; }
-
-        /// <summary>
-        /// 椤圭洰鐨勫鎴峰悕绉�
-        /// </summary>
-        public string CustomerName { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/01-Project/XhsProjectStdDto.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/01-Project/XhsProjectStdDto.cs
deleted file mode 100644
index 91ed862..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/01-Project/XhsProjectStdDto.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectStdDto
-    {
-        /// <summary>
-        ///
-        /// </summary>
-        public XhsProjectStdDto()
-        { }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public XhsProjectStdDto(Model.XhsProject rhs)
-        {
-            this.ID = rhs.ID;
-            this.Name = rhs.Name;
-            this.Paras = rhs.Paras;
-            this.Flags = rhs.Flags;
-            this.TagName = rhs.TagName;
-            this.UseStatus = rhs.UseStatus;
-            this.SortCode = rhs.SortCode;
-            this.Description = rhs.Description;
-        }
-
-        /// <summary>
-        /// id
-        /// </summary>
-        public long ID { 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 string TagName { 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/Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/AddXhsProjectItemInput.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/AddXhsProjectItemInput.cs
deleted file mode 100644
index 7e6c9ef..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/AddXhsProjectItemInput.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    public class AddXhsProjectItemInput
-    {
-        [Required]
-        public long ProjectID { get; set; }
-
-        /// <summary>
-        /// 鍚嶇О
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 鍙傛暟
-        /// </summary>
-        public string Paras { get; set; }
-
-        /// <summary>
-        /// 鏍囩
-        /// </summary>
-        public string Flags { get; set; }
-
-        /// <summary>
-        /// 鏍囧織
-        /// </summary>
-        public string TagName { get; set; }
-
-        /// <summary>
-        /// 浣跨敤鐘舵��
-        /// </summary>
-        public int UseStatus { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓浜�
-        /// </summary>
-        public long CreateUserID { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓鏃堕棿
-        /// </summary>
-        public DateTime CreateTime { get; set; }
-
-        /// <summary>
-        /// 鐗堟湰
-        /// </summary>
-        public int Version { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/UpdateXhsProjectItemInput.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/UpdateXhsProjectItemInput.cs
deleted file mode 100644
index fa69665..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/UpdateXhsProjectItemInput.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-锘縩amespace Yw.Dto
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class UpdateXhsProjectItemInput
-    {
-        /// <summary>
-        /// id
-        /// </summary>
-        [Required, Range(1, long.MaxValue, ErrorMessage = "ID 蹇呴』澶т簬0")]
-        public long ID { get; set; }
-
-        public long ProjectID { get; set; }
-
-        /// <summary>
-        /// 鍚嶇О
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 鍙傛暟
-        /// </summary>
-        public string Paras { get; set; }
-
-        /// <summary>
-        /// 鏍囩
-        /// </summary>
-        public string Flags { get; set; }
-
-        /// <summary>
-        /// 鏍囧織
-        /// </summary>
-        public string TagName { get; set; }
-
-        /// <summary>
-        /// 浣跨敤鐘舵��
-        /// </summary>
-        public int UseStatus { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓浜�
-        /// </summary>
-        public long CreateUserID { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓鏃堕棿
-        /// </summary>
-        public DateTime CreateTime { get; set; }
-
-        /// <summary>
-        /// 鐗堟湰
-        /// </summary>
-        public int Version { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/XhsProjectItemDto.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/XhsProjectItemDto.cs
deleted file mode 100644
index 1440c95..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/XhsProjectItemDto.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectItemDto
-    {
-        /// <summary>
-        ///
-        /// </summary>
-        public XhsProjectItemDto()
-        { }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public XhsProjectItemDto(HStation.Model.XhsProjectItem rhs)
-        {
-            this.ID = rhs.ID;
-            this.ProjectID = rhs.ProjectID;
-            this.Name = rhs.Name;
-            this.TagName = rhs.TagName;
-            this.SortCode = rhs.SortCode;
-            this.Description = rhs.Description;
-            this.CreateTime = rhs.CreateTime;
-            this.CreateUserID = rhs.CreateUserID;
-            this.Version = rhs.Version;
-        }
-        /// <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 string Paras { get; set; }
-
-        /// <summary>
-        /// 鏍囩
-        /// </summary>
-        public string Flags { get; set; }
-
-        /// <summary>
-        /// 鏍囧織
-        /// </summary>
-        public string TagName { get; set; }
-
-        /// <summary>
-        /// 浣跨敤鐘舵��
-        /// </summary>
-        public int UseStatus { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓浜�
-        /// </summary>
-        public long CreateUserID { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓鏃堕棿
-        /// </summary>
-        public DateTime CreateTime { get; set; }
-
-        /// <summary>
-        /// 鐗堟湰
-        /// </summary>
-        public int Version { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/03-ProjectItemModel/AddXhsProjectItemModelInput.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/03-ProjectItemModel/AddXhsProjectItemModelInput.cs
deleted file mode 100644
index 01f261d..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/03-ProjectItemModel/AddXhsProjectItemModelInput.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-锘縰sing HStation.Xhs;
-
-namespace HStation.Dto
-{
-    public class AddXhsProjectItemModelInput
-    {
-        [Required]
-        public long ProjectID { get; set; }
-
-        /// <summary>
-        /// 鍦˙IMFACE涓殑ID
-        /// </summary>
-        public string BimfaceID { get; set; }
-
-        /// <summary>
-        /// 鍚嶇О
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 鍙傛暟
-        /// </summary>
-        public string Paras { get; set; }
-
-        /// <summary>
-        /// 鏍囩
-        /// </summary>
-        public string Flags { get; set; }
-
-        /// <summary>
-        /// 鏍囧織
-        /// </summary>
-        public string TagName { get; set; }
-
-        /// <summary>
-        /// 浣跨敤鐘舵��
-        /// </summary>
-        public int UseStatus { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 涓婁紶鐘舵��
-        /// </summary>
-        public eUploadStatus UploadStatus { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-
-        /// <summary>
-        /// 鐗堟湰
-        /// </summary>
-        public int Version { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/03-ProjectItemModel/UpdateXhsProjectItemModelInput.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/03-ProjectItemModel/UpdateXhsProjectItemModelInput.cs
deleted file mode 100644
index 76f56ca..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/03-ProjectItemModel/UpdateXhsProjectItemModelInput.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-锘縰sing HStation.Xhs;
-
-namespace Yw.Dto
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class UpdateXhsProjectItemModelInput
-    {
-        /// <summary>
-        /// id
-        /// </summary>
-        [Required, Range(1, long.MaxValue, ErrorMessage = "ID 蹇呴』澶т簬0")]
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 椤圭洰ID
-        /// </summary>
-        public long ProjectID { get; set; }
-
-        /// <summary>
-        /// 鍦˙IMFACE涓殑ID
-        /// </summary>
-        public string BimfaceID { get; set; }
-
-        /// <summary>
-        /// 鍚嶇О
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 鍙傛暟
-        /// </summary>
-        public string Paras { get; set; }
-
-        /// <summary>
-        /// 鏍囩
-        /// </summary>
-        public string Flags { get; set; }
-
-        /// <summary>
-        /// 涓婁紶鐘舵��
-        /// </summary>
-        public eUploadStatus UploadStatus { get; set; }
-
-        /// <summary>
-        /// 鏍囧織
-        /// </summary>
-        public string TagName { get; set; }
-
-        /// <summary>
-        /// 浣跨敤鐘舵��
-        /// </summary>
-        public int UseStatus { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-
-        /// <summary>
-        /// 鐗堟湰
-        /// </summary>
-        public int Version { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/03-ProjectItemModel/XhsProjectItemModelDto.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/03-ProjectItemModel/XhsProjectItemModelDto.cs
deleted file mode 100644
index 85cc213..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/03-ProjectItemModel/XhsProjectItemModelDto.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-锘縰sing HStation.Xhs;
-
-namespace HStation.Dto
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectItemModelDto
-    {
-        /// <summary>
-        ///
-        /// </summary>
-        public XhsProjectItemModelDto()
-        { }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public XhsProjectItemModelDto(HStation.Model.XhsProjectItemModel rhs)
-        {
-            this.ID = rhs.ID;
-            this.ProjectID = rhs.ProjectID;
-            this.Name = rhs.Name;
-            this.TagName = rhs.TagName;
-            this.SortCode = rhs.SortCode;
-            this.Description = rhs.Description;
-            this.Version = rhs.Version;
-            this.UploadStatus = rhs.UploadStatus;
-            this.UseStatus = rhs.UseStatus;
-            this.Flags = rhs.Flags;
-            this.BimfaceID = rhs.BimfaceID;
-        }
-
-        /// <summary>
-        /// id
-        /// </summary>
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 椤圭洰ID
-        /// </summary>
-        public long ProjectID { get; set; }
-
-        /// <summary>
-        /// 鍦˙IMFACE涓殑ID
-        /// </summary>
-        public string BimfaceID { get; set; }
-
-        /// <summary>
-        /// 鍚嶇О
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 鍙傛暟
-        /// </summary>
-        public string Paras { get; set; }
-
-        /// <summary>
-        /// 鏍囩
-        /// </summary>
-        public string Flags { get; set; }
-
-        /// <summary>
-        /// 鏍囧織
-        /// </summary>
-        public string TagName { get; set; }
-
-        /// <summary>
-        /// 浣跨敤鐘舵��
-        /// </summary>
-        public int UseStatus { get; set; }
-
-        /// <summary>
-        /// 涓婁紶鐘舵��
-        /// </summary>
-        public eUploadStatus UploadStatus { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-
-        /// <summary>
-        /// 鐗堟湰
-        /// </summary>
-        public int Version { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/03-ProjectItemModel/XhsProjectItemModelStdDto.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/03-ProjectItemModel/XhsProjectItemModelStdDto.cs
deleted file mode 100644
index 4b43b68..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/03-ProjectItemModel/XhsProjectItemModelStdDto.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectItemModelStdDto
-    {
-        /// <summary>
-        ///
-        /// </summary>
-        public XhsProjectItemModelStdDto()
-        { }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public XhsProjectItemModelStdDto(Model.XhsProjectItemModel rhs)
-        {
-            this.ID = rhs.ID;
-            this.Name = rhs.Name;
-            this.TagName = rhs.TagName;
-            this.SortCode = rhs.SortCode;
-            this.Description = rhs.Description;
-        }
-
-        /// <summary>
-        /// id
-        /// </summary>
-        public long ID { 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 string TagName { 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/Dto/HStation.Dto.Xhs.Core/01-PumpProject/04-ProjectItemModelMap/AddXhsProjectItemModelMapInput.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/04-ProjectItemModelMap/AddXhsProjectItemModelMapInput.cs
deleted file mode 100644
index 9dcea6b..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/04-ProjectItemModelMap/AddXhsProjectItemModelMapInput.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    public class AddXhsProjectItemModelMapInput
-    {
-        /// <summary>
-        /// 椤圭洰ID
-        /// </summary>
-        public long ProjectID { get; set; }
-
-        /// <summary>
-        /// 宸ヤ綅ID
-        /// </summary>
-        public long ItemID { get; set; }
-
-        /// <summary>
-        /// 妯″瀷ID
-        /// </summary>
-        public long ModelID { get; set; }
-
-        /// <summary>
-        /// 浣跨敤鐘舵��
-        /// </summary>
-        public int UseStatus { get; set; }
-
-        /// <summary>
-        /// 涓婁紶浜�
-        /// </summary>
-        public long UploadUserID { get; set; }
-
-        /// <summary>
-        /// 涓婁紶鏃堕棿
-        /// </summary>
-        public DateTime UploadTime { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/04-ProjectItemModelMap/UpdateXhsProjectItemModelInput.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/04-ProjectItemModelMap/UpdateXhsProjectItemModelInput.cs
deleted file mode 100644
index df9a376..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/04-ProjectItemModelMap/UpdateXhsProjectItemModelInput.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-锘縩amespace Yw.Dto
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class UpdateXhsProjectItemModelMapInput
-    {
-        /// <summary>
-        /// id
-        /// </summary>
-        [Required, Range(1, long.MaxValue, ErrorMessage = "ID 蹇呴』澶т簬0")]
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 椤圭洰ID
-        /// </summary>
-        public long ProjectID { get; set; }
-
-        /// <summary>
-        /// 宸ヤ綅ID
-        /// </summary>
-        public long ItemID { get; set; }
-
-        /// <summary>
-        /// 妯″瀷ID
-        /// </summary>
-        public long ModelID { get; set; }
-
-        /// <summary>
-        /// 浣跨敤鐘舵��
-        /// </summary>
-        public int UseStatus { get; set; }
-
-        /// <summary>
-        /// 涓婁紶浜�
-        /// </summary>
-        public long UploadUserID { get; set; }
-
-        /// <summary>
-        /// 涓婁紶鏃堕棿
-        /// </summary>
-        public DateTime UploadTime { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/04-ProjectItemModelMap/XhsProjectItemDto.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/04-ProjectItemModelMap/XhsProjectItemDto.cs
deleted file mode 100644
index 41d4a70..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/04-ProjectItemModelMap/XhsProjectItemDto.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectItemModelMapDto
-    {
-        /// <summary>
-        ///
-        /// </summary>
-        public XhsProjectItemModelMapDto()
-        { }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public XhsProjectItemModelMapDto(HStation.Model.XhsProjectItemModelMap rhs)
-        {
-            this.ID = rhs.ID;
-            this.ProjectID = rhs.ProjectID;
-            this.ItemID = rhs.ItemID;
-            this.ModelID = rhs.ModelID;
-            this.UploadUserID = rhs.UploadUserID;
-            this.UploadTime = rhs.UploadTime;
-            this.UseStatus = rhs.UseStatus;
-        }
-
-        /// <summary>
-        /// ID
-        /// </summary>
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 椤圭洰ID
-        /// </summary>
-        public long ProjectID { get; set; }
-
-        /// <summary>
-        /// 宸ヤ綅ID
-        /// </summary>
-        public long ItemID { get; set; }
-
-        /// <summary>
-        /// 妯″瀷ID
-        /// </summary>
-        public long ModelID { get; set; }
-
-        /// <summary>
-        /// 浣跨敤鐘舵��
-        /// </summary>
-        public int UseStatus { get; set; }
-
-        /// <summary>
-        /// 涓婁紶浜�
-        /// </summary>
-        public long UploadUserID { get; set; }
-
-        /// <summary>
-        /// 涓婁紶鏃堕棿
-        /// </summary>
-        public DateTime UploadTime { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/04-ProjectItemModelMap/XhsProjectItemStdDto.cs b/Dto/HStation.Dto.Xhs.Core/01-PumpProject/04-ProjectItemModelMap/XhsProjectItemStdDto.cs
deleted file mode 100644
index a2a2621..0000000
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/04-ProjectItemModelMap/XhsProjectItemStdDto.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    /// <summary>
-    ///
-    /// </summary>
-    public class XhsProjectItemModelMapStdDto
-    {
-        /// <summary>
-        ///
-        /// </summary>
-        public XhsProjectItemModelMapStdDto()
-        { }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public XhsProjectItemModelMapStdDto(Model.XhsProjectItemModelMap rhs)
-        {
-            this.ID = rhs.ID;
-        }
-
-        /// <summary>
-        /// id
-        /// </summary>
-        public long ID { 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 string TagName { 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/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/01-PumpSeries/AddPumpSeriesDto.cs b/Dto/HStation.Dto.Xhs.Core/01-project/01-normal/AddXhsProjectInput.cs
similarity index 67%
rename from Dto/HStation.Dto.Xhs.Core/02-PumpProduct/01-PumpSeries/AddPumpSeriesDto.cs
rename to Dto/HStation.Dto.Xhs.Core/01-project/01-normal/AddXhsProjectInput.cs
index 9f08603..06c839b 100644
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/01-PumpSeries/AddPumpSeriesDto.cs
+++ b/Dto/HStation.Dto.Xhs.Core/01-project/01-normal/AddXhsProjectInput.cs
@@ -1,16 +1,28 @@
 锘縩amespace HStation.Dto
 {
-    public class AddPumpSeriesDto
+    public class AddXhsProjectInput
     {
+
+        /// <summary>
+        /// 缂栧彿
+        /// </summary>
+        public string NO { get; set; }
+
         /// <summary>
         /// 鍚嶇О
         /// </summary>
+        [Required]
         public string Name { get; set; }
 
         /// <summary>
-        /// 鎵�灞炵被鍒獻D
+        /// 璇︾粏鍦板潃
         /// </summary>
-        public long CatalogID { get; set; }
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 瀹㈡埛
+        /// </summary>
+        public string Customer { get; set; }
 
         /// <summary>
         /// 鍙傛暟
@@ -26,21 +38,6 @@
         /// 鏍囧織
         /// </summary>
         public string TagName { get; set; }
-
-        /// <summary>
-        /// 浣跨敤鐘舵��
-        /// </summary>
-        public int UseStatus { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 鐢垫満棰戠巼
-        /// </summary>
-        public string MotorFrequency { get; set; }
 
         /// <summary>
         /// 璇存槑
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/01-PumpSeries/UpdatePumpSeriesDto.cs b/Dto/HStation.Dto.Xhs.Core/01-project/01-normal/UpdateXhsProjectInput.cs
similarity index 66%
rename from Dto/HStation.Dto.Xhs.Core/02-PumpProduct/01-PumpSeries/UpdatePumpSeriesDto.cs
rename to Dto/HStation.Dto.Xhs.Core/01-project/01-normal/UpdateXhsProjectInput.cs
index 82c9a76..7f26c31 100644
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/01-PumpSeries/UpdatePumpSeriesDto.cs
+++ b/Dto/HStation.Dto.Xhs.Core/01-project/01-normal/UpdateXhsProjectInput.cs
@@ -1,8 +1,9 @@
-锘縰sing System.ComponentModel.DataAnnotations;
-
-namespace HStation.Dto
+锘縩amespace HStation.Dto
 {
-    public class UpdatePumpSeriesDto
+    /// <summary>
+    ///
+    /// </summary>
+    public class UpdateXhsProjectInput
     {
         /// <summary>
         /// id
@@ -11,14 +12,26 @@
         public long ID { get; set; }
 
         /// <summary>
-        /// 鎵�灞炵被鍒獻D
+        /// 缂栧彿
         /// </summary>
-        public long CatalogID { get; set; }
+        [Required]
+        public string NO { get; set; }
 
         /// <summary>
         /// 鍚嶇О
         /// </summary>
+        [Required]
         public string Name { get; set; }
+
+        /// <summary>
+        /// 璇︾粏鍦板潃
+        /// </summary>
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 瀹㈡埛
+        /// </summary>
+        public string Customer { get; set; }
 
         /// <summary>
         /// 鍙傛暟
@@ -34,21 +47,6 @@
         /// 鏍囧織
         /// </summary>
         public string TagName { get; set; }
-
-        /// <summary>
-        /// 浣跨敤鐘舵��
-        /// </summary>
-        public int UseStatus { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 鐢垫満棰戠巼
-        /// </summary>
-        public string motorfrequency { get; set; }
 
         /// <summary>
         /// 璇存槑
diff --git a/Dto/HStation.Dto.Xhs.Core/01-project/01-normal/XhsProjectDto.cs b/Dto/HStation.Dto.Xhs.Core/01-project/01-normal/XhsProjectDto.cs
new file mode 100644
index 0000000..348acf5
--- /dev/null
+++ b/Dto/HStation.Dto.Xhs.Core/01-project/01-normal/XhsProjectDto.cs
@@ -0,0 +1,104 @@
+锘縩amespace HStation.Dto
+{
+    /// <summary>
+    ///
+    /// </summary>
+    public class XhsProjectDto
+    {
+        /// <summary>
+        ///
+        /// </summary>
+        public XhsProjectDto() { }
+
+        /// <summary>
+        ///
+        /// </summary>
+        public XhsProjectDto(Model.XhsProject rhs)
+        {
+            this.ID = rhs.ID;
+            this.ParentID = rhs.ParentIds.LastOrDefault();
+            this.NO = rhs.NO;
+            this.Name = rhs.Name;
+            this.StartTime = rhs.StartTime;
+            this.EndTime = rhs.EndTime;
+            this.PublishStatus = rhs.GetPublishStatus();
+            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>
+        public long ID { get; set; }
+
+        /// <summary>
+        /// 鐖剁骇id
+        /// </summary>
+        public long ParentID { get; set; }
+
+        /// <summary>
+        /// 缂栧彿
+        /// </summary>
+        public string NO { get; set; }
+
+        /// <summary>
+        /// 鍚嶇О
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 鐢熸晥鏃堕棿
+        /// </summary>
+        public DateTime? StartTime { get; set; }
+
+        /// <summary>
+        /// 澶辨晥鏃堕棿
+        /// </summary>
+        public DateTime? EndTime { get; set; }
+
+        /// <summary>
+        /// 鍙戝竷鐘舵��
+        /// </summary>
+        public ePublishStatus PublishStatus { get; set; }
+
+        /// <summary>
+        /// 璇︾粏鍦板潃
+        /// </summary>
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 瀹㈡埛
+        /// </summary>
+        public string Customer { get; set; }
+
+        /// <summary>
+        /// 鍙傛暟
+        /// </summary>
+        public Dictionary<string, string> Paras { get; set; }
+
+        /// <summary>
+        /// 鏍囩
+        /// </summary>
+        public List<string> Flags { get; set; }
+
+        /// <summary>
+        /// 鏍囧織
+        /// </summary>
+        public string TagName { 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/Dto/HStation.Dto.Xhs.Core/01-project/01-normal/XhsProjectStdDto.cs b/Dto/HStation.Dto.Xhs.Core/01-project/01-normal/XhsProjectStdDto.cs
new file mode 100644
index 0000000..168fc31
--- /dev/null
+++ b/Dto/HStation.Dto.Xhs.Core/01-project/01-normal/XhsProjectStdDto.cs
@@ -0,0 +1,104 @@
+锘縩amespace HStation.Dto
+{
+    /// <summary>
+    ///
+    /// </summary>
+    public class XhsProjectStdDto
+    {
+        /// <summary>
+        ///
+        /// </summary>
+        public XhsProjectStdDto() { }
+
+        /// <summary>
+        ///
+        /// </summary>
+        public XhsProjectStdDto(Model.XhsProject rhs)
+        {
+            this.ID = rhs.ID;
+            this.ParentID = rhs.ParentIds.LastOrDefault();
+            this.NO = rhs.NO;
+            this.Name = rhs.Name;
+            this.StartTime = rhs.StartTime;
+            this.EndTime = rhs.EndTime;
+            this.PublishStatus = rhs.GetPublishStatus();
+            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>
+        public long ID { get; set; }
+
+        /// <summary>
+        /// 鐖剁骇id
+        /// </summary>
+        public long ParentID { get; set; }
+
+        /// <summary>
+        /// 缂栧彿
+        /// </summary>
+        public string NO { get; set; }
+
+        /// <summary>
+        /// 鍚嶇О
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 鐢熸晥鏃堕棿
+        /// </summary>
+        public DateTime? StartTime { get; set; }
+
+        /// <summary>
+        /// 澶辨晥鏃堕棿
+        /// </summary>
+        public DateTime? EndTime { get; set; }
+
+        /// <summary>
+        /// 鍙戝竷鐘舵��
+        /// </summary>
+        public ePublishStatus PublishStatus { get; set; }
+
+        /// <summary>
+        /// 璇︾粏鍦板潃
+        /// </summary>
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 瀹㈡埛
+        /// </summary>
+        public string Customer { get; set; }
+
+        /// <summary>
+        /// 鍙傛暟
+        /// </summary>
+        public Dictionary<string, string> Paras { get; set; }
+
+        /// <summary>
+        /// 鏍囩
+        /// </summary>
+        public List<string> Flags { get; set; }
+
+        /// <summary>
+        /// 鏍囧織
+        /// </summary>
+        public string TagName { 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/Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/AddXhsProjectExtensionsInput.cs b/Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/AddXhsProjectExtensionsInput.cs
new file mode 100644
index 0000000..65bd3e0
--- /dev/null
+++ b/Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/AddXhsProjectExtensionsInput.cs
@@ -0,0 +1,13 @@
+锘縩amespace HStation.Dto
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class AddXhsProjectExtensionsInput : AddXhsProjectInput
+    {
+        /// <summary>
+        /// 绔欑偣鍒楄〃
+        /// </summary>
+        public List<AddXhsProjectSiteExtensionsInput> SiteList { get; set; }
+    }
+}
diff --git a/Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/AddXhsProjectSiteExtensionsInput.cs b/Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/AddXhsProjectSiteExtensionsInput.cs
new file mode 100644
index 0000000..2b7d254
--- /dev/null
+++ b/Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/AddXhsProjectSiteExtensionsInput.cs
@@ -0,0 +1,31 @@
+锘縩amespace HStation.Dto
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class AddXhsProjectSiteExtensionsInput
+    {
+
+        /// <summary>
+        /// 鍚嶇О
+        /// </summary>
+        [Required]
+        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 string Description { get; set; }
+
+    }
+}
diff --git a/Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/UpdateXhsProjectExtensionsInput.cs b/Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/UpdateXhsProjectExtensionsInput.cs
new file mode 100644
index 0000000..e0ea4ad
--- /dev/null
+++ b/Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/UpdateXhsProjectExtensionsInput.cs
@@ -0,0 +1,13 @@
+锘縩amespace HStation.Dto
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class UpdateXhsProjectExtensionsInput : UpdateXhsProjectInput
+    {
+        /// <summary>
+        /// 绔欑偣鍒楄〃
+        /// </summary>
+        public List<UpdateXhsProjectSiteInput> SiteList { get; set; }
+    }
+}
diff --git a/Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/XhsProjectExtensionsDto.cs b/Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/XhsProjectExtensionsDto.cs
new file mode 100644
index 0000000..c08e518
--- /dev/null
+++ b/Dto/HStation.Dto.Xhs.Core/01-project/02-extensions/XhsProjectExtensionsDto.cs
@@ -0,0 +1,26 @@
+锘縩amespace HStation.Dto
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class XhsProjectExtensionsDto : XhsProjectDto
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public XhsProjectExtensionsDto() { }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public XhsProjectExtensionsDto(Model.XhsProject project, List<Model.XhsProjectSite> siteList) : base(project)
+        {
+            this.SiteList = siteList?.Select(x => new XhsProjectSiteDto(x)).ToList();
+        }
+
+        /// <summary>
+        /// 绔欑偣鍒楄〃
+        /// </summary>
+        public List<XhsProjectSiteDto> SiteList { get; set; }
+    }
+}
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/01-PumpSeries/PumpSeriesDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/01-PumpSeries/PumpSeriesDto.cs
deleted file mode 100644
index 8e80ac9..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/01-PumpSeries/PumpSeriesDto.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-锘縰sing Yw.Model;
-
-namespace HStation.Dto
-{
-    public class PumpSeriesDto
-    {
-        public PumpSeriesDto()
-        {
-        }
-
-        public PumpSeriesDto(Model.PumpSeries rhs)
-        {
-            this.ID = rhs.ID;
-            this.Name = rhs.Name;
-            this.Paras = rhs.Paras;
-            this.CatalogID = rhs.CatalogID;
-            this.Flags = rhs.Flags;
-            this.TagName = rhs.TagName;
-            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 CatalogID { 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 string TagName { get; set; }
-
-        /// <summary>
-        /// 浣跨敤鐘舵��
-        /// </summary>
-        public eUseStatus UseStatus { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 鐢垫満棰戠巼
-        /// </summary>
-        public string MotorFrequency { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/02-PumpGroup/AddPumpGroupDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/02-PumpGroup/AddPumpGroupDto.cs
deleted file mode 100644
index c9c6b5f..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/02-PumpGroup/AddPumpGroupDto.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    public class AddPumpGroupDto
-    {
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long PumpSeriesID { get; set; }
-
-        /// <summary>
-        /// 鍚嶇О
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 鍙傛暟
-        /// </summary>
-        public string Paras { get; set; }
-
-        /// <summary>
-        /// 鏍囩
-        /// </summary>
-        public string Flags { get; set; }
-
-        /// <summary>
-        /// 鏍囧織
-        /// </summary>
-        public string TagName { 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/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/02-PumpGroup/PumpGroupDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/02-PumpGroup/PumpGroupDto.cs
deleted file mode 100644
index feddf0e..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/02-PumpGroup/PumpGroupDto.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-锘縰sing Yw.Model;
-
-namespace HStation.Dto
-{
-    public class PumpGroupDto
-    {
-        public PumpGroupDto()
-        {
-        }
-
-        public PumpGroupDto(Model.PumpGroup rhs)
-        {
-            this.ID = rhs.ID;
-            this.Paras = rhs.Paras;
-            this.Name = rhs.Name;
-            this.PumpSeriesID = rhs.PumpSeriesID;
-            this.TagName = rhs.TagName;
-            this.SortCode = rhs.SortCode;
-            this.Description = rhs.Description;
-        }
-
-        /// <summary>
-        /// id
-        /// </summary>
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long PumpSeriesID { 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 string TagName { 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/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/02-PumpGroup/UpdatePumpGroupDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/02-PumpGroup/UpdatePumpGroupDto.cs
deleted file mode 100644
index 595b5be..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/02-PumpGroup/UpdatePumpGroupDto.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-锘縰sing System.ComponentModel.DataAnnotations;
-
-namespace HStation.Dto
-{
-    public class UpdatePumpGroupDto
-    {
-        /// <summary>
-        /// id
-        /// </summary>
-        [Required, Range(1, long.MaxValue, ErrorMessage = "ID 蹇呴』澶т簬0")]
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long PumpSeriesID { get; set; }
-
-        /// <summary>
-        /// 鍚嶇О
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 鍙傛暟
-        /// </summary>
-        public string Paras { get; set; }
-
-        /// <summary>
-        /// 鏍囩
-        /// </summary>
-        public string Flags { get; set; }
-
-        /// <summary>
-        /// 鏍囧織
-        /// </summary>
-        public string TagName { 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/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/03-PumpMain/AddPumpMainDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/03-PumpMain/AddPumpMainDto.cs
deleted file mode 100644
index dfaf2f3..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/03-PumpMain/AddPumpMainDto.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    public class AddPumpMainDto
-    {
-        /// <summary>
-        /// 鍚嶇О
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long PumpSeriesID { get; set; }
-
-        /// <summary>
-        /// 鍙傛暟
-        /// </summary>
-        public Dictionary<string, string> Paras { get; set; }
-
-        /// <summary>
-        /// 鏍囩
-        /// </summary>
-        public List<string> Flags { get; set; }
-
-        /// <summary>
-        /// 鏍囧織
-        /// </summary>
-        public string TagName { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 棰濆畾杞��
-        /// </summary>
-        public double RatedSpeed { get; set; }
-
-        /// <summary>
-        /// 棰濆畾娴侀噺
-        /// </summary>
-        public double RatedFlow { get; set; }
-
-        /// <summary>
-        /// 棰濆畾鎵▼
-        /// </summary>
-        public double RatedHead { get; set; }
-
-        /// <summary>
-        /// 棰濆畾鏁堢巼
-        /// </summary>
-        public double RatedEfficiency { get; set; }
-
-        /// <summary>
-        /// 棰濆畾鍔熺巼
-        /// </summary>
-        public double RatedPower { get; set; }
-
-        /// <summary>
-        /// 姘旇殌
-        /// </summary>
-        public double Erosion { get; set; }
-
-        /// <summary>
-        /// 鍙惰疆澶栧緞
-        /// </summary>
-        public double D2 { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/03-PumpMain/PumpMainDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/03-PumpMain/PumpMainDto.cs
deleted file mode 100644
index 7f5077a..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/03-PumpMain/PumpMainDto.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-锘縰sing Yw.Model;
-
-namespace HStation.Dto
-{
-    public class PumpMainDto
-    {
-        public PumpMainDto()
-        {
-        }
-
-        public PumpMainDto(Model.PumpMain rhs)
-        {
-            this.ID = rhs.ID;
-            this.PumpSeriesID = rhs.PumpSeriesID;
-            this.RatedPower = rhs.RatedPower;
-            this.RatedEfficiency = rhs.RatedEfficiency;
-            this.Erosion = rhs.Erosion;
-            this.D2 = rhs.D2;
-            this.Paras = rhs.Paras;
-            this.Name = rhs.Name;
-            this.TagName = rhs.TagName;
-            this.SortCode = rhs.SortCode;
-            this.RatedSpeed = rhs.RatedSpeed;
-            this.RatedFlow = rhs.RatedFlow;
-            this.RatedHead = rhs.RatedHead;
-            this.Description = rhs.Description;
-        }
-
-        /// <summary>
-        /// id
-        /// </summary>
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long PumpSeriesID { 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 string TagName { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 棰濆畾杞��
-        /// </summary>
-        public double RatedSpeed { get; set; }
-
-        /// <summary>
-        /// 棰濆畾娴侀噺
-        /// </summary>
-        public double RatedFlow { get; set; }
-
-        /// <summary>
-        /// 棰濆畾鎵▼
-        /// </summary>
-        public double RatedHead { get; set; }
-
-        /// <summary>
-        /// 棰濆畾鏁堢巼
-        /// </summary>
-        public double RatedEfficiency { get; set; }
-
-        /// <summary>
-        /// 棰濆畾鍔熺巼
-        /// </summary>
-        public double RatedPower { get; set; }
-
-        /// <summary>
-        /// 姘旇殌
-        /// </summary>
-        public double Erosion { get; set; }
-
-        /// <summary>
-        /// 鍙惰疆澶栧緞
-        /// </summary>
-        public double D2 { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/03-PumpMain/UpdatePumpMainDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/03-PumpMain/UpdatePumpMainDto.cs
deleted file mode 100644
index 221c041..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/03-PumpMain/UpdatePumpMainDto.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-锘縰sing System.ComponentModel.DataAnnotations;
-
-namespace HStation.Dto
-{
-    public class UpdatePumpMainDto
-    {
-        /// <summary>
-        /// id
-        /// </summary>
-        [Required, Range(1, long.MaxValue, ErrorMessage = "ID 蹇呴』澶т簬0")]
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long PumpSeriesID { 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 string TagName { get; set; }
-
-        /// <summary>
-        /// 鎺掑簭鐮�
-        /// </summary>
-        public int SortCode { get; set; }
-
-        /// <summary>
-        /// 棰濆畾杞��
-        /// </summary>
-        public double RatedSpeed { get; set; }
-
-        /// <summary>
-        /// 棰濆畾娴侀噺
-        /// </summary>
-        public double RatedFlow { get; set; }
-
-        /// <summary>
-        /// 棰濆畾鎵▼
-        /// </summary>
-        public double RatedHead { get; set; }
-
-        /// <summary>
-        /// 棰濆畾鏁堢巼
-        /// </summary>
-        public double RatedEfficiency { get; set; }
-
-        /// <summary>
-        /// 棰濆畾鍔熺巼
-        /// </summary>
-        public double RatedPower { get; set; }
-
-        /// <summary>
-        /// 姘旇殌
-        /// </summary>
-        public double Erosion { get; set; }
-
-        /// <summary>
-        /// 鍙惰疆澶栧緞
-        /// </summary>
-        public double D2 { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/04-PumpMaping/AddPumpMainDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/04-PumpMaping/AddPumpMainDto.cs
deleted file mode 100644
index 5d3142d..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/04-PumpMaping/AddPumpMainDto.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    public class AddPumpGroupAndMainMapDto
-    {
-        /// <summary>
-        /// 娉电粍ID
-        /// </summary>
-        public long PumpGroupID { get; set; }
-
-        /// <summary>
-        /// 娉靛瀷鍙稩D
-        /// </summary>
-        public long PumpMainID { get; set; }
-
-        /// <summary>
-        /// 鍙傛暟
-        /// </summary>
-        public string Paras { get; set; }
-
-        /// <summary>
-        /// 鏍囩
-        /// </summary>
-        public string Flags { get; set; }
-
-        /// <summary>
-        /// 鏍囧織
-        /// </summary>
-        public string TagName { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/04-PumpMaping/PumpMainDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/04-PumpMaping/PumpMainDto.cs
deleted file mode 100644
index 3369f95..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/04-PumpMaping/PumpMainDto.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-锘縰sing Yw.Model;
-
-namespace HStation.Dto
-{
-    public class PumpGroupAndMainMapDto
-    {
-        public PumpGroupAndMainMapDto()
-        {
-        }
-
-        public PumpGroupAndMainMapDto(Model.PumpGroupAndMainMap rhs)
-        {
-            this.ID = rhs.ID;
-            this.PumpGroupID = rhs.PumpGroupID;
-            this.PumpMainID = rhs.PumpMainID;
-            this.Flags = rhs.Flags;
-            this.Paras = rhs.Paras;
-            this.TagName = rhs.TagName;
-            this.Description = rhs.Description;
-        }
-
-        /// <summary>
-        /// id
-        /// </summary>
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 娉电粍ID
-        /// </summary>
-        public long PumpGroupID { get; set; }
-
-        /// <summary>
-        /// 娉靛瀷鍙稩D
-        /// </summary>
-        public long PumpMainID { get; set; }
-
-        /// <summary>
-        /// 鍙傛暟
-        /// </summary>
-        public Dictionary<string, string> Paras { get; set; }
-
-        /// <summary>
-        /// 鏍囩
-        /// </summary>
-        public List<string> Flags { get; set; }
-
-        /// <summary>
-        /// 鏍囧織
-        /// </summary>
-        public string TagName { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/04-PumpMaping/UpdatePumpMainDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/04-PumpMaping/UpdatePumpMainDto.cs
deleted file mode 100644
index c8d8155..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/04-PumpMaping/UpdatePumpMainDto.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-锘縰sing System.ComponentModel.DataAnnotations;
-
-namespace HStation.Dto
-{
-    public class UpdatePumpGroupAndMainMapDto
-    {
-        /// <summary>
-        /// id
-        /// </summary>
-        [Required, Range(1, long.MaxValue, ErrorMessage = "ID 蹇呴』澶т簬0")]
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 娉电粍ID
-        /// </summary>
-        public long PumpGroupID { get; set; }
-
-        /// <summary>
-        /// 娉靛瀷鍙稩D
-        /// </summary>
-        public long PumpMainID { get; set; }
-
-        /// <summary>
-        /// 鍙傛暟
-        /// </summary>
-        public string Paras { get; set; }
-
-        /// <summary>
-        /// 鏍囩
-        /// </summary>
-        public string Flags { get; set; }
-
-        /// <summary>
-        /// 鏍囧織
-        /// </summary>
-        public string TagName { get; set; }
-
-        /// <summary>
-        /// 璇存槑
-        /// </summary>
-        public string Description { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/05-PumpPartMain/AddPumpPartMainDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/05-PumpPartMain/AddPumpPartMainDto.cs
deleted file mode 100644
index d2e49da..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/05-PumpPartMain/AddPumpPartMainDto.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    public class AddPumpPartMainDto
-    {
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long SeriesID { get; set; }
-
-        /// <summary>
-        /// 浜у搧缂栧彿
-        /// </summary>
-        public string NO { get; set; }
-
-        /// <summary>
-        /// 浜у搧鍚嶇О
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 浜у搧鍥惧彿
-        /// </summary>
-        public string Code { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/05-PumpPartMain/PumpPartMainDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/05-PumpPartMain/PumpPartMainDto.cs
deleted file mode 100644
index ac724c4..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/05-PumpPartMain/PumpPartMainDto.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-锘縰sing Yw.Model;
-
-namespace HStation.Dto
-{
-    public class PumpPartMainDto
-    {
-        public PumpPartMainDto()
-        {
-        }
-
-        public PumpPartMainDto(Model.PumpPartMain rhs)
-        {
-            this.ID = rhs.ID;
-            this.Name = rhs.Name;
-            this.SeriesID = rhs.SeriesID;
-            this.Code = rhs.Code;
-            this.NO = rhs.NO;
-        }
-
-        /// <summary>
-        /// ID
-        /// </summary>
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long SeriesID { get; set; }
-
-        /// <summary>
-        /// 浜у搧缂栧彿
-        /// </summary>
-        public string NO { get; set; }
-
-        /// <summary>
-        /// 浜у搧鍚嶇О
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 浜у搧鍥惧彿
-        /// </summary>
-        public string Code { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/05-PumpPartMain/UpdatePumpPartMainDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/05-PumpPartMain/UpdatePumpPartMainDto.cs
deleted file mode 100644
index 0eaf00d..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/05-PumpPartMain/UpdatePumpPartMainDto.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    public class UpdatePumpPartMainDto
-    {
-        /// <summary>
-        /// id
-        /// </summary>
-        [Required, Range(1, long.MaxValue, ErrorMessage = "ID 蹇呴』澶т簬0")]
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long SeriesID { get; set; }
-
-        /// <summary>
-        /// 浜у搧缂栧彿
-        /// </summary>
-        public string NO { get; set; }
-
-        /// <summary>
-        /// 浜у搧鍚嶇О
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 浜у搧鍥惧彿
-        /// </summary>
-        public string Code { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/06-PumpPropContent/AddPumpPropContentDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/06-PumpPropContent/AddPumpPropContentDto.cs
deleted file mode 100644
index 10706aa..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/06-PumpPropContent/AddPumpPropContentDto.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    public class AddPumpPropContentDto
-    {
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long SeriesID { get; set; }
-
-        /// <summary>
-        /// 娉靛瀷鍙稩D
-        /// </summary>
-        public long MainID { get; set; }
-
-        /// <summary>
-        /// 娉典骇鍝両D
-        /// </summary>
-        public long PartID { get; set; }
-
-        /// <summary>
-        /// 灞炴�D
-        /// </summary>
-        public long PropID { get; set; }
-
-        /// <summary>
-        /// 灞炴�у��
-        /// </summary>
-        public string PropValue { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/06-PumpPropContent/PumpPropContentDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/06-PumpPropContent/PumpPropContentDto.cs
deleted file mode 100644
index 2a0f8d6..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/06-PumpPropContent/PumpPropContentDto.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-锘縰sing Yw.Model;
-
-namespace HStation.Dto
-{
-    public class PumpPropContentDto
-    {
-        public PumpPropContentDto()
-        {
-        }
-
-        public PumpPropContentDto(Model.PumpPropContent rhs)
-        {
-            this.ID = rhs.ID;
-            this.SeriesID = rhs.SeriesID;
-            this.PropID = rhs.PropID;
-            this.PartID = rhs.PartID;
-            this.PropValue = rhs.PropValue;
-        }
-
-        /// <summary>
-        /// ID
-        /// </summary>
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long SeriesID { get; set; }
-
-        /// <summary>
-        /// 娉靛瀷鍙稩D
-        /// </summary>
-        public long MainID { get; set; }
-
-        /// <summary>
-        /// 娉典骇鍝両D
-        /// </summary>
-        public long PartID { get; set; }
-
-        /// <summary>
-        /// 灞炴�D
-        /// </summary>
-        public long PropID { get; set; }
-
-        /// <summary>
-        /// 灞炴�у��
-        /// </summary>
-        public string PropValue { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/06-PumpPropContent/UpdatePumpPropContentDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/06-PumpPropContent/UpdatePumpPropContentDto.cs
deleted file mode 100644
index 8d1dc2e..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/06-PumpPropContent/UpdatePumpPropContentDto.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    public class UpdatePumpPropContentDto
-    {
-        /// <summary>
-        /// id
-        /// </summary>
-        [Required, Range(1, long.MaxValue, ErrorMessage = "ID 蹇呴』澶т簬0")]
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long SeriesID { get; set; }
-
-        /// <summary>
-        /// 娉靛瀷鍙稩D
-        /// </summary>
-        public long MainID { get; set; }
-
-        /// <summary>
-        /// 娉典骇鍝両D
-        /// </summary>
-        public long PartID { get; set; }
-
-        /// <summary>
-        /// 灞炴�D
-        /// </summary>
-        public long PropID { get; set; }
-
-        /// <summary>
-        /// 灞炴�у��
-        /// </summary>
-        public string PropValue { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/07-PumpMainAndPartMap/AddPumpMainAndPartMapDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/07-PumpMainAndPartMap/AddPumpMainAndPartMapDto.cs
deleted file mode 100644
index 599d83b..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/07-PumpMainAndPartMap/AddPumpMainAndPartMapDto.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    public class AddPumpMainAndPartMapDto
-    {
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long SeriesID { get; set; }
-
-        /// <summary>
-        /// 娉靛瀷鍙稩D
-        /// </summary>
-        public long PumpID { get; set; }
-
-        /// <summary>
-        /// 娉典骇鍝両D
-        /// </summary>
-        public long PumpPartID { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/07-PumpMainAndPartMap/PumpMainAndPartMapDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/07-PumpMainAndPartMap/PumpMainAndPartMapDto.cs
deleted file mode 100644
index d557912..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/07-PumpMainAndPartMap/PumpMainAndPartMapDto.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-锘縰sing Yw.Model;
-
-namespace HStation.Dto
-{
-    public class PumpMainAndPartMapDto
-    {
-        public PumpMainAndPartMapDto()
-        {
-        }
-
-        public PumpMainAndPartMapDto(Model.PumpMainAndPartMap rhs)
-        {
-            this.PumpPartID = rhs.PumpPartID;
-            this.PumpID = rhs.PumpID;
-            this.ID = rhs.ID;
-        }
-
-        /// <summary>
-        /// ID
-        /// </summary>
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long SeriesID { get; set; }
-
-        /// <summary>
-        /// 娉靛瀷鍙稩D
-        /// </summary>
-        public long PumpID { get; set; }
-
-        /// <summary>
-        /// 娉典骇鍝両D
-        /// </summary>
-        public long PumpPartID { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/07-PumpMainAndPartMap/UpdatePumpMainAndPartMapDto.cs b/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/07-PumpMainAndPartMap/UpdatePumpMainAndPartMapDto.cs
deleted file mode 100644
index 677d403..0000000
--- a/Dto/HStation.Dto.Xhs.Core/02-PumpProduct/07-PumpMainAndPartMap/UpdatePumpMainAndPartMapDto.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-锘縩amespace HStation.Dto
-{
-    public class UpdatePumpMainAndPartMapDto
-    {
-        /// <summary>
-        /// id
-        /// </summary>
-        [Required, Range(1, long.MaxValue, ErrorMessage = "ID 蹇呴』澶т簬0")]
-        public long ID { get; set; }
-
-        /// <summary>
-        /// 娉电郴鍒桰D
-        /// </summary>
-        public long SeriesID { get; set; }
-
-        /// <summary>
-        /// 娉靛瀷鍙稩D
-        /// </summary>
-        public long PumpID { get; set; }
-
-        /// <summary>
-        /// 娉典骇鍝両D
-        /// </summary>
-        public long PumpPartID { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-project-site/AddXhsProjectSiteInput.cs b/Dto/HStation.Dto.Xhs.Core/02-project-site/AddXhsProjectSiteInput.cs
new file mode 100644
index 0000000..543f0d9
--- /dev/null
+++ b/Dto/HStation.Dto.Xhs.Core/02-project-site/AddXhsProjectSiteInput.cs
@@ -0,0 +1,34 @@
+锘縩amespace HStation.Dto
+{
+    public class AddXhsProjectSiteInput
+    {
+
+
+        /// <summary>
+        /// 椤圭洰id
+        /// </summary>
+        [Required, Range(1, long.MaxValue, ErrorMessage = "ProjectID 蹇呴』澶т簬0")]
+        public long ProjectID { get; set; }
+
+        /// <summary>
+        /// 鍚嶇О
+        /// </summary>
+        [Required]
+        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 string Description { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/02-project-site/UpdateXhsProjectSiteInput.cs b/Dto/HStation.Dto.Xhs.Core/02-project-site/UpdateXhsProjectSiteInput.cs
new file mode 100644
index 0000000..9de1180
--- /dev/null
+++ b/Dto/HStation.Dto.Xhs.Core/02-project-site/UpdateXhsProjectSiteInput.cs
@@ -0,0 +1,35 @@
+锘縩amespace HStation.Dto
+{
+    /// <summary>
+    ///
+    /// </summary>
+    public class UpdateXhsProjectSiteInput
+    {
+        /// <summary>
+        /// id
+        /// </summary>
+        [Required, Range(1, long.MaxValue, ErrorMessage = "ID 蹇呴』澶т簬0")]
+        public long ID { get; set; }
+
+        /// <summary>
+        /// 鍚嶇О
+        /// </summary>
+        [Required]
+        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 string Description { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/XhsProjectItemStdDto.cs b/Dto/HStation.Dto.Xhs.Core/02-project-site/XhsProjectSiteDto.cs
similarity index 78%
rename from Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/XhsProjectItemStdDto.cs
rename to Dto/HStation.Dto.Xhs.Core/02-project-site/XhsProjectSiteDto.cs
index 256db50..433ed84 100644
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/XhsProjectItemStdDto.cs
+++ b/Dto/HStation.Dto.Xhs.Core/02-project-site/XhsProjectSiteDto.cs
@@ -1,26 +1,27 @@
-锘縩amespace HStation.Dto
+锘縰sing Yw.Model;
+
+namespace HStation.Dto
 {
     /// <summary>
     ///
     /// </summary>
-    public class XhsProjectItemStdDto
+    public class XhsProjectSiteDto
     {
         /// <summary>
         ///
         /// </summary>
-        public XhsProjectItemStdDto()
-        { }
+        public XhsProjectSiteDto() { }
 
         /// <summary>
         ///
         /// </summary>
-        public XhsProjectItemStdDto(Model.XhsProject rhs)
+        public XhsProjectSiteDto(Model.XhsProjectSite rhs)
         {
             this.ID = rhs.ID;
+            this.ProjectID = rhs.ProjectID;
             this.Name = rhs.Name;
             this.Paras = rhs.Paras;
             this.Flags = rhs.Flags;
-            this.TagName = rhs.TagName;
             this.UseStatus = rhs.UseStatus;
             this.SortCode = rhs.SortCode;
             this.Description = rhs.Description;
@@ -30,6 +31,11 @@
         /// id
         /// </summary>
         public long ID { get; set; }
+
+        /// <summary>
+        /// 椤圭洰id
+        /// </summary>
+        public long ProjectID { get; set; }
 
         /// <summary>
         /// 鍚嶇О
@@ -47,14 +53,9 @@
         public List<string> Flags { get; set; }
 
         /// <summary>
-        /// 鏍囧織
-        /// </summary>
-        public string TagName { get; set; }
-
-        /// <summary>
         /// 浣跨敤鐘舵��
         /// </summary>
-        public Yw.Model.eUseStatus UseStatus { get; set; }
+        public eUseStatus UseStatus { get; set; }
 
         /// <summary>
         /// 鎺掑簭鐮�
diff --git a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/XhsProjectItemStdDto.cs b/Dto/HStation.Dto.Xhs.Core/02-project-site/XhsProjectSiteStdDto.cs
similarity index 77%
copy from Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/XhsProjectItemStdDto.cs
copy to Dto/HStation.Dto.Xhs.Core/02-project-site/XhsProjectSiteStdDto.cs
index 256db50..f8cc7dc 100644
--- a/Dto/HStation.Dto.Xhs.Core/01-PumpProject/02-ProjectItem/XhsProjectItemStdDto.cs
+++ b/Dto/HStation.Dto.Xhs.Core/02-project-site/XhsProjectSiteStdDto.cs
@@ -1,26 +1,27 @@
-锘縩amespace HStation.Dto
+锘縰sing Yw.Model;
+
+namespace HStation.Dto
 {
     /// <summary>
     ///
     /// </summary>
-    public class XhsProjectItemStdDto
+    public class XhsProjectSiteStdDto
     {
         /// <summary>
         ///
         /// </summary>
-        public XhsProjectItemStdDto()
-        { }
+        public XhsProjectSiteStdDto() { }
 
         /// <summary>
         ///
         /// </summary>
-        public XhsProjectItemStdDto(Model.XhsProject rhs)
+        public XhsProjectSiteStdDto(Model.XhsProjectSite rhs)
         {
             this.ID = rhs.ID;
+            this.ProjectID = rhs.ProjectID;
             this.Name = rhs.Name;
             this.Paras = rhs.Paras;
             this.Flags = rhs.Flags;
-            this.TagName = rhs.TagName;
             this.UseStatus = rhs.UseStatus;
             this.SortCode = rhs.SortCode;
             this.Description = rhs.Description;
@@ -30,6 +31,11 @@
         /// id
         /// </summary>
         public long ID { get; set; }
+
+        /// <summary>
+        /// 椤圭洰id
+        /// </summary>
+        public long ProjectID { get; set; }
 
         /// <summary>
         /// 鍚嶇О
@@ -47,14 +53,9 @@
         public List<string> Flags { get; set; }
 
         /// <summary>
-        /// 鏍囧織
-        /// </summary>
-        public string TagName { get; set; }
-
-        /// <summary>
         /// 浣跨敤鐘舵��
         /// </summary>
-        public Yw.Model.eUseStatus UseStatus { get; set; }
+        public eUseStatus UseStatus { get; set; }
 
         /// <summary>
         /// 鎺掑簭鐮�
diff --git a/Dto/HStation.Dto.Xhs.Core/GlobalUsings.cs b/Dto/HStation.Dto.Xhs.Core/GlobalUsings.cs
index 840e845..75d7688 100644
--- a/Dto/HStation.Dto.Xhs.Core/GlobalUsings.cs
+++ b/Dto/HStation.Dto.Xhs.Core/GlobalUsings.cs
@@ -1,3 +1,6 @@
 锘縢lobal using System.ComponentModel.DataAnnotations;
 global using System.Text;
 global using HStation;
+global using HStation.Xhs;
+global using HStation.Service;
+global using HStation.Service.Xhs;
diff --git a/Dto/Hstation.Dto.Core/Hstation.Dto.Core.csproj b/Dto/Hstation.Dto.Core/Hstation.Dto.Core.csproj
index 02053a0..f770687 100644
--- a/Dto/Hstation.Dto.Core/Hstation.Dto.Core.csproj
+++ b/Dto/Hstation.Dto.Core/Hstation.Dto.Core.csproj
@@ -10,9 +10,4 @@
     <PackageReference Include="Yw.Dto.Core" Version="3.1.0" />
   </ItemGroup>
 
-  <ItemGroup>
-    <ProjectReference Include="..\..\Model\HStation.Model.Xhs.Project\HStation.Model.Xhs.Project.csproj" />
-    <ProjectReference Include="..\..\Model\HStation.Model.Xhs.PumpProduct\HStation.Model.Xhs.PumpProduct.csproj" />
-  </ItemGroup>
-
 </Project>
diff --git a/HStation.Xhs.Core.sln b/HStation.Xhs.Core.sln
index e749d5c..cab89f5 100644
--- a/HStation.Xhs.Core.sln
+++ b/HStation.Xhs.Core.sln
@@ -55,6 +55,14 @@
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HStation.Dto.Core", "Dto\HStation.Dto.Core\HStation.Dto.Core.csproj", "{4BCDC547-079A-4CB6-824B-800B111380AD}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HStation.BLL.Core", "BLL\HStation.BLL.Core\HStation.BLL.Core.csproj", "{5D082C0C-FD9B-4BEE-B57F-6C3D1B9F0BB3}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Application", "Application", "{276C57AF-5A9C-4A50-A79E-A5098D322FE9}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HStation.Application.Xhs.Core", "Application\HStation.Application.Xhs.Core\HStation.Application.Xhs.Core.csproj", "{784A568F-A01F-45FC-AACB-B80F87EA3ABA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HStation.Application.Core", "Application\HStation.Application.Core\HStation.Application.Core.csproj", "{4724474E-66CD-4237-B3A0-085125AD2D8F}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -133,6 +141,18 @@
 		{4BCDC547-079A-4CB6-824B-800B111380AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{4BCDC547-079A-4CB6-824B-800B111380AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{4BCDC547-079A-4CB6-824B-800B111380AD}.Release|Any CPU.Build.0 = Release|Any CPU
+		{5D082C0C-FD9B-4BEE-B57F-6C3D1B9F0BB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{5D082C0C-FD9B-4BEE-B57F-6C3D1B9F0BB3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5D082C0C-FD9B-4BEE-B57F-6C3D1B9F0BB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{5D082C0C-FD9B-4BEE-B57F-6C3D1B9F0BB3}.Release|Any CPU.Build.0 = Release|Any CPU
+		{784A568F-A01F-45FC-AACB-B80F87EA3ABA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{784A568F-A01F-45FC-AACB-B80F87EA3ABA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{784A568F-A01F-45FC-AACB-B80F87EA3ABA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{784A568F-A01F-45FC-AACB-B80F87EA3ABA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4724474E-66CD-4237-B3A0-085125AD2D8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4724474E-66CD-4237-B3A0-085125AD2D8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4724474E-66CD-4237-B3A0-085125AD2D8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4724474E-66CD-4237-B3A0-085125AD2D8F}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -156,6 +176,9 @@
 		{7A40BC5F-BD1B-40EE-A8C1-232BF7C14F3C} = {9F4F9ECE-9C4C-4796-91A1-69805F823EA5}
 		{CB331919-7FFB-4D38-B9E0-D47E412A3904} = {9F4F9ECE-9C4C-4796-91A1-69805F823EA5}
 		{4BCDC547-079A-4CB6-824B-800B111380AD} = {929B3BD5-B817-4EAF-ADA4-3DFBD1580DA6}
+		{5D082C0C-FD9B-4BEE-B57F-6C3D1B9F0BB3} = {4D3764D7-19DE-4C77-8F75-0EFB19D64B3F}
+		{784A568F-A01F-45FC-AACB-B80F87EA3ABA} = {276C57AF-5A9C-4A50-A79E-A5098D322FE9}
+		{4724474E-66CD-4237-B3A0-085125AD2D8F} = {276C57AF-5A9C-4A50-A79E-A5098D322FE9}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {E02989A8-9B6F-43E5-AACA-790328215089}
diff --git a/Service/HStation.Service.Xhs.Core/04-dal/01-interface/IXhsProject.cs b/Service/HStation.Service.Xhs.Core/04-dal/01-interface/IXhsProject.cs
index 05bc141..be46394 100644
--- a/Service/HStation.Service.Xhs.Core/04-dal/01-interface/IXhsProject.cs
+++ b/Service/HStation.Service.Xhs.Core/04-dal/01-interface/IXhsProject.cs
@@ -10,12 +10,12 @@
         /// <summary>
         /// 鎻掑叆鎷撳睍
         /// </summary>
-        long InsertEx(Entity.XhsProject project, Entity.XhsProjectSite site);
+        long InsertEx(Entity.XhsProject entityProject, List<Entity.XhsProjectSite> entityProjectSiteList);
 
         /// <summary>
         /// 缂栬緫鎷撳睍
         /// </summary>
-        bool UpdateEx(Entity.XhsProject project, Entity.XhsProjectSite site);
+        bool UpdateEx(Entity.XhsProject entityProject, List<Entity.XhsProjectSite> entityProjectSiteList);
 
         /// <summary>
         /// 鏇存柊寮�濮嬫椂闂�
diff --git a/Service/HStation.Service.Xhs.Core/04-dal/02-postgresql/XhsProject.cs b/Service/HStation.Service.Xhs.Core/04-dal/02-postgresql/XhsProject.cs
index ec763f5..55df7b7 100644
--- a/Service/HStation.Service.Xhs.Core/04-dal/02-postgresql/XhsProject.cs
+++ b/Service/HStation.Service.Xhs.Core/04-dal/02-postgresql/XhsProject.cs
@@ -18,9 +18,9 @@
         /// <summary>
         /// 鎻掑叆鎷撳睍
         /// </summary>
-        public long InsertEx(Entity.XhsProject project, Entity.XhsProjectSite site)
+        public long InsertEx(Entity.XhsProject entityProject, List<Entity.XhsProjectSite> entityProjectSiteList)
         {
-            if (project == null)
+            if (entityProject == null)
             {
                 return default;
             }
@@ -29,10 +29,10 @@
                 try
                 {
                     db.BeginTran();
-                    if (project.ID < 1)
+                    if (entityProject.ID < 1)
                     {
-                        project.ID = db.Insertable(project).ExecuteReturnSnowflakeId();
-                        if (project.ID < 1)
+                        entityProject.ID = db.Insertable(entityProject).ExecuteReturnSnowflakeId();
+                        if (entityProject.ID < 1)
                         {
                             db.RollbackTran();
                             return default;
@@ -40,7 +40,7 @@
                     }
                     else
                     {
-                        var bol = db.Insertable(project).ExecuteCommand() > 0;
+                        var bol = db.Insertable(entityProject).ExecuteCommand() > 0;
                         if (!bol)
                         {
                             db.RollbackTran();
@@ -48,30 +48,33 @@
                         }
                     }
 
-                    if (site != null)
+                    if (entityProjectSiteList != null && entityProjectSiteList.Count > 0)
                     {
-                        site.ProjectID = project.ID;
-                        if (site.ID < 1)
+                        foreach (var entityProjectSite in entityProjectSiteList)
                         {
-                            site.ID = db.Insertable(site).ExecuteReturnSnowflakeId();
-                            if (site.ID < 1)
+                            entityProjectSite.ProjectID = entityProject.ID;
+                            if (entityProjectSite.ID < 1)
                             {
-                                db.RollbackTran();
-                                return default;
+                                entityProjectSite.ID = db.Insertable(entityProjectSite).ExecuteReturnSnowflakeId();
+                                if (entityProjectSite.ID < 1)
+                                {
+                                    db.RollbackTran();
+                                    return default;
+                                }
                             }
-                        }
-                        else
-                        {
-                            var bol = db.Insertable(site).ExecuteCommand() >= 0;
-                            if (!bol)
+                            else
                             {
-                                db.RollbackTran();
-                                return default;
+                                var bol = db.Insertable(entityProjectSite).ExecuteCommand() >= 0;
+                                if (!bol)
+                                {
+                                    db.RollbackTran();
+                                    return default;
+                                }
                             }
                         }
                     }
 
-                    return project.ID;
+                    return entityProject.ID;
                 }
                 catch
                 {
@@ -84,13 +87,13 @@
         /// <summary>
         /// 缂栬緫鎷撳睍
         /// </summary>
-        public bool UpdateEx(Entity.XhsProject project, Entity.XhsProjectSite site)
+        public bool UpdateEx(Entity.XhsProject entityProject, List<Entity.XhsProjectSite> entityProjectSiteList)
         {
-            if (project == null)
+            if (entityProject == null)
             {
                 return false;
             }
-            if (project.ID < 1)
+            if (entityProject.ID < 1)
             {
                 return false;
             }
@@ -99,25 +102,28 @@
                 try
                 {
                     db.BeginTran();
-                    var bol = db.Updateable(project).ExecuteCommandHasChange();
+                    var bol = db.Updateable(entityProject).ExecuteCommandHasChange();
                     if (!bol)
                     {
                         db.RollbackTran();
                         return false;
                     }
-                    if (site != null)
+                    if (entityProjectSiteList != null && entityProjectSiteList.Count > 0)
                     {
-                        site.ProjectID = project.ID;
-                        if (site.ID < 1)
+                        foreach (var entityProjectSite in entityProjectSiteList)
                         {
-                            db.RollbackTran();
-                            return false;
-                        }
-                        bol = db.Updateable(site).ExecuteCommandHasChange();
-                        if (!bol)
-                        {
-                            db.RollbackTran();
-                            return false;
+                            entityProjectSite.ProjectID = entityProject.ID;
+                            if (entityProjectSite.ID < 1)
+                            {
+                                db.RollbackTran();
+                                return false;
+                            }
+                            bol = db.Updateable(entityProjectSite).ExecuteCommandHasChange();
+                            if (!bol)
+                            {
+                                db.RollbackTran();
+                                return false;
+                            }
                         }
                     }
                     return true;
diff --git a/Service/HStation.Service.Xhs.Core/04-dal/03-sqlite/XhsProject.cs b/Service/HStation.Service.Xhs.Core/04-dal/03-sqlite/XhsProject.cs
index 1177482..cd6a6c5 100644
--- a/Service/HStation.Service.Xhs.Core/04-dal/03-sqlite/XhsProject.cs
+++ b/Service/HStation.Service.Xhs.Core/04-dal/03-sqlite/XhsProject.cs
@@ -18,9 +18,9 @@
         /// <summary>
         /// 鎻掑叆鎷撳睍
         /// </summary>
-        public long InsertEx(Entity.XhsProject project, Entity.XhsProjectSite site)
+        public long InsertEx(Entity.XhsProject entityProject, List<Entity.XhsProjectSite> entityProjectSiteList)
         {
-            if (project == null)
+            if (entityProject == null)
             {
                 return default;
             }
@@ -29,10 +29,10 @@
                 try
                 {
                     db.BeginTran();
-                    if (project.ID < 1)
+                    if (entityProject.ID < 1)
                     {
-                        project.ID = db.Insertable(project).ExecuteReturnSnowflakeId();
-                        if (project.ID < 1)
+                        entityProject.ID = db.Insertable(entityProject).ExecuteReturnSnowflakeId();
+                        if (entityProject.ID < 1)
                         {
                             db.RollbackTran();
                             return default;
@@ -40,7 +40,7 @@
                     }
                     else
                     {
-                        var bol = db.Insertable(project).ExecuteCommand() > 0;
+                        var bol = db.Insertable(entityProject).ExecuteCommand() > 0;
                         if (!bol)
                         {
                             db.RollbackTran();
@@ -48,30 +48,33 @@
                         }
                     }
 
-                    if (site != null)
+                    if (entityProjectSiteList != null && entityProjectSiteList.Count > 0)
                     {
-                        site.ProjectID = project.ID;
-                        if (site.ID < 1)
+                        foreach (var entityProjectSite in entityProjectSiteList)
                         {
-                            site.ID = db.Insertable(site).ExecuteReturnSnowflakeId();
-                            if (site.ID < 1)
+                            entityProjectSite.ProjectID = entityProject.ID;
+                            if (entityProjectSite.ID < 1)
                             {
-                                db.RollbackTran();
-                                return default;
+                                entityProjectSite.ID = db.Insertable(entityProjectSite).ExecuteReturnSnowflakeId();
+                                if (entityProjectSite.ID < 1)
+                                {
+                                    db.RollbackTran();
+                                    return default;
+                                }
                             }
-                        }
-                        else
-                        {
-                            var bol = db.Insertable(site).ExecuteCommand() >= 0;
-                            if (!bol)
+                            else
                             {
-                                db.RollbackTran();
-                                return default;
+                                var bol = db.Insertable(entityProjectSite).ExecuteCommand() >= 0;
+                                if (!bol)
+                                {
+                                    db.RollbackTran();
+                                    return default;
+                                }
                             }
                         }
                     }
 
-                    return project.ID;
+                    return entityProject.ID;
                 }
                 catch
                 {
@@ -84,13 +87,13 @@
         /// <summary>
         /// 缂栬緫鎷撳睍
         /// </summary>
-        public bool UpdateEx(Entity.XhsProject project, Entity.XhsProjectSite site)
+        public bool UpdateEx(Entity.XhsProject entityProject, List<Entity.XhsProjectSite> entityProjectSiteList)
         {
-            if (project == null)
+            if (entityProject == null)
             {
                 return false;
             }
-            if (project.ID < 1)
+            if (entityProject.ID < 1)
             {
                 return false;
             }
@@ -99,25 +102,28 @@
                 try
                 {
                     db.BeginTran();
-                    var bol = db.Updateable(project).ExecuteCommandHasChange();
+                    var bol = db.Updateable(entityProject).ExecuteCommandHasChange();
                     if (!bol)
                     {
                         db.RollbackTran();
                         return false;
                     }
-                    if (site != null)
+                    if (entityProjectSiteList != null && entityProjectSiteList.Count > 0)
                     {
-                        site.ProjectID = project.ID;
-                        if (site.ID < 1)
+                        foreach (var entityProjectSite in entityProjectSiteList)
                         {
-                            db.RollbackTran();
-                            return false;
-                        }
-                        bol = db.Updateable(site).ExecuteCommandHasChange();
-                        if (!bol)
-                        {
-                            db.RollbackTran();
-                            return false;
+                            entityProjectSite.ProjectID = entityProject.ID;
+                            if (entityProjectSite.ID < 1)
+                            {
+                                db.RollbackTran();
+                                return false;
+                            }
+                            bol = db.Updateable(entityProjectSite).ExecuteCommandHasChange();
+                            if (!bol)
+                            {
+                                db.RollbackTran();
+                                return false;
+                            }
                         }
                     }
                     return true;
diff --git a/Service/HStation.Service.Xhs.Core/05-service/01-project/XhsProject.cs b/Service/HStation.Service.Xhs.Core/05-service/01-project/XhsProject.cs
index d5a5fcb..f7fcab2 100644
--- a/Service/HStation.Service.Xhs.Core/05-service/01-project/XhsProject.cs
+++ b/Service/HStation.Service.Xhs.Core/05-service/01-project/XhsProject.cs
@@ -270,7 +270,7 @@
         /// <summary>
         /// 鎻掑叆鎷撳睍
         /// </summary>
-        public long InsertEx(Model.XhsProject project, Model.XhsProjectSite site)
+        public long InsertEx(Model.XhsProject project, List<Model.XhsProjectSite> siteList)
         {
             if (project == null)
             {
@@ -282,9 +282,9 @@
             }
             var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
             var entityProject = Model2Entity(project);
-            var entitySite = XhsProjectSite.Model2Entity(site);
+            var entitySiteList = XhsProjectSite.Model2Entities(siteList);
 
-            var id = dal.InsertEx(entityProject, entitySite);
+            var id = dal.InsertEx(entityProject, entitySiteList);
             if (id > 0)
             {
                 UpdateCache(id);
@@ -342,7 +342,7 @@
         /// <summary>
         /// 鏇存柊鎷撳睍
         /// </summary>
-        public bool UpdateEx(Model.XhsProject project, Model.XhsProjectSite site)
+        public bool UpdateEx(Model.XhsProject project, List<Model.XhsProjectSite> siteList)
         {
             if (project == null)
             {
@@ -354,15 +354,12 @@
             }
             var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
             var entityProject = Model2Entity(project);
-            var entitySite = XhsProjectSite.Model2Entity(site);
-            var bol = dal.UpdateEx(entityProject, entitySite);
+            var entitySiteList = XhsProjectSite.Model2Entities(siteList);
+            var bol = dal.UpdateEx(entityProject, entitySiteList);
             if (bol)
             {
                 UpdateCache(project.ID);
-                if (site != null && site.ID > 0)
-                {
-                    XhsProjectSite.UpdateCacheByProjectID(project.ID);
-                }
+                XhsProjectSite.UpdateCacheByProjectID(project.ID);
             }
             return bol;
         }
@@ -537,6 +534,8 @@
             return bol;
         }
 
+
+
         #endregion 
 
         #region Exist
@@ -611,6 +610,127 @@
             return bol;
         }
 
-        #endregion 
+        #endregion
+
+        #region Other
+
+        /// <summary>
+        /// 鍙戝竷
+        /// </summary>
+        public bool Publish(long ID, out string Msg)
+        {
+            Msg = string.Empty;
+
+            var model = GetByID(ID);
+            if (model == null)
+            {
+                Msg = "椤圭洰涓嶅瓨鍦�";
+                return false;
+            }
+
+            var status = model.GetPublishStatus();
+            switch (status)
+            {
+                case ePublishStatus.UnDesigned:
+                    {
+                        Msg = "椤圭洰鏈璁�";
+                    }
+                    break;
+                case ePublishStatus.UnPublished:
+                    {
+
+                    }
+                    break;
+                case ePublishStatus.Published:
+                    {
+                        Msg = "椤圭洰宸插彂甯�";
+                    }
+                    break;
+                case ePublishStatus.Deprecated:
+                    {
+                        Msg = "椤圭洰宸插純鐢�";
+                    }
+                    break;
+                default: break;
+            }
+
+            if (status != ePublishStatus.UnPublished)
+            {
+                return false;
+            }
+
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var bol = dal.UpdateStartTime(ID, DateTime.Now);
+            if (bol)
+            {
+                UpdateCache(ID);
+            }
+            else
+            {
+                Msg = "鍙戝竷澶辫触";
+            }
+            return bol;
+        }
+
+
+        /// <summary>
+        /// 寮冪敤
+        /// </summary>
+        public bool Deprecate(long ID, out string Msg)
+        {
+            Msg = string.Empty;
+            var model = GetByID(ID);
+            if (model == null)
+            {
+                Msg = "椤圭洰涓嶅瓨鍦�";
+                return false;
+            }
+            var status = model.GetPublishStatus();
+            switch (status)
+            {
+                case ePublishStatus.UnDesigned:
+                    {
+                        Msg = "椤圭洰鏈璁�";
+                    }
+                    break;
+                case ePublishStatus.UnPublished:
+                    {
+                        Msg = "椤圭洰鏈彂甯�";
+                    }
+                    break;
+                case ePublishStatus.Published:
+                    {
+
+                    }
+                    break;
+                case ePublishStatus.Deprecated:
+                    {
+                        Msg = "椤圭洰宸插純鐢�";
+                    }
+                    break;
+                default: break;
+            }
+
+            if (status != ePublishStatus.Published)
+            {
+                return false;
+            }
+
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var bol = dal.UpdateEndTime(ID, DateTime.Now);
+            if (bol)
+            {
+                UpdateCache(ID);
+            }
+            else
+            {
+                Msg = "寮冪敤澶辫触";
+            }
+            return bol;
+        }
+
+
+
+        #endregion
     }
 }
\ No newline at end of file
diff --git a/Service/HStation.Service.Xhs.Core/05-service/02-project-site/XhsProjectSite.cs b/Service/HStation.Service.Xhs.Core/05-service/02-project-site/XhsProjectSite.cs
index 3236dbd..74e604a 100644
--- a/Service/HStation.Service.Xhs.Core/05-service/02-project-site/XhsProjectSite.cs
+++ b/Service/HStation.Service.Xhs.Core/05-service/02-project-site/XhsProjectSite.cs
@@ -147,6 +147,19 @@
         }
 
         /// <summary>
+        /// 閫氳繃 ProjectIds 鑾峰彇
+        /// </summary>
+        public List<Model.XhsProjectSite> GetByProjectIds(List<long> ProjectIds)
+        {
+            if (ProjectIds == null || ProjectIds.Count < 1)
+            {
+                return default;
+            }
+            var all = GetAll();
+            return all.Where(x => ProjectIds.Contains(x.ProjectID)).OrderBy(x => x.SortCode).ToList();
+        }
+
+        /// <summary>
         /// 鑾峰彇鏈�澶ф帓搴忕爜
         /// </summary>
         public int GetMaxSortCode(long ProjectID)

--
Gitblit v1.9.3