Sfoglia il codice sorgente

新增查询知识热词,工单受理页面知识检索

TANG JIANG 2 anni fa
parent
commit
23f803b593

+ 72 - 13
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -12,7 +12,9 @@ using Hotline.Share.Dtos.Knowledge;
 using Hotline.Share.Enums.KnowledgeBase;
 using MapsterMapper;
 using MediatR;
+using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.IdentityModel.Tokens;
 using SqlSugar;
 using XF.Domain.Authentications;
 using XF.Domain.Exceptions;
@@ -233,7 +235,7 @@ namespace Hotline.Api.Controllers
         /// <param name="workDto"></param>
         /// <returns></returns>
         [Permission(EPermission.KnowledgeDelete)]
-        [HttpDelete("knowdelete")]
+        [HttpPost("knowdelete")]
         public async Task KnowledgeDelete(string Id, [FromBody] StartWorkflowDto workDto)
         {
             var know = await _knowledgeRepository.GetAsync(Id, HttpContext.RequestAborted);
@@ -333,7 +335,7 @@ namespace Hotline.Api.Controllers
         /// <returns></returns>
         [Permission(EPermission.KnowledgeAllList)]
         [HttpGet()]
-        public async Task<PagedDto<KnowledgeDataDto>> GetKnowList([FromBody] KnowPagedListDto pagedDto)
+        public async Task<PagedDto<KnowledgeDataDto>> GetKnowList([FromQuery] KnowPagedListDto pagedDto)
         {
             return await _knowApplication.GetKnowList(pagedDto);
         }
@@ -348,7 +350,7 @@ namespace Hotline.Api.Controllers
         /// <returns></returns>
         [Permission(EPermission.KnowledgeRetrieval)]
         [HttpGet("knowretrieval")]
-        public async Task<PagedDto<KnowledgeRetrievalDataDto>> KnowRetrieval([FromBody] KnowledgeRetrievalPagedListDto pagedDto)
+        public async Task<PagedDto<KnowledgeRetrievalDataDto>> KnowRetrieval([FromQuery] KnowledgeRetrievalPagedListDto pagedDto)
         {
             if (string.IsNullOrEmpty(pagedDto.Keyword))
                 throw UserFriendlyException.SameMessage("请输入关键字");
@@ -357,10 +359,6 @@ namespace Hotline.Api.Controllers
             var temp = await _knowledgeRepository
               .Queryable(true)
               .Where(p => p.Status == EKnowledgeStatus.OnShelf && p.IsDeleted == false)
-              .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))
-              .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.Enclosure, d => d.Additions.Contains(pagedDto.Keyword))
 
               .Select(o => new
               {
@@ -370,11 +368,19 @@ namespace Hotline.Api.Controllers
                   o.Title,
                   o.Summary,
                   o.Content,
-                  o.PageView
+                  o.PageView,
+                  o.Additions
               })
-
-              .OrderByDescending(p => p.PageView)
-             .ToPageListAsync(pagedDto.PageIndex, pagedDto.PageSize, total);
+           //将结果合并成一个表
+           .MergeTable()
+           //取第一条数据
+           .Where(d => d.index == 1)
+           .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))
+           .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.Enclosure, d => d.Additions.Contains(pagedDto.Keyword))
+           .OrderByDescending(p => p.PageView)
+           .ToPageListAsync(pagedDto.PageIndex, pagedDto.PageSize, total);
 
             return new PagedDto<KnowledgeRetrievalDataDto>(total, _mapper.Map<IReadOnlyList<KnowledgeRetrievalDataDto>>(temp));
         }
@@ -387,7 +393,7 @@ namespace Hotline.Api.Controllers
         /// <param name="pagedDto"></param>
         /// <returns></returns>
         [HttpGet("deletelist")]
-        public async Task<PagedDto<KnowledgeDataDto>> GetDeleteApplyList([FromBody] KnowledgeDeletelPagedListDto pagedDto)
+        public async Task<PagedDto<KnowledgeDataDto>> GetDeleteApplyList([FromQuery] KnowledgeDeletelPagedListDto pagedDto)
         {
             var (total, items) = await _knowledgeWorkFlowRepository
                .Queryable(true)
@@ -419,7 +425,7 @@ namespace Hotline.Api.Controllers
         /// <returns></returns>
         [Permission(EPermission.KnowledgeApprovedAllList)]
         [HttpGet("approvedlist")]
-        public async Task<PagedDto<KnowledgeApprovalDataDto>> ApprovedList([FromBody] KnowledgeApprovalPagedListDto pagedDto)
+        public async Task<PagedDto<KnowledgeApprovalDataDto>> ApprovedList([FromQuery] KnowledgeApprovalPagedListDto pagedDto)
         {
             var (total, items) = await _knowledgeWorkFlowRepository
                 .Queryable(true)
@@ -443,5 +449,58 @@ namespace Hotline.Api.Controllers
         }
         #endregion
 
+        #region 工单受理,知识库检索
+        /// <summary>
+        /// 获取知识热点词
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet("getkeyword")]
+        [AllowAnonymous]
+        public async Task<List<string>> GetKeyWord()
+        {
+            return await _knowledgeDomainService.GetKeyWord();
+        }
+
+        /// <summary>
+        /// 工单受理知识检索
+        /// </summary>
+        /// <param name="pagedDto"></param>
+        /// <returns></returns>
+        [HttpGet("knowpopscreen")]
+        [AllowAnonymous]
+        public async Task<PagedDto<KnowledgeRetrievalDataDto>> KnowPopScreen([FromQuery] KnowledgePopScreenPagedListDto pagedDto)
+        {
+            //if (string.IsNullOrEmpty(pagedDto.Keyword)&& string.IsNullOrEmpty(pagedDto.HotspotId))
+            //    throw UserFriendlyException.SameMessage("请选择热点或输入关键字");
+
+            RefAsync<int> total = 0;
+            var temp = await _knowledgeRepository
+              .Queryable()
+              .Where(p => p.Status == EKnowledgeStatus.OnShelf && p.IsDeleted == false)
+              .Select(o => new
+              {
+                  index = SqlFunc.RowNumber($"{o.Version} desc ", $"{o.Code}"),
+                  o.Id,
+                  o.Code,
+                  o.Title,
+                  o.Summary,
+                  o.Content,
+                  o.PageView,
+                  o.Keywords,
+                  o.HotspotId
+              })
+           //将结果合并成一个表
+           .MergeTable()
+           //取第一条数据
+           .Where(d => d.index == 1)
+           .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)
+           .ToPageListAsync(pagedDto.PageIndex, pagedDto.PageSize, total);
+
+            return new PagedDto<KnowledgeRetrievalDataDto>(total, _mapper.Map<IReadOnlyList<KnowledgeRetrievalDataDto>>(temp));
+        } 
+        #endregion
+
     }
 }

+ 6 - 0
src/Hotline.Share/Dtos/Knowledge/KnowledgePagedDto.cs

@@ -21,6 +21,12 @@ namespace Hotline.Share.Dtos.Knowledge
     /// <param name="RetrievalType">检索类型</param>
     public record KnowledgeRetrievalPagedListDto(EKnowledgeRetrievalType? RetrievalType) : PagedKeywordRequest;
 
+    /// <summary>
+    /// 来电弹屏知识库查询
+    /// </summary>
+    /// <param name="HotspotId">热点ID</param>
+    public record KnowledgePopScreenPagedListDto(string? HotspotId) : PagedKeywordRequest;
+
     /// <summary>
     /// 我的知识删除
     /// </summary>

+ 6 - 0
src/Hotline/KnowledgeBase/IKnowledgeDomainService.cs

@@ -62,6 +62,12 @@ namespace Hotline.KnowledgeBase
         /// <returns></returns>
         Task KnowledgeRevoke(string workFlowId, CancellationToken cancellationToken);
 
+        /// <summary>
+        /// 获取关键词
+        /// </summary>
+        /// <returns></returns>
+        Task<List<string>> GetKeyWord();
+
         /// <summary>
         /// 流程审批完成,处理知识状态
         /// </summary>

+ 41 - 0
src/Hotline/KnowledgeBase/KnowledgeDomainService.cs

@@ -3,6 +3,7 @@ using Hotline.Settings;
 using Hotline.Share.Dtos.Knowledge;
 using Hotline.Share.Enums.KnowledgeBase;
 using MapsterMapper;
+using SqlSugar;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
 
@@ -194,6 +195,46 @@ namespace Hotline.KnowledgeBase
             await _workflowDomainService.TerminateAsync(workFlowId, cancellationToken);
         }
 
+        /// <summary>
+        /// 获取关键词
+        /// </summary>
+        /// <returns></returns>
+        public async Task<List<string>> GetKeyWord()
+        {
+            var temp = await _knowledgeRepository
+              .Queryable()
+              .Where(p => p.IsDeleted == false && p.Status == EKnowledgeStatus.OnShelf)
+              .Select((p) => new
+              {
+                  index = SqlFunc.RowNumber($"{p.Version} desc ", $"{p.Code}"),
+                  p.Version,
+                  p.PageView,
+                  p.Keywords
+              })
+           //将结果合并成一个表
+           .MergeTable()
+           //取第一条数据
+           .Where(d => d.index == 1 && d.Keywords != null && d.Keywords != "")
+           //根据点击量在排序
+           .OrderByDescending(p => p.PageView)
+           .Take(10)//取前10条
+           .ToListAsync();
+
+            //将数据组装到集合
+            List<string> strList = new();
+            foreach (var item in temp)
+            {
+                if (!string.IsNullOrEmpty(item.Keywords))
+                {
+                    //添加数据
+                    strList.AddRange(item.Keywords.Split(',').ToList());
+                }
+            }
+
+            //取10条数据返回
+            return strList.Distinct().Take(10).ToList();
+        }
+
         /// <summary>
         /// 流程审批完成,处理知识状态
         /// </summary>