Selaa lähdekoodia

自贡12345 知识库增加部分功能

libin 1 viikko sitten
vanhempi
commit
1ac620d1fa

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

@@ -39,6 +39,7 @@ using MiniExcelLibs;
 using NPOI.SS.Formula.Functions;
 using SqlSugar;
 using System.Text;
+using System.Threading;
 using XF.Domain.Authentications;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
@@ -75,6 +76,7 @@ namespace Hotline.Api.Controllers
         private readonly IRepository<KnowledgeQuestions> _knowledgeQuestionsRepository;
         private readonly IRepository<KnowledgeCorrection> _knowledgeCorrectionRepository;
         private readonly IRepository<KnowledgeCollect> _knowledgeCollectRepository;
+        private readonly IRepository<KnowledgeRecord> _knowledgeRecordRepository;
         private readonly ISystemDomainService _systemDomainService;
         private readonly IRepository<KnowledgeComment> _knowledgeCommentRepository;
         private readonly ISystemOrganizeRepository _systemOrganizeRepository;
@@ -104,6 +106,7 @@ namespace Hotline.Api.Controllers
             IRepository<KnowledgeQuestions> knowledgeQuestionsRepository,
             IRepository<KnowledgeCorrection> knowledgeCorrectionRepository,
             IRepository<KnowledgeCollect> knowledgeCollectRepository,
+            IRepository<KnowledgeRecord> knowledgeRecordRepository,
             ISystemDomainService systemDomainService,
             IRepository<KnowledgeComment> knowledgeCommentRepository,
             ISystemOrganizeRepository systemOrganizeRepository,
@@ -140,6 +143,7 @@ namespace Hotline.Api.Controllers
             _knowledgeQuestionsRepository = knowledgeQuestionsRepository;
             _knowledgeCorrectionRepository = knowledgeCorrectionRepository;
             _knowledgeCollectRepository = knowledgeCollectRepository;
+            _knowledgeRecordRepository = knowledgeRecordRepository;
             _systemDomainService = systemDomainService;
             _knowledgeCommentRepository = knowledgeCommentRepository;
             _systemOrganizeRepository = systemOrganizeRepository;
@@ -473,7 +477,7 @@ namespace Hotline.Api.Controllers
         /// <param name="dto"></param>
         /// <returns></returns>
         [HttpPut("update-and-approve-batch")]
-        [LogFilter("知识修改批量")]
+        [LogFilter("知识批量提交")]
         public async Task UpdateAndApproveBatch([FromBody] UpdateKnowledgeAndApproveBatchDto dto)
         {
             foreach (var item in dto.KnowledgeIds)
@@ -503,6 +507,133 @@ namespace Hotline.Api.Controllers
             }
         }
 
+        /// <summary>
+        /// 知识库-记录
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPut("update-and-record")]
+        [LogFilter("知识修改并且保存修改之前的信息")]
+        public async Task UpdateAndRecord([FromBody] UpdateKnowledgeAndApproveDto dto)
+        {
+            // 知识库记录
+            var knowledge = await _knowledgeRepository.GetAsync(d => d.Id == dto.Id);
+            if (knowledge != null)
+            {
+                var data = _mapper.Map<KnowledgeRecord>(knowledge);
+                data.RecordId = knowledge.Id;
+                await _knowledgeRecordRepository.AddNav(data)
+                      .Include(d => d.KnowledgeTypes)
+                      .Include(d => d.KnowledgeOrganizes)
+                      .ExecuteCommandAsync();
+
+                // 知识库修改
+                await _knowledgeDomainService.UpdateKnowledgeAsync(dto, HttpContext.RequestAborted);
+            }
+        }
+
+        /// <summary>
+        /// 知识库-记录
+        /// </summary>
+        /// <param name="Id"></param>
+        /// <returns></returns>
+        [HttpGet("queryRecord/{Id}")]
+        [LogFilter("查询知识库修改记录")]
+        public async Task<IList<KnowledgeDto>> QueryRecord(string Id)
+        {
+            List<KnowledgeDto> knList = new List<KnowledgeDto>();
+
+            var query = await _knowledgeRecordRepository.Queryable()
+                .Includes(x => x.SourceOrganize)
+                .Includes(x => x.KnowledgeTypes)
+                .Includes(x => x.KnowledgeOrganizes)
+                .Includes(x => x.HotspotType)
+                .OrderByDescending(d => d.CreationTime)
+                .FirstAsync(d => d.RecordId == Id, HttpContext.RequestAborted);
+
+            if (query != null)
+            {
+                #region 最新修改记录
+
+                //转化
+                var knowledgeInfoDto1 = _mapper.Map<KnowledgeDto>(query);
+
+                if (knowledgeInfoDto1 != null && !string.IsNullOrEmpty(knowledgeInfoDto1.Content))
+                    knowledgeInfoDto1.Content = _bulletinApplication.GetSiteUrls(knowledgeInfoDto1.Content);
+
+                //收藏
+                var collect1 = await _knowledgeCollectRepository.GetAsync(x => x.KnowledgeId == Id && x.CreatorId == _sessionContext.UserId);
+                if (knowledgeInfoDto1 != null && collect1 != null)
+                    knowledgeInfoDto1.Collect = _mapper.Map<KnowledgeCollectDto>(collect1);
+                //关联知识
+                var knowledges1 = await _knowledgeRepository.Queryable().In(x => x.Id, query.Knowledges).Where(x => x.Status == EKnowledgeStatus.OnShelf && ((x.ExpiredTime != null && x.ExpiredTime >= DateTime.Now) || x.ExpiredTime == null)).ToListAsync();
+                if (knowledgeInfoDto1 != null && knowledges1.Any())
+                    knowledgeInfoDto1.KnowledgeDtos = _mapper.Map<List<KnowledgeDto>>(knowledges1);
+                //关键词
+                var knowledgeWords1 = await _knowledgeWrodRepository.Queryable().In(x => x.Id, query.Keywords).ToListAsync();
+                if (knowledgeInfoDto1 != null && knowledgeWords1.Any())
+                    knowledgeInfoDto1.KeywordsDto = _mapper.Map<List<KnowledgeWordDto>>(knowledgeWords1);
+
+                if (knowledgeInfoDto1 != null && knowledgeInfoDto1.FileJson != null && knowledgeInfoDto1.FileJson.Any())
+                {
+                    var ids = knowledgeInfoDto1.FileJson.Select(x => x.Id).ToList();
+                    knowledgeInfoDto1.Files = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
+                }
+
+                if (knowledgeInfoDto1 != null)
+                {
+                    knList.Add(knowledgeInfoDto1);
+                }
+
+                #endregion
+            }
+
+            var knowledge = await _knowledgeRepository.Queryable()
+                .Includes(x => x.SourceOrganize)
+                .Includes(x => x.KnowledgeTypes)
+                .Includes(x => x.KnowledgeOrganizes)
+                .Includes(x => x.HotspotType)
+                .FirstAsync(p => p.Id == Id, HttpContext.RequestAborted);
+            if (knowledge != null)
+            {
+                #region 当前知识库
+
+                //转化
+                var knowledgeShowInfoDto = _mapper.Map<KnowledgeDto>(knowledge);
+
+                if (knowledgeShowInfoDto != null && !string.IsNullOrEmpty(knowledgeShowInfoDto.Content))
+                    knowledgeShowInfoDto.Content = _bulletinApplication.GetSiteUrls(knowledgeShowInfoDto.Content);
+
+                //收藏
+                var collect = await _knowledgeCollectRepository.GetAsync(x => x.KnowledgeId == Id && x.CreatorId == _sessionContext.UserId);
+                if (knowledgeShowInfoDto != null && collect != null)
+                    knowledgeShowInfoDto.Collect = _mapper.Map<KnowledgeCollectDto>(collect);
+                //关联知识
+                var knowledges = await _knowledgeRepository.Queryable().In(x => x.Id, knowledge.Knowledges).Where(x => x.Status == EKnowledgeStatus.OnShelf && ((x.ExpiredTime != null && x.ExpiredTime >= DateTime.Now) || x.ExpiredTime == null)).ToListAsync();
+                if (knowledgeShowInfoDto != null && knowledges.Any())
+                    knowledgeShowInfoDto.KnowledgeDtos = _mapper.Map<List<KnowledgeDto>>(knowledges);
+                //关键词
+                var knowledgeWords = await _knowledgeWrodRepository.Queryable().In(x => x.Id, knowledge.Keywords).ToListAsync();
+                if (knowledgeShowInfoDto != null && knowledgeWords.Any())
+                    knowledgeShowInfoDto.KeywordsDto = _mapper.Map<List<KnowledgeWordDto>>(knowledgeWords);
+
+                if (knowledgeShowInfoDto != null && knowledgeShowInfoDto.FileJson != null && knowledgeShowInfoDto.FileJson.Any())
+                {
+                    var ids = knowledgeShowInfoDto.FileJson.Select(x => x.Id).ToList();
+                    knowledgeShowInfoDto.Files = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
+                }
+
+                if (knowledgeShowInfoDto != null)
+                {
+                    knList.Add(knowledgeShowInfoDto);
+                }
+
+                #endregion
+            }
+
+            return _mapper.Map<IList<KnowledgeDto>>(knList);
+        }
+
         /// <summary>
         /// 批量更新公开状态(new)
         /// </summary>

+ 18 - 0
src/Hotline/KnowledgeBase/KnowledgeRecord.cs

@@ -0,0 +1,18 @@
+using SqlSugar;
+using System.ComponentModel;
+
+namespace Hotline.KnowledgeBase
+{
+    /// <summary>
+    /// 知识库记录
+    /// </summary>
+    [Description("知识库记录")]
+    public class KnowledgeRecord : Knowledge
+    {
+        /// <summary>
+        /// 记录ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "记录ID")]
+        public string RecordId { get; set; }
+    }
+}