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

+ 40 - 39
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -250,19 +250,18 @@ namespace Hotline.Api.Controllers
             return await _knowledgeDomainService.KnowledgeAdd(dto, HttpContext.RequestAborted);
         }
 
-        /// <summary>
-        /// 知识库-修改
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
-        [Permission(EPermission.KnowledgeUpdate)]
-        [HttpPut("update")]
-        public async Task<string> UpdateKnowledge([FromBody] UpdateKnowledgeDto dto)
-        {
-            //知识更新流程业务
-            return await _knowledgeDomainService.KnowledgeUpdate(dto, HttpContext.RequestAborted);
-
-        }
+        ///// <summary>
+        ///// 知识库-修改
+        ///// </summary>
+        ///// <param name="dto"></param>
+        ///// <returns></returns>
+        //[Permission(EPermission.KnowledgeUpdate)]
+        //[HttpPut("update")]
+        //public async Task<string> UpdateKnowledge([FromBody] UpdateKnowledgeDto dto)
+        //{
+        //    //知识更新流程业务
+        //    return await _knowledgeDomainService.KnowledgeUpdate(dto, HttpContext.RequestAborted);
+        //}
 
         /// <summary>
         /// 知识库-知识下架
@@ -393,7 +392,7 @@ namespace Hotline.Api.Controllers
             RefAsync<int> total = 0;
             var temp = await _knowledgeRepository
               .Queryable()
-              .Where(p => p.Status == EKnowledgeStatus.OnShelf && p.IsDeleted == false)
+              .Where(p => p.IsDeleted == false)
 
               .Select(o => new
               {
@@ -404,12 +403,13 @@ namespace Hotline.Api.Controllers
                   o.Summary,
                   o.Content,
                   o.PageView,
-                  o.Additions
+                  o.Additions,
+                  o.Status
               })
            //将结果合并成一个表
            .MergeTable()
            //取第一条数据
-           .Where(d => d.index == 1)
+           .Where(d => d.index == 1 && d.Status == EKnowledgeStatus.OnShelf)
            .WhereIF(pagedDto.RetrievalType == null || pagedDto.RetrievalType == EKnowledgeRetrievalType.All, d => d.Title.Contains(pagedDto.Keyword) || d.Content.Contains(pagedDto.Keyword))// || d.Additions.Contains(pagedDto.Keyword)
            .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.Title, d => d.Title.Contains(pagedDto.Keyword))
            .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.Content, d => d.Content.Contains(pagedDto.Keyword))
@@ -513,7 +513,7 @@ namespace Hotline.Api.Controllers
             RefAsync<int> total = 0;
             var temp = await _knowledgeRepository
               .Queryable()
-              .Where(p => p.Status == EKnowledgeStatus.OnShelf && p.IsDeleted == false)
+              .Where(p =>  p.IsDeleted == false)
               .Select(o => new
               {
                   index = SqlFunc.RowNumber($"{o.Version} desc ", $"{o.Code}"),
@@ -524,12 +524,13 @@ namespace Hotline.Api.Controllers
                   o.Content,
                   o.PageView,
                   o.Keywords,
-                  o.HotspotId
+                  o.HotspotId,
+                  o.Status
               })
            //将结果合并成一个表
            .MergeTable()
            //取第一条数据
-           .Where(d => d.index == 1)
+           .Where(d => d.index == 1&& d.Status == EKnowledgeStatus.OnShelf)
            .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword), p => p.Title.Contains(pagedDto.Keyword) || p.Keywords.Contains(pagedDto.Keyword))
            .WhereIF(!string.IsNullOrEmpty(pagedDto.HotspotId), p => p.HotspotId == pagedDto.HotspotId)
            .OrderByDescending(p => p.PageView)
@@ -552,17 +553,17 @@ namespace Hotline.Api.Controllers
             await StartFlow(id, WorkflowModuleConsts.KnowledgeAdd, EKnowledgeApplyType.Add, dto);
         }
 
-        /// <summary>
-        /// 修改-开始流程
-        /// </summary>
-        /// <param name="id">知识id</param>
-        /// <param name="dto">流程开启参数</param>
-        /// <returns></returns>
-        [HttpPost("{id}/update-startflow")]
-        public async Task UpdateStartFlow(string id, [FromBody] StartWorkflowDto dto)
-        {
-            await StartFlow(id, WorkflowModuleConsts.KnowledgeUpdate, EKnowledgeApplyType.Update, dto);
-        }
+        ///// <summary>
+        ///// 修改-开始流程
+        ///// </summary>
+        ///// <param name="id">知识id</param>
+        ///// <param name="dto">流程开启参数</param>
+        ///// <returns></returns>
+        //[HttpPost("{id}/update-startflow")]
+        //public async Task UpdateStartFlow(string id, [FromBody] StartWorkflowDto dto)
+        //{
+        //    await StartFlow(id, WorkflowModuleConsts.KnowledgeUpdate, EKnowledgeApplyType.Update, dto);
+        //}
 
         /// <summary>
         /// 删除-开始流程
@@ -586,15 +587,15 @@ namespace Hotline.Api.Controllers
             return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.KnowledgeAdd, HttpContext.RequestAborted);
         }
 
-        /// <summary>
-        /// 查询知识库办理流程开启参数-修改
-        /// </summary>
-        /// <returns></returns>
-        [HttpGet("update-flow-start")]
-        public async Task<IReadOnlyList<NextStepOptions>> GetUpdateFlowStartOptionsAsync()
-        {
-            return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.KnowledgeUpdate, HttpContext.RequestAborted);
-        }
+        ///// <summary>
+        ///// 查询知识库办理流程开启参数-修改
+        ///// </summary>
+        ///// <returns></returns>
+        //[HttpGet("update-flow-start")]
+        //public async Task<IReadOnlyList<NextStepOptions>> GetUpdateFlowStartOptionsAsync()
+        //{
+        //    return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.KnowledgeUpdate, HttpContext.RequestAborted);
+        //}
 
         /// <summary>
         /// 查询知识库办理流程开启参数-删除

+ 1 - 1
src/Hotline.Application/Handlers/FlowEngine/EndWorkflowHandler.cs

@@ -36,7 +36,7 @@ public class EndWorkflowHandler : INotificationHandler<EndWorkflowNotify>
         switch (workflow.ModuleCode)
         {
             case WorkflowModuleConsts.KnowledgeAdd://新增知识库
-            case WorkflowModuleConsts.KnowledgeUpdate://修改知识库
+            //case WorkflowModuleConsts.KnowledgeUpdate://修改知识库
             case WorkflowModuleConsts.KnowledgeDelete://删除知识库
                 await _knowledgeDomainService.EndWorkKnowledge(workflow, cancellationToken);
                 break;

+ 1 - 1
src/Hotline/KnowledgeBase/Knowledge.cs

@@ -83,7 +83,7 @@ public class Knowledge : WorkflowEntity//   WorkflowEntity  FullStateEntity
     /// <summary>
     /// 版本号
     /// </summary>
-    public int Version { get; set; } = 1;
+    public int Version { get; set; } = 0;
 
     /// <summary>
     /// 外部数据(为前端提供级联功能)

+ 19 - 17
src/Hotline/KnowledgeBase/KnowledgeDomainService.cs

@@ -134,12 +134,14 @@ namespace Hotline.KnowledgeBase
         public async Task<string> KnowledgeAdd(AddKnowledgeDto dto, CancellationToken cancellationToken)
         {
             var kn = _mapper.Map<Knowledge>(dto);
-            //知识草稿ID如果不为空,则表示是草稿箱的数据
+
+            //移除草稿箱数据
             if (!string.IsNullOrEmpty(dto.Code))
             {
                 //移除草稿箱数据
                 await _knowledgeTempRepository.RemoveAsync(p => p.Code == dto.Code, false, cancellationToken);
             }
+
             //如果草稿箱不存在数据,也就是Code为空,从新生成Code
             if (string.IsNullOrEmpty(kn.Code))
                 kn.Code = Convert.ToInt64((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds).ToString();
@@ -247,18 +249,19 @@ namespace Hotline.KnowledgeBase
         {
             var temp = await _knowledgeRepository
               .Queryable()
-              .Where(p => p.IsDeleted == false && p.Status == EKnowledgeStatus.OnShelf)
+              .Where(p => p.IsDeleted == false)
               .Select((p) => new
               {
                   index = SqlFunc.RowNumber($"{p.Version} desc ", $"{p.Code}"),
                   p.Version,
                   p.PageView,
-                  p.Keywords
+                  p.Keywords,
+                  p.Status
               })
            //将结果合并成一个表
            .MergeTable()
            //取第一条数据
-           .Where(d => d.index == 1 && d.Keywords != null && d.Keywords != "")
+           .Where(d => d.index == 1 && d.Status == EKnowledgeStatus.OnShelf && d.Keywords != null && d.Keywords != "")
            //根据点击量在排序
            .OrderByDescending(p => p.PageView)
            .Take(10)//取前10条
@@ -302,27 +305,26 @@ namespace Hotline.KnowledgeBase
             switch (workflow.ModuleCode)
             {
                 case WorkflowModuleConsts.KnowledgeAdd://新增
-                    //修改知识状态为已上架
-                    knowledge.Status = EKnowledgeStatus.OnShelf;
-                    knowledge.OnShelfTime = System.DateTime.Now;
-                    await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
-                    break;
-                case WorkflowModuleConsts.KnowledgeUpdate://修改
-                    //处理知识版本号
-                    //根据Code查询目前使用的版本号,版本号+1
+                    //根据Code查询是否有历史数据
                     var oldKnowledge = await _knowledgeRepository
-                        .Queryable()
-                        .Where(p => p.Code == knowledge.Code && p.Status != EKnowledgeStatus.Auditing && p.Status != EKnowledgeStatus.Failed && p.IsDeleted == false)
-                        .OrderByDescending(p => p.Version)
-                        .Take(1)
-                        .FirstAsync();
+                       .Queryable()
+                       .Where(p => p.Code == knowledge.Code && (p.Status == EKnowledgeStatus.OnShelf || p.Status == EKnowledgeStatus.OffShelf) 
+                                        && p.IsDeleted == false && p.Id != knowledge.Id)
+                       .OrderByDescending(p => p.Version)
+                       .Take(1)
+                       .FirstAsync();
                     if (oldKnowledge == null)
                         knowledge.Version = 1;
                     else
+                    {
                         knowledge.Version = oldKnowledge.Version + 1;
+                        knowledge.PageView = oldKnowledge.PageView;
+                    }
+
                     //修改知识状态为已上架
                     knowledge.Status = EKnowledgeStatus.OnShelf;
                     knowledge.OnShelfTime = System.DateTime.Now;
+
                     await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
                     break;