Shuxia Ning
2024-12-17 33b5627e2d1092f6931165b7f9f1a16de65d765d
Service/HStation.Service.Xhs.Core/05-service/01-project/XhsProject.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,560 @@
namespace 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;
            if (new XhsProjectSite().IsExistByProjectID(ID))
            {
                Msg = "存在站点信息";
                return false;
            }
            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
            var bol = dal.DeleteByID(ID);
            if (bol)
            {
                RemoveCache(ID);
            }
            return bol;
        }
        #endregion
    }
}