Przeglądaj źródła

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

xf 1 rok temu
rodzic
commit
f79659591c

+ 88 - 49
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -6,6 +6,7 @@ using Hotline.KnowledgeBase.Notifies;
 using Hotline.Permissions;
 using Hotline.Quality;
 using Hotline.Repository.SqlSugar.Extensions;
+using Hotline.Repository.SqlSugar.System;
 using Hotline.Repository.SqlSugar.Ts;
 using Hotline.Settings;
 using Hotline.Settings.Hotspots;
@@ -51,6 +52,7 @@ namespace Hotline.Api.Controllers
 		private readonly IRepository<KnowledgeCollect> _knowledgeCollectRepository;
 		private readonly ISystemDomainService _systemDomainService;
 		private readonly IRepository<KnowledgeComment> _knowledgeCommentRepository;
+		private readonly ISystemOrganizeRepository _systemOrganizeRepository;
 
 
 		public KnowledgeController(
@@ -71,7 +73,8 @@ namespace Hotline.Api.Controllers
 		   IRepository<KnowledgeCorrection> knowledgeCorrectionRepository,
 		   IRepository<KnowledgeCollect> knowledgeCollectRepository,
 		   ISystemDomainService systemDomainService,
-		   IRepository<KnowledgeComment> knowledgeCommentRepository
+		   IRepository<KnowledgeComment> knowledgeCommentRepository,
+		   ISystemOrganizeRepository systemOrganizeRepository
 		   )
 		{
 			_knowledgeRepository = knowledgeRepository;
@@ -92,6 +95,7 @@ namespace Hotline.Api.Controllers
 			_knowledgeCollectRepository = knowledgeCollectRepository;
 			_systemDomainService = systemDomainService;
 			_knowledgeCommentRepository = knowledgeCommentRepository;
+			_systemOrganizeRepository = systemOrganizeRepository;
 		}
 
 		#endregion
@@ -115,7 +119,7 @@ namespace Hotline.Api.Controllers
 
 			kn.Status = EKnowledgeStatus.Drafts;
 			var id = await _knowledgeRepository.AddAsync(kn, HttpContext.RequestAborted);
-			if (dto.Workflow != null &&  !string.IsNullOrEmpty(id))
+			if (dto.Workflow != null && !string.IsNullOrEmpty(id))
 			{
 				var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
 				startDto.DefinitionModuleCode = WorkflowModuleConsts.KnowledgeAdd;
@@ -177,9 +181,12 @@ namespace Hotline.Api.Controllers
 		/// </summary>
 		/// <param name="title"></param>
 		/// <returns></returns>
-		[HttpGet("{Title}")]
-		public async Task<bool> KnowledgeTitle(string Title) {
-			var count = await _knowledgeRepository.Queryable().Where(x => x.Title == Title).CountAsync();
+		[HttpGet("title")]
+		public async Task<bool> KnowledgeTitle([FromQuery] KnowledgeTitleDto dto)
+		{
+			var count = await _knowledgeRepository.Queryable()
+				.WhereIF(!string.IsNullOrEmpty(dto.Id), x => x.Id != dto.Id)
+				.Where(x => x.Title == dto.Title).CountAsync();
 			return count > 0;
 		}
 
@@ -222,7 +229,8 @@ namespace Hotline.Api.Controllers
 		{
 			var delete = _mapper.Map<Knowledge>(dto.Data);
 			var knowledge = await _knowledgeRepository.GetAsync(delete.Id, HttpContext.RequestAborted);
-			if (knowledge == null) return;
+			if (knowledge == null)
+				throw UserFriendlyException.SameMessage("无效知识库数据");
 			if (knowledge.Status == EKnowledgeStatus.OnShelf || knowledge.Status == EKnowledgeStatus.Auditing)
 				throw UserFriendlyException.SameMessage("知识库数据不可删除");
 			//await _knowledgeRepository.RemoveAsync(knowledge, false, HttpContext.RequestAborted);
@@ -234,6 +242,22 @@ namespace Hotline.Api.Controllers
 			await StartFlow(delete.Id, WorkflowModuleConsts.KnowledgeDelete, EKnowledgeApplyType.Delete, startDto);
 		}
 
+		/// <summary>
+		/// 增加搜索量
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpPost("search_num")]
+		public async Task SearchNum([FromBody] KnowledgeSearchNumDto dto)
+		{
+
+			var knowledge = await _knowledgeRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
+			if (knowledge == null)
+				throw UserFriendlyException.SameMessage("无效知识库数据");
+			knowledge.SearchNum++;
+			await _knowledgeRepository.UpdateAsync(knowledge, HttpContext.RequestAborted);
+		}
+
 		/// <summary>
 		/// 知识库-知识修改-查询详情
 		/// </summary>
@@ -280,10 +304,10 @@ namespace Hotline.Api.Controllers
 			var knowledgeShowInfoDto = _mapper.Map<KnowledgeInfoDto>(knowledge);
 
 			var type = await _knowledgeTypeRepository.GetAsync(knowledge.KnowledgeTypeId, HttpContext.RequestAborted);
-			if (type != null) 
+			if (type != null)
 			{
 				knowledgeShowInfoDto.KnowledgeTypeName = type.SpliceName;
-				knowledgeShowInfoDto.KnowledgeType =_mapper.Map<KnowledgeTypeDto>(type);
+				knowledgeShowInfoDto.KnowledgeType = _mapper.Map<KnowledgeTypeDto>(type);
 			}
 			var hot = await _hotspotTypeRepository.GetAsync(knowledge.HotspotId, HttpContext.RequestAborted);
 			if (hot != null)
@@ -293,11 +317,11 @@ namespace Hotline.Api.Controllers
 			if (collect != null)
 				knowledgeShowInfoDto.Collect = _mapper.Map<KnowledgeCollectDto>(collect);
 			//关联知识
-			var knowledges = await _knowledgeRepository.Queryable().In(x=>x.Id,knowledge.Knowledges).ToListAsync();
+			var knowledges = await _knowledgeRepository.Queryable().In(x => x.Id, knowledge.Knowledges).ToListAsync();
 			if (knowledges.Any())
 				knowledgeShowInfoDto.KnowledgeDtos = _mapper.Map<List<KnowledgeDto>>(knowledges);
 			//关键词
-			var knowledgeWords= await _knowledgeWrodRepository.Queryable().In(x => x.Id, knowledge.Keywords).ToListAsync();
+			var knowledgeWords = await _knowledgeWrodRepository.Queryable().In(x => x.Id, knowledge.Keywords).ToListAsync();
 			if (knowledgeWords.Any())
 				knowledgeShowInfoDto.KeywordsDto = _mapper.Map<List<KnowledgeWordDto>>(knowledgeWords);
 			if (IsAddPv == true)
@@ -462,7 +486,7 @@ namespace Hotline.Api.Controllers
 					break;
 				default:
 					sugar = sugar.OrderByDescending(p => p.PageView);
-					break;			
+					break;
 			}
 			var (total, temp) = await sugar.ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize);
 			return new PagedDto<KnowledgeRetrievalDataDto>(total, _mapper.Map<IReadOnlyList<KnowledgeRetrievalDataDto>>(temp));
@@ -571,31 +595,21 @@ namespace Hotline.Api.Controllers
 		[HttpGet("knowpopscreen")]
 		public async Task<PagedDto<KnowledgeRetrievalDataDto>> KnowPopScreen([FromQuery] KnowledgePopScreenPagedListDto pagedDto)
 		{
-			RefAsync<int> total = 0;
-			var temp = await _knowledgeRepository
-			  .Queryable()
-			  .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,
-				  o.Status
-			  })
-		   //将结果合并成一个表
-		   .MergeTable()
-		   //取第一条数据
-		   .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)
-		   .ToPageListAsync(pagedDto.PageIndex, pagedDto.PageSize, total);
-
+			var orgid = string.Empty;
+			if (pagedDto.RetrievalType == EKnowledgeRetrievalType.Org && !string.IsNullOrEmpty(pagedDto.Keyword))
+			{
+				var organize = await _systemOrganizeRepository.GetAsync(x => x.Name == pagedDto.Keyword);
+				orgid = organize?.Id;
+			}
+			var (total, temp) = await _knowledgeRepository.Queryable()
+				.Includes(x=>x.SourceOrganize)
+			   .Where(d => d.Status == EKnowledgeStatus.OnShelf)
+			   .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.Title && !string.IsNullOrEmpty(pagedDto.Keyword), d => d.Title.Contains(pagedDto.Keyword!))
+			   .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.Content && !string.IsNullOrEmpty(pagedDto.Keyword), d => d.Content.Contains(pagedDto.Keyword!))
+			   .WhereIF(!string.IsNullOrEmpty(orgid) && pagedDto.RetrievalType == EKnowledgeRetrievalType.Org, x=>x.CreatorOrgId.EndsWith(orgid!))
+			   .WhereIF(!string.IsNullOrEmpty(pagedDto.HotspotId), p => p.HotspotId == pagedDto.HotspotId)
+			   .OrderByDescending(p => p.CreationTime)
+			   .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize);
 			return new PagedDto<KnowledgeRetrievalDataDto>(total, _mapper.Map<IReadOnlyList<KnowledgeRetrievalDataDto>>(temp));
 		}
 
@@ -878,7 +892,7 @@ namespace Hotline.Api.Controllers
 		public async Task<KnowledgeCorrection> CorrectionEntity(string id)
 		{
 			return await _knowledgeCorrectionRepository.Queryable()
-				.Includes(x=>x.Knowledge)
+				.Includes(x => x.Knowledge)
 				.FirstAsync(x => x.Id == id);
 		}
 		#endregion
@@ -973,7 +987,7 @@ namespace Hotline.Api.Controllers
 		public async Task<KnowledgeQuestions> QuestionsEntity(string id)
 		{
 			return await _knowledgeQuestionsRepository.Queryable()
-				.Includes(x=>x.Knowledge)
+				.Includes(x => x.Knowledge)
 				.FirstAsync(x => x.Id == id);
 		}
 
@@ -995,7 +1009,8 @@ namespace Hotline.Api.Controllers
 				collect.Collect = dto.Collect;
 				await _knowledgeCollectRepository.UpdateAsync(collect, HttpContext.RequestAborted);
 			}
-			else {
+			else
+			{
 				var collectNew = _mapper.Map<KnowledgeCollect>(dto);
 				await _knowledgeCollectRepository.AddAsync(collectNew, HttpContext.RequestAborted);
 			}
@@ -1031,7 +1046,7 @@ namespace Hotline.Api.Controllers
 			var knowledge = await _knowledgeRepository.GetAsync(x => x.Id == dto.KnowledgeId);
 			if (knowledge != null)
 			{
-				knowledge.Score = decimal.Round(score.Value,1);
+				knowledge.Score = decimal.Round(score.Value, 1);
 				await _knowledgeRepository.UpdateAsync(knowledge, HttpContext.RequestAborted);
 			}
 		}
@@ -1039,7 +1054,12 @@ namespace Hotline.Api.Controllers
 
 		#region 知识评论
 
-		//[Permission(EPermission.AddKnowledgeCollect)]
+		/// <summary>
+		/// 新增知识评论
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[Permission(EPermission.AddKnowledgeComment)]
 		[HttpPost("knowledge_comment")]
 		public async Task Add([FromBody] KnowledgeCommentAddDto dto)
 		{
@@ -1048,7 +1068,7 @@ namespace Hotline.Api.Controllers
 			if (!string.IsNullOrEmpty(dto.ReplyId))
 			{
 				var comment = await _knowledgeCommentRepository.GetAsync(dto.ReplyId);
-				if (comment != null) 
+				if (comment != null)
 				{
 					comment.ReplyNum++;
 					await _knowledgeCommentRepository.UpdateAsync(comment, HttpContext.RequestAborted);
@@ -1056,16 +1076,30 @@ namespace Hotline.Api.Controllers
 			}
 		}
 
-		//[Permission(EPermission.DeleteQualityItem)]
-		[HttpDelete("itemBatch")]
+		/// <summary>
+		/// 删除知识评论
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[Permission(EPermission.DeleteKnowledgeComment)]
+		[HttpDelete("knowledge_comment")]
 		public async Task Delete([FromBody] KnowledgeCommentDeleteDto dto)
 		{
+			var comment = await _knowledgeCommentRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
+			if (comment is null)
+				throw UserFriendlyException.SameMessage("无效评论");
+			if (comment.CreatorId != _sessionContext.UserId)
+				throw UserFriendlyException.SameMessage("只有评论者可以删除当前评论");
 			await _knowledgeCommentRepository.RemoveAsync(x => x.Id == dto.Id);
 		}
 
-
-		//[Permission(EPermission.UpdateQualityItem)]
-		[HttpPut("item")]
+		/// <summary>
+		/// 修改知识评论
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[Permission(EPermission.UpdateKnowledgeComment)]
+		[HttpPut("knowledge_comment")]
 		public async Task Update([FromBody] KnowledgeCommentUpdateDto dto)
 		{
 			var comment = await _knowledgeCommentRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
@@ -1075,8 +1109,13 @@ namespace Hotline.Api.Controllers
 			await _knowledgeCommentRepository.UpdateAsync(comment, HttpContext.RequestAborted);
 		}
 
-		//[Permission(EPermission.QualityItemList)]
-		[HttpGet("item/list")]
+		/// <summary>
+		/// 知识评论列表
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[Permission(EPermission.KnowledgeCommentList)]
+		[HttpGet("knowledge_comment/list")]
 		public async Task<List<KnowledgeCommentDto>> List([FromQuery] KnowledgeCommentListDto dto)
 		{
 			var comments = await _knowledgeCommentRepository.Queryable()

+ 7 - 0
src/Hotline.Share/Dtos/Knowledge/KnowledgeDataDto.cs

@@ -1,4 +1,6 @@
 using Hotline.Share.Dtos.Hotspots;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Dtos.Org;
 using Hotline.Share.Enums.KnowledgeBase;
 using XF.Utility.EnumExtensions;
 
@@ -207,6 +209,11 @@ namespace Hotline.Share.Dtos.Knowledge
 
         public string? CreatorOrgName { get; set; }
 
+        /// <summary>
+        /// 来源部门
+        /// </summary>
+        public OrgDto SourceOrganize { get; set; }
+
 	}
 
     /// <summary>

+ 23 - 0
src/Hotline.Share/Dtos/Knowledge/KnowledgeDto.cs

@@ -231,6 +231,29 @@ namespace Hotline.Share.Dtos.Knowledge
 		public string? CreatorName { get; set; }
 	}
 
+    public class KnowledgeTitleDto {
+
+		/// <summary>
+		/// ID
+		/// </summary>
+		public string? Id { get; set; }
+
+		/// <summary>
+		/// 标题
+		/// </summary>
+		public string Title { get; set; }
+
+	}
+
+    public class KnowledgeSearchNumDto
+	{
+
+	    /// <summary>
+	    /// ID
+	    /// </summary>
+	    public string? Id { get; set; }
+
+    }
 
 
 	public class AddStartFlowDto : StartWorkflowDto<AddKnowledgeDto>

+ 1 - 1
src/Hotline.Share/Dtos/Knowledge/KnowledgePagedDto.cs

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

+ 6 - 0
src/Hotline.Share/Enums/KnowledgeBase/EKnowledgeRetrievalType.cs

@@ -30,4 +30,10 @@ public enum EKnowledgeRetrievalType
     /// </summary>
     [Description("摘要")]
     Summary = 3,
+
+    /// <summary>
+    /// 所属部门
+    /// </summary>
+    [Description("所属部门")]
+    Org = 4,
 }

+ 5 - 0
src/Hotline.Share/Enums/Order/ESource.cs

@@ -26,4 +26,9 @@ public enum ESource
     /// 泸州工单互转、 市州互转-宜宾、泸州市州互转工单
     /// </summary>
     CityDataExchangeLz = 300,
+
+    /// <summary>
+    /// 宜宾融媒体
+    /// </summary>
+    ConvergenceMedia=400,
 }

+ 8 - 8
src/Hotline/Permissions/EPermission.cs

@@ -954,27 +954,27 @@ namespace Hotline.Permissions
 
 		#region 知识评论
 		/// <summary>
-		/// 知识提问列表
+		/// 知识评论列表
 		/// </summary>
-		[Display(GroupName = "KnowledgeComment", Name = "知识提问列表", Description = "知识提问列表")]
+		[Display(GroupName = "KnowledgeComment", Name = "知识评论列表", Description = "知识评论列表")]
 		KnowledgeCommentList = 401000,
 
 		/// <summary>
-		/// 新增知识提问
+		/// 新增知识评论
 		/// </summary>
-		[Display(GroupName = "KnowledgeComment", Name = "新增知识提问", Description = "新增知识提问")]
+		[Display(GroupName = "KnowledgeComment", Name = "新增知识评论", Description = "新增知识评论")]
 		AddKnowledgeComment = 401001,
 
 		/// <summary>
-		/// 删除知识提问
+		/// 删除知识评论
 		/// </summary>
-		[Display(GroupName = "KnowledgeComment", Name = "删除知识提问", Description = "删除知识提问")]
+		[Display(GroupName = "KnowledgeComment", Name = "删除知识评论", Description = "删除知识评论")]
 		DeleteKnowledgeComment = 401002,
 
 		/// <summary>
-		/// 修改知识提问
+		/// 修改知识评论
 		/// </summary>
-		[Display(GroupName = "KnowledgeComment", Name = "修改知识提问", Description = "修改知识提问")]
+		[Display(GroupName = "KnowledgeComment", Name = "修改知识评论", Description = "修改知识评论")]
 		UpdateKnowledgeComment = 401003,
 		#endregion