lihao 4 年之前
父节点
当前提交
04cc8072c2

+ 25 - 1
GxPress/Repository/GxPress.Repository.Implement/MiddleRepository.cs

@@ -13,6 +13,7 @@ using SqlKata;
 using Datory;
 using GxPress.Request.App.Middle;
 using System;
+using System.Linq;
 
 namespace GxPress.Repository.Implement
 {
@@ -95,7 +96,30 @@ namespace GxPress.Repository.Implement
         {
             return await _repository.GetAllAsync(query);
         }
-
+        /// <summary>
+        /// 递归获取父级下面的所有子集
+        /// </summary>
+        /// <param name="id"></param>
+        /// <param name="ids"></param>
+        /// <returns></returns>
+        public async Task<IEnumerable<int>> GetAllMiddleChildrenByParentIdAsync(List<int> ids, List<int> returnIds)
+        {
+            var middles = await _repository.GetAllAsync(Q.WhereIn(nameof(Entity.Middle.Middle.Id), ids));
+            if (middles == null || middles.Count == 0)
+                return returnIds;
+            foreach (var item in middles)
+            {
+                middles = await _repository.GetAllAsync(Q.Where(nameof(Entity.Middle.Middle.ParentId), item.Id));
+                if (middles == null || middles.Count == 0)
+                    continue;
+                returnIds.AddRange(middles.Select(n => n.Id).ToList());
+                foreach (var middle in middles)
+                {
+                    await GetAllMiddleChildrenByParentIdAsync(new List<int> { middle.Id }, returnIds);
+                }
+            }
+            return returnIds;
+        }
         public async Task<bool> DeleteAsync(Query query)
         {
             return await _repository.DeleteAsync(query) > 0;

+ 7 - 0
GxPress/Repository/GxPress.Repository.Interface/IMiddleRepository.cs

@@ -12,6 +12,13 @@ namespace GxPress.Repository.Interface
 {
     public interface IMiddleRepository : IRepository
     {
+        /// <summary>
+        /// 递归获取父级下面的所有子集
+        /// </summary>
+        /// <param name="id"></param>
+        /// <param name="ids"></param>
+        /// <returns></returns>
+        Task<IEnumerable<int>> GetAllMiddleChildrenByParentIdAsync(List<int> ids, List<int> returnIds);
         Task<int> InsertAsync(Middle middle);
         Task<bool> UpdateAsync(SqlKata.Query query);
         Task<bool> UpdateAsync(Middle middle);

+ 4 - 0
GxPress/Service/GxPress.Service.Implement/Middle/MiddleService.cs

@@ -288,6 +288,10 @@ namespace GxPress.Service.Implement.Middle
                 using TransactionScope transactionScope = new TransactionScope();
                 //查询middle
                 var middles = await _middleRepository.FindAsync(Q.WhereIn(nameof(Entity.Middle.Middle.Id), request.MiddleIds));
+                var middleIds = request.MiddleIds;
+                //获取
+                await _middleRepository.GetAllMiddleChildrenByParentIdAsync(request.MiddleIds, middleIds);
+                request.MiddleIds = middleIds;
                 var ids = middles.Select(n => n.MiddleId).ToList();
                 //收藏
                 if (request.FolderType == 3)