From ba4fd2f2456a3cee97cc90204c9e21505a42b2aa Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期五, 25 十月 2024 14:40:09 +0800
Subject: [PATCH] 优化Revit解析

---
 Service/HStation.Service.Xhs.Core/05-service/01-project/XhsProject.cs |  580 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 580 insertions(+), 0 deletions(-)

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
new file mode 100644
index 0000000..cc9042b
--- /dev/null
+++ b/Service/HStation.Service.Xhs.Core/05-service/01-project/XhsProject.cs
@@ -0,0 +1,580 @@
+锘縩amespace HStation.Service
+{
+    /// <summary>
+    ///
+    /// </summary>
+    public partial class XhsProject
+    {
+        #region Cache
+
+        //鑾峰彇缂撳瓨
+        private static List<Model.XhsProject> GetCache()
+        {
+            var all = XhsProjectCacheHelper.GetSet(() =>
+            {
+                var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+                var entity_list = dal.GetAll();
+                var model_list = Entity2Models(entity_list);
+                if (model_list == null)
+                {
+                    model_list = new List<Model.XhsProject>();
+                }
+                return model_list;
+            }, Yw.Service.ConfigHelper.CacheKeepTime, Yw.Service.ConfigHelper.CacheRandomTime);
+            return all;
+        }
+
+        //閫氳繃 ID 鏇存柊缂撳瓨
+        private static void UpdateCache(long ID)
+        {
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var entity_ds = dal.GetByID(ID);
+            var model_ds = Entity2Model(entity_ds);
+            var all = GetCache();
+            var model = all.Find(x => x.ID == ID);
+            if (model == null)
+            {
+                all.Add(model_ds);
+            }
+            else
+            {
+                model.Reset(model_ds);
+            }
+            XhsProjectCacheHelper.Trigger();
+        }
+
+        //閫氳繃 Ids 鏇存柊缂撳瓨
+        private static void UpdateCache(List<long> Ids)
+        {
+            if (Ids == null || Ids.Count < 1)
+            {
+                return;
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var entity_list = dal.GetByIds(Ids);
+            var model_list = Entity2Models(entity_list);
+            var all = GetCache();
+            all.RemoveAll(x => Ids.Contains(x.ID));
+            if (model_list != null && model_list.Count > 0)
+            {
+                all.AddRange(model_list);
+            }
+            XhsProjectCacheHelper.Trigger();
+        }
+
+        //绉婚櫎缂撳瓨
+        private static void RemoveCache(long ID)
+        {
+            var all = GetCache();
+            all.RemoveAll(x => x.ID == ID);
+            XhsProjectCacheHelper.Trigger();
+        }
+
+        /// <summary>
+        /// 鍙戝竷缂撳瓨
+        /// </summary>
+        public static void PublishCache(string key)
+        {
+            XhsProjectCacheHelper.Publish(key);
+        }
+
+        #endregion 
+
+        #region Query
+
+        /// <summary>
+        /// 鑾峰彇鎵�鏈�
+        /// </summary>
+        public List<Model.XhsProject> GetAll()
+        {
+            var all = GetCache();
+            return all.OrderBy(x => x.ParentIds.Count).ThenBy(x => x.SortCode).ToList();
+        }
+
+        /// <summary>
+        /// 閫氳繃 ID 鑾峰彇
+        /// </summary>
+        public Model.XhsProject GetByID(long ID)
+        {
+            var all = GetAll();
+            return all.Find(x => x.ID == ID);
+        }
+
+        /// <summary>
+        /// 閫氳繃 ID 鑾峰彇
+        /// </summary>
+        public List<Model.XhsProject> GetByIds(List<long> Ids)
+        {
+            if (Ids == null || Ids.Count < 1)
+            {
+                return default;
+            }
+            var all = GetAll();
+            return all.Where(x => Ids.Contains(x.ID)).OrderBy(x => x.ParentIds.Count).ThenBy(x => x.SortCode).ToList();
+        }
+
+        /// <summary>
+        /// 閫氳繃 ID 鑾峰彇瀛愮骇鍙婅嚜韬�
+        /// </summary>
+        public List<Model.XhsProject> GetChildAndSelfByID(long ID)
+        {
+            var all = GetAll();
+            var list = all.Where(x => x.ID == ID || x.ParentIds.Contains(ID)).OrderBy(x => x.ParentIds.Count).ThenBy(x => x.SortCode).ToList();
+            return list;
+        }
+
+        /// <summary>
+        /// 閫氳繃 ID 鑾峰彇瀛愮骇
+        /// </summary>
+        public List<Model.XhsProject> GetChildrenByID(long ID)
+        {
+            var all = GetAll();
+            var list = all.Where(x => x.ParentIds.Contains(ID)).OrderBy(x => x.ParentIds.Count).ThenBy(x => x.SortCode).ToList();
+            return list;
+        }
+
+        /// <summary>
+        /// 閫氳繃 ID 鑾峰彇鐖剁骇
+        /// </summary>
+        public List<Model.XhsProject> GetParentByID(long ID)
+        {
+            var all = GetAll();
+            var model = all.Find(x => x.ID == ID);
+            if (model == null)
+            {
+                return default;
+            }
+            return all.Where(x => model.ParentIds.Contains(x.ID)).OrderBy(x => x.ParentIds.Count).ThenBy(x => x.SortCode).ToList();
+        }
+
+        /// <summary>
+        /// 閫氳繃 ID 鑾峰彇鐖剁骇鍙婅嚜韬�
+        /// </summary>
+        public List<Model.XhsProject> GetParentAndSelfByID(long ID)
+        {
+            var all = GetAll();
+            var model = all.Find(x => x.ID == ID);
+            if (model == null)
+            {
+                return default;
+            }
+            return all.Where(x => model.ParentIds.Contains(x.ID) || x.ID == ID).OrderBy(x => x.ParentIds.Count).ThenBy(x => x.SortCode).ToList();
+        }
+
+        /// <summary>
+        /// 閫氳繃 ParentID 鑾峰彇
+        /// </summary>
+        public List<Model.XhsProject> GetByParentID(long ParentID)
+        {
+            var all = GetAll();
+            return all.Where(x => x.ParentIds.LastOrDefault() == ParentID).OrderBy(x => x.SortCode).ToList();
+        }
+
+        /// <summary>
+        /// 鏄惁鍖呭惈瀛愰」
+        /// </summary>
+        public bool HasChildren(long ID)
+        {
+            var all = GetAll();
+            return all.Exists(x => x.ParentIds.Contains(ID));
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈�澶ф帓搴忕爜
+        /// </summary>
+        public int GetMaxSortCode(long ParentID)
+        {
+            List<Model.XhsProject> list = null;
+            if (ParentID < 1)
+            {
+                list = GetAll();
+                list = list?.Where(x => x.ParentIds.Count < 1).ToList();
+            }
+            else
+            {
+                list = GetByParentID(ParentID);
+            }
+            if (list == null || list.Count < 1)
+            {
+                return 0;
+            }
+            return list.Max(x => x.SortCode);
+        }
+
+        /// <summary>
+        /// 鍒涘缓缂栧彿
+        /// </summary>
+        public string CreateNO()
+        {
+            var all = GetAll();
+            var allNoList = all.Select(x => x.NO).Distinct().ToList();
+            var prefix = $"PRJ-{DateTime.Now:yyyy-MM-dd}";
+            var no = new Yw.Untity.UniqueNameCreater().Create(prefix, allNoList, "-");
+            return no;
+        }
+
+        #endregion 
+
+        #region Insert
+
+        /// <summary>
+        /// 鎻掑叆涓�鏉℃暟鎹�
+        /// </summary>
+        public long Insert(Model.XhsProject model)
+        {
+            if (model == null)
+            {
+                return default;
+            }
+            if (string.IsNullOrEmpty(model.NO))
+            {
+                model.NO = CreateNO();
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var entity = Model2Entity(model);
+            var id = dal.Insert(entity);
+            if (id > 0)
+            {
+                UpdateCache(id);
+            }
+            return id;
+        }
+
+        /// <summary>
+        /// 鎻掑叆澶氭潯
+        /// </summary>
+        public bool Inserts(List<Model.XhsProject> list)
+        {
+            if (list == null || list.Count < 1)
+            {
+                return false;
+            }
+            list.ForEach(x =>
+            {
+                if (string.IsNullOrEmpty(x.NO))
+                {
+                    x.NO = CreateNO();
+                }
+            });
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var entity_list = Model2Entities(list);
+            var ids = dal.InsertsR(entity_list);
+            if (ids != null && ids.Count > 0)
+            {
+                UpdateCache(ids);
+                return true;
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 鎻掑叆鎷撳睍
+        /// </summary>
+        public long InsertEx(Model.XhsProject project, List<Model.XhsProjectSite> siteList)
+        {
+            if (project == null)
+            {
+                return default;
+            }
+            if (string.IsNullOrEmpty(project.NO))
+            {
+                project.NO = CreateNO();
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var entityProject = Model2Entity(project);
+            var entitySiteList = XhsProjectSite.Model2Entities(siteList);
+
+            var id = dal.InsertEx(entityProject, entitySiteList);
+            if (id > 0)
+            {
+                UpdateCache(id);
+                XhsProjectSite.UpdateCacheByProjectID(id);
+            }
+            return id;
+        }
+
+        #endregion 
+
+        #region Update
+
+        /// <summary>
+        /// 鏇存柊涓�鏉�
+        /// </summary>
+        public bool Update(Model.XhsProject model)
+        {
+            if (model == null)
+            {
+                return false;
+            }
+            var entity = Model2Entity(model);
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var bol = dal.Update(entity);
+            if (bol)
+            {
+                UpdateCache(model.ID);
+            }
+            return bol;
+        }
+
+        /// <summary>
+        /// 鎵归噺鏇存柊
+        /// </summary>
+        public bool Updates(List<Model.XhsProject> list)
+        {
+            if (list == null || list.Count < 1)
+            {
+                return false;
+            }
+            if (list.Exists(x => x.ID < 1))
+            {
+                return false;
+            }
+            var entity_list = Model2Entities(list);
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var bol = dal.Updates(entity_list);
+            if (bol)
+            {
+                UpdateCache(list.Select(x => x.ID).ToList());
+            }
+            return bol;
+        }
+
+        /// <summary>
+        /// 鏇存柊鎷撳睍
+        /// </summary>
+        public bool UpdateEx(Model.XhsProject project, List<Model.XhsProjectSite> siteList)
+        {
+            if (project == null)
+            {
+                return false;
+            }
+            if (project.ID < 1)
+            {
+                return false;
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var entityProject = Model2Entity(project);
+            var entitySiteList = XhsProjectSite.Model2Entities(siteList);
+            var bol = dal.UpdateEx(entityProject, entitySiteList);
+            if (bol)
+            {
+                UpdateCache(project.ID);
+                XhsProjectSite.UpdateCacheByProjectID(project.ID);
+            }
+            return bol;
+        }
+
+        /// <summary>
+        /// 鏇存柊鎺掑簭鐮�
+        /// </summary>
+        public bool UpdateSortCode(long ID, int SortCode)
+        {
+            if (ID < 1)
+            {
+                return false;
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var bol = dal.UpdateSortCode(ID, SortCode);
+            if (bol)
+            {
+                UpdateCache(ID);
+            }
+            return bol;
+        }
+
+        /// <summary>
+        /// 鏇存柊鎺掑簭
+        /// </summary>
+        public bool UpdateSorter(List<Yw.Model.Sorter> sorters)
+        {
+            if (sorters == null || sorters.Count < 1)
+            {
+                return false;
+            }
+            if (sorters.Exists(x => x.ID < 1))
+            {
+                return false;
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var bol = dal.UpdateSorter(sorters.ToEntityList());
+            if (bol)
+            {
+                UpdateCache(sorters.Select(x => x.ID).ToList());
+            }
+            return bol;
+        }
+
+        /// <summary>
+        /// 鏇存柊鏍戞帓搴忕爜
+        /// </summary>
+        public bool UpdateTreeSortCode(long ID, List<long> ParentIds, int SortCode)
+        {
+            if (ID < 1)
+            {
+                return false;
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var bol = dal.UpdateTreeSortCode(ID, TreeParentIdsHelper.ToString(ParentIds), SortCode);
+            if (bol)
+            {
+                UpdateCache(ID);
+            }
+            return bol;
+        }
+
+        /// <summary>
+        /// 鏇存柊鏍戞帓搴�
+        /// </summary>
+        public bool UpdateTreeSorter(List<Yw.Model.TreeSorter> sorters)
+        {
+            if (sorters == null || sorters.Count < 1)
+            {
+                return false;
+            }
+            if (sorters.Exists(x => x.ID < 1))
+            {
+                return false;
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var bol = dal.UpdateTreeSorter(sorters.ToEntityList());
+            if (bol)
+            {
+                UpdateCache(sorters.Select(x => x.ID).ToList());
+            }
+            return bol;
+        }
+
+        /// <summary>
+        /// 鏇存柊 Paras
+        /// </summary>
+        public bool UpdateParas(long ID, Dictionary<string, string> Paras)
+        {
+            if (ID < 1)
+            {
+                return false;
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var bol = dal.UpdateParas(ID, ParasHelper.ToString(Paras));
+            if (bol)
+            {
+                UpdateCache(ID);
+            }
+            return bol;
+        }
+
+        /// <summary>
+        /// 鏇存柊 Flags
+        /// </summary>
+        public bool UpdateFlags(long ID, List<string> Flags)
+        {
+            if (ID < 1)
+            {
+                return false;
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var bol = dal.UpdateFlags(ID, FlagsHelper.ToString(Flags));
+            if (bol)
+            {
+                UpdateCache(ID);
+            }
+            return bol;
+        }
+
+        /// <summary>
+        /// 鏇存柊 TagName
+        /// </summary>
+        public bool UpdateTagName(long ID, string TagName)
+        {
+            if (ID < 1)
+            {
+                return false;
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var bol = dal.UpdateTagName(ID, TagName);
+            if (bol)
+            {
+                UpdateCache(ID);
+            }
+            return bol;
+        }
+
+
+        #endregion 
+
+        #region Exist
+
+        /// <summary>
+        /// 鍒ゆ柇 TagName 鏄惁瀛樺湪
+        /// </summary>
+        public bool IsExistTagName(string TagName)
+        {
+            if (string.IsNullOrEmpty(TagName))
+            {
+                return false;
+            }
+            var all = GetAll();
+            return all.Exists(x => x.TagName == TagName);
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇 TagName 鏄惁瀛樺湪 ExceptID
+        /// </summary>
+        public bool IsExistTagNameExceptID(string TagName, long ExceptID)
+        {
+            if (string.IsNullOrEmpty(TagName))
+            {
+                return false;
+            }
+            var all = GetAll();
+            return all.Exists(x => x.TagName == TagName && x.ID != ExceptID);
+        }
+
+        #endregion 
+
+        #region Delete
+
+        /// <summary>
+        /// 閫氳繃 ID 鍒犻櫎
+        /// </summary>
+        public bool DeleteByID(long ID, out string Msg)
+        {
+            Msg = string.Empty;
+            var serviceProjectSite = new HStation.Service.XhsProjectSite();
+            if (serviceProjectSite.IsExistTable())
+            {
+                if (serviceProjectSite.IsExistByProjectID(ID))
+                {
+                    Msg = "瀛樺湪绔欑偣淇℃伅";
+                    return false;
+                }
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var bol = dal.DeleteByID(ID);
+            if (bol)
+            {
+                RemoveCache(ID);
+            }
+            return bol;
+        }
+
+        /// <summary>
+        /// 閫氳繃 ID 鍒犻櫎(鍚屾椂鍒犻櫎 Site)
+        /// </summary>
+        public bool DeleteExByID(long ID, out string Msg)
+        {
+            Msg = string.Empty;
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var bol = dal.DeleteExByID(ID);
+            if (bol)
+            {
+                RemoveCache(ID);
+                XhsProjectSite.RemoveCacheByProjectID(ID);
+            }
+            return bol;
+        }
+
+        #endregion
+
+
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3