TANG JIANG před 2 roky
rodič
revize
e56205cd18

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

@@ -8,6 +8,7 @@ using Hotline.Share.Dtos.Knowledge;
 using Hotline.Share.Enums.KnowledgeBase;
 using MapsterMapper;
 using MediatR;
+using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using SqlSugar;
 using XF.Domain.Authentications;
@@ -37,6 +38,7 @@ namespace Hotline.Api.Controllers
         /// <param name="knowledgeDomainService"></param>
         /// <param name="mapper"></param>
         /// <param name="knowApplication"></param>
+        /// <param name="mediator"></param>
         public KnowledgeController(IKnowledgeRepository knowledgeRepository, IKnowledgeTempRepository knowledgeTempRepository,
            ISessionContext sessionContext, IKnowledgeDomainService knowledgeDomainService, IMapper mapper, IKnowApplication knowApplication,
            IMediator mediator)
@@ -190,8 +192,9 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="Id"></param>
         /// <returns></returns>
-        [Permission(EPermission.KnowledgeDelete)]
+       // [Permission(EPermission.KnowledgeDelete)]
         [HttpDelete("knowdelete")]
+        [AllowAnonymous]
         public async Task KnowledgeDelete(string Id)
         {
             await _knowledgeDomainService.KnowledgeDelete(Id, HttpContext.RequestAborted);

+ 12 - 6
src/Hotline.Application/Handlers/FlowEngine/EndWorkflowHandler.cs

@@ -1,17 +1,21 @@
-using Hotline.FlowEngine.Notifies;
+using Google.Type;
+using Hotline.Application.Knowledge;
+using Hotline.FlowEngine.Notifies;
 using Hotline.KnowledgeBase;
 using Hotline.Settings;
+using Hotline.Share.Enums.KnowledgeBase;
 using MediatR;
+using XF.Domain.Exceptions;
 
 namespace Hotline.Application.Handlers.FlowEngine;
 
 public class EndWorkflowHandler : INotificationHandler<EndWorkflowNotify>
 {
-    private readonly IKnowledgeDomainService _knowledgeDomainService;
+    private readonly IKnowApplication _knowApplication;
 
-    public EndWorkflowHandler(IKnowledgeDomainService knowledgeDomainService)
+    public EndWorkflowHandler(IKnowApplication knowApplication)
     {
-        _knowledgeDomainService = knowledgeDomainService;
+        _knowApplication = knowApplication;
     }
 
     /// <summary>Handles a notification</summary>
@@ -23,8 +27,10 @@ public class EndWorkflowHandler : INotificationHandler<EndWorkflowNotify>
         var workflow = notification.Workflow;
         switch (workflow.ModuleCode)
         {
-            case WorkflowModuleConsts.KnowledgeAdd:
-                //_knowledgeDomainService.
+            case WorkflowModuleConsts.KnowledgeAdd://新增
+            case WorkflowModuleConsts.KnowledgeUpdate://修改
+            case WorkflowModuleConsts.KnowledgeDelete://删除
+                await _knowApplication.EndWorkKnowledge(workflow, cancellationToken);
                 break;
         }
     }

+ 7 - 9
src/Hotline.Application/Knowledge/GetKnowledgeInfoNotifyHandler.cs

@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Hotline.KnowledgeBase;
+using Hotline.KnowledgeBase;
 using Hotline.KnowledgeBase.Notifies;
 using MediatR;
 
@@ -18,9 +13,12 @@ namespace Hotline.Application.Knowledge
             _knowledgeDomainService = knowledgeDomainService;
         }
 
-        /// <summary>Handles a notification</summary>
-        /// <param name="notification">The notification</param>
-        /// <param name="cancellationToken">Cancellation token</param>
+        /// <summary>
+        /// 浏览记录写入处理
+        /// </summary>
+        /// <param name="notification"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
         public async Task Handle(GetKnowledgeInfoNotify notification, CancellationToken cancellationToken)
         {
             await _knowledgeDomainService.KnowledgePvIncreaseAsync(notification.Knowledge, cancellationToken);

+ 10 - 1
src/Hotline.Application/Knowledge/IKnowApplication.cs

@@ -1,4 +1,5 @@
-using Hotline.KnowledgeBase;
+using Hotline.FlowEngine.Workflows;
+using Hotline.KnowledgeBase;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Knowledge;
 
@@ -6,6 +7,14 @@ namespace Hotline.Application.Knowledge
 {
     public interface IKnowApplication
     {
+        /// <summary>
+        ///  流程审批完成,处理知识状态
+        /// </summary>
+        /// <param name="workflow"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task EndWorkKnowledge(Workflow workflow, CancellationToken cancellationToken);
+
         /// <summary>
         /// 知识库查询
         /// </summary>

+ 37 - 1
src/Hotline.Application/Knowledge/KnowApplication.cs

@@ -1,13 +1,16 @@
-using Hotline.KnowledgeBase;
+using Hotline.FlowEngine.Workflows;
+using Hotline.KnowledgeBase;
 using Hotline.Repository.SqlSugar.Extensions;
 using Hotline.Settings;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Knowledge;
+using Hotline.Share.Enums.KnowledgeBase;
 using Hotline.Users;
 using MapsterMapper;
 using SqlSugar;
 using XF.Domain.Authentications;
 using XF.Domain.Dependency;
+using XF.Domain.Exceptions;
 
 namespace Hotline.Application.Knowledge
 {
@@ -34,6 +37,39 @@ namespace Hotline.Application.Knowledge
             _mapper = mapper;
         }
 
+        /// <summary>
+        /// 流程审批完成,处理知识状态
+        /// </summary>
+        /// <param name="workflow"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        /// <exception cref="UserFriendlyException"></exception>
+        public async Task EndWorkKnowledge(Workflow workflow, CancellationToken cancellationToken)
+        {
+            var knowledge = await _knowledgeRepository.GetAsync(d => d.WorkflowId == workflow.Id, cancellationToken);
+            if (knowledge == null)
+                throw new UserFriendlyException($"知识查询失败, workflowId: {workflow.Id}", "无效流程编号");
+            switch (workflow.ModuleCode)
+            {
+                case WorkflowModuleConsts.KnowledgeAdd://新增
+                case WorkflowModuleConsts.KnowledgeUpdate://修改
+                    //修改知识状态为已上架
+                    knowledge.Status = EKnowledgeStatus.OnShelf;
+                    knowledge.OnShelfTime = System.DateTime.Now;
+                    await _knowledgeRepository.UpdateAsync(knowledge);
+                    break;
+
+                case WorkflowModuleConsts.KnowledgeDelete://删除
+                    //知识先下架,在删除                                       
+                    knowledge.Status = EKnowledgeStatus.OffShelf;
+                    knowledge.OffShelfTime = System.DateTime.Now;
+                    await _knowledgeRepository.UpdateAsync(knowledge);
+                    //删除知识
+                    await _knowledgeRepository.RemoveAsync(knowledge, true, cancellationToken);
+                    break;
+            }
+        }
+
         /// <summary>
         /// 知识库查询
         /// </summary>

+ 10 - 5
src/Hotline/KnowledgeBase/KnowledgeDomainService.cs

@@ -1,4 +1,5 @@
-using Hotline.Share.Dtos.Knowledge;
+using Hotline.FlowEngine.Workflows;
+using Hotline.Share.Dtos.Knowledge;
 using Hotline.Share.Enums.KnowledgeBase;
 using MapsterMapper;
 using XF.Domain.Dependency;
@@ -38,12 +39,15 @@ namespace Hotline.KnowledgeBase
             var know = await _knowledgeRepository.GetAsync(Id, cancellationToken);
             if (know is null)
                 throw UserFriendlyException.SameMessage("知识查询失败!");
-            //await KnowledgePvIncrese(cancellationToken, know);
-
-
             return know;
         }
 
+        /// <summary>
+        /// 浏览记录写入
+        /// </summary>
+        /// <param name="know"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
         public async Task KnowledgePvIncreaseAsync(Knowledge know, CancellationToken cancellationToken)
         {
             //写入浏览记录
@@ -78,7 +82,6 @@ namespace Hotline.KnowledgeBase
             //如果草稿箱不存在数据,也就是Code为空,从新生成Code
             if (string.IsNullOrEmpty(kn.Code))
                 kn.Code = Convert.ToInt64((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds).ToString();
-            kn.PageView = 0;
             kn.Status = EKnowledgeStatus.Auditing;
 
             return await _knowledgeRepository.AddAsync(kn, cancellationToken);
@@ -104,6 +107,7 @@ namespace Hotline.KnowledgeBase
             //审批中数据不能处理
             if (know.Status == EKnowledgeStatus.Auditing)
                 throw UserFriendlyException.SameMessage("审批中数据不能修改");
+
             var knowledge = _mapper.Map<Knowledge>(dto);
             knowledge.Code = know.Code;
             knowledge.PageView = 0;
@@ -129,6 +133,7 @@ namespace Hotline.KnowledgeBase
             var know = await _knowledgeRepository.GetAsync(Id, cancellationToken);
             if (know != null && know.IsDeleted == false)
             {
+                await _knowledgeRepository.RemoveAsync(know, true, cancellationToken);
                 //调用流程创建
             }
             else