TANG JIANG преди 2 години
родител
ревизия
460344bfe0

+ 5 - 51
src/Hotline.Api/Controllers/KnowledgeCommonController.cs

@@ -2,6 +2,7 @@
 using Hotline.Permissions;
 using Hotline.Share.Dtos.Knowledge;
 using MapsterMapper;
+using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using XF.Domain.Exceptions;
 
@@ -60,11 +61,7 @@ namespace Hotline.Api.Controllers
         [HttpPost("type-update")]
         public async Task TypeUpdate([FromBody] UpdateKnowledgeTypeDto dto)
         {
-            //查询原有数据
-            var type = await _knowledgeTypeRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
-            if (type is null)
-                throw UserFriendlyException.SameMessage("编辑失败!");
-            await _knowledgeTypeService.TypeUpdate(dto, type, HttpContext.RequestAborted);
+            await _knowledgeTypeService.TypeUpdate(dto, HttpContext.RequestAborted);
         }
 
         /// <summary>
@@ -102,25 +99,7 @@ namespace Hotline.Api.Controllers
         [HttpDelete("type-delete")]
         public async Task TypeDelete(string Id)
         {
-            //查询数据是否存在
-            var sandard = await _knowledgeTypeRepository.GetAsync(Id, HttpContext.RequestAborted);
-            if (sandard is null)
-                throw UserFriendlyException.SameMessage("分类不存在!");
-
-            //查询是否有子级分类
-
-            var checkChild = await _knowledgeTypeRepository.CountAsync(p => p.ParentId == Id, HttpContext.RequestAborted);
-            if (checkChild > 0)
-                throw UserFriendlyException.SameMessage("存在子级分类!");
-
-            //查询是否有知识分类
-            var checkKnowledge = await _knowledgeRepository.CountAsync(p => p.KnowledgeTypeId == Id, HttpContext.RequestAborted);
-            if (checkKnowledge > 0)
-                throw UserFriendlyException.SameMessage("分类存在知识!");
-
-            //删除操作
-            await _knowledgeTypeRepository.RemoveAsync(sandard, false, HttpContext.RequestAborted);
-
+            await _knowledgeTypeService.TypeDelete(Id, HttpContext.RequestAborted);
         }
 
         /// <summary>
@@ -132,25 +111,7 @@ namespace Hotline.Api.Controllers
         [HttpGet("type-changestate")]
         public async Task TypeChangeState(string Id)
         {
-            //查询数据是否存在
-            var type = await _knowledgeTypeRepository.GetAsync(Id, HttpContext.RequestAborted);
-            if (type is null)
-                throw UserFriendlyException.SameMessage("分类不存在!");
-            if (type.IsEnable)//禁用
-                await _knowledgeTypeService.TypeChangeState(Id, HttpContext.RequestAborted);
-            else //启用
-            {
-                //查询上级是否是启用状态,如果是禁用状态不能修改
-                var CheckParent = await _knowledgeTypeRepository.GetAsync(type.ParentId, HttpContext.RequestAborted);
-                if (CheckParent is null)
-                    throw UserFriendlyException.SameMessage("分类启用失败!");
-                if (!CheckParent.IsEnable)
-                    throw UserFriendlyException.SameMessage("请先启用父级分类!");
-
-                //将状态修改为启用
-                type.IsEnable = true;
-                await _knowledgeTypeRepository.UpdateAsync(type, HttpContext.RequestAborted);
-            }
+            await _knowledgeTypeService.TypeChangeState(Id, HttpContext.RequestAborted);
         }
 
         /// <summary>
@@ -162,14 +123,7 @@ namespace Hotline.Api.Controllers
         [HttpGet("type-changestateandoffshelf")]
         public async Task TypeChangeStateAndOffShelf(string Id)
         {
-            //查询数据是否存在
-            var type = await _knowledgeTypeRepository.GetAsync(Id, HttpContext.RequestAborted);
-            if (type is null)
-                throw UserFriendlyException.SameMessage("分类不存在!");
-            if (type.IsEnable)//启用状态
-                await _knowledgeTypeService.TypeChangeStateAndOffShelf(Id, HttpContext.RequestAborted);
-            else
-                throw UserFriendlyException.SameMessage("禁用分类失败!");
+            await _knowledgeTypeService.TypeChangeStateAndOffShelf(Id, HttpContext.RequestAborted);
         }
 
         /// <summary>

+ 1 - 4
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -126,10 +126,7 @@ namespace Hotline.Api.Controllers
         [HttpGet("knowledge-info")]
         public async Task<Knowledge> KnowledgeInfo(string Id)
         {
-            var know = await _knowledgeRepository.GetAsync(Id, HttpContext.RequestAborted);
-            if (know is null)
-                throw UserFriendlyException.SameMessage("知识查询失败!");
-            return await _knowledgeService.KnowledgeInfo(know, HttpContext.RequestAborted);
+            return await _knowledgeService.KnowledgeInfo(Id, HttpContext.RequestAborted);
         }
 
         /// <summary>

+ 2 - 2
src/Hotline/KnowledgeBase/IKnowledgeService.cs

@@ -22,9 +22,9 @@ namespace Hotline.KnowledgeBase
         /// <summary>
         /// 知识库-查询详情-增加浏览量
         /// </summary>
-        /// <param name="know"></param>
+        /// <param name="Id"></param>
         /// <returns></returns>
-        Task<Knowledge> KnowledgeInfo(Knowledge know, CancellationToken cancellationToken);
+        Task<Knowledge> KnowledgeInfo(string Id, CancellationToken cancellationToken);
 
         /// <summary>
         /// 知识库-新增

+ 8 - 1
src/Hotline/KnowledgeBase/IKnowledgeTypeService.cs

@@ -25,7 +25,7 @@ namespace Hotline.KnowledgeBase
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        Task TypeUpdate(UpdateKnowledgeTypeDto dto, KnowledgeType type, CancellationToken cancellationToken);
+        Task TypeUpdate(UpdateKnowledgeTypeDto dto, CancellationToken cancellationToken);
 
         /// <summary>
         /// 知识分类-新增、编辑初始化
@@ -48,5 +48,12 @@ namespace Hotline.KnowledgeBase
         /// <param name="Id"></param>
         /// <returns></returns>
         Task TypeChangeStateAndOffShelf(string Id, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 知识分类-删除
+        /// </summary>
+        /// <param name="Id"></param>
+        /// <returns></returns>
+        Task TypeDelete(string Id, CancellationToken cancellationToken);
     }
 }

+ 5 - 1
src/Hotline/KnowledgeBase/KnowledgeService.cs

@@ -2,6 +2,7 @@
 using Hotline.Share.Enums.KnowledgeBase;
 using Hotline.Users;
 using MapsterMapper;
+using Microsoft.AspNetCore.Http;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
 
@@ -75,8 +76,11 @@ namespace Hotline.KnowledgeBase
         /// </summary>
         /// <param name="Id"></param>
         /// <returns></returns>
-        public async Task<Knowledge> KnowledgeInfo(Knowledge know, CancellationToken cancellationToken)
+        public async Task<Knowledge> KnowledgeInfo(string Id, CancellationToken cancellationToken)
         {
+            var know = await _knowledgeRepository.GetAsync(Id, cancellationToken);
+            if (know is null)
+                throw UserFriendlyException.SameMessage("知识查询失败!");
             //写入浏览记录
             KnowledgePv knowledgePv = new()
             {

+ 85 - 29
src/Hotline/KnowledgeBase/KnowledgeTypeService.cs

@@ -115,8 +115,12 @@ namespace Hotline.KnowledgeBase
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        public async Task TypeUpdate(UpdateKnowledgeTypeDto dto, KnowledgeType type, CancellationToken cancellationToken)
+        public async Task TypeUpdate(UpdateKnowledgeTypeDto dto, CancellationToken cancellationToken)
         {
+            //查询原有数据
+            var type = await _knowledgeTypeRepository.GetAsync(dto.Id, cancellationToken);
+            if (type is null)
+                throw UserFriendlyException.SameMessage("编辑失败!");
             bool result = false;
             //是否更改分类名称
             if (type.Name != dto.Name)
@@ -169,22 +173,37 @@ namespace Hotline.KnowledgeBase
         /// <returns></returns>
         public async Task TypeChangeState(string Id, CancellationToken cancellationToken)
         {
-            //查询子级数据
-            var getChild = await _knowledgeTypeRepository.GetChild(Id);
-            //禁用子级数据
-            if (getChild != null && getChild.Count > 0)
+            //查询数据是否存在
+            var type = await _knowledgeTypeRepository.GetAsync(Id);
+            if (type is null)
+                throw UserFriendlyException.SameMessage("分类不存在!");
+            if (type.IsEnable)//禁用
             {
-                foreach (var item in getChild)
+                //查询子级数据
+                var getChild = await _knowledgeTypeRepository.GetChild(Id);
+                //禁用子级数据
+                if (getChild != null && getChild.Count > 0)
                 {
-                    item.IsEnable = false;
-                    await _knowledgeTypeRepository.UpdateAsync(item, cancellationToken);
+                    foreach (var item in getChild)
+                    {
+                        item.IsEnable = false;
+                        await _knowledgeTypeRepository.UpdateAsync(item, cancellationToken);
+                    }
                 }
             }
-            ////查询是否有子级,如果有子级启用,则不能禁用
-            //var checkChild = await _knowledgeTypeRepository.CountAsync(p => p.ParentId == Id && p.IsEnable == true);
-            //if (checkChild > 0)
-            //    throw UserFriendlyException.SameMessage("请先禁用子级分类!");
-            //type.IsEnable = false;
+            else //启用
+            {
+                //查询上级是否是启用状态,如果是禁用状态不能修改
+                var CheckParent = await _knowledgeTypeRepository.GetAsync(type.ParentId, cancellationToken);
+                if (CheckParent is null)
+                    throw UserFriendlyException.SameMessage("分类启用失败!");
+                if (!CheckParent.IsEnable)
+                    throw UserFriendlyException.SameMessage("请先启用父级分类!");
+
+                //将状态修改为启用
+                type.IsEnable = true;
+                await _knowledgeTypeRepository.UpdateAsync(type, cancellationToken);
+            }
         }
 
         /// <summary>
@@ -194,30 +213,67 @@ namespace Hotline.KnowledgeBase
         /// <returns></returns>
         public async Task TypeChangeStateAndOffShelf(string Id, CancellationToken cancellationToken)
         {
-            //查询子级数据
-            var getChild = await _knowledgeTypeRepository.GetChild(Id);
-            //禁用子级数据
-            if (getChild != null && getChild.Count > 0)
+            //查询数据是否存在
+            var type = await _knowledgeTypeRepository.GetAsync(Id, cancellationToken);
+            if (type is null)
+                throw UserFriendlyException.SameMessage("分类不存在!");
+            if (type.IsEnable)//启用状态
             {
-                foreach (var item in getChild)
+                //查询子级数据
+                var getChild = await _knowledgeTypeRepository.GetChild(Id);
+                //禁用子级数据
+                if (getChild != null && getChild.Count > 0)
                 {
-                    item.IsEnable = false;
-                    await _knowledgeTypeRepository.UpdateAsync(item, cancellationToken);
-                    //下架知识
-                    //查询当前分类下的知识(查询条件:此分类下/状态为成功/未删除/已上架)
-                    var knowList = _knowledgeRepository.Queryable().Where(p => p.KnowledgeTypeId == item.Id && p.Status == EKnowledgeStatus.Succeed && p.IsDeleted == false && p.IsOnShelf == true).ToList();
-                    if (knowList != null && knowList.Count > 0)
+                    foreach (var item in getChild)
                     {
-                        //修改知识为下架状态
-                        foreach (var itemKnow in knowList)
+                        item.IsEnable = false;
+                        await _knowledgeTypeRepository.UpdateAsync(item, cancellationToken);
+                        //下架知识
+                        //查询当前分类下的知识(查询条件:此分类下/状态为成功/未删除/已上架)
+                        var knowList = _knowledgeRepository.Queryable().Where(p => p.KnowledgeTypeId == item.Id && p.Status == EKnowledgeStatus.Succeed && p.IsDeleted == false && p.IsOnShelf == true).ToList();
+                        if (knowList != null && knowList.Count > 0)
                         {
-                            itemKnow.IsOnShelf = false;
-                            itemKnow.OffShelfTime = DateTime.Now;
-                            await _knowledgeRepository.UpdateAsync(itemKnow, cancellationToken);
+                            //修改知识为下架状态
+                            foreach (var itemKnow in knowList)
+                            {
+                                itemKnow.IsOnShelf = false;
+                                itemKnow.OffShelfTime = DateTime.Now;
+                                await _knowledgeRepository.UpdateAsync(itemKnow, cancellationToken);
+                            }
                         }
                     }
                 }
             }
+            else
+                throw UserFriendlyException.SameMessage("禁用分类失败!");
+        }
+
+        /// <summary>
+        /// 知识分类-删除
+        /// </summary>
+        /// <param name="Id"></param>
+        /// <returns></returns>
+        public async Task TypeDelete(string Id, CancellationToken cancellationToken)
+        {
+            //查询数据是否存在
+            var sandard = await _knowledgeTypeRepository.GetAsync(Id, cancellationToken);
+            if (sandard is null)
+                throw UserFriendlyException.SameMessage("分类不存在!");
+
+            //查询是否有子级分类
+
+            var checkChild = await _knowledgeTypeRepository.CountAsync(p => p.ParentId == Id, cancellationToken);
+            if (checkChild > 0)
+                throw UserFriendlyException.SameMessage("存在子级分类!");
+
+            //查询是否有知识分类
+            var checkKnowledge = await _knowledgeRepository.CountAsync(p => p.KnowledgeTypeId == Id, cancellationToken);
+            if (checkKnowledge > 0)
+                throw UserFriendlyException.SameMessage("分类存在知识!");
+
+            //删除操作
+            await _knowledgeTypeRepository.RemoveAsync(sandard, false, cancellationToken);
+
         }
 
         #region 私有方法